From 9d7856566799093d0b28d4f9b732356d93396646 Mon Sep 17 00:00:00 2001 From: delete Date: Thu, 14 Sep 2017 21:53:22 -0400 Subject: [PATCH] finished tutorial --- build/app.bundle.js | 164 + build/app.bundle.js.map | 1 + build/main.bundle.js | 164 + build/main.bundle.js.map | 1 + build/ratefinder.bundle.js | 123 + build/ratefinder.bundle.js.map | 1 + index.html | 6 +- js/main.js | 52 +- js/mortgage.js | 28 + js/mortgage2.js | 35 + js/rate-service-mock.js | 20 + js/ratefinder.js | 9 + node_modules/.bin/acorn | 1 + node_modules/.bin/babel | 1 + node_modules/.bin/babel-doctor | 1 + node_modules/.bin/babel-external-helpers | 1 + node_modules/.bin/babel-node | 1 + node_modules/.bin/babylon | 1 + node_modules/.bin/ecstatic | 1 + node_modules/.bin/errno | 1 + node_modules/.bin/he | 1 + node_modules/.bin/hs | 1 + node_modules/.bin/http-server | 1 + node_modules/.bin/jsesc | 1 + node_modules/.bin/json5 | 1 + node_modules/.bin/loose-envify | 1 + node_modules/.bin/miller-rabin | 1 + node_modules/.bin/mime | 1 + node_modules/.bin/mkdirp | 1 + node_modules/.bin/opener | 1 + node_modules/.bin/regjsparser | 1 + node_modules/.bin/semver | 1 + node_modules/.bin/sha.js | 1 + node_modules/.bin/uglifyjs | 1 + node_modules/.bin/user-home | 1 + node_modules/.bin/webpack | 1 + node_modules/.bin/which | 1 + .../acorn-dynamic-import/CHANGELOG.md | 19 + node_modules/acorn-dynamic-import/LICENSE | 21 + node_modules/acorn-dynamic-import/README.md | 33 + .../acorn-dynamic-import/lib/index.js | 17 + .../acorn-dynamic-import/lib/inject.js | 70 + .../node_modules/.bin/acorn | 1 + .../node_modules/acorn/.npmignore | 10 + .../node_modules/acorn/AUTHORS | 62 + .../node_modules/acorn/CHANGELOG.md | 286 + .../node_modules/acorn/LICENSE | 19 + .../node_modules/acorn/README.md | 409 + .../node_modules/acorn/bin/acorn | 67 + .../node_modules/acorn/dist/.keep | 0 .../node_modules/acorn/dist/acorn.es.js | 3401 +++ .../node_modules/acorn/dist/acorn.js | 3433 ++++ .../node_modules/acorn/dist/acorn_loose.es.js | 1364 ++ .../node_modules/acorn/dist/acorn_loose.js | 1374 ++ .../node_modules/acorn/dist/walk.es.js | 342 + .../node_modules/acorn/dist/walk.js | 360 + .../node_modules/acorn/package.json | 259 + .../node_modules/acorn/src/bin/acorn.js | 60 + .../node_modules/acorn/src/expression.js | 819 + .../node_modules/acorn/src/identifier.js | 81 + .../node_modules/acorn/src/index.js | 77 + .../node_modules/acorn/src/location.js | 26 + .../node_modules/acorn/src/locutil.js | 42 + .../acorn/src/loose/expression.js | 562 + .../node_modules/acorn/src/loose/index.js | 48 + .../node_modules/acorn/src/loose/parseutil.js | 1 + .../node_modules/acorn/src/loose/state.js | 161 + .../node_modules/acorn/src/loose/statement.js | 450 + .../node_modules/acorn/src/loose/tokenize.js | 108 + .../node_modules/acorn/src/lval.js | 219 + .../node_modules/acorn/src/node.js | 50 + .../node_modules/acorn/src/options.js | 128 + .../node_modules/acorn/src/parseutil.js | 128 + .../node_modules/acorn/src/state.js | 111 + .../node_modules/acorn/src/statement.js | 744 + .../node_modules/acorn/src/tokencontext.js | 110 + .../node_modules/acorn/src/tokenize.js | 686 + .../node_modules/acorn/src/tokentype.js | 147 + .../node_modules/acorn/src/util.js | 9 + .../node_modules/acorn/src/walk/index.js | 342 + .../node_modules/acorn/src/whitespace.js | 13 + .../acorn-dynamic-import/package.json | 76 + .../acorn-dynamic-import/src/index.js | 4 + .../acorn-dynamic-import/src/inject.js | 50 + node_modules/acorn/AUTHORS | 69 + node_modules/acorn/CHANGELOG.md | 350 + node_modules/acorn/LICENSE | 19 + node_modules/acorn/README.md | 452 + node_modules/acorn/bin/acorn | 69 + node_modules/acorn/dist/.keep | 0 node_modules/acorn/dist/acorn.es.js | 3695 ++++ node_modules/acorn/dist/acorn.js | 3726 ++++ node_modules/acorn/dist/acorn_loose.es.js | 1384 ++ node_modules/acorn/dist/acorn_loose.js | 1394 ++ node_modules/acorn/dist/walk.es.js | 407 + node_modules/acorn/dist/walk.js | 427 + node_modules/acorn/package.json | 286 + node_modules/ajv-keywords/LICENSE | 21 + node_modules/ajv-keywords/README.md | 656 + node_modules/ajv-keywords/index.js | 35 + .../ajv-keywords/keywords/_formatLimit.js | 90 + node_modules/ajv-keywords/keywords/_util.js | 15 + .../ajv-keywords/keywords/deepProperties.js | 54 + .../ajv-keywords/keywords/deepRequired.js | 57 + .../keywords/dot/_formatLimit.jst | 116 + .../keywords/dot/patternRequired.jst | 33 + .../ajv-keywords/keywords/dot/switch.jst | 73 + .../ajv-keywords/keywords/dotjs/README.md | 3 + .../keywords/dotjs/_formatLimit.js | 176 + .../keywords/dotjs/patternRequired.js | 58 + .../ajv-keywords/keywords/dotjs/switch.js | 128 + .../ajv-keywords/keywords/dynamicDefaults.js | 68 + .../ajv-keywords/keywords/formatMaximum.js | 3 + .../ajv-keywords/keywords/formatMinimum.js | 3 + node_modules/ajv-keywords/keywords/if.js | 21 + node_modules/ajv-keywords/keywords/index.js | 19 + .../ajv-keywords/keywords/instanceof.js | 54 + .../ajv-keywords/keywords/patternRequired.js | 21 + .../ajv-keywords/keywords/prohibited.js | 25 + node_modules/ajv-keywords/keywords/range.js | 36 + node_modules/ajv-keywords/keywords/regexp.js | 36 + node_modules/ajv-keywords/keywords/select.js | 79 + node_modules/ajv-keywords/keywords/switch.js | 38 + node_modules/ajv-keywords/keywords/typeof.js | 32 + .../keywords/uniqueItemProperties.js | 32 + node_modules/ajv-keywords/package.json | 78 + node_modules/ajv/.tonic_example.js | 20 + node_modules/ajv/LICENSE | 22 + node_modules/ajv/README.md | 1246 ++ node_modules/ajv/dist/ajv.bundle.js | 7770 +++++++ node_modules/ajv/dist/ajv.min.js | 3 + node_modules/ajv/dist/ajv.min.js.map | 1 + node_modules/ajv/dist/nodent.min.js | 2 + node_modules/ajv/dist/regenerator.min.js | 2 + node_modules/ajv/lib/$data.js | 49 + node_modules/ajv/lib/ajv.d.ts | 296 + node_modules/ajv/lib/ajv.js | 477 + node_modules/ajv/lib/cache.js | 26 + node_modules/ajv/lib/compile/_rules.js | 31 + node_modules/ajv/lib/compile/async.js | 90 + node_modules/ajv/lib/compile/equal.js | 3 + node_modules/ajv/lib/compile/error_classes.js | 34 + node_modules/ajv/lib/compile/formats.js | 135 + node_modules/ajv/lib/compile/index.js | 379 + node_modules/ajv/lib/compile/resolve.js | 271 + node_modules/ajv/lib/compile/rules.js | 58 + node_modules/ajv/lib/compile/schema_obj.js | 9 + node_modules/ajv/lib/compile/ucs2length.js | 20 + node_modules/ajv/lib/compile/util.js | 267 + node_modules/ajv/lib/dot/_limit.jst | 96 + node_modules/ajv/lib/dot/_limitItems.jst | 10 + node_modules/ajv/lib/dot/_limitLength.jst | 10 + node_modules/ajv/lib/dot/_limitProperties.jst | 10 + node_modules/ajv/lib/dot/allOf.jst | 34 + node_modules/ajv/lib/dot/anyOf.jst | 48 + node_modules/ajv/lib/dot/coerce.def | 61 + node_modules/ajv/lib/dot/const.jst | 11 + node_modules/ajv/lib/dot/contains.jst | 57 + node_modules/ajv/lib/dot/custom.jst | 191 + node_modules/ajv/lib/dot/defaults.def | 32 + node_modules/ajv/lib/dot/definitions.def | 199 + node_modules/ajv/lib/dot/dependencies.jst | 80 + node_modules/ajv/lib/dot/enum.jst | 30 + node_modules/ajv/lib/dot/errors.def | 194 + node_modules/ajv/lib/dot/format.jst | 106 + node_modules/ajv/lib/dot/items.jst | 100 + node_modules/ajv/lib/dot/missing.def | 39 + node_modules/ajv/lib/dot/multipleOf.jst | 20 + node_modules/ajv/lib/dot/not.jst | 43 + node_modules/ajv/lib/dot/oneOf.jst | 44 + node_modules/ajv/lib/dot/pattern.jst | 14 + node_modules/ajv/lib/dot/properties.jst | 327 + node_modules/ajv/lib/dot/propertyNames.jst | 54 + node_modules/ajv/lib/dot/ref.jst | 85 + node_modules/ajv/lib/dot/required.jst | 108 + node_modules/ajv/lib/dot/uniqueItems.jst | 38 + node_modules/ajv/lib/dot/validate.jst | 272 + node_modules/ajv/lib/dotjs/README.md | 3 + node_modules/ajv/lib/dotjs/_limit.js | 149 + node_modules/ajv/lib/dotjs/_limitItems.js | 76 + node_modules/ajv/lib/dotjs/_limitLength.js | 81 + .../ajv/lib/dotjs/_limitProperties.js | 76 + node_modules/ajv/lib/dotjs/allOf.js | 43 + node_modules/ajv/lib/dotjs/anyOf.js | 73 + node_modules/ajv/lib/dotjs/const.js | 55 + node_modules/ajv/lib/dotjs/contains.js | 81 + node_modules/ajv/lib/dotjs/custom.js | 226 + node_modules/ajv/lib/dotjs/dependencies.js | 167 + node_modules/ajv/lib/dotjs/enum.js | 65 + node_modules/ajv/lib/dotjs/format.js | 149 + node_modules/ajv/lib/dotjs/items.js | 140 + node_modules/ajv/lib/dotjs/multipleOf.js | 76 + node_modules/ajv/lib/dotjs/not.js | 83 + node_modules/ajv/lib/dotjs/oneOf.js | 70 + node_modules/ajv/lib/dotjs/pattern.js | 74 + node_modules/ajv/lib/dotjs/properties.js | 468 + node_modules/ajv/lib/dotjs/propertyNames.js | 81 + node_modules/ajv/lib/dotjs/ref.js | 123 + node_modules/ajv/lib/dotjs/required.js | 268 + node_modules/ajv/lib/dotjs/uniqueItems.js | 71 + node_modules/ajv/lib/dotjs/validate.js | 458 + node_modules/ajv/lib/keyword.js | 130 + node_modules/ajv/lib/patternGroups.js | 36 + node_modules/ajv/lib/refs/$data.json | 17 + .../ajv/lib/refs/json-schema-draft-04.json | 150 + .../ajv/lib/refs/json-schema-draft-06.json | 150 + node_modules/ajv/lib/refs/json-schema-v5.json | 250 + node_modules/ajv/package.json | 130 + node_modules/ajv/scripts/.eslintrc.yml | 3 + node_modules/ajv/scripts/bundle.js | 61 + node_modules/ajv/scripts/compile-dots.js | 73 + node_modules/ajv/scripts/info | 10 + node_modules/ajv/scripts/prepare-tests | 9 + node_modules/ajv/scripts/travis-gh-pages | 23 + 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 | 78 + node_modules/ansi-regex/index.js | 4 + node_modules/ansi-regex/license | 21 + node_modules/ansi-regex/package.json | 109 + node_modules/ansi-regex/readme.md | 39 + node_modules/ansi-styles/index.js | 65 + node_modules/ansi-styles/license | 21 + node_modules/ansi-styles/package.json | 90 + node_modules/ansi-styles/readme.md | 86 + node_modules/anymatch/LICENSE | 15 + node_modules/anymatch/README.md | 98 + node_modules/anymatch/index.js | 67 + node_modules/anymatch/package.json | 72 + 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 | 80 + node_modules/arr-flatten/LICENSE | 21 + node_modules/arr-flatten/README.md | 86 + node_modules/arr-flatten/index.js | 22 + node_modules/arr-flatten/package.json | 113 + 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 | 62 + node_modules/asn1.js/.npmignore | 2 + node_modules/asn1.js/README.md | 100 + node_modules/asn1.js/lib/asn1.js | 9 + node_modules/asn1.js/lib/asn1/api.js | 61 + node_modules/asn1.js/lib/asn1/base/buffer.js | 116 + node_modules/asn1.js/lib/asn1/base/index.js | 6 + node_modules/asn1.js/lib/asn1/base/node.js | 634 + .../asn1.js/lib/asn1/base/reporter.js | 121 + .../asn1.js/lib/asn1/constants/der.js | 42 + .../asn1.js/lib/asn1/constants/index.js | 19 + node_modules/asn1.js/lib/asn1/decoders/der.js | 324 + .../asn1.js/lib/asn1/decoders/index.js | 4 + node_modules/asn1.js/lib/asn1/decoders/pem.js | 49 + node_modules/asn1.js/lib/asn1/encoders/der.js | 295 + .../asn1.js/lib/asn1/encoders/index.js | 4 + node_modules/asn1.js/lib/asn1/encoders/pem.js | 21 + node_modules/asn1.js/package.json | 58 + node_modules/asn1.js/test.js | 5 + node_modules/assert/.npmignore | 1 + node_modules/assert/.travis.yml | 31 + node_modules/assert/.zuul.yml | 13 + node_modules/assert/LICENSE | 18 + node_modules/assert/README.md | 64 + node_modules/assert/assert.js | 490 + node_modules/assert/package.json | 58 + node_modules/assert/test.js | 345 + node_modules/async-each/.npmignore | 3 + node_modules/async-each/CHANGELOG.md | 23 + node_modules/async-each/README.md | 38 + node_modules/async-each/index.js | 38 + node_modules/async-each/package.json | 60 + 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 | 113 + node_modules/babel-cli/.npmignore | 3 + node_modules/babel-cli/README.md | 21 + node_modules/babel-cli/bin/babel-doctor.js | 3 + .../babel-cli/bin/babel-external-helpers.js | 3 + node_modules/babel-cli/bin/babel-node.js | 3 + node_modules/babel-cli/bin/babel.js | 3 + node_modules/babel-cli/index.js | 1 + node_modules/babel-cli/lib/_babel-node.js | 185 + .../babel-cli/lib/babel-external-helpers.js | 17 + node_modules/babel-cli/lib/babel-node.js | 84 + node_modules/babel-cli/lib/babel/dir.js | 97 + node_modules/babel-cli/lib/babel/file.js | 188 + node_modules/babel-cli/lib/babel/index.js | 129 + node_modules/babel-cli/lib/babel/util.js | 90 + node_modules/babel-cli/package-lock.json | 161 + node_modules/babel-cli/package.json | 79 + node_modules/babel-cli/scripts/bootstrap.sh | 3 + node_modules/babel-code-frame/.npmignore | 3 + node_modules/babel-code-frame/README.md | 60 + node_modules/babel-code-frame/lib/index.js | 141 + .../babel-code-frame/package-lock.json | 66 + node_modules/babel-code-frame/package.json | 47 + node_modules/babel-core/README.md | 121 + node_modules/babel-core/index.js | 1 + node_modules/babel-core/lib/api/browser.js | 190 + node_modules/babel-core/lib/api/node.js | 153 + .../lib/helpers/get-possible-plugin-names.js | 8 + .../lib/helpers/get-possible-preset-names.js | 18 + node_modules/babel-core/lib/helpers/merge.js | 46 + .../babel-core/lib/helpers/normalize-ast.js | 23 + .../helpers/resolve-from-possible-names.js | 17 + .../babel-core/lib/helpers/resolve-plugin.js | 21 + .../babel-core/lib/helpers/resolve-preset.js | 21 + .../babel-core/lib/helpers/resolve.js | 46 + node_modules/babel-core/lib/store.js | 55 + .../lib/tools/build-external-helpers.js | 101 + .../lib/transformation/file/index.js | 737 + .../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 | 383 + .../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 | 184 + node_modules/babel-core/package-lock.json | 88 + node_modules/babel-core/package.json | 88 + node_modules/babel-core/register.js | 3 + node_modules/babel-generator/README.md | 81 + node_modules/babel-generator/lib/buffer.js | 202 + .../babel-generator/lib/generators/base.js | 62 + .../babel-generator/lib/generators/classes.js | 96 + .../lib/generators/expressions.js | 241 + .../babel-generator/lib/generators/flow.js | 504 + .../babel-generator/lib/generators/jsx.js | 124 + .../babel-generator/lib/generators/methods.js | 111 + .../babel-generator/lib/generators/modules.js | 183 + .../lib/generators/statements.js | 316 + .../lib/generators/template-literals.js | 31 + .../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 | 170 + .../babel-generator/lib/node/whitespace.js | 151 + node_modules/babel-generator/lib/printer.js | 555 + .../babel-generator/lib/source-map.js | 89 + .../babel-generator/lib/whitespace.js | 95 + node_modules/babel-generator/package.json | 58 + .../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 | 42 + .../babel-helper-define-map/.npmignore | 3 + .../babel-helper-define-map/README.md | 5 + .../babel-helper-define-map/lib/index.js | 159 + .../babel-helper-define-map/package-lock.json | 13 + .../babel-helper-define-map/package.json | 42 + .../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 | 45 + .../.npmignore | 3 + .../babel-helper-get-function-arity/README.md | 5 + .../lib/index.js | 22 + .../package.json | 41 + .../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 | 41 + .../.npmignore | 3 + .../README.md | 5 + .../lib/index.js | 19 + .../package.json | 41 + node_modules/babel-helper-regex/.npmignore | 3 + node_modules/babel-helper-regex/README.md | 5 + node_modules/babel-helper-regex/lib/index.js | 28 + .../babel-helper-regex/package-lock.json | 13 + node_modules/babel-helper-regex/package.json | 42 + .../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 | 45 + 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 | 45 + node_modules/babel-loader/CHANGELOG.md | 169 + node_modules/babel-loader/LICENSE | 22 + node_modules/babel-loader/README.md | 208 + node_modules/babel-loader/lib/fs-cache.js | 180 + node_modules/babel-loader/lib/index.js | 185 + node_modules/babel-loader/lib/resolve-rc.js | 26 + node_modules/babel-loader/lib/utils/exists.js | 13 + node_modules/babel-loader/lib/utils/read.js | 14 + .../babel-loader/lib/utils/relative.js | 15 + node_modules/babel-loader/package.json | 151 + node_modules/babel-messages/.npmignore | 3 + node_modules/babel-messages/README.md | 18 + node_modules/babel-messages/lib/index.js | 84 + node_modules/babel-messages/package.json | 46 + .../.npmignore | 4 + .../README.md | 59 + .../lib/index.js | 45 + .../package.json | 45 + .../.npmignore | 4 + .../README.md | 98 + .../lib/index.js | 34 + .../package.json | 45 + .../.npmignore | 4 + .../README.md | 35 + .../lib/index.js | 63 + .../package.json | 45 + .../.npmignore | 4 + .../README.md | 61 + .../lib/index.js | 649 + .../lib/tdz.js | 97 + .../package-lock.json | 13 + .../package.json | 49 + .../.npmignore | 4 + .../README.md | 85 + .../lib/index.js | 68 + .../lib/lib/memoise-decorators.js | 59 + .../lib/loose.js | 74 + .../lib/vanilla.js | 559 + .../package.json | 53 + .../.npmignore | 4 + .../README.md | 130 + .../lib/index.js | 219 + .../package.json | 46 + .../.npmignore | 4 + .../README.md | 35 + .../lib/index.js | 551 + .../package.json | 45 + .../.npmignore | 3 + .../README.md | 61 + .../lib/index.js | 88 + .../package.json | 46 + .../.npmignore | 4 + .../README.md | 142 + .../lib/index.js | 199 + .../package.json | 45 + .../.npmignore | 4 + .../README.md | 35 + .../lib/index.js | 34 + .../package.json | 47 + .../.npmignore | 4 + .../README.md | 53 + .../lib/index.js | 26 + .../package.json | 45 + .../.npmignore | 3 + .../README.md | 61 + .../lib/index.js | 137 + .../package.json | 48 + .../.npmignore | 4 + .../README.md | 134 + .../lib/index.js | 609 + .../package.json | 50 + .../.npmignore | 3 + .../README.md | 71 + .../lib/index.js | 395 + .../package.json | 48 + .../.npmignore | 3 + .../README.md | 214 + .../lib/index.js | 127 + .../package.json | 47 + .../.npmignore | 4 + .../README.md | 35 + .../lib/index.js | 85 + .../package.json | 46 + .../.npmignore | 4 + .../README.md | 47 + .../lib/default.js | 162 + .../lib/destructuring.js | 34 + .../lib/index.js | 56 + .../lib/rest.js | 259 + .../package.json | 50 + .../.npmignore | 4 + .../README.md | 69 + .../lib/index.js | 35 + .../package.json | 46 + .../.npmignore | 4 + .../README.md | 49 + .../lib/index.js | 157 + .../package.json | 45 + .../.npmignore | 4 + .../README.md | 35 + .../lib/index.js | 29 + .../package.json | 47 + .../.npmignore | 4 + .../README.md | 81 + .../lib/index.js | 132 + .../package.json | 45 + .../.npmignore | 3 + .../README.md | 53 + .../lib/index.js | 59 + .../package.json | 45 + .../.npmignore | 4 + .../README.md | 51 + .../lib/index.js | 31 + .../package.json | 47 + .../.npmignore | 4 + .../README.md | 87 + .../lib/index.js | 3 + .../package-lock.json | 68 + .../package.json | 47 + .../.npmignore | 3 + .../README.md | 69 + .../lib/index.js | 49 + .../package.json | 46 + node_modules/babel-polyfill/.npmignore | 3 + node_modules/babel-polyfill/README.md | 2 + node_modules/babel-polyfill/browser.js | 4 + node_modules/babel-polyfill/dist/polyfill.js | 7574 +++++++ .../babel-polyfill/dist/polyfill.min.js | 4 + node_modules/babel-polyfill/lib/index.js | 28 + .../regenerator-runtime/.npmignore | 2 + .../regenerator-runtime/README.md | 31 + .../regenerator-runtime/package.json | 46 + .../node_modules/regenerator-runtime/path.js | 4 + .../regenerator-runtime/runtime-module.js | 31 + .../regenerator-runtime/runtime.js | 736 + node_modules/babel-polyfill/package-lock.json | 18 + node_modules/babel-polyfill/package.json | 46 + .../babel-polyfill/scripts/build-dist.sh | 17 + .../babel-polyfill/scripts/postpublish.js | 7 + .../babel-polyfill/scripts/prepublish.js | 8 + node_modules/babel-preset-es2015/.npmignore | 3 + node_modules/babel-preset-es2015/README.md | 57 + node_modules/babel-preset-es2015/lib/index.js | 140 + node_modules/babel-preset-es2015/package.json | 72 + node_modules/babel-register/.npmignore | 3 + node_modules/babel-register/README.md | 103 + node_modules/babel-register/lib/browser.js | 7 + node_modules/babel-register/lib/cache.js | 68 + node_modules/babel-register/lib/node.js | 179 + node_modules/babel-register/package-lock.json | 78 + node_modules/babel-register/package.json | 54 + 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 + node_modules/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 + node_modules/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 + node_modules/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 + node_modules/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 + node_modules/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 + node_modules/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 + node_modules/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 | 126 + .../helpers/asyncGeneratorDelegate.js | 69 + .../babel-runtime/helpers/asyncIterator.js | 32 + .../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 + node_modules/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 + node_modules/babel-runtime/helpers/toArray.js | 13 + .../helpers/toConsumableArray.js | 21 + node_modules/babel-runtime/helpers/typeof.js | 21 + node_modules/babel-runtime/package-lock.json | 232 + node_modules/babel-runtime/package.json | 56 + .../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-lock.json | 18 + node_modules/babel-template/package.json | 49 + node_modules/babel-traverse/.npmignore | 3 + node_modules/babel-traverse/README.md | 33 + node_modules/babel-traverse/lib/cache.js | 30 + node_modules/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 | 47 + .../babel-traverse/lib/path/context.js | 281 + .../babel-traverse/lib/path/conversion.js | 47 + .../babel-traverse/lib/path/evaluation.js | 398 + .../babel-traverse/lib/path/family.js | 266 + node_modules/babel-traverse/lib/path/index.js | 242 + .../lib/path/inference/index.js | 142 + .../lib/path/inference/inferer-reference.js | 185 + .../lib/path/inference/inferers.js | 195 + .../babel-traverse/lib/path/introspection.js | 386 + .../babel-traverse/lib/path/lib/hoister.js | 211 + .../lib/path/lib/removal-hooks.js | 33 + .../lib/path/lib/virtual-types.js | 141 + .../babel-traverse/lib/path/modification.js | 264 + .../babel-traverse/lib/path/removal.js | 72 + .../babel-traverse/lib/path/replacement.js | 268 + .../babel-traverse/lib/scope/binding.js | 82 + .../babel-traverse/lib/scope/index.js | 1094 + .../babel-traverse/lib/scope/lib/renamer.js | 113 + node_modules/babel-traverse/lib/visitors.js | 341 + node_modules/babel-traverse/package-lock.json | 57 + node_modules/babel-traverse/package.json | 56 + node_modules/babel-types/.npmignore | 3 + node_modules/babel-types/README.md | 2029 ++ node_modules/babel-types/lib/constants.js | 38 + node_modules/babel-types/lib/converters.js | 350 + .../babel-types/lib/definitions/core.js | 701 + .../babel-types/lib/definitions/es2015.js | 354 + .../lib/definitions/experimental.js | 103 + .../babel-types/lib/definitions/flow.js | 285 + .../babel-types/lib/definitions/index.js | 249 + .../babel-types/lib/definitions/init.js | 15 + .../babel-types/lib/definitions/jsx.js | 147 + .../babel-types/lib/definitions/misc.js | 21 + node_modules/babel-types/lib/flow.js | 108 + node_modules/babel-types/lib/index.js | 835 + node_modules/babel-types/lib/react.js | 80 + node_modules/babel-types/lib/retrievers.js | 116 + node_modules/babel-types/lib/validators.js | 265 + node_modules/babel-types/package-lock.json | 29 + node_modules/babel-types/package.json | 54 + node_modules/babylon/CHANGELOG.md | 979 + node_modules/babylon/LICENSE | 19 + node_modules/babylon/README.md | 134 + node_modules/babylon/bin/babylon.js | 16 + .../babylon/bin/generate-identifier-regex.js | 62 + node_modules/babylon/lib/index.js | 7318 +++++++ node_modules/babylon/package.json | 120 + 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 | 59 + node_modules/balanced-match/package.json | 77 + node_modules/base64-js/LICENSE | 21 + node_modules/base64-js/README.md | 34 + node_modules/base64-js/base64js.min.js | 1 + node_modules/base64-js/index.js | 114 + node_modules/base64-js/package.json | 65 + node_modules/base64-js/test/big-data.js | 24 + node_modules/base64-js/test/convert.js | 48 + node_modules/base64-js/test/url-safe.js | 18 + node_modules/big.js/LICENCE | 23 + node_modules/big.js/README.md | 263 + node_modules/big.js/big.js | 1146 ++ node_modules/big.js/big.min.js | 3 + node_modules/big.js/package.json | 69 + .../binary-extensions/binary-extensions.json | 242 + node_modules/binary-extensions/license | 9 + node_modules/binary-extensions/package.json | 68 + node_modules/binary-extensions/readme.md | 33 + node_modules/bn.js/.npmignore | 8 + node_modules/bn.js/README.md | 221 + node_modules/bn.js/lib/bn.js | 3427 ++++ node_modules/bn.js/package.json | 71 + node_modules/bn.js/util/genCombMulTo.js | 65 + node_modules/bn.js/util/genCombMulTo10.js | 65 + node_modules/brace-expansion/README.md | 123 + node_modules/brace-expansion/index.js | 201 + node_modules/brace-expansion/package.json | 75 + node_modules/braces/LICENSE | 21 + node_modules/braces/README.md | 248 + node_modules/braces/index.js | 399 + node_modules/braces/package.json | 114 + node_modules/brorand/.npmignore | 2 + node_modules/brorand/README.md | 26 + node_modules/brorand/index.js | 65 + node_modules/brorand/package.json | 60 + node_modules/brorand/test/api-test.js | 8 + node_modules/browserify-aes/.npmignore | 3 + node_modules/browserify-aes/.travis.yml | 15 + node_modules/browserify-aes/LICENSE | 21 + node_modules/browserify-aes/README.md | 19 + node_modules/browserify-aes/aes.js | 228 + node_modules/browserify-aes/authCipher.js | 92 + node_modules/browserify-aes/browser.js | 13 + node_modules/browserify-aes/decrypter.js | 121 + node_modules/browserify-aes/encrypter.js | 114 + node_modules/browserify-aes/ghash.js | 89 + node_modules/browserify-aes/index.js | 7 + node_modules/browserify-aes/modes/cbc.js | 17 + node_modules/browserify-aes/modes/cfb.js | 33 + node_modules/browserify-aes/modes/cfb1.js | 42 + node_modules/browserify-aes/modes/cfb8.js | 23 + node_modules/browserify-aes/modes/ctr.js | 43 + node_modules/browserify-aes/modes/ecb.js | 7 + node_modules/browserify-aes/modes/index.js | 18 + node_modules/browserify-aes/modes/list.json | 191 + node_modules/browserify-aes/modes/ofb.js | 16 + node_modules/browserify-aes/package.json | 69 + node_modules/browserify-aes/streamCipher.js | 27 + node_modules/browserify-cipher/.travis.yml | 6 + node_modules/browserify-cipher/browser.js | 73 + node_modules/browserify-cipher/index.js | 7 + node_modules/browserify-cipher/package.json | 58 + node_modules/browserify-cipher/readme.md | 7 + node_modules/browserify-cipher/test.js | 55 + node_modules/browserify-des/index.js | 43 + node_modules/browserify-des/modes.js | 24 + node_modules/browserify-des/package.json | 57 + node_modules/browserify-des/readme.md | 4 + node_modules/browserify-des/test.js | 48 + node_modules/browserify-rsa/.travis.yml | 3 + node_modules/browserify-rsa/LICENSE | 21 + node_modules/browserify-rsa/index.js | 40 + node_modules/browserify-rsa/package.json | 54 + node_modules/browserify-rsa/readme.md | 10 + node_modules/browserify-rsa/test.js | 53 + node_modules/browserify-sign/LICENSE | 13 + node_modules/browserify-sign/README.md | 13 + node_modules/browserify-sign/algos.js | 1 + .../browserify-sign/browser/algorithms.json | 152 + .../browserify-sign/browser/curves.json | 8 + node_modules/browserify-sign/browser/index.js | 91 + node_modules/browserify-sign/browser/sign.js | 145 + .../browserify-sign/browser/verify.js | 83 + node_modules/browserify-sign/index.js | 7 + node_modules/browserify-sign/package.json | 66 + node_modules/browserify-zlib/.npmignore | 2 + node_modules/browserify-zlib/.travis.yml | 3 + node_modules/browserify-zlib/README.md | 22 + node_modules/browserify-zlib/package.json | 74 + node_modules/browserify-zlib/src/binding.js | 236 + node_modules/browserify-zlib/src/index.js | 610 + .../browserify-zlib/test/fixtures/elipses.txt | 1 + .../browserify-zlib/test/fixtures/empty.txt | 1 + .../browserify-zlib/test/fixtures/person.jpg | Bin 0 -> 57928 bytes .../test/ignored/test-zlib-dictionary-fail.js | 48 + .../test/ignored/test-zlib-dictionary.js | 95 + .../test/ignored/test-zlib-params.js | 33 + .../browserify-zlib/test/package.json | 7 + .../test/test-zlib-close-after-write.js | 35 + .../test/test-zlib-convenience-methods.js | 70 + .../test/test-zlib-from-string.js | 89 + .../test/test-zlib-invalid-input.js | 62 + .../test/test-zlib-random-byte-pipes.js | 176 + .../test/test-zlib-write-after-flush.js | 55 + .../test/test-zlib-zero-byte.js | 41 + .../browserify-zlib/test/test-zlib.js | 206 + node_modules/buffer-xor/.npmignore | 1 + node_modules/buffer-xor/.travis.yml | 9 + node_modules/buffer-xor/LICENSE | 21 + node_modules/buffer-xor/README.md | 41 + node_modules/buffer-xor/index.js | 10 + node_modules/buffer-xor/inline.js | 1 + node_modules/buffer-xor/inplace.js | 9 + node_modules/buffer-xor/package.json | 64 + node_modules/buffer-xor/test/fixtures.json | 23 + node_modules/buffer-xor/test/index.js | 38 + node_modules/buffer/.npmignore | 2 + node_modules/buffer/.travis.yml | 8 + node_modules/buffer/AUTHORS.md | 44 + node_modules/buffer/LICENSE | 21 + node_modules/buffer/README.md | 378 + .../buffer/bin/download-node-tests.js | 106 + node_modules/buffer/bin/test.js | 41 + node_modules/buffer/bin/update-authors.sh | 21 + node_modules/buffer/bin/zuul-es5.yml | 14 + node_modules/buffer/bin/zuul-es6.yml | 6 + node_modules/buffer/index.js | 1789 ++ node_modules/buffer/package.json | 108 + node_modules/buffer/test/_polyfill.js | 150 + node_modules/buffer/test/base64.js | 47 + node_modules/buffer/test/basic.js | 85 + node_modules/buffer/test/compare.js | 59 + node_modules/buffer/test/constructor.js | 193 + node_modules/buffer/test/from-string.js | 132 + node_modules/buffer/test/is-buffer.js | 22 + node_modules/buffer/test/methods.js | 127 + .../buffer/test/node/test-buffer-alloc.js | 1501 ++ .../test/node/test-buffer-arraybuffer.js | 112 + .../buffer/test/node/test-buffer-ascii.js | 28 + .../test/node/test-buffer-bad-overload.js | 18 + .../buffer/test/node/test-buffer-badhex.js | 46 + .../test/node/test-buffer-bytelength.js | 90 + .../test/node/test-buffer-compare-offset.js | 66 + .../buffer/test/node/test-buffer-concat.js | 40 + .../buffer/test/node/test-buffer-fill.js | 272 + .../buffer/test/node/test-buffer-includes.js | 305 + .../buffer/test/node/test-buffer-indexof.js | 523 + .../test/node/test-buffer-inheritance.js | 42 + .../buffer/test/node/test-buffer-inspect.js | 41 + .../buffer/test/node/test-buffer-iterator.js | 65 + .../test/node/test-buffer-safe-unsafe.js | 27 + .../buffer/test/node/test-buffer-slow.js | 63 + .../buffer/test/node/test-buffer-swap.js | 141 + .../test/node/test-buffer-zero-fill-cli.js | 35 + .../test/node/test-buffer-zero-fill-reset.js | 22 + node_modules/buffer/test/node/test-buffer.js | 1534 ++ node_modules/buffer/test/slice.js | 37 + node_modules/buffer/test/static.js | 17 + node_modules/buffer/test/to-string.js | 233 + node_modules/buffer/test/write.js | 131 + node_modules/buffer/test/write_infinity.js | 45 + .../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 | 72 + node_modules/builtin-modules/readme.md | 41 + node_modules/builtin-modules/static.js | 2 + node_modules/builtin-status-codes/browser.js | 64 + node_modules/builtin-status-codes/build.js | 8 + node_modules/builtin-status-codes/index.js | 3 + node_modules/builtin-status-codes/license | 21 + .../builtin-status-codes/package.json | 71 + node_modules/builtin-status-codes/readme.md | 31 + node_modules/camelcase/index.js | 27 + node_modules/camelcase/license | 21 + node_modules/camelcase/package.json | 70 + node_modules/camelcase/readme.md | 56 + node_modules/center-align/LICENSE | 21 + node_modules/center-align/README.md | 74 + node_modules/center-align/index.js | 16 + node_modules/center-align/package.json | 82 + node_modules/center-align/utils.js | 40 + node_modules/chalk/index.js | 116 + node_modules/chalk/license | 21 + node_modules/chalk/package.json | 114 + node_modules/chalk/readme.md | 213 + node_modules/chokidar/CHANGELOG.md | 274 + node_modules/chokidar/README.md | 293 + node_modules/chokidar/index.js | 716 + node_modules/chokidar/lib/fsevents-handler.js | 397 + node_modules/chokidar/lib/nodefs-handler.js | 481 + node_modules/chokidar/package.json | 84 + node_modules/cipher-base/.eslintrc | 3 + node_modules/cipher-base/.npmignore | 1 + node_modules/cipher-base/.travis.yml | 6 + node_modules/cipher-base/LICENSE | 21 + node_modules/cipher-base/README.md | 17 + node_modules/cipher-base/index.js | 99 + node_modules/cipher-base/package.json | 63 + node_modules/cipher-base/test.js | 111 + 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 | 66 + .../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 | 91 + node_modules/cliui/test/cliui.js | 349 + node_modules/co/History.md | 172 + node_modules/co/LICENSE | 22 + node_modules/co/Readme.md | 212 + node_modules/co/index.js | 237 + node_modules/co/package.json | 66 + node_modules/code-point-at/index.js | 32 + node_modules/code-point-at/license | 21 + node_modules/code-point-at/package.json | 71 + 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 + node_modules/colors/examples/normal-usage.js | 74 + node_modules/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 | 54 + node_modules/colors/safe.js | 9 + node_modules/colors/screenshots/colors.png | Bin 0 -> 79787 bytes node_modules/colors/tests/basic-test.js | 50 + node_modules/colors/tests/safe-test.js | 45 + node_modules/colors/themes/generic-logging.js | 12 + node_modules/commander/History.md | 298 + node_modules/commander/LICENSE | 22 + node_modules/commander/Readme.md | 351 + node_modules/commander/index.js | 1137 + node_modules/commander/package.json | 61 + node_modules/commondir/LICENSE | 24 + node_modules/commondir/example/dir.js | 3 + node_modules/commondir/index.js | 29 + node_modules/commondir/package.json | 63 + node_modules/commondir/readme.markdown | 48 + node_modules/commondir/test/dirs.js | 55 + 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 | 88 + node_modules/concat-map/test/map.js | 39 + node_modules/console-browserify/.npmignore | 14 + node_modules/console-browserify/.testem.json | 14 + node_modules/console-browserify/.travis.yml | 4 + node_modules/console-browserify/LICENCE | 19 + node_modules/console-browserify/README.md | 33 + node_modules/console-browserify/index.js | 86 + node_modules/console-browserify/package.json | 93 + node_modules/console-browserify/test/index.js | 67 + .../console-browserify/test/static/index.html | 12 + .../test/static/test-adapter.js | 53 + node_modules/constants-browserify/README.md | 54 + node_modules/constants-browserify/build.sh | 1 + .../constants-browserify/constants.json | 209 + .../constants-browserify/package.json | 62 + node_modules/constants-browserify/test.js | 18 + node_modules/convert-source-map/.npmignore | 16 + node_modules/convert-source-map/.travis.yml | 7 + node_modules/convert-source-map/LICENSE | 23 + node_modules/convert-source-map/README.md | 125 + .../example/comment-to-json.js | 15 + node_modules/convert-source-map/index.js | 136 + node_modules/convert-source-map/package.json | 65 + .../convert-source-map/test/comment-regex.js | 137 + .../test/convert-source-map.js | 255 + .../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 | 638 + node_modules/core-js/Gruntfile.js | 3 + node_modules/core-js/LICENSE | 19 + node_modules/core-js/README.md | 2289 +++ node_modules/core-js/bower.json | 49 + node_modules/core-js/build/Gruntfile.ls | 86 + node_modules/core-js/build/build.ls | 62 + node_modules/core-js/build/config.js | 274 + node_modules/core-js/build/index.js | 104 + node_modules/core-js/client/core.js | 8617 ++++++++ node_modules/core-js/client/core.min.js | 10 + node_modules/core-js/client/core.min.js.map | 1 + node_modules/core-js/client/library.js | 8100 ++++++++ node_modules/core-js/client/library.min.js | 10 + .../core-js/client/library.min.js.map | 1 + node_modules/core-js/client/shim.js | 8185 ++++++++ node_modules/core-js/client/shim.min.js | 10 + node_modules/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 | 4 + node_modules/core-js/es7/asap.js | 2 + node_modules/core-js/es7/error.js | 2 + node_modules/core-js/es7/global.js | 2 + node_modules/core-js/es7/index.js | 56 + node_modules/core-js/es7/map.js | 4 + node_modules/core-js/es7/math.js | 13 + node_modules/core-js/es7/object.js | 8 + node_modules/core-js/es7/observable.js | 7 + node_modules/core-js/es7/promise.js | 3 + node_modules/core-js/es7/reflect.js | 10 + node_modules/core-js/es7/set.js | 4 + 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/es7/weak-map.js | 3 + node_modules/core-js/es7/weak-set.js | 3 + node_modules/core-js/fn/_.js | 2 + node_modules/core-js/fn/array/concat.js | 4 + node_modules/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 + node_modules/core-js/fn/array/find-index.js | 2 + node_modules/core-js/fn/array/find.js | 2 + node_modules/core-js/fn/array/flat-map.js | 2 + node_modules/core-js/fn/array/flatten.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 | 26 + 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 + node_modules/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 + node_modules/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 + node_modules/core-js/fn/array/virtual/find.js | 2 + .../core-js/fn/array/virtual/flat-map.js | 2 + .../core-js/fn/array/virtual/flatten.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 + node_modules/core-js/fn/array/virtual/join.js | 2 + node_modules/core-js/fn/array/virtual/keys.js | 2 + .../core-js/fn/array/virtual/last-index-of.js | 2 + node_modules/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 + node_modules/core-js/fn/array/virtual/some.js | 2 + node_modules/core-js/fn/array/virtual/sort.js | 2 + .../core-js/fn/array/virtual/values.js | 2 + node_modules/core-js/fn/asap.js | 2 + node_modules/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 + node_modules/core-js/fn/date/to-iso-string.js | 3 + node_modules/core-js/fn/date/to-json.js | 2 + node_modules/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/global.js | 2 + 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 | 8 + node_modules/core-js/fn/map/from.js | 8 + node_modules/core-js/fn/map/index.js | 8 + node_modules/core-js/fn/map/of.js | 8 + 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/clamp.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/deg-per-rad.js | 2 + node_modules/core-js/fn/math/degrees.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/fscale.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 | 30 + 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/rad-per-deg.js | 2 + node_modules/core-js/fn/math/radians.js | 2 + node_modules/core-js/fn/math/scale.js | 2 + node_modules/core-js/fn/math/sign.js | 2 + node_modules/core-js/fn/math/signbit.js | 3 + 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 + node_modules/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 + node_modules/core-js/fn/number/is-finite.js | 2 + node_modules/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 + node_modules/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 + node_modules/core-js/fn/number/parse-float.js | 2 + node_modules/core-js/fn/number/parse-int.js | 2 + node_modules/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 + node_modules/core-js/fn/object/is-frozen.js | 2 + node_modules/core-js/fn/object/is-object.js | 2 + node_modules/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 | 7 + node_modules/core-js/fn/promise/finally.js | 4 + node_modules/core-js/fn/promise/index.js | 7 + node_modules/core-js/fn/promise/try.js | 8 + node_modules/core-js/fn/reflect/apply.js | 2 + node_modules/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 + node_modules/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 + node_modules/core-js/fn/reflect/metadata.js | 2 + node_modules/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 + node_modules/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 + node_modules/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 | 8 + node_modules/core-js/fn/set/from.js | 8 + node_modules/core-js/fn/set/index.js | 8 + node_modules/core-js/fn/set/of.js | 8 + 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 + node_modules/core-js/fn/string/ends-with.js | 2 + node_modules/core-js/fn/string/escape-html.js | 2 + node_modules/core-js/fn/string/fixed.js | 2 + node_modules/core-js/fn/string/fontcolor.js | 2 + node_modules/core-js/fn/string/fontsize.js | 2 + .../core-js/fn/string/from-code-point.js | 2 + node_modules/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 + node_modules/core-js/fn/string/iterator.js | 5 + node_modules/core-js/fn/string/link.js | 2 + node_modules/core-js/fn/string/match-all.js | 2 + node_modules/core-js/fn/string/pad-end.js | 2 + node_modules/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 + node_modules/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 + node_modules/core-js/fn/string/trim-end.js | 2 + node_modules/core-js/fn/string/trim-left.js | 2 + node_modules/core-js/fn/string/trim-right.js | 2 + node_modules/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 + node_modules/core-js/fn/string/virtual/at.js | 2 + node_modules/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 + node_modules/core-js/fn/string/virtual/sub.js | 2 + node_modules/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 + node_modules/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 + node_modules/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 + node_modules/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 + node_modules/core-js/fn/typed/array-buffer.js | 3 + node_modules/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 + node_modules/core-js/fn/typed/int16-array.js | 2 + node_modules/core-js/fn/typed/int32-array.js | 2 + node_modules/core-js/fn/typed/int8-array.js | 2 + node_modules/core-js/fn/typed/uint16-array.js | 2 + node_modules/core-js/fn/typed/uint32-array.js | 2 + node_modules/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 | 6 + node_modules/core-js/fn/weak-map/from.js | 8 + node_modules/core-js/fn/weak-map/index.js | 6 + node_modules/core-js/fn/weak-map/of.js | 8 + node_modules/core-js/fn/weak-set.js | 6 + node_modules/core-js/fn/weak-set/from.js | 8 + node_modules/core-js/fn/weak-set/index.js | 6 + node_modules/core-js/fn/weak-set/of.js | 8 + node_modules/core-js/index.js | 16 + node_modules/core-js/library/core/_.js | 2 + node_modules/core-js/library/core/delay.js | 2 + node_modules/core-js/library/core/dict.js | 2 + node_modules/core-js/library/core/function.js | 2 + node_modules/core-js/library/core/index.js | 15 + node_modules/core-js/library/core/number.js | 2 + node_modules/core-js/library/core/object.js | 5 + node_modules/core-js/library/core/regexp.js | 2 + node_modules/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 + node_modules/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 + node_modules/core-js/library/es6/number.js | 13 + node_modules/core-js/library/es6/object.js | 20 + .../core-js/library/es6/parse-float.js | 2 + node_modules/core-js/library/es6/parse-int.js | 2 + node_modules/core-js/library/es6/promise.js | 5 + node_modules/core-js/library/es6/reflect.js | 15 + node_modules/core-js/library/es6/regexp.js | 8 + node_modules/core-js/library/es6/set.js | 5 + node_modules/core-js/library/es6/string.js | 27 + node_modules/core-js/library/es6/symbol.js | 3 + node_modules/core-js/library/es6/typed.js | 13 + node_modules/core-js/library/es6/weak-map.js | 4 + node_modules/core-js/library/es6/weak-set.js | 4 + node_modules/core-js/library/es7/array.js | 4 + node_modules/core-js/library/es7/asap.js | 2 + node_modules/core-js/library/es7/error.js | 2 + node_modules/core-js/library/es7/global.js | 2 + node_modules/core-js/library/es7/index.js | 56 + node_modules/core-js/library/es7/map.js | 4 + node_modules/core-js/library/es7/math.js | 13 + node_modules/core-js/library/es7/object.js | 8 + .../core-js/library/es7/observable.js | 7 + node_modules/core-js/library/es7/promise.js | 3 + node_modules/core-js/library/es7/reflect.js | 10 + node_modules/core-js/library/es7/set.js | 4 + node_modules/core-js/library/es7/string.js | 7 + node_modules/core-js/library/es7/symbol.js | 3 + node_modules/core-js/library/es7/system.js | 2 + node_modules/core-js/library/es7/weak-map.js | 3 + node_modules/core-js/library/es7/weak-set.js | 3 + 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 + node_modules/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 + node_modules/core-js/library/fn/array/find.js | 2 + .../core-js/library/fn/array/flat-map.js | 2 + .../core-js/library/fn/array/flatten.js | 2 + .../core-js/library/fn/array/for-each.js | 2 + node_modules/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 | 26 + .../core-js/library/fn/array/is-array.js | 2 + .../core-js/library/fn/array/iterator.js | 2 + node_modules/core-js/library/fn/array/join.js | 2 + node_modules/core-js/library/fn/array/keys.js | 2 + .../core-js/library/fn/array/last-index-of.js | 2 + node_modules/core-js/library/fn/array/map.js | 2 + node_modules/core-js/library/fn/array/of.js | 2 + node_modules/core-js/library/fn/array/pop.js | 4 + node_modules/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 + node_modules/core-js/library/fn/array/some.js | 2 + node_modules/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/flat-map.js | 2 + .../library/fn/array/virtual/flatten.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 + node_modules/core-js/library/fn/date/index.js | 6 + node_modules/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 + node_modules/core-js/library/fn/global.js | 2 + .../core-js/library/fn/is-iterable.js | 3 + node_modules/core-js/library/fn/json/index.js | 2 + .../core-js/library/fn/json/stringify.js | 5 + node_modules/core-js/library/fn/map.js | 8 + node_modules/core-js/library/fn/map/from.js | 8 + node_modules/core-js/library/fn/map/index.js | 8 + node_modules/core-js/library/fn/map/of.js | 8 + node_modules/core-js/library/fn/math/acosh.js | 2 + node_modules/core-js/library/fn/math/asinh.js | 2 + node_modules/core-js/library/fn/math/atanh.js | 2 + node_modules/core-js/library/fn/math/cbrt.js | 2 + node_modules/core-js/library/fn/math/clamp.js | 2 + node_modules/core-js/library/fn/math/clz32.js | 2 + node_modules/core-js/library/fn/math/cosh.js | 2 + .../core-js/library/fn/math/deg-per-rad.js | 2 + .../core-js/library/fn/math/degrees.js | 2 + node_modules/core-js/library/fn/math/expm1.js | 2 + .../core-js/library/fn/math/fround.js | 2 + .../core-js/library/fn/math/fscale.js | 2 + node_modules/core-js/library/fn/math/hypot.js | 2 + node_modules/core-js/library/fn/math/iaddh.js | 2 + node_modules/core-js/library/fn/math/imul.js | 2 + node_modules/core-js/library/fn/math/imulh.js | 2 + node_modules/core-js/library/fn/math/index.js | 30 + node_modules/core-js/library/fn/math/isubh.js | 2 + node_modules/core-js/library/fn/math/log10.js | 2 + node_modules/core-js/library/fn/math/log1p.js | 2 + node_modules/core-js/library/fn/math/log2.js | 2 + .../core-js/library/fn/math/rad-per-deg.js | 2 + .../core-js/library/fn/math/radians.js | 2 + node_modules/core-js/library/fn/math/scale.js | 2 + node_modules/core-js/library/fn/math/sign.js | 2 + .../core-js/library/fn/math/signbit.js | 3 + node_modules/core-js/library/fn/math/sinh.js | 2 + node_modules/core-js/library/fn/math/tanh.js | 2 + node_modules/core-js/library/fn/math/trunc.js | 2 + node_modules/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 + node_modules/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 + node_modules/core-js/library/fn/observable.js | 7 + .../core-js/library/fn/parse-float.js | 2 + node_modules/core-js/library/fn/parse-int.js | 2 + node_modules/core-js/library/fn/promise.js | 7 + .../core-js/library/fn/promise/finally.js | 4 + .../core-js/library/fn/promise/index.js | 7 + .../core-js/library/fn/promise/try.js | 8 + .../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 | 8 + node_modules/core-js/library/fn/set/from.js | 8 + node_modules/core-js/library/fn/set/index.js | 8 + node_modules/core-js/library/fn/set/of.js | 8 + .../core-js/library/fn/string/anchor.js | 2 + node_modules/core-js/library/fn/string/at.js | 2 + node_modules/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 + node_modules/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 + node_modules/core-js/library/fn/string/sub.js | 2 + node_modules/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 + node_modules/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 + node_modules/core-js/library/fn/weak-map.js | 6 + .../core-js/library/fn/weak-map/from.js | 8 + .../core-js/library/fn/weak-map/index.js | 6 + .../core-js/library/fn/weak-map/of.js | 8 + node_modules/core-js/library/fn/weak-set.js | 6 + .../core-js/library/fn/weak-set/from.js | 8 + .../core-js/library/fn/weak-set/index.js | 6 + .../core-js/library/fn/weak-set/of.js | 8 + 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 | 23 + .../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 + node_modules/core-js/library/modules/_bind.js | 25 + .../core-js/library/modules/_classof.js | 23 + node_modules/core-js/library/modules/_cof.js | 5 + .../library/modules/_collection-strong.js | 144 + .../library/modules/_collection-to-json.js | 9 + .../library/modules/_collection-weak.js | 85 + .../core-js/library/modules/_collection.js | 59 + node_modules/core-js/library/modules/_core.js | 2 + .../library/modules/_create-property.js | 8 + node_modules/core-js/library/modules/_ctx.js | 20 + .../library/modules/_date-to-iso-string.js | 26 + .../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 + .../library/modules/_flatten-into-array.js | 39 + .../core-js/library/modules/_for-of.js | 25 + .../core-js/library/modules/_global.js | 6 + node_modules/core-js/library/modules/_has.js | 4 + node_modules/core-js/library/modules/_hide.js | 8 + node_modules/core-js/library/modules/_html.js | 2 + .../library/modules/_ie8-dom-define.js | 3 + .../library/modules/_inherit-if-required.js | 9 + .../core-js/library/modules/_invoke.js | 16 + .../core-js/library/modules/_iobject.js | 6 + .../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 | 22 + .../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-fround.js | 23 + .../core-js/library/modules/_math-log1p.js | 4 + .../core-js/library/modules/_math-scale.js | 18 + .../core-js/library/modules/_math-sign.js | 5 + node_modules/core-js/library/modules/_meta.js | 53 + .../core-js/library/modules/_metadata.js | 51 + .../core-js/library/modules/_microtask.js | 68 + .../modules/_new-promise-capability.js | 18 + .../core-js/library/modules/_object-assign.js | 34 + .../core-js/library/modules/_object-create.js | 41 + .../core-js/library/modules/_object-define.js | 13 + .../core-js/library/modules/_object-dp.js | 16 + .../core-js/library/modules/_object-dps.js | 13 + .../library/modules/_object-forced-pam.js | 9 + .../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 | 25 + node_modules/core-js/library/modules/_path.js | 1 + .../core-js/library/modules/_perform.js | 7 + .../library/modules/_promise-resolve.js | 12 + .../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 | 5 + .../library/modules/_set-collection-from.js | 28 + .../library/modules/_set-collection-of.js | 12 + .../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 | 9 + .../core-js/library/modules/_strict-method.js | 9 + .../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 + node_modules/core-js/library/modules/_task.js | 84 + .../library/modules/_to-absolute-index.js | 7 + .../core-js/library/modules/_to-index.js | 10 + .../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 | 480 + .../core-js/library/modules/_typed-buffer.js | 276 + .../core-js/library/modules/_typed.js | 28 + node_modules/core-js/library/modules/_uid.js | 5 + .../library/modules/_validate-collection.js | 5 + .../core-js/library/modules/_wks-define.js | 9 + .../core-js/library/modules/_wks-ext.js | 1 + node_modules/core-js/library/modules/_wks.js | 11 + .../core-js/library/modules/core.delay.js | 12 + .../core-js/library/modules/core.dict.js | 157 + .../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 | 10 + .../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 + node_modules/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 | 8 + .../library/modules/es6.date.to-json.js | 19 + .../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 | 19 + .../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 | 4 + .../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 | 9 + .../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 | 114 + .../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 | 280 + .../library/modules/es6.reflect.apply.js | 16 + .../library/modules/es6.reflect.construct.js | 47 + .../modules/es6.reflect.define-property.js | 23 + .../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 | 14 + .../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 | 234 + .../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 | 59 + .../core-js/library/modules/es6.weak-set.js | 14 + .../library/modules/es7.array.flat-map.js | 22 + .../library/modules/es7.array.flatten.js | 21 + .../library/modules/es7.array.includes.js | 12 + .../core-js/library/modules/es7.asap.js | 12 + .../library/modules/es7.error.is-error.js | 9 + .../core-js/library/modules/es7.global.js | 4 + .../core-js/library/modules/es7.map.from.js | 2 + .../core-js/library/modules/es7.map.of.js | 2 + .../library/modules/es7.map.to-json.js | 4 + .../core-js/library/modules/es7.math.clamp.js | 8 + .../library/modules/es7.math.deg-per-rad.js | 4 + .../library/modules/es7.math.degrees.js | 9 + .../library/modules/es7.math.fscale.js | 10 + .../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 + .../library/modules/es7.math.rad-per-deg.js | 4 + .../library/modules/es7.math.radians.js | 9 + .../core-js/library/modules/es7.math.scale.js | 4 + .../library/modules/es7.math.signbit.js | 7 + .../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 + ...es7.object.get-own-property-descriptors.js | 22 + .../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 + .../library/modules/es7.promise.finally.js | 20 + .../library/modules/es7.promise.try.js | 12 + .../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 + .../core-js/library/modules/es7.set.from.js | 2 + .../core-js/library/modules/es7.set.of.js | 2 + .../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/es7.weak-map.from.js | 2 + .../library/modules/es7.weak-map.of.js | 2 + .../library/modules/es7.weak-set.from.js | 2 + .../library/modules/es7.weak-set.of.js | 2 + .../library/modules/web.dom.iterable.js | 19 + .../core-js/library/modules/web.immediate.js | 6 + .../core-js/library/modules/web.timers.js | 20 + node_modules/core-js/library/shim.js | 197 + node_modules/core-js/library/stage/0.js | 10 + node_modules/core-js/library/stage/1.js | 23 + node_modules/core-js/library/stage/2.js | 4 + node_modules/core-js/library/stage/3.js | 4 + node_modules/core-js/library/stage/4.js | 11 + node_modules/core-js/library/stage/index.js | 1 + node_modules/core-js/library/stage/pre.js | 10 + .../core-js/library/web/dom-collections.js | 2 + node_modules/core-js/library/web/immediate.js | 2 + node_modules/core-js/library/web/index.js | 4 + node_modules/core-js/library/web/timers.js | 2 + node_modules/core-js/modules/_a-function.js | 4 + .../core-js/modules/_a-number-value.js | 5 + .../core-js/modules/_add-to-unscopables.js | 7 + node_modules/core-js/modules/_an-instance.js | 5 + node_modules/core-js/modules/_an-object.js | 5 + .../core-js/modules/_array-copy-within.js | 26 + node_modules/core-js/modules/_array-fill.js | 15 + .../core-js/modules/_array-from-iterable.js | 7 + .../core-js/modules/_array-includes.js | 23 + .../core-js/modules/_array-methods.js | 44 + node_modules/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 | 25 + node_modules/core-js/modules/_classof.js | 23 + node_modules/core-js/modules/_cof.js | 5 + .../core-js/modules/_collection-strong.js | 144 + .../core-js/modules/_collection-to-json.js | 9 + .../core-js/modules/_collection-weak.js | 85 + node_modules/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-iso-string.js | 26 + .../core-js/modules/_date-to-primitive.js | 9 + node_modules/core-js/modules/_defined.js | 5 + node_modules/core-js/modules/_descriptors.js | 4 + node_modules/core-js/modules/_dom-create.js | 7 + .../core-js/modules/_entry-virtual.js | 5 + .../core-js/modules/_enum-bug-keys.js | 4 + node_modules/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 + node_modules/core-js/modules/_fix-re-wks.js | 28 + node_modules/core-js/modules/_flags.js | 13 + .../core-js/modules/_flatten-into-array.js | 39 + node_modules/core-js/modules/_for-of.js | 25 + node_modules/core-js/modules/_global.js | 6 + node_modules/core-js/modules/_has.js | 4 + node_modules/core-js/modules/_hide.js | 8 + node_modules/core-js/modules/_html.js | 2 + .../core-js/modules/_ie8-dom-define.js | 3 + .../core-js/modules/_inherit-if-required.js | 9 + node_modules/core-js/modules/_invoke.js | 16 + node_modules/core-js/modules/_iobject.js | 6 + .../core-js/modules/_is-array-iter.js | 8 + node_modules/core-js/modules/_is-array.js | 5 + node_modules/core-js/modules/_is-integer.js | 6 + node_modules/core-js/modules/_is-object.js | 3 + node_modules/core-js/modules/_is-regexp.js | 8 + node_modules/core-js/modules/_iter-call.js | 12 + node_modules/core-js/modules/_iter-create.js | 13 + node_modules/core-js/modules/_iter-define.js | 70 + node_modules/core-js/modules/_iter-detect.js | 22 + node_modules/core-js/modules/_iter-step.js | 3 + node_modules/core-js/modules/_iterators.js | 1 + node_modules/core-js/modules/_keyof.js | 10 + node_modules/core-js/modules/_library.js | 1 + node_modules/core-js/modules/_math-expm1.js | 10 + node_modules/core-js/modules/_math-fround.js | 23 + node_modules/core-js/modules/_math-log1p.js | 4 + node_modules/core-js/modules/_math-scale.js | 18 + node_modules/core-js/modules/_math-sign.js | 5 + node_modules/core-js/modules/_meta.js | 53 + node_modules/core-js/modules/_metadata.js | 51 + node_modules/core-js/modules/_microtask.js | 68 + .../modules/_new-promise-capability.js | 18 + .../core-js/modules/_object-assign.js | 34 + .../core-js/modules/_object-create.js | 41 + .../core-js/modules/_object-define.js | 13 + node_modules/core-js/modules/_object-dp.js | 16 + node_modules/core-js/modules/_object-dps.js | 13 + .../core-js/modules/_object-forced-pam.js | 9 + node_modules/core-js/modules/_object-gopd.js | 16 + .../core-js/modules/_object-gopn-ext.js | 19 + node_modules/core-js/modules/_object-gopn.js | 7 + node_modules/core-js/modules/_object-gops.js | 1 + node_modules/core-js/modules/_object-gpo.js | 13 + .../core-js/modules/_object-keys-internal.js | 17 + node_modules/core-js/modules/_object-keys.js | 7 + node_modules/core-js/modules/_object-pie.js | 1 + node_modules/core-js/modules/_object-sap.js | 10 + .../core-js/modules/_object-to-array.js | 16 + node_modules/core-js/modules/_own-keys.js | 10 + node_modules/core-js/modules/_parse-float.js | 8 + node_modules/core-js/modules/_parse-int.js | 9 + node_modules/core-js/modules/_partial.js | 25 + node_modules/core-js/modules/_path.js | 1 + node_modules/core-js/modules/_perform.js | 7 + .../core-js/modules/_promise-resolve.js | 12 + .../core-js/modules/_property-desc.js | 8 + node_modules/core-js/modules/_redefine-all.js | 5 + node_modules/core-js/modules/_redefine.js | 31 + node_modules/core-js/modules/_replacer.js | 8 + node_modules/core-js/modules/_same-value.js | 5 + .../core-js/modules/_set-collection-from.js | 28 + .../core-js/modules/_set-collection-of.js | 12 + node_modules/core-js/modules/_set-proto.js | 25 + node_modules/core-js/modules/_set-species.js | 13 + .../core-js/modules/_set-to-string-tag.js | 7 + node_modules/core-js/modules/_shared-key.js | 5 + node_modules/core-js/modules/_shared.js | 6 + .../core-js/modules/_species-constructor.js | 9 + .../core-js/modules/_strict-method.js | 9 + node_modules/core-js/modules/_string-at.js | 17 + .../core-js/modules/_string-context.js | 8 + node_modules/core-js/modules/_string-html.js | 19 + node_modules/core-js/modules/_string-pad.js | 16 + .../core-js/modules/_string-repeat.js | 12 + node_modules/core-js/modules/_string-trim.js | 30 + node_modules/core-js/modules/_string-ws.js | 2 + node_modules/core-js/modules/_task.js | 84 + .../core-js/modules/_to-absolute-index.js | 7 + node_modules/core-js/modules/_to-index.js | 10 + node_modules/core-js/modules/_to-integer.js | 6 + node_modules/core-js/modules/_to-iobject.js | 6 + node_modules/core-js/modules/_to-length.js | 6 + node_modules/core-js/modules/_to-object.js | 5 + node_modules/core-js/modules/_to-primitive.js | 12 + node_modules/core-js/modules/_typed-array.js | 480 + node_modules/core-js/modules/_typed-buffer.js | 276 + node_modules/core-js/modules/_typed.js | 28 + node_modules/core-js/modules/_uid.js | 5 + .../core-js/modules/_validate-collection.js | 5 + node_modules/core-js/modules/_wks-define.js | 9 + node_modules/core-js/modules/_wks-ext.js | 1 + node_modules/core-js/modules/_wks.js | 11 + node_modules/core-js/modules/core.delay.js | 12 + node_modules/core-js/modules/core.dict.js | 157 + .../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 | 10 + .../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 + node_modules/core-js/modules/es6.array.map.js | 10 + node_modules/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 + node_modules/core-js/modules/es6.date.now.js | 4 + .../core-js/modules/es6.date.to-iso-string.js | 8 + .../core-js/modules/es6.date.to-json.js | 16 + .../core-js/modules/es6.date.to-primitive.js | 4 + .../core-js/modules/es6.date.to-string.js | 12 + .../core-js/modules/es6.function.bind.js | 4 + .../modules/es6.function.has-instance.js | 13 + .../core-js/modules/es6.function.name.js | 16 + node_modules/core-js/modules/es6.map.js | 19 + .../core-js/modules/es6.math.acosh.js | 18 + .../core-js/modules/es6.math.asinh.js | 10 + .../core-js/modules/es6.math.atanh.js | 10 + node_modules/core-js/modules/es6.math.cbrt.js | 9 + .../core-js/modules/es6.math.clz32.js | 8 + node_modules/core-js/modules/es6.math.cosh.js | 9 + .../core-js/modules/es6.math.expm1.js | 5 + .../core-js/modules/es6.math.fround.js | 4 + .../core-js/modules/es6.math.hypot.js | 25 + node_modules/core-js/modules/es6.math.imul.js | 17 + .../core-js/modules/es6.math.log10.js | 8 + .../core-js/modules/es6.math.log1p.js | 4 + node_modules/core-js/modules/es6.math.log2.js | 8 + node_modules/core-js/modules/es6.math.sign.js | 4 + node_modules/core-js/modules/es6.math.sinh.js | 15 + node_modules/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 | 9 + .../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 | 114 + .../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 + node_modules/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 + node_modules/core-js/modules/es6.parse-int.js | 4 + node_modules/core-js/modules/es6.promise.js | 280 + .../core-js/modules/es6.reflect.apply.js | 16 + .../core-js/modules/es6.reflect.construct.js | 47 + .../modules/es6.reflect.define-property.js | 23 + .../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 | 71 + .../core-js/modules/es6.regexp.to-string.js | 25 + node_modules/core-js/modules/es6.set.js | 14 + .../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 + node_modules/core-js/modules/es6.symbol.js | 234 + .../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 + node_modules/core-js/modules/es6.weak-map.js | 59 + node_modules/core-js/modules/es6.weak-set.js | 14 + .../core-js/modules/es7.array.flat-map.js | 22 + .../core-js/modules/es7.array.flatten.js | 21 + .../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 + node_modules/core-js/modules/es7.global.js | 4 + node_modules/core-js/modules/es7.map.from.js | 2 + node_modules/core-js/modules/es7.map.of.js | 2 + .../core-js/modules/es7.map.to-json.js | 4 + .../core-js/modules/es7.math.clamp.js | 8 + .../core-js/modules/es7.math.deg-per-rad.js | 4 + .../core-js/modules/es7.math.degrees.js | 9 + .../core-js/modules/es7.math.fscale.js | 10 + .../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.rad-per-deg.js | 4 + .../core-js/modules/es7.math.radians.js | 9 + .../core-js/modules/es7.math.scale.js | 4 + .../core-js/modules/es7.math.signbit.js | 7 + .../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 + ...es7.object.get-own-property-descriptors.js | 22 + .../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 + .../core-js/modules/es7.promise.finally.js | 20 + .../core-js/modules/es7.promise.try.js | 12 + .../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 + node_modules/core-js/modules/es7.set.from.js | 2 + node_modules/core-js/modules/es7.set.of.js | 2 + .../core-js/modules/es7.set.to-json.js | 4 + node_modules/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 + .../core-js/modules/es7.weak-map.from.js | 2 + .../core-js/modules/es7.weak-map.of.js | 2 + .../core-js/modules/es7.weak-set.from.js | 2 + .../core-js/modules/es7.weak-set.of.js | 2 + .../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 + node_modules/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-json.js | 19 + .../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 | 19 + .../core-js/modules/web.dom.iterable.js | 58 + node_modules/core-js/modules/web.immediate.js | 6 + node_modules/core-js/modules/web.timers.js | 20 + node_modules/core-js/package.json | 103 + node_modules/core-js/shim.js | 197 + node_modules/core-js/stage/0.js | 10 + node_modules/core-js/stage/1.js | 23 + node_modules/core-js/stage/2.js | 4 + node_modules/core-js/stage/3.js | 4 + node_modules/core-js/stage/4.js | 11 + node_modules/core-js/stage/index.js | 1 + node_modules/core-js/stage/pre.js | 10 + node_modules/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/core-util-is/LICENSE | 19 + node_modules/core-util-is/README.md | 3 + node_modules/core-util-is/float.patch | 604 + node_modules/core-util-is/lib/util.js | 107 + node_modules/core-util-is/package.json | 62 + node_modules/core-util-is/test.js | 68 + node_modules/corser/.npmignore | 2 + node_modules/corser/.travis.yml | 4 + node_modules/corser/LICENSE | 19 + node_modules/corser/README.md | 202 + node_modules/corser/lib/corser.js | 228 + node_modules/corser/package.json | 61 + node_modules/create-ecdh/.npmignore | 1 + node_modules/create-ecdh/.travis.yml | 7 + node_modules/create-ecdh/browser.js | 122 + node_modules/create-ecdh/index.js | 3 + node_modules/create-ecdh/package.json | 61 + node_modules/create-ecdh/readme.md | 4 + node_modules/create-hash/.npmignore | 1 + node_modules/create-hash/.travis.yml | 15 + node_modules/create-hash/browser.js | 52 + node_modules/create-hash/index.js | 1 + node_modules/create-hash/make-hash.js | 30 + node_modules/create-hash/md5.js | 151 + node_modules/create-hash/package.json | 68 + node_modules/create-hash/readme.md | 19 + node_modules/create-hash/test.js | 40 + node_modules/create-hmac/README.md | 20 + node_modules/create-hmac/browser.js | 62 + node_modules/create-hmac/index.js | 1 + node_modules/create-hmac/legacy.js | 46 + node_modules/create-hmac/package.json | 72 + node_modules/cross-spawn/CHANGELOG.md | 6 + node_modules/cross-spawn/LICENSE | 19 + node_modules/cross-spawn/README.md | 85 + node_modules/cross-spawn/index.js | 59 + node_modules/cross-spawn/lib/enoent.js | 73 + node_modules/cross-spawn/lib/parse.js | 113 + .../cross-spawn/lib/util/escapeArgument.js | 30 + .../cross-spawn/lib/util/escapeCommand.js | 12 + .../lib/util/hasEmptyArgumentBug.js | 18 + .../cross-spawn/lib/util/readShebang.js | 37 + .../cross-spawn/lib/util/resolveCommand.js | 31 + node_modules/cross-spawn/package.json | 83 + node_modules/crypto-browserify/.npmignore | 1 + node_modules/crypto-browserify/.travis.yml | 27 + node_modules/crypto-browserify/.zuul.yml | 1 + node_modules/crypto-browserify/LICENSE | 24 + node_modules/crypto-browserify/README.md | 50 + .../crypto-browserify/example/bundle.js | 637 + .../crypto-browserify/example/index.html | 12 + .../crypto-browserify/example/test.js | 4 + node_modules/crypto-browserify/index.js | 92 + node_modules/crypto-browserify/package.json | 76 + node_modules/crypto-browserify/test/aes.js | 49 + .../crypto-browserify/test/create-hash.js | 50 + .../crypto-browserify/test/create-hmac.js | 50 + node_modules/crypto-browserify/test/dh.js | 49 + node_modules/crypto-browserify/test/ecdh.js | 61 + node_modules/crypto-browserify/test/index.js | 18 + .../crypto-browserify/test/node/dh.js | 51 + node_modules/crypto-browserify/test/pbkdf2.js | 21 + .../crypto-browserify/test/public-encrypt.js | 36 + .../crypto-browserify/test/random-bytes.js | 60 + node_modules/crypto-browserify/test/sign.js | 59 + node_modules/d/.lint | 11 + node_modules/d/.npmignore | 4 + node_modules/d/.travis.yml | 15 + node_modules/d/CHANGES | 13 + node_modules/d/LICENSE | 19 + node_modules/d/README.md | 104 + node_modules/d/auto-bind.js | 32 + node_modules/d/index.js | 63 + node_modules/d/lazy.js | 117 + node_modules/d/package.json | 72 + node_modules/d/test/auto-bind.js | 12 + node_modules/d/test/index.js | 182 + node_modules/d/test/lazy.js | 82 + node_modules/date-now/.npmignore | 14 + node_modules/date-now/.testem.json | 14 + node_modules/date-now/.travis.yml | 4 + node_modules/date-now/LICENCE | 19 + node_modules/date-now/README.md | 45 + node_modules/date-now/index.js | 5 + node_modules/date-now/package.json | 94 + node_modules/date-now/seed.js | 16 + node_modules/date-now/test/index.js | 28 + node_modules/date-now/test/static/index.html | 10 + node_modules/debug/.coveralls.yml | 1 + node_modules/debug/.eslintrc | 11 + node_modules/debug/.npmignore | 9 + node_modules/debug/.travis.yml | 14 + node_modules/debug/CHANGELOG.md | 357 + node_modules/debug/LICENSE | 19 + node_modules/debug/Makefile | 50 + node_modules/debug/README.md | 312 + node_modules/debug/component.json | 19 + node_modules/debug/karma.conf.js | 70 + node_modules/debug/node.js | 1 + node_modules/debug/package.json | 89 + node_modules/debug/src/browser.js | 185 + node_modules/debug/src/debug.js | 202 + node_modules/debug/src/index.js | 10 + node_modules/debug/src/node.js | 246 + node_modules/decamelize/index.js | 13 + node_modules/decamelize/license | 21 + node_modules/decamelize/package.json | 71 + node_modules/decamelize/readme.md | 48 + node_modules/des.js/.jscsrc | 46 + node_modules/des.js/.jshintrc | 89 + node_modules/des.js/.npmignore | 2 + node_modules/des.js/README.md | 26 + node_modules/des.js/lib/des.js | 7 + node_modules/des.js/lib/des/cbc.js | 65 + node_modules/des.js/lib/des/cipher.js | 141 + node_modules/des.js/lib/des/des.js | 143 + node_modules/des.js/lib/des/ede.js | 55 + node_modules/des.js/lib/des/utils.js | 256 + node_modules/des.js/package.json | 62 + node_modules/des.js/test/cbc-test.js | 73 + node_modules/des.js/test/des-test.js | 139 + node_modules/des.js/test/ede-test.js | 73 + node_modules/des.js/test/fixtures.js | 5 + node_modules/des.js/test/utils-test.js | 169 + node_modules/detect-indent/index.js | 120 + node_modules/detect-indent/license | 21 + node_modules/detect-indent/package.json | 78 + node_modules/detect-indent/readme.md | 110 + node_modules/diffie-hellman/.npmignore | 1 + node_modules/diffie-hellman/.travis.yml | 10 + node_modules/diffie-hellman/browser.js | 42 + node_modules/diffie-hellman/index.js | 10 + node_modules/diffie-hellman/lib/dh.js | 164 + .../diffie-hellman/lib/generatePrime.js | 105 + node_modules/diffie-hellman/lib/primes.json | 34 + node_modules/diffie-hellman/package.json | 62 + node_modules/diffie-hellman/readme.md | 4 + node_modules/domain-browser/.eslintrc.js | 701 + node_modules/domain-browser/.npmignore | 44 + node_modules/domain-browser/HISTORY.md | 42 + node_modules/domain-browser/LICENSE.md | 23 + node_modules/domain-browser/README.md | 111 + node_modules/domain-browser/index.js | 69 + node_modules/domain-browser/package.json | 149 + node_modules/domain-browser/test.js | 100 + node_modules/ecstatic/.npmignore | 19 + .../0e436f3bc14dc8ccedf3644f11d21bb2.json | 1 + .../1089e711f18d2cef72071d9d94b2113a.json | 1 + .../246c1d9b9690a1b25a37590e214926eb.json | 1 + .../28067239ca9b9a420d75718dc60e9794.json | 1 + .../370f05d87a90d99a9391d2c4707dabe7.json | 1 + .../3d0091927809edba2172020b3e0eb278.json | 1 + .../43ba11797e49f169b6e0ed203795ffc0.json | 1 + .../440e615b5769bc16d3a797b07369937b.json | 1 + .../45d156bbbe05e26013a2478828a2300f.json | 1 + .../47f92d828cfbd2b8e98f91d65290178c.json | 1 + .../49eb33cd8cebe3f4ac8c85d10406aa0d.json | 1 + .../4b420cf944a9102eadb9161a78cbe6d4.json | 1 + .../4d3a90c70f7e04637f342841413f105d.json | 1 + .../4e4208b377ac94a853b58ea95cf76678.json | 1 + .../72781a4abb14bb9fa12ab44adc03ae95.json | 1 + .../7dca6987350b11397f7b183230cd8ed3.json | 1 + .../8194b7c452bb548b092aced3e5cb504d.json | 1 + .../85d3709905e273444b70ec852b4995af.json | 1 + .../86f120f0940c97d5a9b83c119e07fd1b.json | 1 + .../90450770f19a6254f215aa67f3fd17ba.json | 1 + .../90ba340dcd6d2d939145d1d5dd4f00b3.json | 1 + .../95b26ca55299b8f0e6578dba3580cdd8.json | 1 + .../a2f2985a4ea3dffac854649c4653dd80.json | 1 + .../a708dc3afadc5f62acbddbac4ebe3b22.json | 1 + .../a860bba1a65f01c6497ea05b245f3478.json | 1 + .../aa457714b2f466ea5ef63eab9399b3ed.json | 1 + .../ac19822dc89661f902371db3d0a0c5e3.json | 1 + .../b5225977cfe01259785efd49292dac24.json | 1 + .../b82f09ad43968671cbe2e66ae7eec462.json | 1 + .../b99369b1a3b1c739915c627032b30676.json | 1 + .../ba58ee6f0559fcdd43eb68812779a128.json | 1 + .../bc92c2aaf165b06a2777c3c88f434a9d.json | 1 + .../c5599d16a8ee1389aae7c068c591c2a5.json | 1 + .../c5cd7f005408251e64df50ca2012ff6e.json | 1 + .../cc0c6b1e00994792240a528b9bac4eeb.json | 1 + .../d83cb5b33e0221913dd5ce977de3cdc2.json | 1 + .../de480016f80f842ede70e908d8d2914c.json | 1 + .../e4bc2f05dd42972945ce4bbe8df848f6.json | 1 + .../ef3194cd8a43a90bd63564bd70f59d3c.json | 1 + node_modules/ecstatic/.travis.yml | 7 + node_modules/ecstatic/CHANGELOG.md | 111 + node_modules/ecstatic/CONTRIBUTING.md | 86 + node_modules/ecstatic/CONTRIBUTORS.md | 62 + node_modules/ecstatic/LICENSE.txt | 22 + node_modules/ecstatic/README.md | 262 + .../ecstatic/coverage/lcov-report/base.css | 212 + .../ecstatic/coverage/lcov-report/index.html | 106 + .../coverage/lcov-report/lib/ecstatic.js.html | 1223 ++ .../lcov-report/lib/ecstatic/etag.js.html | 86 + .../lcov-report/lib/ecstatic/index.html | 132 + .../lcov-report/lib/ecstatic/opts.js.html | 605 + .../lcov-report/lib/ecstatic/showdir.js.html | 737 + .../lib/ecstatic/status-handlers.js.html | 377 + .../coverage/lcov-report/lib/index.html | 93 + .../coverage/lcov-report/prettify.css | 1 + .../ecstatic/coverage/lcov-report/prettify.js | 1 + .../lcov-report/sort-arrow-sprite.png | Bin 0 -> 209 bytes .../ecstatic/coverage/lcov-report/sorter.js | 158 + node_modules/ecstatic/coverage/lcov.info | 830 + node_modules/ecstatic/example/cli.sh | 4 + node_modules/ecstatic/example/core.js | 10 + node_modules/ecstatic/example/express.js | 12 + .../ecstatic/example/public/beep/index.html | 1 + .../ecstatic/example/public/hello.txt | 1 + .../ecstatic/example/public/subdir/world.txt | 1 + .../ecstatic/example/public/turtle.png | Bin 0 -> 195848 bytes node_modules/ecstatic/example/union.js | 10 + node_modules/ecstatic/lib/ecstatic.js | 423 + .../ecstatic/lib/ecstatic/aliases.json | 34 + .../ecstatic/lib/ecstatic/defaults.json | 17 + node_modules/ecstatic/lib/ecstatic/etag.js | 7 + node_modules/ecstatic/lib/ecstatic/opts.js | 180 + .../ecstatic/lib/ecstatic/show-dir/icons.json | 65 + .../ecstatic/lib/ecstatic/show-dir/index.js | 179 + .../lib/ecstatic/show-dir/perms-to-string.js | 23 + .../lib/ecstatic/show-dir/size-to-string.js | 29 + .../lib/ecstatic/show-dir/sort-files.js | 35 + .../ecstatic/lib/ecstatic/show-dir/styles.js | 20 + .../ecstatic/lib/ecstatic/status-handlers.js | 104 + .../node_modules/minimist/.travis.yml | 8 + .../ecstatic/node_modules/minimist/LICENSE | 18 + .../node_modules/minimist/example/parse.js | 2 + .../ecstatic/node_modules/minimist/index.js | 236 + .../node_modules/minimist/package.json | 73 + .../node_modules/minimist/readme.markdown | 91 + .../node_modules/minimist/test/all_bool.js | 32 + .../node_modules/minimist/test/bool.js | 166 + .../node_modules/minimist/test/dash.js | 31 + .../minimist/test/default_bool.js | 35 + .../node_modules/minimist/test/dotted.js | 22 + .../node_modules/minimist/test/kv_short.js | 16 + .../node_modules/minimist/test/long.js | 31 + .../node_modules/minimist/test/num.js | 36 + .../node_modules/minimist/test/parse.js | 197 + .../minimist/test/parse_modified.js | 9 + .../node_modules/minimist/test/short.js | 67 + .../node_modules/minimist/test/stop_early.js | 15 + .../node_modules/minimist/test/unknown.js | 102 + .../node_modules/minimist/test/whitespace.js | 8 + node_modules/ecstatic/package.json | 74 + node_modules/ecstatic/test.js | 7 + node_modules/ecstatic/tools/build-icons.js | 15 + node_modules/ecstatic/tools/get-icons.sh | 4 + node_modules/elliptic/README.md | 227 + node_modules/elliptic/lib/elliptic.js | 13 + .../elliptic/lib/elliptic/curve/base.js | 375 + .../elliptic/lib/elliptic/curve/edwards.js | 433 + .../elliptic/lib/elliptic/curve/index.js | 8 + .../elliptic/lib/elliptic/curve/mont.js | 180 + .../elliptic/lib/elliptic/curve/short.js | 938 + node_modules/elliptic/lib/elliptic/curves.js | 205 + .../elliptic/lib/elliptic/ec/index.js | 240 + node_modules/elliptic/lib/elliptic/ec/key.js | 119 + .../elliptic/lib/elliptic/ec/signature.js | 135 + .../elliptic/lib/elliptic/eddsa/index.js | 118 + .../elliptic/lib/elliptic/eddsa/key.js | 96 + .../elliptic/lib/elliptic/eddsa/signature.js | 66 + .../lib/elliptic/precomputed/secp256k1.js | 780 + node_modules/elliptic/lib/elliptic/utils.js | 120 + node_modules/elliptic/package.json | 87 + node_modules/emojis-list/CHANGELOG.md | 70 + node_modules/emojis-list/LICENSE.md | 9 + node_modules/emojis-list/README.md | 48 + node_modules/emojis-list/index.js | 2479 +++ node_modules/emojis-list/package.json | 76 + node_modules/enhanced-resolve/README.md | 118 + .../enhanced-resolve/lib/AliasFieldPlugin.js | 51 + .../enhanced-resolve/lib/AliasPlugin.js | 57 + .../enhanced-resolve/lib/AppendPlugin.js | 22 + .../lib/CachedInputFileSystem.js | 271 + .../lib/CloneBasenamePlugin.js | 24 + .../lib/ConcordExtensionsPlugin.js | 37 + .../enhanced-resolve/lib/ConcordMainPlugin.js | 30 + .../lib/ConcordModulesPlugin.js | 44 + .../lib/DescriptionFilePlugin.js | 51 + .../lib/DescriptionFileUtils.js | 93 + .../lib/DirectoryExistsPlugin.js | 30 + .../enhanced-resolve/lib/FileExistsPlugin.js | 30 + .../enhanced-resolve/lib/FileKindPlugin.js | 19 + .../enhanced-resolve/lib/JoinRequestPlugin.js | 21 + .../enhanced-resolve/lib/LogInfoPlugin.js | 25 + .../enhanced-resolve/lib/MainFieldPlugin.js | 48 + .../lib/ModuleAppendPlugin.js | 35 + .../enhanced-resolve/lib/ModuleKindPlugin.js | 26 + .../ModulesInHierachicDirectoriesPlugin.js | 46 + .../lib/ModulesInRootPlugin.js | 22 + .../enhanced-resolve/lib/NextPlugin.js | 16 + .../lib/NodeJsInputFileSystem.js | 29 + .../enhanced-resolve/lib/ParsePlugin.js | 27 + node_modules/enhanced-resolve/lib/Resolver.js | 227 + .../enhanced-resolve/lib/ResolverFactory.js | 273 + .../enhanced-resolve/lib/ResultPlugin.js | 18 + .../enhanced-resolve/lib/SymlinkPlugin.js | 47 + .../lib/SyncAsyncFileSystemDecorator.js | 58 + .../enhanced-resolve/lib/TryNextPlugin.js | 18 + .../enhanced-resolve/lib/UnsafeCachePlugin.js | 43 + .../enhanced-resolve/lib/UseFilePlugin.js | 23 + node_modules/enhanced-resolve/lib/concord.js | 189 + .../lib/createInnerCallback.js | 41 + .../enhanced-resolve/lib/forEachBail.js | 65 + .../enhanced-resolve/lib/getInnerRequest.js | 22 + node_modules/enhanced-resolve/lib/getPaths.js | 33 + .../enhanced-resolve/lib/globToRegExp.js | 188 + node_modules/enhanced-resolve/lib/node.js | 144 + node_modules/enhanced-resolve/package.json | 82 + 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 | 60 + 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 | 133 + node_modules/error-ex/package.json | 86 + node_modules/es5-ext/.lint | 43 + node_modules/es5-ext/.lintignore | 9 + node_modules/es5-ext/.npmignore | 14 + node_modules/es5-ext/CHANGELOG.md | 169 + node_modules/es5-ext/CHANGES | 650 + node_modules/es5-ext/LICENSE | 21 + node_modules/es5-ext/README.md | 993 + node_modules/es5-ext/appveyor.yml | 26 + .../es5-ext/array/#/@@iterator/implement.js | 10 + .../es5-ext/array/#/@@iterator/index.js | 4 + .../array/#/@@iterator/is-implemented.js | 16 + .../es5-ext/array/#/@@iterator/shim.js | 3 + .../es5-ext/array/#/_compare-by-length.js | 9 + node_modules/es5-ext/array/#/binary-search.js | 28 + node_modules/es5-ext/array/#/clear.js | 12 + node_modules/es5-ext/array/#/compact.js | 13 + .../es5-ext/array/#/concat/implement.js | 8 + node_modules/es5-ext/array/#/concat/index.js | 4 + .../es5-ext/array/#/concat/is-implemented.js | 7 + node_modules/es5-ext/array/#/concat/shim.js | 48 + node_modules/es5-ext/array/#/contains.js | 7 + .../es5-ext/array/#/copy-within/implement.js | 9 + .../es5-ext/array/#/copy-within/index.js | 4 + .../array/#/copy-within/is-implemented.js | 7 + .../es5-ext/array/#/copy-within/shim.js | 45 + node_modules/es5-ext/array/#/diff.js | 13 + node_modules/es5-ext/array/#/e-index-of.js | 28 + .../es5-ext/array/#/e-last-index-of.js | 31 + .../es5-ext/array/#/entries/implement.js | 8 + node_modules/es5-ext/array/#/entries/index.js | 4 + .../es5-ext/array/#/entries/is-implemented.js | 15 + node_modules/es5-ext/array/#/entries/shim.js | 6 + node_modules/es5-ext/array/#/exclusion.js | 31 + .../es5-ext/array/#/fill/implement.js | 8 + node_modules/es5-ext/array/#/fill/index.js | 4 + .../es5-ext/array/#/fill/is-implemented.js | 7 + node_modules/es5-ext/array/#/fill/shim.js | 25 + .../es5-ext/array/#/filter/implement.js | 8 + node_modules/es5-ext/array/#/filter/index.js | 4 + .../es5-ext/array/#/filter/is-implemented.js | 11 + node_modules/es5-ext/array/#/filter/shim.js | 23 + .../es5-ext/array/#/find-index/implement.js | 9 + .../es5-ext/array/#/find-index/index.js | 4 + .../array/#/find-index/is-implemented.js | 11 + .../es5-ext/array/#/find-index/shim.js | 26 + .../es5-ext/array/#/find/implement.js | 8 + node_modules/es5-ext/array/#/find/index.js | 4 + .../es5-ext/array/#/find/is-implemented.js | 11 + node_modules/es5-ext/array/#/find/shim.js | 9 + node_modules/es5-ext/array/#/first-index.js | 15 + node_modules/es5-ext/array/#/first.js | 9 + node_modules/es5-ext/array/#/flatten.js | 40 + .../es5-ext/array/#/for-each-right.js | 19 + node_modules/es5-ext/array/#/group.js | 28 + node_modules/es5-ext/array/#/index.js | 41 + node_modules/es5-ext/array/#/indexes-of.js | 12 + node_modules/es5-ext/array/#/intersection.js | 21 + node_modules/es5-ext/array/#/is-copy.js | 21 + node_modules/es5-ext/array/#/is-empty.js | 8 + node_modules/es5-ext/array/#/is-uniq.js | 14 + .../es5-ext/array/#/keys/implement.js | 8 + node_modules/es5-ext/array/#/keys/index.js | 4 + .../es5-ext/array/#/keys/is-implemented.js | 14 + node_modules/es5-ext/array/#/keys/shim.js | 6 + node_modules/es5-ext/array/#/last-index.js | 15 + node_modules/es5-ext/array/#/last.js | 9 + node_modules/es5-ext/array/#/map/implement.js | 8 + node_modules/es5-ext/array/#/map/index.js | 4 + .../es5-ext/array/#/map/is-implemented.js | 8 + node_modules/es5-ext/array/#/map/shim.js | 21 + node_modules/es5-ext/array/#/remove.js | 17 + node_modules/es5-ext/array/#/separate.js | 12 + .../es5-ext/array/#/slice/implement.js | 8 + node_modules/es5-ext/array/#/slice/index.js | 4 + .../es5-ext/array/#/slice/is-implemented.js | 7 + node_modules/es5-ext/array/#/slice/shim.js | 36 + node_modules/es5-ext/array/#/some-right.js | 21 + .../es5-ext/array/#/splice/implement.js | 8 + node_modules/es5-ext/array/#/splice/index.js | 4 + .../es5-ext/array/#/splice/is-implemented.js | 7 + node_modules/es5-ext/array/#/splice/shim.js | 17 + node_modules/es5-ext/array/#/uniq.js | 15 + .../es5-ext/array/#/values/implement.js | 8 + node_modules/es5-ext/array/#/values/index.js | 3 + .../es5-ext/array/#/values/is-implemented.js | 14 + node_modules/es5-ext/array/#/values/shim.js | 6 + node_modules/es5-ext/array/_is-extensible.js | 13 + .../es5-ext/array/_sub-array-dummy-safe.js | 25 + .../es5-ext/array/_sub-array-dummy.js | 20 + node_modules/es5-ext/array/from/implement.js | 8 + node_modules/es5-ext/array/from/index.js | 5 + .../es5-ext/array/from/is-implemented.js | 9 + node_modules/es5-ext/array/from/shim.js | 119 + node_modules/es5-ext/array/generate.js | 18 + node_modules/es5-ext/array/index.js | 11 + node_modules/es5-ext/array/is-plain-array.js | 11 + node_modules/es5-ext/array/of/implement.js | 8 + node_modules/es5-ext/array/of/index.js | 5 + .../es5-ext/array/of/is-implemented.js | 8 + node_modules/es5-ext/array/of/shim.js | 19 + node_modules/es5-ext/array/to-array.js | 9 + node_modules/es5-ext/array/valid-array.js | 8 + node_modules/es5-ext/boolean/index.js | 5 + node_modules/es5-ext/boolean/is-boolean.js | 10 + node_modules/es5-ext/circle.yml | 11 + node_modules/es5-ext/date/#/copy.js | 7 + node_modules/es5-ext/date/#/days-in-month.js | 17 + node_modules/es5-ext/date/#/floor-day.js | 8 + node_modules/es5-ext/date/#/floor-month.js | 8 + node_modules/es5-ext/date/#/floor-year.js | 8 + node_modules/es5-ext/date/#/format.js | 38 + node_modules/es5-ext/date/#/index.js | 10 + node_modules/es5-ext/date/index.js | 7 + node_modules/es5-ext/date/is-date.js | 7 + node_modules/es5-ext/date/valid-date.js | 8 + node_modules/es5-ext/error/#/index.js | 5 + node_modules/es5-ext/error/#/throw.js | 7 + node_modules/es5-ext/error/custom.js | 20 + node_modules/es5-ext/error/index.js | 8 + node_modules/es5-ext/error/is-error.js | 7 + node_modules/es5-ext/error/valid-error.js | 8 + node_modules/es5-ext/function/#/compose.js | 22 + node_modules/es5-ext/function/#/copy.js | 23 + node_modules/es5-ext/function/#/curry.js | 24 + node_modules/es5-ext/function/#/index.js | 12 + node_modules/es5-ext/function/#/lock.js | 14 + node_modules/es5-ext/function/#/not.js | 14 + node_modules/es5-ext/function/#/partial.js | 16 + node_modules/es5-ext/function/#/spread.js | 12 + .../es5-ext/function/#/to-string-tokens.js | 17 + .../es5-ext/function/_define-length.js | 56 + node_modules/es5-ext/function/constant.js | 7 + node_modules/es5-ext/function/identity.js | 5 + node_modules/es5-ext/function/index.js | 15 + node_modules/es5-ext/function/invoke.js | 15 + node_modules/es5-ext/function/is-arguments.js | 12 + node_modules/es5-ext/function/is-function.js | 7 + node_modules/es5-ext/function/noop.js | 4 + node_modules/es5-ext/function/pluck.js | 9 + .../es5-ext/function/valid-function.js | 8 + node_modules/es5-ext/global.js | 5 + node_modules/es5-ext/index.js | 21 + node_modules/es5-ext/iterable/for-each.js | 12 + node_modules/es5-ext/iterable/index.js | 8 + node_modules/es5-ext/iterable/is.js | 11 + .../es5-ext/iterable/validate-object.js | 9 + node_modules/es5-ext/iterable/validate.js | 8 + node_modules/es5-ext/json/index.js | 5 + node_modules/es5-ext/json/safe-stringify.js | 41 + node_modules/es5-ext/math/_pack-ieee754.js | 88 + node_modules/es5-ext/math/_unpack-ieee754.js | 33 + node_modules/es5-ext/math/acosh/implement.js | 8 + node_modules/es5-ext/math/acosh/index.js | 5 + .../es5-ext/math/acosh/is-implemented.js | 7 + node_modules/es5-ext/math/acosh/shim.js | 12 + node_modules/es5-ext/math/asinh/implement.js | 8 + node_modules/es5-ext/math/asinh/index.js | 5 + .../es5-ext/math/asinh/is-implemented.js | 7 + node_modules/es5-ext/math/asinh/shim.js | 15 + node_modules/es5-ext/math/atanh/implement.js | 8 + node_modules/es5-ext/math/atanh/index.js | 5 + .../es5-ext/math/atanh/is-implemented.js | 7 + node_modules/es5-ext/math/atanh/shim.js | 14 + node_modules/es5-ext/math/cbrt/implement.js | 8 + node_modules/es5-ext/math/cbrt/index.js | 5 + .../es5-ext/math/cbrt/is-implemented.js | 7 + node_modules/es5-ext/math/cbrt/shim.js | 12 + node_modules/es5-ext/math/clz32/implement.js | 8 + node_modules/es5-ext/math/clz32/index.js | 5 + .../es5-ext/math/clz32/is-implemented.js | 7 + node_modules/es5-ext/math/clz32/shim.js | 7 + node_modules/es5-ext/math/cosh/implement.js | 8 + node_modules/es5-ext/math/cosh/index.js | 5 + .../es5-ext/math/cosh/is-implemented.js | 7 + node_modules/es5-ext/math/cosh/shim.js | 11 + node_modules/es5-ext/math/expm1/implement.js | 8 + node_modules/es5-ext/math/expm1/index.js | 5 + .../es5-ext/math/expm1/is-implemented.js | 7 + node_modules/es5-ext/math/expm1/shim.js | 16 + node_modules/es5-ext/math/fround/implement.js | 8 + node_modules/es5-ext/math/fround/index.js | 5 + .../es5-ext/math/fround/is-implemented.js | 7 + node_modules/es5-ext/math/fround/shim.js | 35 + node_modules/es5-ext/math/hypot/implement.js | 8 + node_modules/es5-ext/math/hypot/index.js | 5 + .../es5-ext/math/hypot/is-implemented.js | 7 + node_modules/es5-ext/math/hypot/shim.js | 43 + node_modules/es5-ext/math/imul/implement.js | 8 + node_modules/es5-ext/math/imul/index.js | 5 + .../es5-ext/math/imul/is-implemented.js | 7 + node_modules/es5-ext/math/imul/shim.js | 17 + node_modules/es5-ext/math/index.js | 21 + node_modules/es5-ext/math/log10/implement.js | 8 + node_modules/es5-ext/math/log10/index.js | 5 + .../es5-ext/math/log10/is-implemented.js | 7 + node_modules/es5-ext/math/log10/shim.js | 14 + node_modules/es5-ext/math/log1p/implement.js | 8 + node_modules/es5-ext/math/log1p/index.js | 5 + .../es5-ext/math/log1p/is-implemented.js | 7 + node_modules/es5-ext/math/log1p/shim.js | 17 + node_modules/es5-ext/math/log2/implement.js | 8 + node_modules/es5-ext/math/log2/index.js | 5 + .../es5-ext/math/log2/is-implemented.js | 7 + node_modules/es5-ext/math/log2/shim.js | 14 + node_modules/es5-ext/math/sign/implement.js | 8 + node_modules/es5-ext/math/sign/index.js | 5 + .../es5-ext/math/sign/is-implemented.js | 7 + node_modules/es5-ext/math/sign/shim.js | 7 + node_modules/es5-ext/math/sinh/implement.js | 8 + node_modules/es5-ext/math/sinh/index.js | 5 + .../es5-ext/math/sinh/is-implemented.js | 7 + node_modules/es5-ext/math/sinh/shim.js | 18 + node_modules/es5-ext/math/tanh/implement.js | 8 + node_modules/es5-ext/math/tanh/index.js | 5 + .../es5-ext/math/tanh/is-implemented.js | 7 + node_modules/es5-ext/math/tanh/shim.js | 17 + node_modules/es5-ext/math/trunc/implement.js | 8 + node_modules/es5-ext/math/trunc/index.js | 5 + .../es5-ext/math/trunc/is-implemented.js | 7 + node_modules/es5-ext/math/trunc/shim.js | 13 + node_modules/es5-ext/number/#/index.js | 5 + node_modules/es5-ext/number/#/pad.js | 15 + .../es5-ext/number/epsilon/implement.js | 8 + node_modules/es5-ext/number/epsilon/index.js | 3 + .../es5-ext/number/epsilon/is-implemented.js | 5 + node_modules/es5-ext/number/index.js | 17 + .../es5-ext/number/is-finite/implement.js | 8 + .../es5-ext/number/is-finite/index.js | 5 + .../number/is-finite/is-implemented.js | 7 + node_modules/es5-ext/number/is-finite/shim.js | 5 + .../es5-ext/number/is-integer/implement.js | 8 + .../es5-ext/number/is-integer/index.js | 5 + .../number/is-integer/is-implemented.js | 7 + .../es5-ext/number/is-integer/shim.js | 8 + .../es5-ext/number/is-nan/implement.js | 8 + node_modules/es5-ext/number/is-nan/index.js | 5 + .../es5-ext/number/is-nan/is-implemented.js | 7 + node_modules/es5-ext/number/is-nan/shim.js | 6 + node_modules/es5-ext/number/is-natural.js | 7 + node_modules/es5-ext/number/is-number.js | 10 + .../number/is-safe-integer/implement.js | 8 + .../es5-ext/number/is-safe-integer/index.js | 5 + .../number/is-safe-integer/is-implemented.js | 8 + .../es5-ext/number/is-safe-integer/shim.js | 11 + .../number/max-safe-integer/implement.js | 8 + .../es5-ext/number/max-safe-integer/index.js | 3 + .../number/max-safe-integer/is-implemented.js | 5 + .../number/min-safe-integer/implement.js | 8 + .../es5-ext/number/min-safe-integer/index.js | 3 + .../number/min-safe-integer/is-implemented.js | 5 + node_modules/es5-ext/number/to-integer.js | 12 + node_modules/es5-ext/number/to-pos-integer.js | 9 + node_modules/es5-ext/number/to-uint32.js | 6 + node_modules/es5-ext/object/_iterate.js | 30 + .../es5-ext/object/assign/implement.js | 8 + node_modules/es5-ext/object/assign/index.js | 5 + .../es5-ext/object/assign/is-implemented.js | 9 + node_modules/es5-ext/object/assign/shim.js | 23 + node_modules/es5-ext/object/clear.js | 16 + node_modules/es5-ext/object/compact.js | 10 + node_modules/es5-ext/object/compare.js | 45 + node_modules/es5-ext/object/copy-deep.js | 42 + node_modules/es5-ext/object/copy.js | 19 + node_modules/es5-ext/object/count.js | 7 + node_modules/es5-ext/object/create.js | 48 + node_modules/es5-ext/object/ensure-array.js | 9 + .../es5-ext/object/ensure-finite-number.js | 9 + .../object/ensure-natural-number-value.js | 9 + .../es5-ext/object/ensure-natural-number.js | 9 + node_modules/es5-ext/object/ensure-promise.js | 9 + node_modules/es5-ext/object/eq.js | 7 + node_modules/es5-ext/object/every.js | 3 + node_modules/es5-ext/object/filter.js | 14 + node_modules/es5-ext/object/find-key.js | 3 + node_modules/es5-ext/object/find.js | 10 + node_modules/es5-ext/object/first-key.js | 13 + node_modules/es5-ext/object/flatten.js | 17 + node_modules/es5-ext/object/for-each.js | 3 + .../es5-ext/object/get-property-names.js | 17 + node_modules/es5-ext/object/index.js | 59 + node_modules/es5-ext/object/is-array-like.js | 17 + node_modules/es5-ext/object/is-callable.js | 7 + node_modules/es5-ext/object/is-copy-deep.js | 59 + node_modules/es5-ext/object/is-copy.js | 23 + node_modules/es5-ext/object/is-empty.js | 14 + .../es5-ext/object/is-finite-number.js | 7 + .../es5-ext/object/is-number-value.js | 12 + node_modules/es5-ext/object/is-object.js | 9 + .../es5-ext/object/is-plain-object.js | 20 + node_modules/es5-ext/object/is-promise.js | 8 + node_modules/es5-ext/object/is-value.js | 7 + node_modules/es5-ext/object/is.js | 10 + node_modules/es5-ext/object/key-of.js | 17 + node_modules/es5-ext/object/keys/implement.js | 8 + node_modules/es5-ext/object/keys/index.js | 5 + .../es5-ext/object/keys/is-implemented.js | 10 + node_modules/es5-ext/object/keys/shim.js | 9 + node_modules/es5-ext/object/map-keys.js | 18 + node_modules/es5-ext/object/map.js | 14 + .../es5-ext/object/mixin-prototypes.js | 37 + node_modules/es5-ext/object/mixin.js | 31 + .../es5-ext/object/normalize-options.js | 20 + node_modules/es5-ext/object/primitive-set.js | 12 + node_modules/es5-ext/object/safe-traverse.js | 16 + node_modules/es5-ext/object/serialize.js | 41 + .../object/set-prototype-of/implement.js | 8 + .../es5-ext/object/set-prototype-of/index.js | 5 + .../object/set-prototype-of/is-implemented.js | 9 + .../es5-ext/object/set-prototype-of/shim.js | 86 + node_modules/es5-ext/object/some.js | 3 + node_modules/es5-ext/object/to-array.js | 24 + node_modules/es5-ext/object/unserialize.js | 8 + node_modules/es5-ext/object/valid-callable.js | 6 + node_modules/es5-ext/object/valid-object.js | 8 + node_modules/es5-ext/object/valid-value.js | 8 + .../object/validate-array-like-object.js | 9 + .../es5-ext/object/validate-array-like.js | 8 + .../object/validate-stringifiable-value.js | 8 + .../es5-ext/object/validate-stringifiable.js | 12 + node_modules/es5-ext/optional-chaining.js | 12 + node_modules/es5-ext/package.json | 88 + node_modules/es5-ext/reg-exp/#/index.js | 10 + node_modules/es5-ext/reg-exp/#/is-sticky.js | 9 + node_modules/es5-ext/reg-exp/#/is-unicode.js | 9 + .../es5-ext/reg-exp/#/match/implement.js | 8 + node_modules/es5-ext/reg-exp/#/match/index.js | 5 + .../es5-ext/reg-exp/#/match/is-implemented.js | 8 + node_modules/es5-ext/reg-exp/#/match/shim.js | 8 + .../es5-ext/reg-exp/#/replace/implement.js | 8 + .../es5-ext/reg-exp/#/replace/index.js | 5 + .../reg-exp/#/replace/is-implemented.js | 8 + .../es5-ext/reg-exp/#/replace/shim.js | 8 + .../es5-ext/reg-exp/#/search/implement.js | 8 + .../es5-ext/reg-exp/#/search/index.js | 5 + .../reg-exp/#/search/is-implemented.js | 8 + node_modules/es5-ext/reg-exp/#/search/shim.js | 8 + .../es5-ext/reg-exp/#/split/implement.js | 8 + node_modules/es5-ext/reg-exp/#/split/index.js | 5 + .../es5-ext/reg-exp/#/split/is-implemented.js | 8 + node_modules/es5-ext/reg-exp/#/split/shim.js | 8 + .../es5-ext/reg-exp/#/sticky/implement.js | 9 + .../reg-exp/#/sticky/is-implemented.js | 10 + .../es5-ext/reg-exp/#/unicode/implement.js | 9 + .../reg-exp/#/unicode/is-implemented.js | 10 + node_modules/es5-ext/reg-exp/escape.js | 11 + node_modules/es5-ext/reg-exp/index.js | 8 + node_modules/es5-ext/reg-exp/is-reg-exp.js | 7 + node_modules/es5-ext/reg-exp/valid-reg-exp.js | 8 + node_modules/es5-ext/safe-to-string.js | 12 + .../es5-ext/string/#/@@iterator/implement.js | 6 + .../es5-ext/string/#/@@iterator/index.js | 4 + .../string/#/@@iterator/is-implemented.js | 16 + .../es5-ext/string/#/@@iterator/shim.js | 8 + node_modules/es5-ext/string/#/at.js | 35 + .../es5-ext/string/#/camel-to-hyphen.js | 10 + node_modules/es5-ext/string/#/capitalize.js | 8 + .../string/#/case-insensitive-compare.js | 7 + .../string/#/code-point-at/implement.js | 9 + .../es5-ext/string/#/code-point-at/index.js | 5 + .../string/#/code-point-at/is-implemented.js | 8 + .../es5-ext/string/#/code-point-at/shim.js | 26 + .../es5-ext/string/#/contains/implement.js | 9 + .../es5-ext/string/#/contains/index.js | 5 + .../string/#/contains/is-implemented.js | 8 + .../es5-ext/string/#/contains/shim.js | 7 + node_modules/es5-ext/string/#/count.js | 15 + .../es5-ext/string/#/ends-with/implement.js | 9 + .../es5-ext/string/#/ends-with/index.js | 5 + .../string/#/ends-with/is-implemented.js | 8 + .../es5-ext/string/#/ends-with/shim.js | 18 + .../es5-ext/string/#/hyphen-to-camel.js | 10 + node_modules/es5-ext/string/#/indent.js | 12 + node_modules/es5-ext/string/#/index.js | 23 + node_modules/es5-ext/string/#/last.js | 8 + .../es5-ext/string/#/normalize/_data.js | 7203 +++++++ .../es5-ext/string/#/normalize/implement.js | 9 + .../es5-ext/string/#/normalize/index.js | 5 + .../string/#/normalize/is-implemented.js | 8 + .../es5-ext/string/#/normalize/shim.js | 317 + node_modules/es5-ext/string/#/pad.js | 18 + .../es5-ext/string/#/plain-replace-all.js | 16 + .../es5-ext/string/#/plain-replace.js | 10 + .../es5-ext/string/#/repeat/implement.js | 9 + node_modules/es5-ext/string/#/repeat/index.js | 5 + .../es5-ext/string/#/repeat/is-implemented.js | 8 + node_modules/es5-ext/string/#/repeat/shim.js | 24 + .../es5-ext/string/#/starts-with/implement.js | 9 + .../es5-ext/string/#/starts-with/index.js | 5 + .../string/#/starts-with/is-implemented.js | 9 + .../es5-ext/string/#/starts-with/shim.js | 12 + node_modules/es5-ext/string/#/uncapitalize.js | 8 + node_modules/es5-ext/string/format-method.js | 27 + .../string/from-code-point/implement.js | 8 + .../es5-ext/string/from-code-point/index.js | 5 + .../string/from-code-point/is-implemented.js | 7 + .../es5-ext/string/from-code-point/shim.js | 37 + node_modules/es5-ext/string/index.js | 10 + node_modules/es5-ext/string/is-string.js | 13 + node_modules/es5-ext/string/random-uniq.js | 13 + node_modules/es5-ext/string/raw/implement.js | 8 + node_modules/es5-ext/string/raw/index.js | 5 + .../es5-ext/string/raw/is-implemented.js | 9 + node_modules/es5-ext/string/raw/shim.js | 14 + node_modules/es5-ext/test/.eslintrc.json | 13 + node_modules/es5-ext/test/__tad.js | 3 + .../test/array/#/@@iterator/implement.js | 7 + .../es5-ext/test/array/#/@@iterator/index.js | 3 + .../test/array/#/@@iterator/is-implemented.js | 5 + .../es5-ext/test/array/#/@@iterator/shim.js | 9 + .../test/array/#/_compare-by-length.js | 7 + .../es5-ext/test/array/#/binary-search.js | 17 + node_modules/es5-ext/test/array/#/clear.js | 7 + node_modules/es5-ext/test/array/#/compact.js | 17 + .../es5-ext/test/array/#/concat/implement.js | 7 + .../es5-ext/test/array/#/concat/index.js | 3 + .../test/array/#/concat/is-implemented.js | 5 + .../es5-ext/test/array/#/concat/shim.js | 26 + node_modules/es5-ext/test/array/#/contains.js | 21 + .../test/array/#/copy-within/implement.js | 7 + .../es5-ext/test/array/#/copy-within/index.js | 3 + .../array/#/copy-within/is-implemented.js | 5 + .../es5-ext/test/array/#/copy-within/shim.js | 29 + node_modules/es5-ext/test/array/#/diff.js | 17 + .../es5-ext/test/array/#/e-index-of.js | 13 + .../es5-ext/test/array/#/e-last-index-of.js | 12 + .../es5-ext/test/array/#/entries/implement.js | 7 + .../es5-ext/test/array/#/entries/index.js | 3 + .../test/array/#/entries/is-implemented.js | 5 + .../es5-ext/test/array/#/entries/shim.js | 9 + .../es5-ext/test/array/#/exclusion.js | 15 + .../es5-ext/test/array/#/fill/implement.js | 7 + .../es5-ext/test/array/#/fill/index.js | 3 + .../test/array/#/fill/is-implemented.js | 5 + .../es5-ext/test/array/#/fill/shim.js | 18 + .../es5-ext/test/array/#/filter/implement.js | 7 + .../es5-ext/test/array/#/filter/index.js | 3 + .../test/array/#/filter/is-implemented.js | 5 + .../es5-ext/test/array/#/filter/shim.js | 17 + .../test/array/#/find-index/implement.js | 7 + .../es5-ext/test/array/#/find-index/index.js | 3 + .../test/array/#/find-index/is-implemented.js | 5 + .../es5-ext/test/array/#/find-index/shim.js | 17 + .../es5-ext/test/array/#/find/implement.js | 7 + .../es5-ext/test/array/#/find/index.js | 3 + .../test/array/#/find/is-implemented.js | 5 + .../es5-ext/test/array/#/find/shim.js | 17 + .../es5-ext/test/array/#/first-index.js | 17 + node_modules/es5-ext/test/array/#/first.js | 13 + node_modules/es5-ext/test/array/#/flatten.js | 14 + .../es5-ext/test/array/#/for-each-right.js | 47 + node_modules/es5-ext/test/array/#/group.js | 24 + .../es5-ext/test/array/#/indexes-of.js | 14 + .../es5-ext/test/array/#/intersection.js | 24 + node_modules/es5-ext/test/array/#/is-copy.js | 13 + node_modules/es5-ext/test/array/#/is-empty.js | 8 + node_modules/es5-ext/test/array/#/is-uniq.js | 11 + .../es5-ext/test/array/#/keys/implement.js | 7 + .../es5-ext/test/array/#/keys/index.js | 3 + .../test/array/#/keys/is-implemented.js | 5 + .../es5-ext/test/array/#/keys/shim.js | 9 + .../es5-ext/test/array/#/last-index.js | 17 + node_modules/es5-ext/test/array/#/last.js | 15 + .../es5-ext/test/array/#/map/implement.js | 7 + .../es5-ext/test/array/#/map/index.js | 3 + .../test/array/#/map/is-implemented.js | 5 + node_modules/es5-ext/test/array/#/map/shim.js | 19 + node_modules/es5-ext/test/array/#/remove.js | 14 + node_modules/es5-ext/test/array/#/separate.js | 15 + .../es5-ext/test/array/#/slice/implement.js | 7 + .../es5-ext/test/array/#/slice/index.js | 3 + .../test/array/#/slice/is-implemented.js | 5 + .../es5-ext/test/array/#/slice/shim.js | 17 + .../es5-ext/test/array/#/some-right.js | 62 + .../es5-ext/test/array/#/splice/implement.js | 7 + .../es5-ext/test/array/#/splice/index.js | 3 + .../test/array/#/splice/is-implemented.js | 5 + .../es5-ext/test/array/#/splice/shim.js | 19 + node_modules/es5-ext/test/array/#/uniq.js | 14 + .../es5-ext/test/array/#/values/implement.js | 7 + .../es5-ext/test/array/#/values/index.js | 3 + .../test/array/#/values/is-implemented.js | 5 + .../es5-ext/test/array/#/values/shim.js | 9 + node_modules/es5-ext/test/array/__scopes.js | 11 + .../es5-ext/test/array/_is-extensible.js | 5 + .../test/array/_sub-array-dummy-safe.js | 7 + .../es5-ext/test/array/_sub-array-dummy.js | 7 + .../es5-ext/test/array/from/implement.js | 7 + node_modules/es5-ext/test/array/from/index.js | 3 + .../es5-ext/test/array/from/is-implemented.js | 5 + node_modules/es5-ext/test/array/from/shim.js | 138 + node_modules/es5-ext/test/array/generate.js | 10 + .../es5-ext/test/array/is-plain-array.js | 18 + .../es5-ext/test/array/of/implement.js | 7 + node_modules/es5-ext/test/array/of/index.js | 3 + .../es5-ext/test/array/of/is-implemented.js | 5 + node_modules/es5-ext/test/array/of/shim.js | 89 + node_modules/es5-ext/test/array/to-array.js | 17 + .../es5-ext/test/array/valid-array.js | 30 + .../es5-ext/test/boolean/is-boolean.js | 12 + node_modules/es5-ext/test/date/#/copy.js | 10 + .../es5-ext/test/date/#/days-in-month.js | 17 + node_modules/es5-ext/test/date/#/floor-day.js | 6 + .../es5-ext/test/date/#/floor-month.js | 6 + .../es5-ext/test/date/#/floor-year.js | 6 + node_modules/es5-ext/test/date/#/format.js | 6 + node_modules/es5-ext/test/date/is-date.js | 10 + node_modules/es5-ext/test/date/valid-date.js | 14 + node_modules/es5-ext/test/error/#/throw.js | 10 + node_modules/es5-ext/test/error/custom.js | 12 + node_modules/es5-ext/test/error/is-error.js | 18 + .../es5-ext/test/error/valid-error.js | 9 + .../es5-ext/test/function/#/compose.js | 15 + node_modules/es5-ext/test/function/#/copy.js | 22 + node_modules/es5-ext/test/function/#/curry.js | 20 + node_modules/es5-ext/test/function/#/lock.js | 7 + node_modules/es5-ext/test/function/#/not.js | 11 + .../es5-ext/test/function/#/partial.js | 11 + .../es5-ext/test/function/#/spread.js | 10 + .../test/function/#/to-string-tokens.js | 33 + .../es5-ext/test/function/_define-length.js | 14 + .../es5-ext/test/function/constant.js | 7 + .../es5-ext/test/function/identity.js | 7 + node_modules/es5-ext/test/function/invoke.js | 9 + .../es5-ext/test/function/is-arguments.js | 13 + .../es5-ext/test/function/is-function.js | 8 + node_modules/es5-ext/test/function/noop.js | 5 + node_modules/es5-ext/test/function/pluck.js | 7 + .../es5-ext/test/function/valid-function.js | 22 + node_modules/es5-ext/test/global.js | 6 + .../es5-ext/test/iterable/for-each.js | 42 + node_modules/es5-ext/test/iterable/is.js | 22 + .../es5-ext/test/iterable/validate-object.js | 34 + .../es5-ext/test/iterable/validate.js | 32 + .../es5-ext/test/json/safe-stringify.js | 26 + .../es5-ext/test/math/_pack-ieee754.js | 5 + .../es5-ext/test/math/_unpack-ieee754.js | 5 + .../es5-ext/test/math/acosh/implement.js | 7 + node_modules/es5-ext/test/math/acosh/index.js | 3 + .../es5-ext/test/math/acosh/is-implemented.js | 5 + node_modules/es5-ext/test/math/acosh/shim.js | 11 + .../es5-ext/test/math/asinh/implement.js | 7 + node_modules/es5-ext/test/math/asinh/index.js | 3 + .../es5-ext/test/math/asinh/is-implemented.js | 5 + node_modules/es5-ext/test/math/asinh/shim.js | 10 + .../es5-ext/test/math/atanh/implement.js | 7 + node_modules/es5-ext/test/math/atanh/index.js | 3 + .../es5-ext/test/math/atanh/is-implemented.js | 5 + node_modules/es5-ext/test/math/atanh/shim.js | 11 + .../es5-ext/test/math/cbrt/implement.js | 7 + node_modules/es5-ext/test/math/cbrt/index.js | 3 + .../es5-ext/test/math/cbrt/is-implemented.js | 5 + node_modules/es5-ext/test/math/cbrt/shim.js | 11 + .../es5-ext/test/math/clz32/implement.js | 7 + node_modules/es5-ext/test/math/clz32/index.js | 3 + .../es5-ext/test/math/clz32/is-implemented.js | 5 + node_modules/es5-ext/test/math/clz32/shim.js | 12 + .../es5-ext/test/math/cosh/implement.js | 7 + node_modules/es5-ext/test/math/cosh/index.js | 3 + .../es5-ext/test/math/cosh/is-implemented.js | 5 + node_modules/es5-ext/test/math/cosh/shim.js | 13 + .../es5-ext/test/math/expm1/implement.js | 7 + node_modules/es5-ext/test/math/expm1/index.js | 3 + .../es5-ext/test/math/expm1/is-implemented.js | 5 + node_modules/es5-ext/test/math/expm1/shim.js | 9 + .../es5-ext/test/math/fround/implement.js | 7 + .../es5-ext/test/math/fround/index.js | 3 + .../test/math/fround/is-implemented.js | 5 + node_modules/es5-ext/test/math/fround/shim.js | 9 + .../es5-ext/test/math/hypot/implement.js | 7 + node_modules/es5-ext/test/math/hypot/index.js | 3 + .../es5-ext/test/math/hypot/is-implemented.js | 5 + node_modules/es5-ext/test/math/hypot/shim.js | 11 + .../es5-ext/test/math/imul/implement.js | 7 + node_modules/es5-ext/test/math/imul/index.js | 3 + .../es5-ext/test/math/imul/is-implemented.js | 5 + node_modules/es5-ext/test/math/imul/shim.js | 9 + .../es5-ext/test/math/log10/implement.js | 7 + node_modules/es5-ext/test/math/log10/index.js | 3 + .../es5-ext/test/math/log10/is-implemented.js | 5 + node_modules/es5-ext/test/math/log10/shim.js | 10 + .../es5-ext/test/math/log1p/implement.js | 7 + node_modules/es5-ext/test/math/log1p/index.js | 3 + .../es5-ext/test/math/log1p/is-implemented.js | 5 + node_modules/es5-ext/test/math/log1p/shim.js | 10 + .../es5-ext/test/math/log2/implement.js | 7 + node_modules/es5-ext/test/math/log2/index.js | 3 + .../es5-ext/test/math/log2/is-implemented.js | 5 + node_modules/es5-ext/test/math/log2/shim.js | 10 + .../es5-ext/test/math/sign/implement.js | 7 + node_modules/es5-ext/test/math/sign/index.js | 3 + .../es5-ext/test/math/sign/is-implemented.js | 5 + node_modules/es5-ext/test/math/sign/shim.js | 11 + .../es5-ext/test/math/sinh/implement.js | 7 + node_modules/es5-ext/test/math/sinh/index.js | 3 + .../es5-ext/test/math/sinh/is-implemented.js | 5 + node_modules/es5-ext/test/math/sinh/shim.js | 13 + .../es5-ext/test/math/tanh/implement.js | 7 + node_modules/es5-ext/test/math/tanh/index.js | 3 + .../es5-ext/test/math/tanh/is-implemented.js | 5 + node_modules/es5-ext/test/math/tanh/shim.js | 11 + .../es5-ext/test/math/trunc/implement.js | 7 + node_modules/es5-ext/test/math/trunc/index.js | 3 + .../es5-ext/test/math/trunc/is-implemented.js | 5 + node_modules/es5-ext/test/math/trunc/shim.js | 16 + node_modules/es5-ext/test/number/#/pad.js | 7 + .../es5-ext/test/number/epsilon/implement.js | 7 + .../es5-ext/test/number/epsilon/index.js | 5 + .../test/number/epsilon/is-implemented.js | 5 + .../test/number/is-finite/implement.js | 7 + .../es5-ext/test/number/is-finite/index.js | 3 + .../test/number/is-finite/is-implemented.js | 5 + .../es5-ext/test/number/is-finite/shim.js | 8 + .../test/number/is-integer/implement.js | 7 + .../es5-ext/test/number/is-integer/index.js | 3 + .../test/number/is-integer/is-implemented.js | 5 + .../es5-ext/test/number/is-integer/shim.js | 9 + .../es5-ext/test/number/is-nan/implement.js | 7 + .../es5-ext/test/number/is-nan/index.js | 3 + .../test/number/is-nan/is-implemented.js | 5 + .../es5-ext/test/number/is-nan/shim.js | 7 + .../es5-ext/test/number/is-natural.js | 10 + node_modules/es5-ext/test/number/is-number.js | 13 + .../test/number/is-safe-integer/implement.js | 7 + .../test/number/is-safe-integer/index.js | 3 + .../number/is-safe-integer/is-implemented.js | 5 + .../test/number/is-safe-integer/shim.js | 11 + .../test/number/max-safe-integer/implement.js | 7 + .../test/number/max-safe-integer/index.js | 5 + .../number/max-safe-integer/is-implemented.js | 5 + .../test/number/min-safe-integer/implement.js | 7 + .../test/number/min-safe-integer/index.js | 5 + .../number/min-safe-integer/is-implemented.js | 5 + .../es5-ext/test/number/to-integer.js | 10 + .../es5-ext/test/number/to-pos-integer.js | 10 + node_modules/es5-ext/test/number/to-uint32.js | 8 + node_modules/es5-ext/test/object/_iterate.js | 30 + .../es5-ext/test/object/assign/implement.js | 7 + .../es5-ext/test/object/assign/index.js | 3 + .../test/object/assign/is-implemented.js | 5 + .../es5-ext/test/object/assign/shim.js | 11 + node_modules/es5-ext/test/object/clear.js | 13 + node_modules/es5-ext/test/object/compact.js | 20 + node_modules/es5-ext/test/object/compare.js | 13 + node_modules/es5-ext/test/object/copy-deep.js | 31 + node_modules/es5-ext/test/object/copy.js | 30 + node_modules/es5-ext/test/object/count.js | 11 + node_modules/es5-ext/test/object/create.js | 22 + .../es5-ext/test/object/ensure-array.js | 55 + .../test/object/ensure-finite-number.js | 54 + .../object/ensure-natural-number-value.js | 24 + .../test/object/ensure-natural-number.js | 22 + .../es5-ext/test/object/ensure-promise.js | 32 + node_modules/es5-ext/test/object/eq.js | 12 + node_modules/es5-ext/test/object/every.js | 21 + node_modules/es5-ext/test/object/filter.js | 8 + node_modules/es5-ext/test/object/find-key.js | 23 + node_modules/es5-ext/test/object/find.js | 23 + node_modules/es5-ext/test/object/first-key.js | 13 + node_modules/es5-ext/test/object/flatten.js | 6 + node_modules/es5-ext/test/object/for-each.js | 10 + .../es5-ext/test/object/get-property-names.js | 18 + .../es5-ext/test/object/is-array-like.js | 16 + .../es5-ext/test/object/is-callable.js | 8 + .../es5-ext/test/object/is-copy-deep.js | 46 + node_modules/es5-ext/test/object/is-copy.js | 18 + node_modules/es5-ext/test/object/is-empty.js | 6 + .../es5-ext/test/object/is-finite-number.js | 18 + .../es5-ext/test/object/is-number-value.js | 18 + node_modules/es5-ext/test/object/is-object.js | 13 + .../es5-ext/test/object/is-plain-object.js | 18 + .../es5-ext/test/object/is-promise.js | 17 + node_modules/es5-ext/test/object/is-value.js | 14 + node_modules/es5-ext/test/object/is.js | 12 + node_modules/es5-ext/test/object/key-of.js | 12 + .../es5-ext/test/object/keys/implement.js | 7 + .../es5-ext/test/object/keys/index.js | 3 + .../test/object/keys/is-implemented.js | 5 + node_modules/es5-ext/test/object/keys/shim.js | 12 + node_modules/es5-ext/test/object/map-keys.js | 7 + node_modules/es5-ext/test/object/map.js | 9 + .../es5-ext/test/object/mixin-prototypes.js | 73 + node_modules/es5-ext/test/object/mixin.js | 75 + .../es5-ext/test/object/normalize-options.js | 46 + .../es5-ext/test/object/primitive-set.js | 15 + .../es5-ext/test/object/safe-traverse.js | 15 + node_modules/es5-ext/test/object/serialize.js | 45 + .../test/object/set-prototype-of/implement.js | 8 + .../test/object/set-prototype-of/index.js | 27 + .../object/set-prototype-of/is-implemented.js | 5 + .../test/object/set-prototype-of/shim.js | 27 + node_modules/es5-ext/test/object/some.js | 23 + node_modules/es5-ext/test/object/to-array.js | 15 + .../es5-ext/test/object/unserialize.js | 41 + .../es5-ext/test/object/valid-callable.js | 9 + .../es5-ext/test/object/valid-object.js | 25 + .../es5-ext/test/object/valid-value.js | 19 + .../test/object/validate-array-like-object.js | 29 + .../test/object/validate-array-like.js | 27 + .../object/validate-stringifiable-value.js | 22 + .../test/object/validate-stringifiable.js | 18 + .../es5-ext/test/optional-chaining.js | 17 + node_modules/es5-ext/test/reg-exp/#/index.js | 15 + .../es5-ext/test/reg-exp/#/is-sticky.js | 13 + .../es5-ext/test/reg-exp/#/is-unicode.js | 13 + .../es5-ext/test/reg-exp/#/match/implement.js | 7 + .../es5-ext/test/reg-exp/#/match/index.js | 3 + .../test/reg-exp/#/match/is-implemented.js | 5 + .../es5-ext/test/reg-exp/#/match/shim.js | 8 + .../test/reg-exp/#/replace/implement.js | 7 + .../es5-ext/test/reg-exp/#/replace/index.js | 3 + .../test/reg-exp/#/replace/is-implemented.js | 5 + .../es5-ext/test/reg-exp/#/replace/shim.js | 5 + .../test/reg-exp/#/search/implement.js | 7 + .../es5-ext/test/reg-exp/#/search/index.js | 3 + .../test/reg-exp/#/search/is-implemented.js | 5 + .../es5-ext/test/reg-exp/#/search/shim.js | 5 + .../es5-ext/test/reg-exp/#/split/implement.js | 7 + .../es5-ext/test/reg-exp/#/split/index.js | 3 + .../test/reg-exp/#/split/is-implemented.js | 5 + .../es5-ext/test/reg-exp/#/split/shim.js | 5 + .../test/reg-exp/#/sticky/implement.js | 7 + .../test/reg-exp/#/sticky/is-implemented.js | 5 + .../test/reg-exp/#/unicode/implement.js | 7 + .../test/reg-exp/#/unicode/is-implemented.js | 5 + node_modules/es5-ext/test/reg-exp/escape.js | 6 + .../es5-ext/test/reg-exp/is-reg-exp.js | 12 + .../es5-ext/test/reg-exp/valid-reg-exp.js | 19 + node_modules/es5-ext/test/safe-to-string.js | 19 + .../test/string/#/@@iterator/implement.js | 7 + .../es5-ext/test/string/#/@@iterator/index.js | 3 + .../string/#/@@iterator/is-implemented.js | 5 + .../es5-ext/test/string/#/@@iterator/shim.js | 9 + node_modules/es5-ext/test/string/#/at.js | 132 + .../es5-ext/test/string/#/camel-to-hyphen.js | 7 + .../es5-ext/test/string/#/capitalize.js | 9 + .../test/string/#/case-insensitive-compare.js | 7 + .../test/string/#/code-point-at/implement.js | 8 + .../test/string/#/code-point-at/index.js | 3 + .../string/#/code-point-at/is-implemented.js | 5 + .../test/string/#/code-point-at/shim.js | 119 + .../test/string/#/contains/implement.js | 7 + .../es5-ext/test/string/#/contains/index.js | 3 + .../test/string/#/contains/is-implemented.js | 5 + .../es5-ext/test/string/#/contains/shim.js | 14 + node_modules/es5-ext/test/string/#/count.js | 14 + .../test/string/#/ends-with/implement.js | 7 + .../es5-ext/test/string/#/ends-with/index.js | 3 + .../test/string/#/ends-with/is-implemented.js | 5 + .../es5-ext/test/string/#/ends-with/shim.js | 16 + .../es5-ext/test/string/#/hyphen-to-camel.js | 7 + node_modules/es5-ext/test/string/#/indent.js | 9 + node_modules/es5-ext/test/string/#/last.js | 6 + .../es5-ext/test/string/#/normalize/_data.js | 5 + .../test/string/#/normalize/implement.js | 7 + .../es5-ext/test/string/#/normalize/index.js | 3 + .../test/string/#/normalize/is-implemented.js | 5 + .../es5-ext/test/string/#/normalize/shim.js | 13 + node_modules/es5-ext/test/string/#/pad.js | 24 + .../test/string/#/plain-replace-all.js | 11 + .../es5-ext/test/string/#/plain-replace.js | 7 + .../es5-ext/test/string/#/repeat/implement.js | 7 + .../es5-ext/test/string/#/repeat/index.js | 3 + .../test/string/#/repeat/is-implemented.js | 5 + .../es5-ext/test/string/#/repeat/shim.js | 12 + .../test/string/#/starts-with/implement.js | 7 + .../test/string/#/starts-with/index.js | 3 + .../string/#/starts-with/is-implemented.js | 5 + .../es5-ext/test/string/#/starts-with/shim.js | 14 + .../es5-ext/test/string/#/uncapitalize.js | 10 + .../es5-ext/test/string/format-method.js | 12 + .../test/string/from-code-point/implement.js | 7 + .../test/string/from-code-point/index.js | 3 + .../string/from-code-point/is-implemented.js | 5 + .../test/string/from-code-point/shim.js | 73 + node_modules/es5-ext/test/string/is-string.js | 11 + .../es5-ext/test/string/random-uniq.js | 14 + .../es5-ext/test/string/raw/implement.js | 7 + node_modules/es5-ext/test/string/raw/index.js | 3 + .../es5-ext/test/string/raw/is-implemented.js | 5 + node_modules/es5-ext/test/string/raw/shim.js | 15 + .../test/to-short-string-representation.js | 23 + .../es5-ext/to-short-string-representation.js | 16 + node_modules/es6-iterator/#/chain.js | 40 + node_modules/es6-iterator/.lint | 11 + node_modules/es6-iterator/.npmignore | 4 + node_modules/es6-iterator/.travis.yml | 13 + node_modules/es6-iterator/CHANGES | 38 + node_modules/es6-iterator/LICENSE | 21 + node_modules/es6-iterator/README.md | 148 + node_modules/es6-iterator/array.js | 30 + node_modules/es6-iterator/for-of.js | 46 + node_modules/es6-iterator/get.js | 15 + node_modules/es6-iterator/index.js | 90 + node_modules/es6-iterator/is-iterable.js | 15 + node_modules/es6-iterator/package.json | 71 + node_modules/es6-iterator/string.js | 37 + node_modules/es6-iterator/test/#/chain.js | 23 + node_modules/es6-iterator/test/array.js | 67 + node_modules/es6-iterator/test/for-of.js | 40 + node_modules/es6-iterator/test/get.js | 17 + node_modules/es6-iterator/test/index.js | 99 + node_modules/es6-iterator/test/is-iterable.js | 19 + node_modules/es6-iterator/test/string.js | 23 + .../es6-iterator/test/valid-iterable.js | 18 + node_modules/es6-iterator/valid-iterable.js | 8 + node_modules/es6-map/.lint | 13 + node_modules/es6-map/.npmignore | 4 + node_modules/es6-map/.travis.yml | 13 + node_modules/es6-map/CHANGES | 33 + node_modules/es6-map/LICENSE | 19 + node_modules/es6-map/README.md | 79 + node_modules/es6-map/implement.js | 7 + node_modules/es6-map/index.js | 3 + node_modules/es6-map/is-implemented.js | 32 + node_modules/es6-map/is-map.js | 12 + node_modules/es6-map/is-native-implemented.js | 9 + node_modules/es6-map/lib/iterator-kinds.js | 4 + node_modules/es6-map/lib/iterator.js | 38 + .../es6-map/lib/primitive-iterator.js | 57 + node_modules/es6-map/package.json | 74 + node_modules/es6-map/polyfill.js | 104 + node_modules/es6-map/primitive/index.js | 117 + node_modules/es6-map/test/implement.js | 3 + node_modules/es6-map/test/index.js | 5 + node_modules/es6-map/test/is-implemented.js | 14 + node_modules/es6-map/test/is-map.js | 16 + .../es6-map/test/is-native-implemented.js | 3 + .../es6-map/test/lib/iterator-kinds.js | 5 + node_modules/es6-map/test/lib/iterator.js | 13 + .../es6-map/test/lib/primitive-iterator.js | 130 + node_modules/es6-map/test/polyfill.js | 60 + node_modules/es6-map/test/primitive/index.js | 59 + node_modules/es6-map/test/valid-map.js | 19 + node_modules/es6-map/valid-map.js | 8 + node_modules/es6-set/.lint | 13 + node_modules/es6-set/.npmignore | 4 + node_modules/es6-set/.travis.yml | 13 + node_modules/es6-set/CHANGES | 34 + node_modules/es6-set/LICENSE | 19 + node_modules/es6-set/README.md | 74 + node_modules/es6-set/ext/copy.js | 5 + node_modules/es6-set/ext/every.js | 18 + node_modules/es6-set/ext/filter.js | 18 + node_modules/es6-set/ext/get-first.js | 5 + node_modules/es6-set/ext/get-last.js | 11 + node_modules/es6-set/ext/some.js | 18 + node_modules/es6-set/implement.js | 7 + node_modules/es6-set/index.js | 3 + node_modules/es6-set/is-implemented.js | 24 + node_modules/es6-set/is-native-implemented.js | 9 + node_modules/es6-set/is-set.js | 12 + node_modules/es6-set/lib/iterator.js | 30 + .../es6-set/lib/primitive-iterator.js | 53 + node_modules/es6-set/package.json | 69 + node_modules/es6-set/polyfill.js | 80 + node_modules/es6-set/primitive/index.js | 87 + node_modules/es6-set/test/ext/copy.js | 12 + node_modules/es6-set/test/ext/every.js | 9 + node_modules/es6-set/test/ext/filter.js | 12 + node_modules/es6-set/test/ext/get-first.js | 12 + node_modules/es6-set/test/ext/get-last.js | 12 + node_modules/es6-set/test/ext/some.js | 10 + node_modules/es6-set/test/implement.js | 3 + node_modules/es6-set/test/index.js | 3 + node_modules/es6-set/test/is-implemented.js | 14 + .../es6-set/test/is-native-implemented.js | 3 + node_modules/es6-set/test/is-set.js | 16 + node_modules/es6-set/test/lib/iterator.js | 13 + .../es6-set/test/lib/primitive-iterator.js | 113 + node_modules/es6-set/test/polyfill.js | 50 + node_modules/es6-set/test/primitive/index.js | 50 + node_modules/es6-set/test/valid-set.js | 19 + node_modules/es6-set/valid-set.js | 8 + node_modules/es6-symbol/.lint | 15 + node_modules/es6-symbol/.npmignore | 4 + node_modules/es6-symbol/.travis.yml | 11 + node_modules/es6-symbol/CHANGES | 57 + node_modules/es6-symbol/LICENSE | 19 + node_modules/es6-symbol/README.md | 71 + node_modules/es6-symbol/implement.js | 7 + node_modules/es6-symbol/index.js | 3 + node_modules/es6-symbol/is-implemented.js | 17 + .../es6-symbol/is-native-implemented.js | 5 + node_modules/es6-symbol/is-symbol.js | 9 + node_modules/es6-symbol/package.json | 72 + node_modules/es6-symbol/polyfill.js | 118 + node_modules/es6-symbol/test/implement.js | 3 + node_modules/es6-symbol/test/index.js | 12 + .../es6-symbol/test/is-implemented.js | 14 + .../es6-symbol/test/is-native-implemented.js | 3 + node_modules/es6-symbol/test/is-symbol.js | 16 + node_modules/es6-symbol/test/polyfill.js | 29 + .../es6-symbol/test/validate-symbol.js | 19 + node_modules/es6-symbol/validate-symbol.js | 8 + node_modules/es6-weak-map/.lint | 13 + node_modules/es6-weak-map/.npmignore | 4 + node_modules/es6-weak-map/.travis.yml | 13 + node_modules/es6-weak-map/CHANGES | 45 + node_modules/es6-weak-map/LICENSE | 19 + node_modules/es6-weak-map/README.md | 63 + node_modules/es6-weak-map/implement.js | 7 + node_modules/es6-weak-map/index.js | 3 + node_modules/es6-weak-map/is-implemented.js | 20 + .../es6-weak-map/is-native-implemented.js | 8 + node_modules/es6-weak-map/is-weak-map.js | 13 + node_modules/es6-weak-map/package.json | 71 + node_modules/es6-weak-map/polyfill.js | 66 + node_modules/es6-weak-map/test/implement.js | 3 + node_modules/es6-weak-map/test/index.js | 6 + .../es6-weak-map/test/is-implemented.js | 14 + .../test/is-native-implemented.js | 3 + node_modules/es6-weak-map/test/is-weak-map.js | 16 + node_modules/es6-weak-map/test/polyfill.js | 23 + .../es6-weak-map/test/valid-weak-map.js | 19 + node_modules/es6-weak-map/valid-weak-map.js | 8 + node_modules/escape-string-regexp/index.js | 11 + node_modules/escape-string-regexp/license | 21 + .../escape-string-regexp/package.json | 81 + node_modules/escape-string-regexp/readme.md | 27 + node_modules/escope/.babelrc | 3 + node_modules/escope/.jshintrc | 20 + node_modules/escope/CONTRIBUTING.md | 5 + node_modules/escope/LICENSE.BSD | 19 + node_modules/escope/README.md | 79 + node_modules/escope/bower.json | 13 + node_modules/escope/gulpfile.js | 153 + node_modules/escope/lib/definition.js | 106 + node_modules/escope/lib/index.js | 177 + node_modules/escope/lib/pattern-visitor.js | 176 + node_modules/escope/lib/reference.js | 193 + node_modules/escope/lib/referencer.js | 639 + node_modules/escope/lib/scope-manager.js | 297 + node_modules/escope/lib/scope.js | 764 + node_modules/escope/lib/variable.js | 94 + node_modules/escope/package.json | 85 + node_modules/escope/powered-test/arguments.js | 34 + .../escope/powered-test/catch-scope.js | 39 + .../es6-arrow-function-expression.js | 57 + .../escope/powered-test/es6-block-scope.js | 136 + node_modules/escope/powered-test/es6-catch.js | 39 + node_modules/escope/powered-test/es6-class.js | 155 + .../es6-destructuring-assignments.js | 504 + .../escope/powered-test/es6-export.js | 202 + .../escope/powered-test/es6-import.js | 103 + .../powered-test/es6-iteration-scope.js | 167 + .../escope/powered-test/es6-object.js | 57 + .../escope/powered-test/es6-rest-args.js | 35 + .../escope/powered-test/es6-switch.js | 43 + .../powered-test/es6-template-literal.js | 45 + .../powered-test/function-expression-name.js | 42 + .../escope/powered-test/global-increment.js | 28 + .../powered-test/implicit-global-reference.js | 113 + .../escope/powered-test/label-children.js | 34 + node_modules/escope/powered-test/label.js | 47 + .../escope/powered-test/nodejs-scope.js | 65 + .../escope/powered-test/object-expression.js | 56 + .../escope/powered-test/optimistic.js | 40 + .../escope/powered-test/with-scope.js | 40 + node_modules/escope/src/definition.js | 78 + node_modules/escope/src/index.js | 146 + node_modules/escope/src/pattern-visitor.js | 134 + node_modules/escope/src/reference.js | 154 + node_modules/escope/src/referencer.js | 584 + node_modules/escope/src/scope-manager.js | 245 + node_modules/escope/src/scope.js | 647 + node_modules/escope/src/variable.js | 81 + node_modules/escope/third_party/espree.js | 56 + node_modules/esrecurse/.babelrc | 3 + node_modules/esrecurse/README.md | 170 + node_modules/esrecurse/esrecurse.js | 135 + node_modules/esrecurse/gulpfile.babel.js | 92 + node_modules/esrecurse/package-lock.json | 4322 ++++ node_modules/esrecurse/package.json | 81 + node_modules/estraverse/.babelrc | 3 + node_modules/estraverse/.jshintrc | 16 + node_modules/estraverse/LICENSE.BSD | 19 + node_modules/estraverse/estraverse.js | 849 + node_modules/estraverse/gulpfile.js | 70 + node_modules/estraverse/package.json | 69 + 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 | 78 + node_modules/event-emitter/.lint | 15 + node_modules/event-emitter/.npmignore | 3 + node_modules/event-emitter/.testignore | 1 + node_modules/event-emitter/.travis.yml | 16 + node_modules/event-emitter/CHANGES | 73 + node_modules/event-emitter/LICENSE | 19 + node_modules/event-emitter/README.md | 98 + node_modules/event-emitter/all-off.js | 19 + .../event-emitter/benchmark/many-on.js | 83 + .../event-emitter/benchmark/single-on.js | 73 + node_modules/event-emitter/emit-error.js | 13 + node_modules/event-emitter/has-listeners.js | 16 + node_modules/event-emitter/index.js | 132 + node_modules/event-emitter/package.json | 68 + node_modules/event-emitter/pipe.js | 42 + node_modules/event-emitter/test/all-off.js | 48 + node_modules/event-emitter/test/emit-error.js | 14 + .../event-emitter/test/has-listeners.js | 42 + node_modules/event-emitter/test/index.js | 107 + node_modules/event-emitter/test/pipe.js | 53 + node_modules/event-emitter/test/unify.js | 123 + node_modules/event-emitter/unify.js | 50 + node_modules/eventemitter3/LICENSE | 21 + node_modules/eventemitter3/README.md | 89 + node_modules/eventemitter3/index.js | 289 + node_modules/eventemitter3/package.json | 75 + node_modules/events/.npmignore | 1 + node_modules/events/.travis.yml | 8 + node_modules/events/.zuul.yml | 12 + node_modules/events/History.md | 42 + node_modules/events/LICENSE | 22 + node_modules/events/Readme.md | 19 + node_modules/events/events.js | 302 + node_modules/events/package.json | 63 + node_modules/events/tests/add-listeners.js | 63 + .../events/tests/check-listener-leaks.js | 86 + node_modules/events/tests/common.js | 42 + node_modules/events/tests/index.js | 25 + node_modules/events/tests/legacy-compat.js | 18 + node_modules/events/tests/listener-count.js | 36 + .../events/tests/listeners-side-effects.js | 55 + node_modules/events/tests/listeners.js | 51 + node_modules/events/tests/max-listeners.js | 50 + node_modules/events/tests/modify-in-emit.js | 76 + node_modules/events/tests/num-args.js | 44 + node_modules/events/tests/once.js | 59 + .../events/tests/remove-all-listeners.js | 80 + node_modules/events/tests/remove-listeners.js | 84 + .../tests/set-max-listeners-side-effects.js | 29 + node_modules/events/tests/subclass.js | 51 + node_modules/evp_bytestokey/LICENSE | 21 + node_modules/evp_bytestokey/README.md | 51 + node_modules/evp_bytestokey/index.js | 45 + node_modules/evp_bytestokey/package.json | 78 + node_modules/execa/index.js | 309 + node_modules/execa/lib/errname.js | 37 + node_modules/execa/lib/stdio.js | 41 + node_modules/execa/license | 9 + node_modules/execa/package.json | 108 + node_modules/execa/readme.md | 279 + 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 | 93 + 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 | 104 + node_modules/extglob/LICENSE | 21 + node_modules/extglob/README.md | 88 + node_modules/extglob/index.js | 178 + node_modules/extglob/package.json | 85 + node_modules/fast-deep-equal/.eslintrc.yml | 25 + node_modules/fast-deep-equal/.npmignore | 60 + node_modules/fast-deep-equal/.travis.yml | 8 + node_modules/fast-deep-equal/LICENSE | 21 + node_modules/fast-deep-equal/README.md | 55 + .../fast-deep-equal/benchmark/.eslintrc.yml | 5 + .../fast-deep-equal/benchmark/index.js | 56 + node_modules/fast-deep-equal/index.js | 43 + node_modules/fast-deep-equal/package.json | 78 + .../fast-deep-equal/spec/.eslintrc.yml | 5 + .../fast-deep-equal/spec/index.spec.js | 18 + node_modules/fast-deep-equal/spec/tests.js | 320 + node_modules/filename-regex/LICENSE | 21 + node_modules/filename-regex/README.md | 63 + node_modules/filename-regex/index.js | 10 + node_modules/filename-regex/package.json | 81 + 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 | 92 + node_modules/find-cache-dir/index.js | 34 + node_modules/find-cache-dir/license | 21 + node_modules/find-cache-dir/package.json | 79 + node_modules/find-cache-dir/readme.md | 113 + node_modules/find-up/index.js | 48 + node_modules/find-up/license | 21 + node_modules/find-up/package.json | 86 + node_modules/find-up/readme.md | 85 + node_modules/for-in/LICENSE | 21 + node_modules/for-in/README.md | 85 + node_modules/for-in/index.js | 16 + node_modules/for-in/package.json | 106 + node_modules/for-own/LICENSE | 21 + node_modules/for-own/README.md | 85 + node_modules/for-own/index.js | 19 + node_modules/for-own/package.json | 109 + node_modules/fs-readdir-recursive/LICENSE | 22 + node_modules/fs-readdir-recursive/README.md | 61 + node_modules/fs-readdir-recursive/index.js | 28 + .../fs-readdir-recursive/package.json | 57 + 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 | 59 + node_modules/get-caller-file/README.md | 4 + node_modules/get-caller-file/index.js | 20 + node_modules/get-caller-file/package.json | 58 + node_modules/get-stream/buffer-stream.js | 51 + node_modules/get-stream/index.js | 51 + node_modules/get-stream/license | 21 + node_modules/get-stream/package.json | 80 + node_modules/get-stream/readme.md | 117 + 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 | 77 + 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 | 63 + node_modules/glob-parent/test.js | 28 + node_modules/glob/LICENSE | 15 + node_modules/glob/README.md | 368 + node_modules/glob/changelog.md | 67 + node_modules/glob/common.js | 240 + node_modules/glob/glob.js | 790 + node_modules/glob/package.json | 76 + node_modules/glob/sync.js | 486 + node_modules/globals/globals.json | 1294 ++ node_modules/globals/index.js | 1 + node_modules/globals/license | 21 + node_modules/globals/package.json | 67 + 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 + node_modules/graceful-fs/legacy-streams.js | 118 + node_modules/graceful-fs/package.json | 77 + node_modules/graceful-fs/polyfills.js | 330 + node_modules/has-ansi/index.js | 4 + node_modules/has-ansi/license | 21 + node_modules/has-ansi/package.json | 95 + 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 | 93 + node_modules/has-flag/readme.md | 67 + node_modules/hash-base/README.md | 38 + node_modules/hash-base/index.js | 83 + node_modules/hash-base/package.json | 66 + node_modules/hash.js/.eslintrc.js | 41 + node_modules/hash.js/.npmignore | 2 + node_modules/hash.js/.travis.yml | 9 + node_modules/hash.js/README.md | 48 + node_modules/hash.js/lib/hash.d.ts | 105 + node_modules/hash.js/lib/hash.js | 15 + node_modules/hash.js/lib/hash/common.js | 92 + node_modules/hash.js/lib/hash/hmac.js | 47 + node_modules/hash.js/lib/hash/ripemd.js | 146 + node_modules/hash.js/lib/hash/sha.js | 7 + node_modules/hash.js/lib/hash/sha/1.js | 74 + node_modules/hash.js/lib/hash/sha/224.js | 30 + node_modules/hash.js/lib/hash/sha/256.js | 105 + node_modules/hash.js/lib/hash/sha/384.js | 35 + node_modules/hash.js/lib/hash/sha/512.js | 330 + node_modules/hash.js/lib/hash/sha/common.js | 49 + node_modules/hash.js/lib/hash/utils.js | 253 + node_modules/hash.js/package.json | 64 + node_modules/hash.js/test/hash-test.js | 124 + node_modules/hash.js/test/hmac-test.js | 62 + node_modules/he/LICENSE-MIT.txt | 20 + node_modules/he/README.md | 379 + node_modules/he/bin/he | 148 + node_modules/he/he.js | 342 + node_modules/he/man/he.1 | 78 + node_modules/he/package.json | 88 + node_modules/hmac-drbg/.npmignore | 2 + node_modules/hmac-drbg/.travis.yml | 11 + node_modules/hmac-drbg/README.md | 48 + node_modules/hmac-drbg/lib/hmac-drbg.js | 113 + node_modules/hmac-drbg/package.json | 60 + node_modules/hmac-drbg/test/drbg-test.js | 91 + .../test/fixtures/hmac-drbg-nist.json | 332 + node_modules/home-or-tmp/index.js | 5 + node_modules/home-or-tmp/license | 21 + node_modules/home-or-tmp/package.json | 75 + node_modules/home-or-tmp/readme.md | 32 + node_modules/hosted-git-info/LICENSE | 13 + node_modules/hosted-git-info/README.md | 132 + node_modules/hosted-git-info/git-host-info.js | 68 + node_modules/hosted-git-info/git-host.js | 114 + node_modules/hosted-git-info/index.js | 121 + node_modules/hosted-git-info/package.json | 63 + node_modules/http-proxy/.npmignore | 7 + node_modules/http-proxy/LICENSE | 23 + node_modules/http-proxy/README.md | 493 + node_modules/http-proxy/index.js | 13 + node_modules/http-proxy/lib/http-proxy.js | 66 + .../http-proxy/lib/http-proxy/common.js | 249 + .../http-proxy/lib/http-proxy/index.js | 184 + .../lib/http-proxy/passes/web-incoming.js | 180 + .../lib/http-proxy/passes/web-outgoing.js | 138 + .../lib/http-proxy/passes/ws-incoming.js | 156 + node_modules/http-proxy/package.json | 76 + node_modules/http-server/.npmignore | 3 + node_modules/http-server/.travis.yml | 22 + node_modules/http-server/LICENSE | 20 + node_modules/http-server/README.md | 76 + node_modules/http-server/bin/http-server | 176 + node_modules/http-server/lib/http-server.js | 141 + node_modules/http-server/package.json | 115 + node_modules/http-server/public/404.html | 10 + .../http-server/public/img/turtle.png | Bin 0 -> 195848 bytes node_modules/http-server/public/index.html | 12 + .../http-server/screenshots/directory.png | Bin 0 -> 24885 bytes .../http-server/screenshots/public.png | Bin 0 -> 231635 bytes .../http-server/screenshots/start.png | Bin 0 -> 20171 bytes .../test/fixtures/root/canYouSeeMe | 2 + .../http-server/test/fixtures/root/file | 2 + .../http-server/test/http-server-test.js | 158 + node_modules/https-browserify/LICENSE | 18 + node_modules/https-browserify/index.js | 14 + node_modules/https-browserify/package.json | 50 + node_modules/https-browserify/readme.markdown | 22 + node_modules/ieee754/.travis.yml | 7 + node_modules/ieee754/.zuul.yml | 20 + node_modules/ieee754/LICENSE | 28 + node_modules/ieee754/README.md | 47 + node_modules/ieee754/index.js | 84 + node_modules/ieee754/package.json | 69 + node_modules/ieee754/test/basic.js | 23 + node_modules/indexof/.npmignore | 2 + node_modules/indexof/Makefile | 11 + node_modules/indexof/Readme.md | 15 + node_modules/indexof/component.json | 10 + node_modules/indexof/index.js | 10 + node_modules/indexof/package.json | 41 + node_modules/inflight/LICENSE | 15 + node_modules/inflight/README.md | 37 + node_modules/inflight/inflight.js | 54 + node_modules/inflight/package.json | 58 + 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 | 63 + node_modules/interpret/CHANGELOG | 115 + node_modules/interpret/LICENSE | 22 + node_modules/interpret/README.md | 127 + node_modules/interpret/index.js | 123 + node_modules/interpret/package.json | 78 + 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 | 70 + node_modules/invert-kv/index.js | 15 + node_modules/invert-kv/package.json | 65 + 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 | 66 + node_modules/is-binary-path/index.js | 12 + node_modules/is-binary-path/license | 21 + node_modules/is-binary-path/package.json | 71 + node_modules/is-binary-path/readme.md | 34 + node_modules/is-buffer/.npmignore | 2 + node_modules/is-buffer/LICENSE | 21 + node_modules/is-buffer/README.md | 49 + node_modules/is-buffer/index.js | 21 + node_modules/is-buffer/package.json | 79 + node_modules/is-buffer/test/basic.js | 25 + node_modules/is-builtin-module/index.js | 10 + node_modules/is-builtin-module/license | 21 + node_modules/is-builtin-module/package.json | 75 + node_modules/is-builtin-module/readme.md | 33 + node_modules/is-dotfile/LICENSE | 21 + node_modules/is-dotfile/README.md | 95 + node_modules/is-dotfile/index.js | 14 + node_modules/is-dotfile/package.json | 106 + node_modules/is-equal-shallow/LICENSE | 21 + node_modules/is-equal-shallow/README.md | 90 + node_modules/is-equal-shallow/index.js | 27 + node_modules/is-equal-shallow/package.json | 85 + 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 | 82 + 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 | 79 + node_modules/is-finite/index.js | 6 + node_modules/is-finite/license | 21 + node_modules/is-finite/package.json | 68 + node_modules/is-finite/readme.md | 28 + node_modules/is-fullwidth-code-point/index.js | 46 + node_modules/is-fullwidth-code-point/license | 21 + .../is-fullwidth-code-point/package.json | 78 + .../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 | 92 + 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 | 90 + node_modules/is-posix-bracket/LICENSE | 21 + node_modules/is-posix-bracket/README.md | 88 + node_modules/is-posix-bracket/index.js | 10 + node_modules/is-posix-bracket/package.json | 95 + 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 | 71 + node_modules/is-stream/index.js | 21 + node_modules/is-stream/license | 21 + node_modules/is-stream/package.json | 70 + node_modules/is-stream/readme.md | 42 + 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 | 74 + node_modules/isarray/test.js | 20 + node_modules/isexe/.npmignore | 2 + node_modules/isexe/LICENSE | 15 + node_modules/isexe/README.md | 51 + node_modules/isexe/index.js | 57 + node_modules/isexe/mode.js | 41 + node_modules/isexe/package.json | 60 + node_modules/isexe/test/basic.js | 221 + node_modules/isexe/windows.js | 42 + node_modules/isobject/LICENSE | 21 + node_modules/isobject/README.md | 112 + node_modules/isobject/index.js | 14 + node_modules/isobject/package.json | 98 + node_modules/js-tokens/CHANGELOG.md | 134 + node_modules/js-tokens/LICENSE | 21 + node_modules/js-tokens/README.md | 222 + node_modules/js-tokens/index.js | 23 + node_modules/js-tokens/package.json | 65 + 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 | 77 + node_modules/json-loader/.npmignore | 23 + node_modules/json-loader/CHANGELOG.md | 55 + node_modules/json-loader/LICENSE | 20 + node_modules/json-loader/README.md | 85 + node_modules/json-loader/index.js | 11 + node_modules/json-loader/package.json | 48 + .../json-schema-traverse/.eslintrc.yml | 27 + node_modules/json-schema-traverse/.npmignore | 60 + node_modules/json-schema-traverse/.travis.yml | 8 + node_modules/json-schema-traverse/LICENSE | 21 + node_modules/json-schema-traverse/README.md | 69 + node_modules/json-schema-traverse/index.js | 81 + .../json-schema-traverse/package.json | 70 + .../json-schema-traverse/spec/.eslintrc.yml | 6 + .../spec/fixtures/schema.js | 125 + .../json-schema-traverse/spec/index.spec.js | 102 + node_modules/json-stable-stringify/.npmignore | 1 + .../json-stable-stringify/.travis.yml | 4 + node_modules/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 + node_modules/json-stable-stringify/index.js | 84 + .../json-stable-stringify/package.json | 74 + .../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 + node_modules/json5/CHANGELOG.md | 169 + node_modules/json5/LICENSE.md | 21 + node_modules/json5/README.md | 286 + node_modules/json5/lib/cli.js | 41 + node_modules/json5/lib/json5.js | 770 + node_modules/json5/lib/require.js | 18 + node_modules/json5/package.json | 80 + 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 | 62 + node_modules/jsonify/test/parse.js | 16 + node_modules/jsonify/test/stringify.js | 15 + node_modules/kind-of/LICENSE | 21 + node_modules/kind-of/README.md | 261 + node_modules/kind-of/index.js | 116 + node_modules/kind-of/package.json | 140 + 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 | 89 + node_modules/lcid/index.js | 22 + node_modules/lcid/lcid.json | 203 + node_modules/lcid/license | 21 + node_modules/lcid/package.json | 78 + node_modules/lcid/readme.md | 35 + node_modules/load-json-file/index.js | 11 + node_modules/load-json-file/license | 21 + node_modules/load-json-file/package.json | 75 + node_modules/load-json-file/readme.md | 45 + node_modules/loader-runner/README.md | 42 + .../loader-runner/lib/LoaderRunner.js | 378 + node_modules/loader-runner/lib/loadLoader.js | 38 + node_modules/loader-runner/package.json | 78 + node_modules/loader-utils/CHANGELOG.md | 18 + node_modules/loader-utils/LICENSE | 20 + node_modules/loader-utils/README.md | 229 + .../loader-utils/lib/getCurrentRequest.js | 13 + .../loader-utils/lib/getHashDigest.js | 53 + node_modules/loader-utils/lib/getOptions.js | 17 + .../loader-utils/lib/getRemainingRequest.js | 13 + node_modules/loader-utils/lib/index.js | 23 + .../loader-utils/lib/interpolateName.js | 95 + node_modules/loader-utils/lib/isUrlRequest.js | 14 + node_modules/loader-utils/lib/parseQuery.js | 54 + node_modules/loader-utils/lib/parseString.js | 19 + .../loader-utils/lib/stringifyRequest.js | 40 + node_modules/loader-utils/lib/urlToRequest.js | 49 + node_modules/loader-utils/package.json | 71 + node_modules/locate-path/index.js | 24 + node_modules/locate-path/license | 21 + node_modules/locate-path/package.json | 79 + node_modules/locate-path/readme.md | 99 + 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/_assignMergeValue.js | 20 + node_modules/lodash/_assignValue.js | 28 + node_modules/lodash/_assocIndexOf.js | 21 + node_modules/lodash/_baseAggregator.js | 21 + node_modules/lodash/_baseAssign.js | 17 + node_modules/lodash/_baseAssignIn.js | 17 + node_modules/lodash/_baseAssignValue.js | 25 + node_modules/lodash/_baseAt.js | 23 + node_modules/lodash/_baseClamp.js | 22 + node_modules/lodash/_baseClone.js | 153 + node_modules/lodash/_baseConforms.js | 18 + node_modules/lodash/_baseConformsTo.js | 27 + node_modules/lodash/_baseCreate.js | 30 + node_modules/lodash/_baseDelay.js | 21 + node_modules/lodash/_baseDifference.js | 67 + node_modules/lodash/_baseEach.js | 14 + node_modules/lodash/_baseEachRight.js | 14 + node_modules/lodash/_baseEvery.js | 21 + node_modules/lodash/_baseExtremum.js | 32 + node_modules/lodash/_baseFill.js | 32 + node_modules/lodash/_baseFilter.js | 21 + node_modules/lodash/_baseFindIndex.js | 24 + node_modules/lodash/_baseFindKey.js | 23 + node_modules/lodash/_baseFlatten.js | 38 + node_modules/lodash/_baseFor.js | 16 + node_modules/lodash/_baseForOwn.js | 16 + node_modules/lodash/_baseForOwnRight.js | 16 + node_modules/lodash/_baseForRight.js | 15 + node_modules/lodash/_baseFunctions.js | 19 + node_modules/lodash/_baseGet.js | 24 + node_modules/lodash/_baseGetAllKeys.js | 20 + node_modules/lodash/_baseGetTag.js | 28 + node_modules/lodash/_baseGt.js | 14 + node_modules/lodash/_baseHas.js | 19 + node_modules/lodash/_baseHasIn.js | 13 + node_modules/lodash/_baseInRange.js | 18 + node_modules/lodash/_baseIndexOf.js | 20 + node_modules/lodash/_baseIndexOfWith.js | 23 + node_modules/lodash/_baseIntersection.js | 74 + node_modules/lodash/_baseInverter.js | 21 + node_modules/lodash/_baseInvoke.js | 24 + node_modules/lodash/_baseIsArguments.js | 18 + node_modules/lodash/_baseIsArrayBuffer.js | 17 + node_modules/lodash/_baseIsDate.js | 18 + node_modules/lodash/_baseIsEqual.js | 28 + node_modules/lodash/_baseIsEqualDeep.js | 83 + node_modules/lodash/_baseIsMap.js | 18 + node_modules/lodash/_baseIsMatch.js | 62 + node_modules/lodash/_baseIsNaN.js | 12 + node_modules/lodash/_baseIsNative.js | 47 + node_modules/lodash/_baseIsRegExp.js | 18 + node_modules/lodash/_baseIsSet.js | 18 + node_modules/lodash/_baseIsTypedArray.js | 60 + node_modules/lodash/_baseIteratee.js | 31 + node_modules/lodash/_baseKeys.js | 30 + node_modules/lodash/_baseKeysIn.js | 33 + node_modules/lodash/_baseLodash.js | 10 + node_modules/lodash/_baseLt.js | 14 + node_modules/lodash/_baseMap.js | 22 + node_modules/lodash/_baseMatches.js | 22 + node_modules/lodash/_baseMatchesProperty.js | 33 + node_modules/lodash/_baseMean.js | 20 + node_modules/lodash/_baseMerge.js | 41 + node_modules/lodash/_baseMergeDeep.js | 93 + node_modules/lodash/_baseNth.js | 20 + node_modules/lodash/_baseOrderBy.js | 34 + node_modules/lodash/_basePick.js | 19 + node_modules/lodash/_basePickBy.js | 30 + node_modules/lodash/_baseProperty.js | 14 + node_modules/lodash/_basePropertyDeep.js | 16 + node_modules/lodash/_basePropertyOf.js | 14 + node_modules/lodash/_basePullAll.js | 51 + node_modules/lodash/_basePullAt.js | 37 + node_modules/lodash/_baseRandom.js | 18 + node_modules/lodash/_baseRange.js | 28 + node_modules/lodash/_baseReduce.js | 23 + node_modules/lodash/_baseRepeat.js | 35 + node_modules/lodash/_baseRest.js | 17 + node_modules/lodash/_baseSample.js | 15 + node_modules/lodash/_baseSampleSize.js | 18 + node_modules/lodash/_baseSet.js | 47 + node_modules/lodash/_baseSetData.js | 17 + node_modules/lodash/_baseSetToString.js | 22 + node_modules/lodash/_baseShuffle.js | 15 + node_modules/lodash/_baseSlice.js | 31 + node_modules/lodash/_baseSome.js | 22 + node_modules/lodash/_baseSortBy.js | 21 + node_modules/lodash/_baseSortedIndex.js | 42 + node_modules/lodash/_baseSortedIndexBy.js | 64 + node_modules/lodash/_baseSortedUniq.js | 30 + node_modules/lodash/_baseSum.js | 24 + node_modules/lodash/_baseTimes.js | 20 + node_modules/lodash/_baseToNumber.js | 24 + node_modules/lodash/_baseToPairs.js | 18 + node_modules/lodash/_baseToString.js | 37 + node_modules/lodash/_baseUnary.js | 14 + node_modules/lodash/_baseUniq.js | 72 + node_modules/lodash/_baseUnset.js | 20 + node_modules/lodash/_baseUpdate.js | 18 + node_modules/lodash/_baseValues.js | 19 + node_modules/lodash/_baseWhile.js | 26 + node_modules/lodash/_baseWrapperValue.js | 25 + node_modules/lodash/_baseXor.js | 36 + node_modules/lodash/_baseZipObject.js | 23 + node_modules/lodash/_cacheHas.js | 13 + node_modules/lodash/_castArrayLikeObject.js | 14 + node_modules/lodash/_castFunction.js | 14 + node_modules/lodash/_castPath.js | 21 + node_modules/lodash/_castRest.js | 14 + node_modules/lodash/_castSlice.js | 18 + node_modules/lodash/_charsEndIndex.js | 19 + node_modules/lodash/_charsStartIndex.js | 20 + node_modules/lodash/_cloneArrayBuffer.js | 16 + node_modules/lodash/_cloneBuffer.js | 35 + node_modules/lodash/_cloneDataView.js | 16 + node_modules/lodash/_cloneMap.js | 22 + node_modules/lodash/_cloneRegExp.js | 17 + node_modules/lodash/_cloneSet.js | 22 + node_modules/lodash/_cloneSymbol.js | 18 + node_modules/lodash/_cloneTypedArray.js | 16 + node_modules/lodash/_compareAscending.js | 41 + node_modules/lodash/_compareMultiple.js | 44 + node_modules/lodash/_composeArgs.js | 39 + node_modules/lodash/_composeArgsRight.js | 41 + node_modules/lodash/_copyArray.js | 20 + node_modules/lodash/_copyObject.js | 40 + node_modules/lodash/_copySymbols.js | 16 + node_modules/lodash/_copySymbolsIn.js | 16 + node_modules/lodash/_coreJsData.js | 6 + node_modules/lodash/_countHolders.js | 21 + node_modules/lodash/_createAggregator.js | 23 + node_modules/lodash/_createAssigner.js | 37 + node_modules/lodash/_createBaseEach.js | 32 + node_modules/lodash/_createBaseFor.js | 25 + node_modules/lodash/_createBind.js | 28 + node_modules/lodash/_createCaseFirst.js | 33 + node_modules/lodash/_createCompounder.js | 24 + node_modules/lodash/_createCtor.js | 37 + node_modules/lodash/_createCurry.js | 46 + node_modules/lodash/_createFind.js | 25 + node_modules/lodash/_createFlow.js | 78 + node_modules/lodash/_createHybrid.js | 92 + node_modules/lodash/_createInverter.js | 17 + node_modules/lodash/_createMathOperation.js | 38 + node_modules/lodash/_createOver.js | 27 + node_modules/lodash/_createPadding.js | 33 + node_modules/lodash/_createPartial.js | 43 + node_modules/lodash/_createRange.js | 30 + node_modules/lodash/_createRecurry.js | 56 + .../lodash/_createRelationalOperation.js | 20 + node_modules/lodash/_createRound.js | 33 + node_modules/lodash/_createSet.js | 19 + node_modules/lodash/_createToPairs.js | 30 + node_modules/lodash/_createWrap.js | 106 + .../lodash/_customDefaultsAssignIn.js | 29 + node_modules/lodash/_customDefaultsMerge.js | 28 + node_modules/lodash/_customOmitClone.js | 16 + node_modules/lodash/_deburrLetter.js | 71 + node_modules/lodash/_defineProperty.js | 11 + node_modules/lodash/_equalArrays.js | 83 + node_modules/lodash/_equalByTag.js | 112 + node_modules/lodash/_equalObjects.js | 89 + node_modules/lodash/_escapeHtmlChar.js | 21 + node_modules/lodash/_escapeStringChar.js | 22 + node_modules/lodash/_flatRest.js | 16 + node_modules/lodash/_freeGlobal.js | 4 + node_modules/lodash/_getAllKeys.js | 16 + node_modules/lodash/_getAllKeysIn.js | 17 + node_modules/lodash/_getData.js | 15 + node_modules/lodash/_getFuncName.js | 31 + node_modules/lodash/_getHolder.js | 13 + node_modules/lodash/_getMapData.js | 18 + node_modules/lodash/_getMatchData.js | 24 + node_modules/lodash/_getNative.js | 17 + node_modules/lodash/_getPrototype.js | 6 + node_modules/lodash/_getRawTag.js | 46 + node_modules/lodash/_getSymbols.js | 30 + node_modules/lodash/_getSymbolsIn.js | 25 + node_modules/lodash/_getTag.js | 58 + node_modules/lodash/_getValue.js | 13 + node_modules/lodash/_getView.js | 33 + node_modules/lodash/_getWrapDetails.js | 17 + node_modules/lodash/_hasPath.js | 39 + node_modules/lodash/_hasUnicode.js | 26 + node_modules/lodash/_hasUnicodeWord.js | 15 + node_modules/lodash/_hashClear.js | 15 + node_modules/lodash/_hashDelete.js | 17 + node_modules/lodash/_hashGet.js | 30 + node_modules/lodash/_hashHas.js | 23 + node_modules/lodash/_hashSet.js | 23 + node_modules/lodash/_initCloneArray.js | 26 + node_modules/lodash/_initCloneByTag.js | 80 + node_modules/lodash/_initCloneObject.js | 18 + node_modules/lodash/_insertWrapDetails.js | 23 + node_modules/lodash/_isFlattenable.js | 20 + node_modules/lodash/_isIndex.js | 22 + node_modules/lodash/_isIterateeCall.js | 30 + node_modules/lodash/_isKey.js | 29 + node_modules/lodash/_isKeyable.js | 15 + node_modules/lodash/_isLaziable.js | 28 + node_modules/lodash/_isMaskable.js | 14 + node_modules/lodash/_isMasked.js | 20 + node_modules/lodash/_isPrototype.js | 18 + node_modules/lodash/_isStrictComparable.js | 15 + node_modules/lodash/_iteratorToArray.js | 18 + node_modules/lodash/_lazyClone.js | 23 + node_modules/lodash/_lazyReverse.js | 23 + node_modules/lodash/_lazyValue.js | 69 + node_modules/lodash/_listCacheClear.js | 13 + node_modules/lodash/_listCacheDelete.js | 35 + node_modules/lodash/_listCacheGet.js | 19 + node_modules/lodash/_listCacheHas.js | 16 + node_modules/lodash/_listCacheSet.js | 26 + node_modules/lodash/_mapCacheClear.js | 21 + node_modules/lodash/_mapCacheDelete.js | 18 + node_modules/lodash/_mapCacheGet.js | 16 + node_modules/lodash/_mapCacheHas.js | 16 + node_modules/lodash/_mapCacheSet.js | 22 + node_modules/lodash/_mapToArray.js | 18 + .../lodash/_matchesStrictComparable.js | 20 + node_modules/lodash/_memoizeCapped.js | 26 + node_modules/lodash/_mergeData.js | 90 + node_modules/lodash/_metaMap.js | 6 + node_modules/lodash/_nativeCreate.js | 6 + node_modules/lodash/_nativeKeys.js | 6 + node_modules/lodash/_nativeKeysIn.js | 20 + node_modules/lodash/_nodeUtil.js | 22 + node_modules/lodash/_objectToString.js | 22 + node_modules/lodash/_overArg.js | 15 + node_modules/lodash/_overRest.js | 36 + node_modules/lodash/_parent.js | 16 + node_modules/lodash/_reEscape.js | 4 + node_modules/lodash/_reEvaluate.js | 4 + node_modules/lodash/_reInterpolate.js | 4 + node_modules/lodash/_realNames.js | 4 + node_modules/lodash/_reorder.js | 29 + node_modules/lodash/_replaceHolders.js | 29 + node_modules/lodash/_root.js | 9 + node_modules/lodash/_setCacheAdd.js | 19 + node_modules/lodash/_setCacheHas.js | 14 + node_modules/lodash/_setData.js | 20 + node_modules/lodash/_setToArray.js | 18 + node_modules/lodash/_setToPairs.js | 18 + node_modules/lodash/_setToString.js | 14 + node_modules/lodash/_setWrapToString.js | 21 + node_modules/lodash/_shortOut.js | 37 + node_modules/lodash/_shuffleSelf.js | 28 + node_modules/lodash/_stackClear.js | 15 + node_modules/lodash/_stackDelete.js | 18 + node_modules/lodash/_stackGet.js | 14 + node_modules/lodash/_stackHas.js | 14 + node_modules/lodash/_stackSet.js | 34 + node_modules/lodash/_strictIndexOf.js | 23 + node_modules/lodash/_strictLastIndexOf.js | 21 + node_modules/lodash/_stringSize.js | 18 + node_modules/lodash/_stringToArray.js | 18 + node_modules/lodash/_stringToPath.js | 28 + node_modules/lodash/_toKey.js | 21 + node_modules/lodash/_toSource.js | 26 + node_modules/lodash/_unescapeHtmlChar.js | 21 + node_modules/lodash/_unicodeSize.js | 44 + node_modules/lodash/_unicodeToArray.js | 40 + node_modules/lodash/_unicodeWords.js | 69 + node_modules/lodash/_updateWrapDetails.js | 46 + node_modules/lodash/_wrapperClone.js | 23 + 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 | 3836 ++++ node_modules/lodash/core.min.js | 29 + node_modules/lodash/countBy.js | 40 + node_modules/lodash/create.js | 43 + node_modules/lodash/curry.js | 57 + node_modules/lodash/curryRight.js | 54 + 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 | 568 + node_modules/lodash/fp/_convertBrowser.js | 18 + node_modules/lodash/fp/_falseOptions.js | 7 + node_modules/lodash/fp/_mapping.js | 368 + node_modules/lodash/fp/_util.js | 14 + node_modules/lodash/fp/add.js | 5 + node_modules/lodash/fp/after.js | 5 + node_modules/lodash/fp/all.js | 1 + node_modules/lodash/fp/allPass.js | 1 + node_modules/lodash/fp/always.js | 1 + node_modules/lodash/fp/any.js | 1 + node_modules/lodash/fp/anyPass.js | 1 + node_modules/lodash/fp/apply.js | 1 + node_modules/lodash/fp/array.js | 2 + node_modules/lodash/fp/ary.js | 5 + node_modules/lodash/fp/assign.js | 5 + node_modules/lodash/fp/assignAll.js | 5 + node_modules/lodash/fp/assignAllWith.js | 5 + node_modules/lodash/fp/assignIn.js | 5 + node_modules/lodash/fp/assignInAll.js | 5 + node_modules/lodash/fp/assignInAllWith.js | 5 + node_modules/lodash/fp/assignInWith.js | 5 + node_modules/lodash/fp/assignWith.js | 5 + node_modules/lodash/fp/assoc.js | 1 + node_modules/lodash/fp/assocPath.js | 1 + node_modules/lodash/fp/at.js | 5 + node_modules/lodash/fp/attempt.js | 5 + node_modules/lodash/fp/before.js | 5 + node_modules/lodash/fp/bind.js | 5 + node_modules/lodash/fp/bindAll.js | 5 + node_modules/lodash/fp/bindKey.js | 5 + node_modules/lodash/fp/camelCase.js | 5 + node_modules/lodash/fp/capitalize.js | 5 + node_modules/lodash/fp/castArray.js | 5 + node_modules/lodash/fp/ceil.js | 5 + node_modules/lodash/fp/chain.js | 5 + node_modules/lodash/fp/chunk.js | 5 + node_modules/lodash/fp/clamp.js | 5 + node_modules/lodash/fp/clone.js | 5 + node_modules/lodash/fp/cloneDeep.js | 5 + node_modules/lodash/fp/cloneDeepWith.js | 5 + node_modules/lodash/fp/cloneWith.js | 5 + node_modules/lodash/fp/collection.js | 2 + node_modules/lodash/fp/commit.js | 5 + node_modules/lodash/fp/compact.js | 5 + node_modules/lodash/fp/complement.js | 1 + node_modules/lodash/fp/compose.js | 1 + node_modules/lodash/fp/concat.js | 5 + node_modules/lodash/fp/cond.js | 5 + node_modules/lodash/fp/conforms.js | 1 + node_modules/lodash/fp/conformsTo.js | 5 + node_modules/lodash/fp/constant.js | 5 + node_modules/lodash/fp/contains.js | 1 + node_modules/lodash/fp/convert.js | 18 + node_modules/lodash/fp/countBy.js | 5 + node_modules/lodash/fp/create.js | 5 + node_modules/lodash/fp/curry.js | 5 + node_modules/lodash/fp/curryN.js | 5 + node_modules/lodash/fp/curryRight.js | 5 + node_modules/lodash/fp/curryRightN.js | 5 + node_modules/lodash/fp/date.js | 2 + node_modules/lodash/fp/debounce.js | 5 + node_modules/lodash/fp/deburr.js | 5 + node_modules/lodash/fp/defaultTo.js | 5 + node_modules/lodash/fp/defaults.js | 5 + node_modules/lodash/fp/defaultsAll.js | 5 + node_modules/lodash/fp/defaultsDeep.js | 5 + node_modules/lodash/fp/defaultsDeepAll.js | 5 + node_modules/lodash/fp/defer.js | 5 + node_modules/lodash/fp/delay.js | 5 + node_modules/lodash/fp/difference.js | 5 + node_modules/lodash/fp/differenceBy.js | 5 + node_modules/lodash/fp/differenceWith.js | 5 + node_modules/lodash/fp/dissoc.js | 1 + node_modules/lodash/fp/dissocPath.js | 1 + node_modules/lodash/fp/divide.js | 5 + node_modules/lodash/fp/drop.js | 5 + node_modules/lodash/fp/dropLast.js | 1 + node_modules/lodash/fp/dropLastWhile.js | 1 + node_modules/lodash/fp/dropRight.js | 5 + node_modules/lodash/fp/dropRightWhile.js | 5 + node_modules/lodash/fp/dropWhile.js | 5 + node_modules/lodash/fp/each.js | 1 + node_modules/lodash/fp/eachRight.js | 1 + node_modules/lodash/fp/endsWith.js | 5 + node_modules/lodash/fp/entries.js | 1 + node_modules/lodash/fp/entriesIn.js | 1 + node_modules/lodash/fp/eq.js | 5 + node_modules/lodash/fp/equals.js | 1 + node_modules/lodash/fp/escape.js | 5 + node_modules/lodash/fp/escapeRegExp.js | 5 + node_modules/lodash/fp/every.js | 5 + node_modules/lodash/fp/extend.js | 1 + node_modules/lodash/fp/extendAll.js | 1 + node_modules/lodash/fp/extendAllWith.js | 1 + node_modules/lodash/fp/extendWith.js | 1 + node_modules/lodash/fp/fill.js | 5 + node_modules/lodash/fp/filter.js | 5 + node_modules/lodash/fp/find.js | 5 + node_modules/lodash/fp/findFrom.js | 5 + node_modules/lodash/fp/findIndex.js | 5 + node_modules/lodash/fp/findIndexFrom.js | 5 + node_modules/lodash/fp/findKey.js | 5 + node_modules/lodash/fp/findLast.js | 5 + node_modules/lodash/fp/findLastFrom.js | 5 + node_modules/lodash/fp/findLastIndex.js | 5 + node_modules/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 + node_modules/lodash/fp/intersectionWith.js | 5 + node_modules/lodash/fp/invert.js | 5 + node_modules/lodash/fp/invertBy.js | 5 + node_modules/lodash/fp/invertObj.js | 1 + node_modules/lodash/fp/invoke.js | 5 + node_modules/lodash/fp/invokeArgs.js | 5 + node_modules/lodash/fp/invokeArgsMap.js | 5 + node_modules/lodash/fp/invokeMap.js | 5 + node_modules/lodash/fp/isArguments.js | 5 + node_modules/lodash/fp/isArray.js | 5 + node_modules/lodash/fp/isArrayBuffer.js | 5 + node_modules/lodash/fp/isArrayLike.js | 5 + node_modules/lodash/fp/isArrayLikeObject.js | 5 + node_modules/lodash/fp/isBoolean.js | 5 + node_modules/lodash/fp/isBuffer.js | 5 + node_modules/lodash/fp/isDate.js | 5 + node_modules/lodash/fp/isElement.js | 5 + node_modules/lodash/fp/isEmpty.js | 5 + node_modules/lodash/fp/isEqual.js | 5 + node_modules/lodash/fp/isEqualWith.js | 5 + node_modules/lodash/fp/isError.js | 5 + node_modules/lodash/fp/isFinite.js | 5 + node_modules/lodash/fp/isFunction.js | 5 + node_modules/lodash/fp/isInteger.js | 5 + node_modules/lodash/fp/isLength.js | 5 + node_modules/lodash/fp/isMap.js | 5 + node_modules/lodash/fp/isMatch.js | 5 + node_modules/lodash/fp/isMatchWith.js | 5 + node_modules/lodash/fp/isNaN.js | 5 + node_modules/lodash/fp/isNative.js | 5 + node_modules/lodash/fp/isNil.js | 5 + node_modules/lodash/fp/isNull.js | 5 + node_modules/lodash/fp/isNumber.js | 5 + node_modules/lodash/fp/isObject.js | 5 + node_modules/lodash/fp/isObjectLike.js | 5 + node_modules/lodash/fp/isPlainObject.js | 5 + node_modules/lodash/fp/isRegExp.js | 5 + node_modules/lodash/fp/isSafeInteger.js | 5 + node_modules/lodash/fp/isSet.js | 5 + node_modules/lodash/fp/isString.js | 5 + node_modules/lodash/fp/isSymbol.js | 5 + node_modules/lodash/fp/isTypedArray.js | 5 + node_modules/lodash/fp/isUndefined.js | 5 + node_modules/lodash/fp/isWeakMap.js | 5 + node_modules/lodash/fp/isWeakSet.js | 5 + node_modules/lodash/fp/iteratee.js | 5 + node_modules/lodash/fp/join.js | 5 + node_modules/lodash/fp/juxt.js | 1 + node_modules/lodash/fp/kebabCase.js | 5 + node_modules/lodash/fp/keyBy.js | 5 + node_modules/lodash/fp/keys.js | 5 + node_modules/lodash/fp/keysIn.js | 5 + node_modules/lodash/fp/lang.js | 2 + node_modules/lodash/fp/last.js | 5 + node_modules/lodash/fp/lastIndexOf.js | 5 + node_modules/lodash/fp/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 + node_modules/lodash/fp/sortedLastIndexBy.js | 5 + node_modules/lodash/fp/sortedLastIndexOf.js | 5 + node_modules/lodash/fp/sortedUniq.js | 5 + node_modules/lodash/fp/sortedUniqBy.js | 5 + node_modules/lodash/fp/split.js | 5 + node_modules/lodash/fp/spread.js | 5 + node_modules/lodash/fp/spreadFrom.js | 5 + node_modules/lodash/fp/startCase.js | 5 + node_modules/lodash/fp/startsWith.js | 5 + node_modules/lodash/fp/string.js | 2 + node_modules/lodash/fp/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 + node_modules/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 + node_modules/lodash/fp/templateSettings.js | 5 + node_modules/lodash/fp/throttle.js | 5 + node_modules/lodash/fp/thru.js | 5 + node_modules/lodash/fp/times.js | 5 + node_modules/lodash/fp/toArray.js | 5 + node_modules/lodash/fp/toFinite.js | 5 + node_modules/lodash/fp/toInteger.js | 5 + node_modules/lodash/fp/toIterator.js | 5 + node_modules/lodash/fp/toJSON.js | 5 + node_modules/lodash/fp/toLength.js | 5 + node_modules/lodash/fp/toLower.js | 5 + node_modules/lodash/fp/toNumber.js | 5 + node_modules/lodash/fp/toPairs.js | 5 + node_modules/lodash/fp/toPairsIn.js | 5 + node_modules/lodash/fp/toPath.js | 5 + node_modules/lodash/fp/toPlainObject.js | 5 + node_modules/lodash/fp/toSafeInteger.js | 5 + node_modules/lodash/fp/toString.js | 5 + node_modules/lodash/fp/toUpper.js | 5 + node_modules/lodash/fp/transform.js | 5 + node_modules/lodash/fp/trim.js | 5 + node_modules/lodash/fp/trimChars.js | 5 + node_modules/lodash/fp/trimCharsEnd.js | 5 + node_modules/lodash/fp/trimCharsStart.js | 5 + node_modules/lodash/fp/trimEnd.js | 5 + node_modules/lodash/fp/trimStart.js | 5 + node_modules/lodash/fp/truncate.js | 5 + node_modules/lodash/fp/unapply.js | 1 + node_modules/lodash/fp/unary.js | 5 + node_modules/lodash/fp/unescape.js | 5 + node_modules/lodash/fp/union.js | 5 + node_modules/lodash/fp/unionBy.js | 5 + node_modules/lodash/fp/unionWith.js | 5 + node_modules/lodash/fp/uniq.js | 5 + node_modules/lodash/fp/uniqBy.js | 5 + node_modules/lodash/fp/uniqWith.js | 5 + node_modules/lodash/fp/uniqueId.js | 5 + node_modules/lodash/fp/unnest.js | 1 + node_modules/lodash/fp/unset.js | 5 + node_modules/lodash/fp/unzip.js | 5 + node_modules/lodash/fp/unzipWith.js | 5 + node_modules/lodash/fp/update.js | 5 + node_modules/lodash/fp/updateWith.js | 5 + node_modules/lodash/fp/upperCase.js | 5 + node_modules/lodash/fp/upperFirst.js | 5 + node_modules/lodash/fp/useWith.js | 1 + node_modules/lodash/fp/util.js | 2 + node_modules/lodash/fp/value.js | 5 + node_modules/lodash/fp/valueOf.js | 5 + node_modules/lodash/fp/values.js | 5 + node_modules/lodash/fp/valuesIn.js | 5 + node_modules/lodash/fp/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 | 17084 ++++++++++++++++ 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 | 57 + 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 | 72 + 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 | 39 + node_modules/lodash/string.js | 33 + node_modules/lodash/stubArray.js | 23 + node_modules/lodash/stubFalse.js | 18 + node_modules/lodash/stubObject.js | 23 + node_modules/lodash/stubString.js | 18 + node_modules/lodash/stubTrue.js | 18 + node_modules/lodash/subtract.js | 22 + 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 | 37 + 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 | 68 + 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 | 67 + node_modules/loose-envify/replace.js | 65 + node_modules/lru-cache/LICENSE | 15 + node_modules/lru-cache/README.md | 152 + node_modules/lru-cache/index.js | 467 + node_modules/lru-cache/package.json | 68 + node_modules/make-dir/index.js | 83 + node_modules/make-dir/license | 21 + node_modules/make-dir/package.json | 86 + node_modules/make-dir/readme.md | 113 + node_modules/md5.js/LICENSE | 21 + node_modules/md5.js/README.md | 31 + node_modules/md5.js/index.js | 145 + .../md5.js/node_modules/hash-base/LICENSE | 21 + .../md5.js/node_modules/hash-base/README.md | 48 + .../md5.js/node_modules/hash-base/index.js | 95 + .../node_modules/hash-base/package.json | 70 + node_modules/md5.js/package.json | 69 + node_modules/mem/index.js | 55 + node_modules/mem/license | 21 + node_modules/mem/package.json | 77 + node_modules/mem/readme.md | 147 + node_modules/memory-fs/README.md | 29 + .../memory-fs/lib/MemoryFileSystem.js | 329 + node_modules/memory-fs/lib/join.js | 14 + node_modules/memory-fs/lib/normalize.js | 86 + node_modules/memory-fs/package.json | 71 + 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 | 145 + node_modules/miller-rabin/.npmignore | 2 + node_modules/miller-rabin/README.md | 26 + node_modules/miller-rabin/bin/miller-rabin | 29 + node_modules/miller-rabin/lib/mr.js | 113 + node_modules/miller-rabin/package.json | 62 + node_modules/miller-rabin/test/api-test.js | 18 + node_modules/mime/.npmignore | 0 node_modules/mime/LICENSE | 21 + node_modules/mime/README.md | 90 + node_modules/mime/build/build.js | 11 + node_modules/mime/build/test.js | 60 + node_modules/mime/cli.js | 8 + node_modules/mime/mime.js | 108 + node_modules/mime/package.json | 67 + node_modules/mime/types.json | 1 + node_modules/mimic-fn/index.js | 7 + node_modules/mimic-fn/license | 21 + node_modules/mimic-fn/package.json | 75 + node_modules/mimic-fn/readme.md | 66 + node_modules/minimalistic-assert/index.js | 11 + node_modules/minimalistic-assert/package.json | 48 + node_modules/minimalistic-assert/readme.md | 4 + .../minimalistic-crypto-utils/.npmignore | 2 + .../minimalistic-crypto-utils/.travis.yml | 11 + .../minimalistic-crypto-utils/README.md | 47 + .../minimalistic-crypto-utils/lib/utils.js | 58 + .../minimalistic-crypto-utils/package.json | 56 + .../test/utils-test.js | 28 + node_modules/minimatch/LICENSE | 15 + node_modules/minimatch/README.md | 209 + node_modules/minimatch/minimatch.js | 923 + node_modules/minimatch/package.json | 65 + 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 | 71 + node_modules/minimist/readme.markdown | 73 + node_modules/minimist/test/dash.js | 24 + node_modules/minimist/test/default_bool.js | 20 + node_modules/minimist/test/dotted.js | 16 + node_modules/minimist/test/long.js | 31 + node_modules/minimist/test/parse.js | 318 + node_modules/minimist/test/parse_modified.js | 9 + node_modules/minimist/test/short.js | 67 + node_modules/minimist/test/whitespace.js | 8 + node_modules/mkdirp/.travis.yml | 8 + node_modules/mkdirp/LICENSE | 21 + node_modules/mkdirp/bin/cmd.js | 33 + node_modules/mkdirp/bin/usage.txt | 12 + node_modules/mkdirp/examples/pow.js | 6 + node_modules/mkdirp/index.js | 98 + node_modules/mkdirp/package.json | 63 + 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/index.js | 152 + node_modules/ms/license.md | 21 + node_modules/ms/package.json | 69 + node_modules/ms/readme.md | 51 + node_modules/node-libs-browser/LICENSE | 22 + node_modules/node-libs-browser/README.md | 61 + node_modules/node-libs-browser/index.js | 38 + node_modules/node-libs-browser/mock/buffer.js | 10 + .../node-libs-browser/mock/console.js | 12 + node_modules/node-libs-browser/mock/dns.js | 15 + node_modules/node-libs-browser/mock/empty.js | 0 node_modules/node-libs-browser/mock/net.js | 10 + .../node-libs-browser/mock/process.js | 30 + .../node-libs-browser/mock/punycode.js | 6 + node_modules/node-libs-browser/mock/tls.js | 1 + node_modules/node-libs-browser/mock/tty.js | 2 + .../node_modules/string_decoder/.npmignore | 2 + .../node_modules/string_decoder/LICENSE | 20 + .../node_modules/string_decoder/README.md | 7 + .../node_modules/string_decoder/index.js | 221 + .../node_modules/string_decoder/package.json | 53 + node_modules/node-libs-browser/package.json | 75 + node_modules/normalize-package-data/AUTHORS | 4 + node_modules/normalize-package-data/LICENSE | 30 + node_modules/normalize-package-data/README.md | 106 + .../lib/extract_description.js | 14 + .../normalize-package-data/lib/fixer.js | 417 + .../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 | 30 + .../normalize-package-data/package.json | 77 + node_modules/normalize-path/LICENSE | 21 + node_modules/normalize-path/README.md | 92 + node_modules/normalize-path/index.js | 19 + node_modules/normalize-path/package.json | 118 + node_modules/npm-run-path/index.js | 39 + node_modules/npm-run-path/license | 21 + node_modules/npm-run-path/package.json | 77 + node_modules/npm-run-path/readme.md | 81 + node_modules/number-is-nan/index.js | 4 + node_modules/number-is-nan/license | 21 + node_modules/number-is-nan/package.json | 67 + node_modules/number-is-nan/readme.md | 28 + node_modules/object-assign/index.js | 90 + node_modules/object-assign/license | 21 + node_modules/object-assign/package.json | 74 + node_modules/object-assign/readme.md | 61 + 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 | 98 + node_modules/once/LICENSE | 15 + node_modules/once/README.md | 79 + node_modules/once/once.js | 42 + node_modules/once/package.json | 67 + node_modules/opener/LICENSE.txt | 47 + node_modules/opener/README.md | 57 + node_modules/opener/opener.js | 60 + node_modules/opener/package.json | 57 + node_modules/optimist/.travis.yml | 4 + node_modules/optimist/LICENSE | 21 + node_modules/optimist/example/bool.js | 10 + .../optimist/example/boolean_double.js | 7 + .../optimist/example/boolean_single.js | 7 + node_modules/optimist/example/default_hash.js | 8 + .../optimist/example/default_singles.js | 7 + node_modules/optimist/example/divide.js | 8 + node_modules/optimist/example/line_count.js | 20 + .../optimist/example/line_count_options.js | 29 + .../optimist/example/line_count_wrap.js | 29 + node_modules/optimist/example/nonopt.js | 4 + node_modules/optimist/example/reflect.js | 2 + node_modules/optimist/example/short.js | 3 + node_modules/optimist/example/string.js | 11 + .../optimist/example/usage-options.js | 19 + node_modules/optimist/example/xup.js | 10 + node_modules/optimist/index.js | 343 + node_modules/optimist/package.json | 68 + 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 + node_modules/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/os-browserify/.npmignore | 14 + node_modules/os-browserify/LICENSE | 21 + node_modules/os-browserify/README.md | 5 + node_modules/os-browserify/browser.js | 45 + node_modules/os-browserify/main.js | 1 + node_modules/os-browserify/package.json | 53 + node_modules/os-homedir/index.js | 24 + node_modules/os-homedir/license | 21 + node_modules/os-homedir/package.json | 73 + node_modules/os-homedir/readme.md | 31 + node_modules/os-locale/index.js | 101 + node_modules/os-locale/license | 21 + node_modules/os-locale/package.json | 77 + node_modules/os-locale/readme.md | 53 + node_modules/os-tmpdir/index.js | 25 + node_modules/os-tmpdir/license | 21 + node_modules/os-tmpdir/package.json | 73 + node_modules/os-tmpdir/readme.md | 32 + node_modules/output-file-sync/LICENSE | 20 + node_modules/output-file-sync/index.js | 47 + node_modules/output-file-sync/package.json | 75 + node_modules/p-finally/index.js | 15 + node_modules/p-finally/license | 21 + node_modules/p-finally/package.json | 74 + node_modules/p-finally/readme.md | 47 + node_modules/p-limit/index.js | 40 + node_modules/p-limit/license | 21 + node_modules/p-limit/package.json | 81 + node_modules/p-limit/readme.md | 68 + node_modules/p-locate/index.js | 31 + node_modules/p-locate/license | 21 + node_modules/p-locate/package.json | 86 + node_modules/p-locate/readme.md | 86 + node_modules/pako/CHANGELOG.md | 90 + node_modules/pako/LICENSE | 21 + node_modules/pako/README.md | 176 + node_modules/pako/dist/pako.js | 6606 ++++++ node_modules/pako/dist/pako.min.js | 3 + node_modules/pako/dist/pako_deflate.js | 3879 ++++ node_modules/pako/dist/pako_deflate.min.js | 2 + node_modules/pako/dist/pako_inflate.js | 3127 +++ node_modules/pako/dist/pako_inflate.min.js | 2 + node_modules/pako/index.js | 14 + node_modules/pako/lib/deflate.js | 400 + node_modules/pako/lib/inflate.js | 418 + node_modules/pako/lib/utils/common.js | 102 + node_modules/pako/lib/utils/strings.js | 185 + node_modules/pako/lib/zlib/adler32.js | 32 + node_modules/pako/lib/zlib/constants.js | 50 + node_modules/pako/lib/zlib/crc32.js | 41 + node_modules/pako/lib/zlib/deflate.js | 1855 ++ node_modules/pako/lib/zlib/gzheader.js | 40 + node_modules/pako/lib/zlib/inffast.js | 326 + node_modules/pako/lib/zlib/inflate.js | 1538 ++ node_modules/pako/lib/zlib/inftrees.js | 327 + node_modules/pako/lib/zlib/messages.js | 13 + node_modules/pako/lib/zlib/trees.js | 1202 ++ node_modules/pako/lib/zlib/zstream.js | 29 + node_modules/pako/package.json | 77 + node_modules/parse-asn1/.npmignore | 1 + node_modules/parse-asn1/.travis.yml | 9 + node_modules/parse-asn1/README.md | 8 + node_modules/parse-asn1/aesid.json | 13 + node_modules/parse-asn1/asn1.js | 122 + node_modules/parse-asn1/certificate.js | 88 + node_modules/parse-asn1/fixProc.js | 30 + node_modules/parse-asn1/index.js | 106 + node_modules/parse-asn1/package.json | 58 + node_modules/parse-asn1/test/1024.priv | 16 + node_modules/parse-asn1/test/1024.pub | 6 + node_modules/parse-asn1/test/dsa.1024.priv | 18 + node_modules/parse-asn1/test/dsa.1024.pub | 12 + node_modules/parse-asn1/test/dsa.2048.priv | 20 + node_modules/parse-asn1/test/dsa.2048.pub | 20 + node_modules/parse-asn1/test/ec.pass.priv | 7 + node_modules/parse-asn1/test/ec.priv | 5 + node_modules/parse-asn1/test/ec.pub | 4 + node_modules/parse-asn1/test/index.js | 96 + node_modules/parse-asn1/test/node.cert | 20 + node_modules/parse-asn1/test/pass.1024.priv | 18 + node_modules/parse-asn1/test/pass.1024.pub | 6 + .../parse-asn1/test/pass.dsa.1024.priv | 11 + .../parse-asn1/test/pass.dsa.1024.pub | 12 + .../parse-asn1/test/pass.rsa.1024.priv | 18 + .../parse-asn1/test/pass.rsa.1024.pub | 6 + .../parse-asn1/test/pass.rsa.2028.priv | 30 + .../parse-asn1/test/pass.rsa.2028.pub | 9 + .../parse-asn1/test/pass2.dsa.1024.priv | 15 + .../parse-asn1/test/pass2.dsa.1024.pub | 12 + node_modules/parse-asn1/test/rsa.1024.priv | 15 + node_modules/parse-asn1/test/rsa.1024.pub | 5 + node_modules/parse-asn1/test/rsa.2028.priv | 27 + node_modules/parse-asn1/test/rsa.2028.pub | 8 + node_modules/parse-asn1/test/vector.js | 7 + node_modules/parse-asn1/test/vector.priv | 12 + node_modules/parse-asn1/test/vector2.priv | 19 + 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 | 93 + node_modules/parse-json/index.js | 35 + node_modules/parse-json/license | 21 + node_modules/parse-json/package.json | 78 + 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/path-browserify/LICENSE | 18 + node_modules/path-browserify/index.js | 224 + node_modules/path-browserify/package.json | 57 + node_modules/path-browserify/readme.markdown | 3 + node_modules/path-exists/index.js | 17 + node_modules/path-exists/license | 21 + node_modules/path-exists/package.json | 72 + node_modules/path-exists/readme.md | 50 + node_modules/path-is-absolute/index.js | 20 + node_modules/path-is-absolute/license | 21 + node_modules/path-is-absolute/package.json | 78 + node_modules/path-is-absolute/readme.md | 59 + node_modules/path-key/index.js | 13 + node_modules/path-key/license | 21 + node_modules/path-key/package.json | 71 + node_modules/path-key/readme.md | 51 + node_modules/path-type/index.js | 26 + node_modules/path-type/license | 21 + node_modules/path-type/package.json | 80 + node_modules/path-type/readme.md | 42 + node_modules/pbkdf2/LICENSE | 21 + node_modules/pbkdf2/README.md | 28 + node_modules/pbkdf2/browser.js | 4 + node_modules/pbkdf2/index.js | 9 + node_modules/pbkdf2/lib/async.js | 98 + node_modules/pbkdf2/lib/default-encoding.js | 10 + node_modules/pbkdf2/lib/precondition.js | 18 + node_modules/pbkdf2/lib/sync-browser.js | 101 + node_modules/pbkdf2/lib/sync.js | 50 + node_modules/pbkdf2/package.json | 96 + node_modules/pify/index.js | 68 + node_modules/pify/license | 21 + node_modules/pify/package.json | 82 + node_modules/pify/readme.md | 119 + node_modules/pkg-dir/index.js | 10 + node_modules/pkg-dir/license | 21 + node_modules/pkg-dir/package.json | 85 + node_modules/pkg-dir/readme.md | 64 + node_modules/portfinder/LICENSE | 22 + node_modules/portfinder/README.md | 55 + node_modules/portfinder/lib/portfinder.d.ts | 33 + node_modules/portfinder/lib/portfinder.js | 454 + node_modules/portfinder/package.json | 68 + 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 | 73 + node_modules/preserve/test.js | 48 + node_modules/private/LICENSE | 20 + node_modules/private/README.md | 246 + node_modules/private/package.json | 67 + node_modules/private/private.js | 129 + node_modules/process-nextick-args/.travis.yml | 12 + node_modules/process-nextick-args/index.js | 43 + node_modules/process-nextick-args/license.md | 19 + .../process-nextick-args/package.json | 47 + node_modules/process-nextick-args/readme.md | 18 + node_modules/process-nextick-args/test.js | 24 + node_modules/process/.eslintrc | 21 + node_modules/process/LICENSE | 22 + node_modules/process/README.md | 26 + node_modules/process/browser.js | 184 + node_modules/process/index.js | 2 + node_modules/process/package.json | 59 + node_modules/process/test.js | 199 + 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 | 56 + node_modules/prr/prr.js | 63 + node_modules/prr/test.js | 169 + node_modules/pseudomap/LICENSE | 15 + node_modules/pseudomap/README.md | 60 + node_modules/pseudomap/map.js | 9 + node_modules/pseudomap/package.json | 54 + node_modules/pseudomap/pseudomap.js | 113 + node_modules/pseudomap/test/basic.js | 86 + node_modules/public-encrypt/.travis.yml | 6 + node_modules/public-encrypt/browser.js | 10 + node_modules/public-encrypt/index.js | 18 + node_modules/public-encrypt/mgf.js | 16 + node_modules/public-encrypt/package.json | 59 + node_modules/public-encrypt/privateDecrypt.js | 108 + node_modules/public-encrypt/publicEncrypt.js | 95 + node_modules/public-encrypt/readme.md | 6 + node_modules/public-encrypt/test/1024.priv | 16 + node_modules/public-encrypt/test/1024.pub | 6 + node_modules/public-encrypt/test/ec.pass.priv | 7 + node_modules/public-encrypt/test/ec.priv | 5 + node_modules/public-encrypt/test/ec.pub | 4 + node_modules/public-encrypt/test/index.js | 117 + node_modules/public-encrypt/test/nodeTests.js | 51 + .../public-encrypt/test/pass.1024.priv | 18 + .../public-encrypt/test/pass.1024.pub | 6 + .../public-encrypt/test/rsa.1024.priv | 15 + node_modules/public-encrypt/test/rsa.1024.pub | 5 + .../public-encrypt/test/rsa.2028.priv | 27 + node_modules/public-encrypt/test/rsa.2028.pub | 8 + .../public-encrypt/test/rsa.pass.priv | 30 + node_modules/public-encrypt/test/rsa.pass.pub | 9 + .../public-encrypt/test/test_cert.pem | 20 + node_modules/public-encrypt/test/test_key.pem | 15 + .../public-encrypt/test/test_rsa_privkey.pem | 15 + .../test/test_rsa_privkey_encrypted.pem | 18 + .../public-encrypt/test/test_rsa_pubkey.pem | 6 + node_modules/public-encrypt/withPublic.js | 10 + node_modules/public-encrypt/xor.js | 8 + node_modules/punycode/LICENSE-MIT.txt | 20 + node_modules/punycode/README.md | 176 + node_modules/punycode/package.json | 87 + node_modules/punycode/punycode.js | 533 + node_modules/qs/.jshintignore | 1 + node_modules/qs/.jshintrc | 10 + node_modules/qs/.npmignore | 18 + node_modules/qs/.travis.yml | 4 + node_modules/qs/CHANGELOG.md | 68 + node_modules/qs/CONTRIBUTING.md | 1 + node_modules/qs/LICENSE | 28 + node_modules/qs/Makefile | 8 + node_modules/qs/README.md | 222 + node_modules/qs/index.js | 1 + node_modules/qs/lib/index.js | 15 + node_modules/qs/lib/parse.js | 157 + node_modules/qs/lib/stringify.js | 77 + node_modules/qs/lib/utils.js | 132 + node_modules/qs/package.json | 57 + node_modules/qs/test/parse.js | 413 + node_modules/qs/test/stringify.js | 179 + node_modules/querystring-es3/.travis.yml | 4 + node_modules/querystring-es3/History.md | 20 + node_modules/querystring-es3/License.md | 19 + node_modules/querystring-es3/Readme.md | 15 + node_modules/querystring-es3/decode.js | 84 + node_modules/querystring-es3/encode.js | 85 + node_modules/querystring-es3/index.js | 4 + node_modules/querystring-es3/package.json | 100 + .../querystring-es3/test/common-index.js | 3 + node_modules/querystring-es3/test/index.js | 210 + .../querystring-es3/test/tap-index.js | 3 + node_modules/querystring/.History.md.un~ | Bin 0 -> 7960 bytes node_modules/querystring/.Readme.md.un~ | Bin 0 -> 3225 bytes node_modules/querystring/.package.json.un~ | Bin 0 -> 5710 bytes node_modules/querystring/.travis.yml | 4 + node_modules/querystring/History.md | 20 + node_modules/querystring/License.md | 19 + node_modules/querystring/Readme.md | 15 + node_modules/querystring/decode.js | 80 + node_modules/querystring/encode.js | 64 + node_modules/querystring/index.js | 4 + node_modules/querystring/package.json | 100 + node_modules/querystring/test/.index.js.un~ | Bin 0 -> 975 bytes node_modules/querystring/test/common-index.js | 3 + node_modules/querystring/test/index.js | 210 + node_modules/querystring/test/tap-index.js | 3 + node_modules/randomatic/LICENSE | 21 + node_modules/randomatic/README.md | 154 + node_modules/randomatic/index.js | 82 + .../randomatic/node_modules/is-number/LICENSE | 21 + .../node_modules/is-number/README.md | 115 + .../node_modules/is-number/index.js | 22 + .../is-number/node_modules/kind-of/LICENSE | 21 + .../is-number/node_modules/kind-of/README.md | 261 + .../is-number/node_modules/kind-of/index.js | 116 + .../node_modules/kind-of/package.json | 139 + .../node_modules/is-number/package.json | 123 + .../randomatic/node_modules/kind-of/LICENSE | 21 + .../randomatic/node_modules/kind-of/README.md | 267 + .../randomatic/node_modules/kind-of/index.js | 119 + .../node_modules/kind-of/package.json | 139 + node_modules/randomatic/package.json | 126 + node_modules/randombytes/.npmignore | 1 + node_modules/randombytes/.travis.yml | 15 + node_modules/randombytes/.zuul.yml | 1 + node_modules/randombytes/LICENSE | 21 + node_modules/randombytes/README.md | 14 + node_modules/randombytes/browser.js | 38 + node_modules/randombytes/index.js | 1 + node_modules/randombytes/package.json | 64 + node_modules/randombytes/test.js | 56 + node_modules/read-pkg-up/index.js | 26 + node_modules/read-pkg-up/license | 21 + node_modules/read-pkg-up/package.json | 94 + node_modules/read-pkg-up/readme.md | 80 + node_modules/read-pkg/index.js | 47 + node_modules/read-pkg/license | 21 + node_modules/read-pkg/package.json | 77 + node_modules/read-pkg/readme.md | 79 + node_modules/readable-stream/.npmignore | 9 + node_modules/readable-stream/.travis.yml | 65 + node_modules/readable-stream/CONTRIBUTING.md | 38 + node_modules/readable-stream/GOVERNANCE.md | 136 + node_modules/readable-stream/LICENSE | 47 + node_modules/readable-stream/README.md | 57 + .../doc/wg-meetings/2015-01-30.md | 60 + .../readable-stream/duplex-browser.js | 1 + node_modules/readable-stream/duplex.js | 1 + .../readable-stream/lib/_stream_duplex.js | 124 + .../lib/_stream_passthrough.js | 47 + .../readable-stream/lib/_stream_readable.js | 1007 + .../readable-stream/lib/_stream_transform.js | 214 + .../readable-stream/lib/_stream_writable.js | 664 + .../lib/internal/streams/BufferList.js | 74 + .../lib/internal/streams/destroy.js | 72 + .../lib/internal/streams/stream-browser.js | 1 + .../lib/internal/streams/stream.js | 1 + node_modules/readable-stream/package.json | 83 + node_modules/readable-stream/passthrough.js | 1 + .../readable-stream/readable-browser.js | 7 + node_modules/readable-stream/readable.js | 19 + node_modules/readable-stream/transform.js | 1 + .../readable-stream/writable-browser.js | 1 + node_modules/readable-stream/writable.js | 8 + node_modules/readdirp/.npmignore | 15 + node_modules/readdirp/.travis.yml | 6 + node_modules/readdirp/LICENSE | 20 + node_modules/readdirp/README.md | 233 + node_modules/readdirp/examples/Readme.md | 37 + .../readdirp/examples/callback-api.js | 10 + node_modules/readdirp/examples/grep.js | 71 + node_modules/readdirp/examples/package.json | 9 + .../readdirp/examples/stream-api-pipe.js | 19 + node_modules/readdirp/examples/stream-api.js | 15 + node_modules/readdirp/package.json | 79 + node_modules/readdirp/readdirp.js | 300 + node_modules/readdirp/stream-api.js | 99 + .../test/bed/root_dir1/root_dir1_file1.ext1 | 0 .../test/bed/root_dir1/root_dir1_file2.ext2 | 0 .../test/bed/root_dir1/root_dir1_file3.ext3 | 0 .../root1_dir1_subdir1_file1.ext1 | 0 .../test/bed/root_dir2/root_dir2_file1.ext1 | 0 .../test/bed/root_dir2/root_dir2_file2.ext2 | 0 .../readdirp/test/bed/root_file1.ext1 | 0 .../readdirp/test/bed/root_file2.ext2 | 0 .../readdirp/test/bed/root_file3.ext3 | 0 node_modules/readdirp/test/readdirp-stream.js | 338 + node_modules/readdirp/test/readdirp.js | 289 + node_modules/regenerate/LICENSE-MIT.txt | 20 + node_modules/regenerate/README.md | 344 + node_modules/regenerate/package.json | 65 + node_modules/regenerate/regenerate.js | 1199 ++ node_modules/regenerator-runtime/.npmignore | 2 + node_modules/regenerator-runtime/README.md | 31 + node_modules/regenerator-runtime/package.json | 46 + node_modules/regenerator-runtime/path.js | 4 + .../regenerator-runtime/runtime-module.js | 28 + node_modules/regenerator-runtime/runtime.js | 730 + node_modules/regenerator-transform/.npmignore | 1 + node_modules/regenerator-transform/README.md | 46 + .../regenerator-transform/lib/emit.js | 996 + .../regenerator-transform/lib/hoist.js | 151 + .../regenerator-transform/lib/index.js | 22 + .../regenerator-transform/lib/leap.js | 183 + .../regenerator-transform/lib/meta.js | 112 + .../lib/replaceShorthandObjectMethod.js | 80 + .../regenerator-transform/lib/util.js | 36 + .../regenerator-transform/lib/visit.js | 290 + .../regenerator-transform/package.json | 72 + .../regenerator-transform/src/emit.js | 1184 ++ .../regenerator-transform/src/hoist.js | 151 + .../regenerator-transform/src/index.js | 28 + .../regenerator-transform/src/leap.js | 174 + .../regenerator-transform/src/meta.js | 104 + .../src/replaceShorthandObjectMethod.js | 74 + .../regenerator-transform/src/util.js | 31 + .../regenerator-transform/src/visit.js | 293 + node_modules/regex-cache/LICENSE | 21 + node_modules/regex-cache/README.md | 166 + node_modules/regex-cache/index.js | 68 + node_modules/regex-cache/package.json | 101 + 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 | 88 + node_modules/regexpu-core/rewrite-pattern.js | 193 + node_modules/regjsgen/LICENSE.txt | 20 + node_modules/regjsgen/README.md | 60 + node_modules/regjsgen/package.json | 76 + 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 | 84 + node_modules/regjsparser/package.json | 63 + node_modules/regjsparser/parser.js | 962 + .../remove-trailing-separator/history.md | 17 + .../remove-trailing-separator/index.js | 17 + .../remove-trailing-separator/license | 3 + .../remove-trailing-separator/package.json | 64 + .../remove-trailing-separator/readme.md | 51 + node_modules/repeat-element/LICENSE | 21 + node_modules/repeat-element/README.md | 71 + node_modules/repeat-element/index.js | 18 + node_modules/repeat-element/package.json | 70 + 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 | 128 + node_modules/repeating/index.js | 24 + node_modules/repeating/license | 21 + node_modules/repeating/package.json | 69 + node_modules/repeating/readme.md | 30 + node_modules/require-directory/.jshintrc | 67 + node_modules/require-directory/.npmignore | 1 + node_modules/require-directory/.travis.yml | 3 + node_modules/require-directory/LICENSE | 22 + .../require-directory/README.markdown | 184 + node_modules/require-directory/index.js | 86 + node_modules/require-directory/package.json | 69 + node_modules/require-main-filename/.npmignore | 3 + .../require-main-filename/.travis.yml | 8 + .../require-main-filename/LICENSE.txt | 14 + node_modules/require-main-filename/README.md | 26 + node_modules/require-main-filename/index.js | 18 + .../require-main-filename/package.json | 58 + node_modules/require-main-filename/test.js | 36 + node_modules/requires-port/.npmignore | 2 + node_modules/requires-port/.travis.yml | 19 + node_modules/requires-port/LICENSE | 22 + node_modules/requires-port/README.md | 47 + node_modules/requires-port/index.js | 38 + node_modules/requires-port/package.json | 74 + node_modules/requires-port/test.js | 98 + 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 | 70 + node_modules/ripemd160/CHANGELOG.md | 72 + node_modules/ripemd160/LICENSE.md | 21 + node_modules/ripemd160/README.md | 27 + node_modules/ripemd160/index.js | 291 + node_modules/ripemd160/package.json | 68 + node_modules/safe-buffer/.travis.yml | 7 + node_modules/safe-buffer/LICENSE | 21 + node_modules/safe-buffer/README.md | 584 + node_modules/safe-buffer/index.js | 62 + node_modules/safe-buffer/package.json | 63 + node_modules/safe-buffer/test.js | 101 + node_modules/semver/LICENSE | 15 + node_modules/semver/README.md | 366 + node_modules/semver/bin/semver | 133 + node_modules/semver/package.json | 54 + node_modules/semver/range.bnf | 16 + node_modules/semver/semver.js | 1296 ++ 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 | 70 + node_modules/set-immediate-shim/index.js | 7 + node_modules/set-immediate-shim/package.json | 66 + node_modules/set-immediate-shim/readme.md | 31 + node_modules/setimmediate/LICENSE.txt | 20 + node_modules/setimmediate/package.json | 74 + node_modules/setimmediate/setImmediate.js | 186 + node_modules/sha.js/.npmignore | 1 + node_modules/sha.js/.travis.yml | 19 + node_modules/sha.js/LICENSE | 22 + node_modules/sha.js/README.md | 54 + node_modules/sha.js/bin.js | 43 + node_modules/sha.js/hash.js | 69 + node_modules/sha.js/hexpp.js | 26 + node_modules/sha.js/index.js | 15 + node_modules/sha.js/package.json | 65 + node_modules/sha.js/sha.js | 93 + node_modules/sha.js/sha1.js | 98 + node_modules/sha.js/sha224.js | 52 + node_modules/sha.js/sha256.js | 134 + node_modules/sha.js/sha384.js | 56 + node_modules/sha.js/sha512.js | 259 + node_modules/sha.js/test/hash.js | 86 + node_modules/sha.js/test/test.js | 85 + node_modules/sha.js/test/vectors.js | 76 + node_modules/shebang-command/index.js | 19 + node_modules/shebang-command/license | 21 + node_modules/shebang-command/package.json | 71 + node_modules/shebang-command/readme.md | 39 + node_modules/shebang-regex/index.js | 2 + node_modules/shebang-regex/license | 21 + node_modules/shebang-regex/package.json | 64 + node_modules/shebang-regex/readme.md | 29 + node_modules/signal-exit/CHANGELOG.md | 27 + node_modules/signal-exit/LICENSE.txt | 16 + node_modules/signal-exit/README.md | 40 + node_modules/signal-exit/index.js | 157 + node_modules/signal-exit/package.json | 66 + node_modules/signal-exit/signals.js | 53 + node_modules/slash/index.js | 11 + node_modules/slash/package.json | 66 + node_modules/slash/readme.md | 44 + node_modules/source-list-map/README.md | 91 + node_modules/source-list-map/lib/CodeNode.js | 66 + .../source-list-map/lib/MappingsContext.js | 45 + .../source-list-map/lib/SingleLineNode.js | 93 + .../source-list-map/lib/SourceListMap.js | 117 + .../source-list-map/lib/SourceNode.js | 129 + .../source-list-map/lib/base64-vlq.js | 169 + .../lib/fromStringWithSourceMap.js | 102 + node_modules/source-list-map/lib/helpers.js | 23 + node_modules/source-list-map/lib/index.js | 6 + node_modules/source-list-map/package.json | 56 + node_modules/source-map-support/LICENSE.md | 21 + node_modules/source-map-support/README.md | 251 + .../browser-source-map-support.js | 110 + node_modules/source-map-support/package.json | 56 + node_modules/source-map-support/register.js | 1 + .../source-map-support/source-map-support.js | 527 + 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 | 3091 +++ node_modules/source-map/dist/source-map.js | 3090 +++ .../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 | 121 + node_modules/source-map/lib/base64-vlq.js | 140 + node_modules/source-map/lib/base64.js | 67 + node_modules/source-map/lib/binary-search.js | 111 + node_modules/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 | 416 + node_modules/source-map/lib/source-node.js | 413 + node_modules/source-map/lib/util.js | 417 + node_modules/source-map/package.json | 214 + 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 | 63 + node_modules/spdx-expression-parse/AUTHORS | 3 + node_modules/spdx-expression-parse/LICENSE | 22 + node_modules/spdx-expression-parse/README.md | 83 + node_modules/spdx-expression-parse/index.js | 5 + .../spdx-expression-parse/package.json | 89 + node_modules/spdx-expression-parse/parser.js | 1357 ++ node_modules/spdx-license-ids/LICENSE | 24 + node_modules/spdx-license-ids/README.md | 55 + node_modules/spdx-license-ids/package.json | 80 + .../spdx-license-ids/spdx-license-ids.json | 334 + node_modules/stream-browserify/.npmignore | 1 + node_modules/stream-browserify/.travis.yml | 9 + node_modules/stream-browserify/LICENSE | 18 + node_modules/stream-browserify/index.js | 127 + node_modules/stream-browserify/package.json | 79 + .../stream-browserify/readme.markdown | 25 + node_modules/stream-browserify/test/buf.js | 32 + node_modules/stream-http/.npmignore | 5 + node_modules/stream-http/.travis.yml | 3 + node_modules/stream-http/.zuul.yml | 22 + node_modules/stream-http/LICENSE | 24 + node_modules/stream-http/README.md | 134 + node_modules/stream-http/ie8-polyfill.js | 168 + node_modules/stream-http/index.js | 79 + node_modules/stream-http/lib/capability.js | 69 + node_modules/stream-http/lib/request.js | 306 + node_modules/stream-http/lib/response.js | 182 + node_modules/stream-http/package.json | 73 + .../stream-http/test/browser/abort.js | 55 + node_modules/stream-http/test/browser/auth.js | 22 + .../test/browser/binary-streaming.js | 71 + .../stream-http/test/browser/binary.js | 32 + .../stream-http/test/browser/body-empty.js | 29 + .../stream-http/test/browser/cookie.js | 25 + .../stream-http/test/browser/disable-fetch.js | 37 + .../test/browser/error.js.disabled | 12 + .../stream-http/test/browser/headers.js | 116 + .../test/browser/lib/webworker-worker.js | 20 + .../stream-http/test/browser/package.json | 5 + .../stream-http/test/browser/post-binary.js | 42 + .../stream-http/test/browser/post-text.js | 48 + .../test/browser/text-streaming.js | 43 + node_modules/stream-http/test/browser/text.js | 44 + .../test/browser/timeout.js.disabled | 33 + .../stream-http/test/browser/webworker.js | 32 + .../stream-http/test/node/http-browserify.js | 133 + node_modules/stream-http/test/server/index.js | 137 + .../stream-http/test/server/static/basic.txt | 19 + .../test/server/static/browserify.png | Bin 0 -> 31422 bytes .../test/server/static/test-polyfill.js | 9 + node_modules/string-width/index.js | 36 + node_modules/string-width/license | 9 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 85 + .../node_modules/ansi-regex/readme.md | 46 + .../is-fullwidth-code-point/index.js | 46 + .../is-fullwidth-code-point/license | 21 + .../is-fullwidth-code-point/package.json | 77 + .../is-fullwidth-code-point/readme.md | 39 + .../node_modules/strip-ansi/index.js | 4 + .../node_modules/strip-ansi/license | 9 + .../node_modules/strip-ansi/package.json | 84 + .../node_modules/strip-ansi/readme.md | 39 + node_modules/string-width/package.json | 87 + node_modules/string-width/readme.md | 42 + node_modules/string_decoder/.npmignore | 2 + node_modules/string_decoder/LICENSE | 48 + node_modules/string_decoder/README.md | 28 + .../string_decoder/lib/string_decoder.js | 272 + node_modules/string_decoder/package.json | 56 + node_modules/strip-ansi/index.js | 6 + node_modules/strip-ansi/license | 21 + node_modules/strip-ansi/package.json | 101 + node_modules/strip-ansi/readme.md | 33 + node_modules/strip-bom/index.js | 14 + node_modules/strip-bom/license | 21 + node_modules/strip-bom/package.json | 72 + node_modules/strip-bom/readme.md | 36 + node_modules/strip-eof/index.js | 15 + node_modules/strip-eof/license | 21 + node_modules/strip-eof/package.json | 71 + node_modules/strip-eof/readme.md | 28 + node_modules/supports-color/index.js | 50 + node_modules/supports-color/license | 21 + node_modules/supports-color/package.json | 89 + node_modules/supports-color/readme.md | 36 + node_modules/tapable/README.md | 151 + node_modules/tapable/lib/Tapable.js | 377 + node_modules/tapable/package.json | 57 + node_modules/timers-browserify/.npmignore | 2 + node_modules/timers-browserify/CHANGELOG.md | 102 + node_modules/timers-browserify/LICENSE.md | 46 + node_modules/timers-browserify/README.md | 40 + node_modules/timers-browserify/main.js | 53 + node_modules/timers-browserify/package.json | 115 + node_modules/to-arraybuffer/.npmignore | 4 + node_modules/to-arraybuffer/.travis.yml | 3 + node_modules/to-arraybuffer/.zuul.yml | 16 + node_modules/to-arraybuffer/LICENSE | 24 + node_modules/to-arraybuffer/README.md | 27 + node_modules/to-arraybuffer/index.js | 27 + node_modules/to-arraybuffer/package.json | 61 + node_modules/to-arraybuffer/test.js | 57 + node_modules/to-fast-properties/index.js | 11 + node_modules/to-fast-properties/license | 22 + node_modules/to-fast-properties/package.json | 67 + node_modules/to-fast-properties/readme.md | 37 + node_modules/trim-right/index.js | 10 + node_modules/trim-right/license | 21 + node_modules/trim-right/package.json | 69 + node_modules/trim-right/readme.md | 30 + node_modules/tty-browserify/LICENSE | 18 + node_modules/tty-browserify/index.js | 11 + node_modules/tty-browserify/package.json | 57 + node_modules/tty-browserify/readme.markdown | 1 + node_modules/uglify-js/LICENSE | 29 + node_modules/uglify-js/README.md | 995 + node_modules/uglify-js/bin/extract-props.js | 77 + node_modules/uglify-js/bin/uglifyjs | 635 + node_modules/uglify-js/lib/ast.js | 1052 + node_modules/uglify-js/lib/compress.js | 4101 ++++ node_modules/uglify-js/lib/mozilla-ast.js | 611 + node_modules/uglify-js/lib/output.js | 1423 ++ node_modules/uglify-js/lib/parse.js | 1599 ++ node_modules/uglify-js/lib/propmangle.js | 264 + node_modules/uglify-js/lib/scope.js | 656 + node_modules/uglify-js/lib/sourcemap.js | 97 + node_modules/uglify-js/lib/transform.js | 218 + node_modules/uglify-js/lib/utils.js | 362 + .../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 | 114 + node_modules/uglify-js/package.json | 95 + node_modules/uglify-js/tools/domprops.json | 5603 +++++ node_modules/uglify-js/tools/exports.js | 19 + node_modules/uglify-js/tools/node.js | 320 + node_modules/uglify-js/tools/props.html | 61 + node_modules/uglify-to-browserify/.npmignore | 14 + node_modules/uglify-to-browserify/.travis.yml | 3 + node_modules/uglify-to-browserify/LICENSE | 19 + node_modules/uglify-to-browserify/README.md | 15 + node_modules/uglify-to-browserify/index.js | 49 + .../uglify-to-browserify/package.json | 51 + .../uglify-to-browserify/test/index.js | 22 + .../uglifyjs-webpack-plugin/CHANGELOG.md | 78 + node_modules/uglifyjs-webpack-plugin/LICENSE | 20 + .../uglifyjs-webpack-plugin/README.md | 172 + .../uglifyjs-webpack-plugin/dist/index.js | 253 + .../lib/post_install.js | 31 + .../uglifyjs-webpack-plugin/package.json | 102 + node_modules/union/.npmignore | 7 + node_modules/union/.travis.yml | 12 + node_modules/union/CHANGELOG.md | 7 + node_modules/union/LICENSE | 19 + node_modules/union/README.md | 323 + node_modules/union/examples/after/index.js | 26 + .../union/examples/simple/favicon.png | Bin 0 -> 545 bytes .../examples/simple/middleware/favicon.js | 96 + .../examples/simple/middleware/gzip-decode.js | 26 + .../examples/simple/middleware/gzip-encode.js | 40 + node_modules/union/examples/simple/simple.js | 60 + node_modules/union/examples/simple/spdy.js | 30 + node_modules/union/examples/socketio/README | 13 + .../union/examples/socketio/index.html | 8 + .../union/examples/socketio/server.js | 30 + node_modules/union/lib/buffered-stream.js | 141 + node_modules/union/lib/core.js | 108 + node_modules/union/lib/http-stream.js | 52 + node_modules/union/lib/index.js | 24 + node_modules/union/lib/request-stream.js | 58 + node_modules/union/lib/response-stream.js | 203 + node_modules/union/lib/routing-stream.js | 126 + node_modules/union/package.json | 65 + node_modules/union/test/after-test.js | 37 + node_modules/union/test/body-parser-test.js | 50 + node_modules/union/test/double-write-test.js | 62 + node_modules/union/test/ecstatic-test.js | 44 + node_modules/union/test/fixtures/index.js | 0 .../union/test/fixtures/static/some-file.txt | 1 + node_modules/union/test/header-test.js | 36 + node_modules/union/test/helpers/index.js | 0 node_modules/union/test/helpers/macros.js | 17 + node_modules/union/test/prop-test.js | 45 + node_modules/union/test/simple-test.js | 97 + node_modules/union/test/status-code-test.js | 31 + node_modules/union/test/streaming-test.js | 68 + node_modules/union/union.png | Bin 0 -> 10826 bytes node_modules/url-join/.npmignore | 2 + node_modules/url-join/.travis.yml | 5 + node_modules/url-join/LICENSE | 21 + node_modules/url-join/README.md | 47 + node_modules/url-join/bower.json | 27 + node_modules/url-join/lib/url-join.js | 49 + node_modules/url-join/package.json | 56 + node_modules/url-join/test/tests.js | 82 + node_modules/url/.npmignore | 1 + node_modules/url/.travis.yml | 7 + node_modules/url/.zuul.yml | 16 + node_modules/url/LICENSE | 21 + node_modules/url/README.md | 108 + .../url/node_modules/punycode/LICENSE-MIT.txt | 20 + .../url/node_modules/punycode/README.md | 176 + .../url/node_modules/punycode/package.json | 80 + .../url/node_modules/punycode/punycode.js | 530 + node_modules/url/package.json | 53 + node_modules/url/test.js | 1599 ++ node_modules/url/url.js | 732 + node_modules/url/util.js | 16 + node_modules/user-home/cli.js | 26 + node_modules/user-home/index.js | 15 + node_modules/user-home/license | 21 + node_modules/user-home/package.json | 71 + node_modules/user-home/readme.md | 42 + node_modules/util-deprecate/History.md | 16 + node_modules/util-deprecate/LICENSE | 24 + node_modules/util-deprecate/README.md | 53 + node_modules/util-deprecate/browser.js | 67 + node_modules/util-deprecate/node.js | 6 + node_modules/util-deprecate/package.json | 56 + node_modules/util/.npmignore | 1 + node_modules/util/.travis.yml | 8 + node_modules/util/.zuul.yml | 10 + node_modules/util/LICENSE | 18 + node_modules/util/README.md | 15 + .../util/node_modules/inherits/LICENSE | 16 + .../util/node_modules/inherits/README.md | 42 + .../util/node_modules/inherits/inherits.js | 1 + .../node_modules/inherits/inherits_browser.js | 23 + .../util/node_modules/inherits/package.json | 54 + .../util/node_modules/inherits/test.js | 25 + node_modules/util/package.json | 60 + node_modules/util/support/isBuffer.js | 3 + node_modules/util/support/isBufferBrowser.js | 6 + node_modules/util/test/browser/inspect.js | 41 + node_modules/util/test/browser/is.js | 91 + node_modules/util/test/node/debug.js | 86 + node_modules/util/test/node/format.js | 77 + node_modules/util/test/node/inspect.js | 195 + node_modules/util/test/node/log.js | 58 + node_modules/util/test/node/util.js | 83 + node_modules/util/util.js | 586 + node_modules/v8flags/.npmignore | 4 + node_modules/v8flags/LICENSE | 22 + node_modules/v8flags/README.md | 49 + node_modules/v8flags/index.js | 133 + node_modules/v8flags/package.json | 67 + .../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 | 61 + node_modules/vm-browserify/LICENSE | 18 + .../vm-browserify/example/run/bundle.js | 473 + .../vm-browserify/example/run/entry.js | 6 + .../vm-browserify/example/run/index.html | 9 + .../vm-browserify/example/run/server.js | 6 + node_modules/vm-browserify/index.js | 138 + node_modules/vm-browserify/package.json | 75 + node_modules/vm-browserify/readme.markdown | 67 + node_modules/vm-browserify/test/vm.js | 35 + node_modules/watchpack/LICENSE | 20 + node_modules/watchpack/README.md | 72 + .../watchpack/lib/DirectoryWatcher.js | 356 + node_modules/watchpack/lib/watcherManager.js | 33 + node_modules/watchpack/lib/watchpack.js | 143 + .../watchpack/node_modules/async/CHANGELOG.md | 257 + .../watchpack/node_modules/async/LICENSE | 19 + .../watchpack/node_modules/async/README.md | 14 + .../watchpack/node_modules/async/apply.js | 68 + .../watchpack/node_modules/async/applyEach.js | 51 + .../node_modules/async/applyEachSeries.js | 37 + .../watchpack/node_modules/async/asyncify.js | 110 + .../watchpack/node_modules/async/auto.js | 289 + .../node_modules/async/autoInject.js | 170 + .../watchpack/node_modules/async/bower.json | 17 + .../watchpack/node_modules/async/cargo.js | 94 + .../watchpack/node_modules/async/compose.js | 58 + .../watchpack/node_modules/async/concat.js | 43 + .../node_modules/async/concatLimit.js | 65 + .../node_modules/async/concatSeries.js | 36 + .../watchpack/node_modules/async/constant.js | 66 + .../watchpack/node_modules/async/detect.js | 61 + .../node_modules/async/detectLimit.js | 48 + .../node_modules/async/detectSeries.js | 38 + .../watchpack/node_modules/async/dir.js | 43 + .../node_modules/async/dist/async.js | 5575 +++++ .../node_modules/async/dist/async.min.js | 2 + .../watchpack/node_modules/async/doDuring.js | 66 + .../watchpack/node_modules/async/doUntil.js | 39 + .../watchpack/node_modules/async/doWhilst.js | 59 + .../watchpack/node_modules/async/during.js | 76 + .../watchpack/node_modules/async/each.js | 82 + .../watchpack/node_modules/async/eachLimit.js | 45 + .../watchpack/node_modules/async/eachOf.js | 111 + .../node_modules/async/eachOfLimit.js | 41 + .../node_modules/async/eachOfSeries.js | 35 + .../node_modules/async/eachSeries.js | 37 + .../node_modules/async/ensureAsync.js | 73 + .../watchpack/node_modules/async/every.js | 50 + .../node_modules/async/everyLimit.js | 42 + .../node_modules/async/everySeries.js | 37 + .../watchpack/node_modules/async/filter.js | 45 + .../node_modules/async/filterLimit.js | 37 + .../node_modules/async/filterSeries.js | 35 + .../watchpack/node_modules/async/forever.js | 65 + .../watchpack/node_modules/async/groupBy.js | 54 + .../node_modules/async/groupByLimit.js | 71 + .../node_modules/async/groupBySeries.js | 37 + .../watchpack/node_modules/async/index.js | 575 + .../async/internal/DoublyLinkedList.js | 88 + .../node_modules/async/internal/applyEach.js | 38 + .../node_modules/async/internal/breakLoop.js | 9 + .../async/internal/consoleFunc.js | 42 + .../async/internal/createTester.js | 44 + .../node_modules/async/internal/doLimit.js | 12 + .../node_modules/async/internal/doParallel.js | 23 + .../async/internal/doParallelLimit.js | 23 + .../async/internal/eachOfLimit.js | 71 + .../node_modules/async/internal/filter.js | 75 + .../async/internal/findGetResult.js | 10 + .../async/internal/getIterator.js | 13 + .../async/internal/initialParams.js | 21 + .../node_modules/async/internal/iterator.js | 58 + .../node_modules/async/internal/map.js | 35 + .../node_modules/async/internal/notId.js | 10 + .../node_modules/async/internal/once.js | 15 + .../node_modules/async/internal/onlyOnce.js | 15 + .../node_modules/async/internal/parallel.js | 42 + .../node_modules/async/internal/queue.js | 194 + .../node_modules/async/internal/reject.js | 21 + .../async/internal/setImmediate.js | 42 + .../node_modules/async/internal/slice.js | 16 + .../async/internal/withoutIndex.js | 12 + .../node_modules/async/internal/wrapAsync.js | 25 + .../watchpack/node_modules/async/log.js | 41 + .../watchpack/node_modules/async/map.js | 54 + .../watchpack/node_modules/async/mapLimit.js | 37 + .../watchpack/node_modules/async/mapSeries.js | 36 + .../watchpack/node_modules/async/mapValues.js | 63 + .../node_modules/async/mapValuesLimit.js | 61 + .../node_modules/async/mapValuesSeries.js | 37 + .../watchpack/node_modules/async/memoize.js | 101 + .../watchpack/node_modules/async/nextTick.js | 51 + .../watchpack/node_modules/async/package.json | 110 + .../watchpack/node_modules/async/parallel.js | 90 + .../node_modules/async/parallelLimit.js | 40 + .../node_modules/async/priorityQueue.js | 98 + .../watchpack/node_modules/async/queue.js | 130 + .../watchpack/node_modules/async/race.js | 70 + .../watchpack/node_modules/async/reduce.js | 78 + .../node_modules/async/reduceRight.js | 44 + .../watchpack/node_modules/async/reflect.js | 81 + .../node_modules/async/reflectAll.js | 105 + .../watchpack/node_modules/async/reject.js | 45 + .../node_modules/async/rejectLimit.js | 37 + .../node_modules/async/rejectSeries.js | 35 + .../watchpack/node_modules/async/retry.js | 156 + .../watchpack/node_modules/async/retryable.js | 65 + .../watchpack/node_modules/async/seq.js | 91 + .../watchpack/node_modules/async/series.js | 85 + .../node_modules/async/setImmediate.js | 45 + .../watchpack/node_modules/async/some.js | 52 + .../watchpack/node_modules/async/someLimit.js | 43 + .../node_modules/async/someSeries.js | 38 + .../watchpack/node_modules/async/sortBy.js | 91 + .../watchpack/node_modules/async/timeout.js | 89 + .../watchpack/node_modules/async/times.js | 50 + .../node_modules/async/timesLimit.js | 42 + .../node_modules/async/timesSeries.js | 32 + .../watchpack/node_modules/async/transform.js | 87 + .../watchpack/node_modules/async/tryEach.js | 81 + .../watchpack/node_modules/async/unmemoize.js | 25 + .../watchpack/node_modules/async/until.js | 41 + .../watchpack/node_modules/async/waterfall.js | 113 + .../watchpack/node_modules/async/whilst.js | 72 + node_modules/watchpack/package.json | 73 + node_modules/webpack-sources/README.md | 222 + .../webpack-sources/lib/CachedSource.js | 78 + .../webpack-sources/lib/ConcatSource.js | 65 + .../lib/LineToLineMappedSource.js | 49 + .../webpack-sources/lib/OriginalSource.js | 89 + .../webpack-sources/lib/PrefixSource.js | 76 + node_modules/webpack-sources/lib/RawSource.js | 38 + .../webpack-sources/lib/ReplaceSource.js | 198 + node_modules/webpack-sources/lib/Source.js | 45 + .../webpack-sources/lib/SourceAndMapMixin.js | 38 + .../webpack-sources/lib/SourceMapSource.js | 58 + node_modules/webpack-sources/lib/index.js | 15 + node_modules/webpack-sources/package.json | 77 + node_modules/webpack/LICENSE | 20 + node_modules/webpack/README.md | 567 + node_modules/webpack/bin/config-optimist.js | 48 + node_modules/webpack/bin/config-yargs.js | 274 + node_modules/webpack/bin/convert-argv.js | 562 + node_modules/webpack/bin/webpack.js | 389 + node_modules/webpack/buildin/.eslintrc | 7 + node_modules/webpack/buildin/amd-define.js | 3 + node_modules/webpack/buildin/amd-options.js | 2 + node_modules/webpack/buildin/global.js | 21 + .../webpack/buildin/harmony-module.js | 24 + node_modules/webpack/buildin/module.js | 22 + node_modules/webpack/buildin/system.js | 7 + node_modules/webpack/hot/.eslintrc | 9 + node_modules/webpack/hot/dev-server.js | 53 + node_modules/webpack/hot/emitter.js | 2 + node_modules/webpack/hot/log-apply-result.js | 38 + node_modules/webpack/hot/log.js | 44 + node_modules/webpack/hot/only-dev-server.js | 71 + node_modules/webpack/hot/poll.js | 34 + node_modules/webpack/hot/signal.js | 51 + node_modules/webpack/lib/APIPlugin.js | 45 + .../webpack/lib/AmdMainTemplatePlugin.js | 56 + .../webpack/lib/AsyncDependenciesBlock.js | 43 + .../webpack/lib/AutomaticPrefetchPlugin.js | 36 + node_modules/webpack/lib/BannerPlugin.js | 73 + .../webpack/lib/BasicEvaluatedExpression.js | 203 + node_modules/webpack/lib/CachePlugin.js | 79 + .../lib/CaseSensitiveModulesWarning.js | 49 + node_modules/webpack/lib/Chunk.js | 476 + node_modules/webpack/lib/ChunkRenderError.js | 24 + node_modules/webpack/lib/ChunkTemplate.js | 36 + .../webpack/lib/CompatibilityPlugin.js | 57 + node_modules/webpack/lib/Compilation.js | 1348 ++ node_modules/webpack/lib/Compiler.js | 529 + node_modules/webpack/lib/ConstPlugin.js | 60 + node_modules/webpack/lib/ContextModule.js | 431 + .../webpack/lib/ContextModuleFactory.js | 160 + .../webpack/lib/ContextReplacementPlugin.js | 111 + node_modules/webpack/lib/DefinePlugin.js | 123 + node_modules/webpack/lib/DelegatedModule.js | 92 + .../lib/DelegatedModuleFactoryPlugin.js | 59 + node_modules/webpack/lib/DelegatedPlugin.js | 30 + node_modules/webpack/lib/DependenciesBlock.js | 81 + .../webpack/lib/DependenciesBlockVariable.js | 51 + node_modules/webpack/lib/Dependency.js | 54 + node_modules/webpack/lib/DllEntryPlugin.js | 37 + node_modules/webpack/lib/DllModule.js | 58 + node_modules/webpack/lib/DllModuleFactory.js | 20 + node_modules/webpack/lib/DllPlugin.js | 38 + .../webpack/lib/DllReferencePlugin.js | 62 + .../webpack/lib/DynamicEntryPlugin.js | 59 + .../webpack/lib/EntryModuleNotFoundError.js | 22 + node_modules/webpack/lib/EntryOptionPlugin.js | 31 + node_modules/webpack/lib/Entrypoint.js | 43 + node_modules/webpack/lib/EnvironmentPlugin.js | 50 + node_modules/webpack/lib/ErrorHelpers.js | 31 + .../webpack/lib/EvalDevToolModulePlugin.js | 22 + .../lib/EvalDevToolModuleTemplatePlugin.js | 33 + ...valSourceMapDevToolModuleTemplatePlugin.js | 75 + .../webpack/lib/EvalSourceMapDevToolPlugin.js | 32 + .../lib/ExportPropertyMainTemplatePlugin.js | 31 + node_modules/webpack/lib/ExtendedAPIPlugin.js | 47 + node_modules/webpack/lib/ExternalModule.js | 121 + .../lib/ExternalModuleFactoryPlugin.js | 91 + node_modules/webpack/lib/ExternalsPlugin.js | 21 + .../lib/FlagDependencyExportsPlugin.js | 101 + .../webpack/lib/FlagDependencyUsagePlugin.js | 81 + .../lib/FlagInitialModulesAsUsedPlugin.js | 24 + .../webpack/lib/FunctionModulePlugin.js | 24 + .../lib/FunctionModuleTemplatePlugin.js | 57 + .../webpack/lib/HashedModuleIdsPlugin.js | 42 + .../lib/HotModuleReplacement.runtime.js | 602 + .../webpack/lib/HotModuleReplacementPlugin.js | 251 + .../webpack/lib/HotUpdateChunkTemplate.js | 31 + node_modules/webpack/lib/IgnorePlugin.js | 69 + .../webpack/lib/JsonpChunkTemplatePlugin.js | 31 + .../lib/JsonpExportMainTemplatePlugin.js | 37 + .../lib/JsonpHotUpdateChunkTemplatePlugin.js | 27 + .../webpack/lib/JsonpMainTemplate.runtime.js | 59 + .../webpack/lib/JsonpMainTemplatePlugin.js | 209 + .../webpack/lib/JsonpTemplatePlugin.js | 21 + node_modules/webpack/lib/LibManifestPlugin.js | 63 + .../webpack/lib/LibraryTemplatePlugin.js | 92 + .../webpack/lib/LoaderOptionsPlugin.js | 36 + .../webpack/lib/LoaderTargetPlugin.js | 19 + node_modules/webpack/lib/MainTemplate.js | 231 + .../webpack/lib/MemoryOutputFileSystem.js | 5 + node_modules/webpack/lib/Module.js | 250 + node_modules/webpack/lib/ModuleBuildError.js | 42 + .../webpack/lib/ModuleDependencyError.js | 22 + .../webpack/lib/ModuleDependencyWarning.js | 22 + node_modules/webpack/lib/ModuleError.js | 24 + .../webpack/lib/ModuleFilenameHelpers.js | 162 + .../webpack/lib/ModuleNotFoundError.js | 26 + node_modules/webpack/lib/ModuleParseError.js | 34 + node_modules/webpack/lib/ModuleReason.js | 50 + node_modules/webpack/lib/ModuleTemplate.js | 23 + node_modules/webpack/lib/ModuleWarning.js | 24 + .../webpack/lib/MovedToPluginWarningPlugin.js | 21 + node_modules/webpack/lib/MultiCompiler.js | 164 + node_modules/webpack/lib/MultiEntryPlugin.js | 39 + node_modules/webpack/lib/MultiModule.js | 75 + .../webpack/lib/MultiModuleFactory.js | 19 + node_modules/webpack/lib/MultiStats.js | 79 + node_modules/webpack/lib/MultiWatching.js | 32 + node_modules/webpack/lib/NamedChunksPlugin.js | 30 + .../webpack/lib/NamedModulesPlugin.js | 27 + node_modules/webpack/lib/NewWatchingPlugin.js | 15 + .../webpack/lib/NoEmitOnErrorsPlugin.js | 22 + node_modules/webpack/lib/NoErrorsPlugin.js | 29 + node_modules/webpack/lib/NodeStuffPlugin.js | 97 + node_modules/webpack/lib/NormalModule.js | 556 + .../webpack/lib/NormalModuleFactory.js | 292 + .../lib/NormalModuleReplacementPlugin.js | 45 + node_modules/webpack/lib/NullFactory.js | 12 + node_modules/webpack/lib/OptionsApply.js | 10 + node_modules/webpack/lib/OptionsDefaulter.js | 73 + node_modules/webpack/lib/Parser.js | 1431 ++ node_modules/webpack/lib/ParserHelpers.js | 85 + node_modules/webpack/lib/PrefetchPlugin.js | 31 + node_modules/webpack/lib/ProgressPlugin.js | 192 + node_modules/webpack/lib/ProvidePlugin.js | 55 + node_modules/webpack/lib/RawModule.js | 54 + node_modules/webpack/lib/RecordIdsPlugin.js | 117 + node_modules/webpack/lib/RequestShortener.js | 63 + .../webpack/lib/RequireJsStuffPlugin.js | 31 + node_modules/webpack/lib/RuleSet.js | 444 + .../webpack/lib/SetVarMainTemplatePlugin.js | 41 + node_modules/webpack/lib/SingleEntryPlugin.js | 35 + node_modules/webpack/lib/SizeFormatHelpers.js | 18 + .../SourceMapDevToolModuleOptionsPlugin.js | 37 + .../webpack/lib/SourceMapDevToolPlugin.js | 209 + node_modules/webpack/lib/Stats.js | 964 + node_modules/webpack/lib/Template.js | 176 + .../webpack/lib/TemplatedPathPlugin.js | 112 + .../webpack/lib/UmdMainTemplatePlugin.js | 191 + .../webpack/lib/UnsupportedFeatureWarning.js | 21 + node_modules/webpack/lib/UseStrictPlugin.js | 34 + .../lib/WarnCaseSensitiveModulesPlugin.js | 31 + node_modules/webpack/lib/WatchIgnorePlugin.js | 49 + node_modules/webpack/lib/WebpackError.js | 11 + .../webpack/lib/WebpackOptionsApply.js | 298 + .../webpack/lib/WebpackOptionsDefaulter.js | 129 + .../lib/WebpackOptionsValidationError.js | 196 + node_modules/webpack/lib/compareLocations.js | 36 + .../lib/dependencies/AMDDefineDependency.js | 142 + .../AMDDefineDependencyParserPlugin.js | 250 + .../webpack/lib/dependencies/AMDPlugin.js | 119 + .../dependencies/AMDRequireArrayDependency.js | 56 + .../AMDRequireContextDependency.js | 29 + .../AMDRequireDependenciesBlock.js | 33 + ...AMDRequireDependenciesBlockParserPlugin.js | 177 + .../lib/dependencies/AMDRequireDependency.js | 67 + .../dependencies/AMDRequireItemDependency.js | 22 + .../lib/dependencies/CommonJsPlugin.js | 89 + .../CommonJsRequireContextDependency.js | 34 + .../dependencies/CommonJsRequireDependency.js | 22 + .../CommonJsRequireDependencyParserPlugin.js | 89 + .../lib/dependencies/ConstDependency.js | 32 + .../lib/dependencies/ContextDependency.js | 29 + .../dependencies/ContextDependencyHelpers.js | 71 + .../ContextDependencyTemplateAsId.js | 32 + .../ContextDependencyTemplateAsRequireCall.js | 34 + .../dependencies/ContextElementDependency.js | 21 + .../dependencies/CriticalDependencyWarning.js | 20 + .../DelegatedExportsDependency.js | 33 + .../dependencies/DelegatedSourceDependency.js | 18 + .../lib/dependencies/DepBlockHelpers.js | 39 + .../lib/dependencies/DllEntryDependency.js | 20 + .../dependencies/HarmonyAcceptDependency.js | 42 + .../HarmonyAcceptImportDependency.js | 22 + .../HarmonyCompatibilityDependency.js | 30 + .../HarmonyDetectionParserPlugin.js | 56 + .../HarmonyExportDependencyParserPlugin.js | 75 + .../HarmonyExportExpressionDependency.js | 57 + .../HarmonyExportHeaderDependency.js | 28 + ...armonyExportImportedSpecifierDependency.js | 285 + .../HarmonyExportSpecifierDependency.js | 67 + .../dependencies/HarmonyImportDependency.js | 72 + .../HarmonyImportDependencyParserPlugin.js | 124 + .../HarmonyImportSpecifierDependency.js | 129 + .../lib/dependencies/HarmonyModulesHelpers.js | 85 + .../lib/dependencies/HarmonyModulesPlugin.js | 72 + .../dependencies/ImportContextDependency.js | 35 + .../dependencies/ImportDependenciesBlock.js | 17 + .../lib/dependencies/ImportDependency.js | 54 + .../ImportEagerContextDependency.js | 22 + .../lib/dependencies/ImportEagerDependency.js | 46 + .../ImportLazyContextDependency.js | 22 + .../ImportLazyOnceContextDependency.js | 22 + .../lib/dependencies/ImportParserPlugin.js | 89 + .../webpack/lib/dependencies/ImportPlugin.js | 60 + .../ImportWeakContextDependency.js | 22 + .../lib/dependencies/ImportWeakDependency.js | 47 + .../lib/dependencies/LoaderDependency.js | 18 + .../webpack/lib/dependencies/LoaderPlugin.js | 60 + .../webpack/lib/dependencies/LocalModule.js | 23 + .../lib/dependencies/LocalModuleDependency.js | 24 + .../lib/dependencies/LocalModulesHelpers.js | 46 + .../lib/dependencies/ModuleDependency.js | 23 + .../ModuleDependencyTemplateAsId.js | 21 + .../ModuleDependencyTemplateAsRequireId.js | 21 + .../dependencies/ModuleHotAcceptDependency.js | 23 + .../ModuleHotDeclineDependency.js | 23 + .../lib/dependencies/MultiEntryDependency.js | 20 + .../lib/dependencies/NullDependency.js | 24 + .../lib/dependencies/PrefetchDependency.js | 18 + .../dependencies/RequireContextDependency.js | 26 + .../RequireContextDependencyParserPlugin.js | 50 + .../lib/dependencies/RequireContextPlugin.js | 96 + .../RequireEnsureDependenciesBlock.js | 22 + ...uireEnsureDependenciesBlockParserPlugin.js | 102 + .../dependencies/RequireEnsureDependency.js | 38 + .../RequireEnsureItemDependency.js | 21 + .../lib/dependencies/RequireEnsurePlugin.js | 40 + .../dependencies/RequireHeaderDependency.js | 26 + .../dependencies/RequireIncludeDependency.js | 33 + .../RequireIncludeDependencyParserPlugin.js | 21 + .../lib/dependencies/RequireIncludePlugin.js | 33 + .../RequireResolveContextDependency.js | 34 + .../dependencies/RequireResolveDependency.js | 22 + .../RequireResolveDependencyParserPlugin.js | 71 + .../RequireResolveHeaderDependency.js | 26 + .../lib/dependencies/SingleEntryDependency.js | 18 + .../webpack/lib/dependencies/SystemPlugin.js | 44 + .../lib/dependencies/UnsupportedDependency.js | 23 + .../lib/dependencies/WebpackMissingModule.js | 18 + .../lib/dependencies/getFunctionExpression.js | 44 + node_modules/webpack/lib/formatLocation.js | 54 + .../lib/node/NodeChunkTemplatePlugin.js | 27 + .../webpack/lib/node/NodeEnvironmentPlugin.js | 25 + .../node/NodeHotUpdateChunkTemplatePlugin.js | 27 + .../lib/node/NodeMainTemplate.runtime.js | 24 + .../lib/node/NodeMainTemplateAsync.runtime.js | 40 + .../lib/node/NodeMainTemplatePlugin.js | 183 + .../webpack/lib/node/NodeOutputFileSystem.js | 22 + .../webpack/lib/node/NodeSourcePlugin.js | 88 + .../webpack/lib/node/NodeTargetPlugin.js | 15 + .../webpack/lib/node/NodeTemplatePlugin.js | 27 + .../webpack/lib/node/NodeWatchFileSystem.js | 72 + .../lib/optimize/AggressiveMergingPlugin.js | 115 + .../lib/optimize/AggressiveSplittingPlugin.js | 195 + .../lib/optimize/ChunkModuleIdRangePlugin.js | 53 + .../lib/optimize/CommonsChunkPlugin.js | 383 + .../lib/optimize/ConcatenatedModule.js | 814 + .../webpack/lib/optimize/DedupePlugin.js | 15 + .../optimize/EnsureChunkConditionsPlugin.js | 40 + .../lib/optimize/FlagIncludedChunksPlugin.js | 35 + .../lib/optimize/LimitChunkCountPlugin.js | 59 + .../optimize/MergeDuplicateChunksPlugin.js | 28 + .../lib/optimize/MinChunkSizePlugin.js | 65 + .../lib/optimize/ModuleConcatenationPlugin.js | 308 + .../lib/optimize/OccurrenceOrderPlugin.js | 102 + .../lib/optimize/RemoveEmptyChunksPlugin.js | 21 + .../lib/optimize/RemoveParentModulesPlugin.js | 65 + .../webpack/lib/optimize/UglifyJsPlugin.js | 9 + .../performance/AssetsOverSizeLimitWarning.js | 23 + .../EntrypointsOverSizeLimitWarning.js | 28 + .../lib/performance/NoAsyncChunksWarning.js | 20 + .../lib/performance/SizeLimitsPlugin.js | 102 + node_modules/webpack/lib/prepareOptions.js | 29 + node_modules/webpack/lib/removeAndDo.js | 15 + node_modules/webpack/lib/util/Semaphore.js | 32 + node_modules/webpack/lib/util/SortableSet.js | 45 + node_modules/webpack/lib/util/identifier.js | 38 + node_modules/webpack/lib/validateSchema.js | 66 + .../webpack/lib/web/WebEnvironmentPlugin.js | 18 + node_modules/webpack/lib/webpack.js | 119 + node_modules/webpack/lib/webpack.web.js | 29 + .../webworker/WebWorkerChunkTemplatePlugin.js | 29 + .../WebWorkerHotUpdateChunkTemplatePlugin.js | 28 + .../WebWorkerMainTemplate.runtime.js | 58 + .../webworker/WebWorkerMainTemplatePlugin.js | 105 + .../lib/webworker/WebWorkerTemplatePlugin.js | 20 + .../webpack/node_modules/async/CHANGELOG.md | 257 + .../webpack/node_modules/async/LICENSE | 19 + .../webpack/node_modules/async/README.md | 14 + .../webpack/node_modules/async/apply.js | 68 + .../webpack/node_modules/async/applyEach.js | 51 + .../node_modules/async/applyEachSeries.js | 37 + .../webpack/node_modules/async/asyncify.js | 110 + .../webpack/node_modules/async/auto.js | 289 + .../webpack/node_modules/async/autoInject.js | 170 + .../webpack/node_modules/async/bower.json | 17 + .../webpack/node_modules/async/cargo.js | 94 + .../webpack/node_modules/async/compose.js | 58 + .../webpack/node_modules/async/concat.js | 43 + .../webpack/node_modules/async/concatLimit.js | 65 + .../node_modules/async/concatSeries.js | 36 + .../webpack/node_modules/async/constant.js | 66 + .../webpack/node_modules/async/detect.js | 61 + .../webpack/node_modules/async/detectLimit.js | 48 + .../node_modules/async/detectSeries.js | 38 + .../webpack/node_modules/async/dir.js | 43 + .../webpack/node_modules/async/dist/async.js | 5575 +++++ .../node_modules/async/dist/async.min.js | 2 + .../webpack/node_modules/async/doDuring.js | 66 + .../webpack/node_modules/async/doUntil.js | 39 + .../webpack/node_modules/async/doWhilst.js | 59 + .../webpack/node_modules/async/during.js | 76 + .../webpack/node_modules/async/each.js | 82 + .../webpack/node_modules/async/eachLimit.js | 45 + .../webpack/node_modules/async/eachOf.js | 111 + .../webpack/node_modules/async/eachOfLimit.js | 41 + .../node_modules/async/eachOfSeries.js | 35 + .../webpack/node_modules/async/eachSeries.js | 37 + .../webpack/node_modules/async/ensureAsync.js | 73 + .../webpack/node_modules/async/every.js | 50 + .../webpack/node_modules/async/everyLimit.js | 42 + .../webpack/node_modules/async/everySeries.js | 37 + .../webpack/node_modules/async/filter.js | 45 + .../webpack/node_modules/async/filterLimit.js | 37 + .../node_modules/async/filterSeries.js | 35 + .../webpack/node_modules/async/forever.js | 65 + .../webpack/node_modules/async/groupBy.js | 54 + .../node_modules/async/groupByLimit.js | 71 + .../node_modules/async/groupBySeries.js | 37 + .../webpack/node_modules/async/index.js | 575 + .../async/internal/DoublyLinkedList.js | 88 + .../node_modules/async/internal/applyEach.js | 38 + .../node_modules/async/internal/breakLoop.js | 9 + .../async/internal/consoleFunc.js | 42 + .../async/internal/createTester.js | 44 + .../node_modules/async/internal/doLimit.js | 12 + .../node_modules/async/internal/doParallel.js | 23 + .../async/internal/doParallelLimit.js | 23 + .../async/internal/eachOfLimit.js | 71 + .../node_modules/async/internal/filter.js | 75 + .../async/internal/findGetResult.js | 10 + .../async/internal/getIterator.js | 13 + .../async/internal/initialParams.js | 21 + .../node_modules/async/internal/iterator.js | 58 + .../node_modules/async/internal/map.js | 35 + .../node_modules/async/internal/notId.js | 10 + .../node_modules/async/internal/once.js | 15 + .../node_modules/async/internal/onlyOnce.js | 15 + .../node_modules/async/internal/parallel.js | 42 + .../node_modules/async/internal/queue.js | 194 + .../node_modules/async/internal/reject.js | 21 + .../async/internal/setImmediate.js | 42 + .../node_modules/async/internal/slice.js | 16 + .../async/internal/withoutIndex.js | 12 + .../node_modules/async/internal/wrapAsync.js | 25 + .../webpack/node_modules/async/log.js | 41 + .../webpack/node_modules/async/map.js | 54 + .../webpack/node_modules/async/mapLimit.js | 37 + .../webpack/node_modules/async/mapSeries.js | 36 + .../webpack/node_modules/async/mapValues.js | 63 + .../node_modules/async/mapValuesLimit.js | 61 + .../node_modules/async/mapValuesSeries.js | 37 + .../webpack/node_modules/async/memoize.js | 101 + .../webpack/node_modules/async/nextTick.js | 51 + .../webpack/node_modules/async/package.json | 110 + .../webpack/node_modules/async/parallel.js | 90 + .../node_modules/async/parallelLimit.js | 40 + .../node_modules/async/priorityQueue.js | 98 + .../webpack/node_modules/async/queue.js | 130 + .../webpack/node_modules/async/race.js | 70 + .../webpack/node_modules/async/reduce.js | 78 + .../webpack/node_modules/async/reduceRight.js | 44 + .../webpack/node_modules/async/reflect.js | 81 + .../webpack/node_modules/async/reflectAll.js | 105 + .../webpack/node_modules/async/reject.js | 45 + .../webpack/node_modules/async/rejectLimit.js | 37 + .../node_modules/async/rejectSeries.js | 35 + .../webpack/node_modules/async/retry.js | 156 + .../webpack/node_modules/async/retryable.js | 65 + .../webpack/node_modules/async/seq.js | 91 + .../webpack/node_modules/async/series.js | 85 + .../node_modules/async/setImmediate.js | 45 + .../webpack/node_modules/async/some.js | 52 + .../webpack/node_modules/async/someLimit.js | 43 + .../webpack/node_modules/async/someSeries.js | 38 + .../webpack/node_modules/async/sortBy.js | 91 + .../webpack/node_modules/async/timeout.js | 89 + .../webpack/node_modules/async/times.js | 50 + .../webpack/node_modules/async/timesLimit.js | 42 + .../webpack/node_modules/async/timesSeries.js | 32 + .../webpack/node_modules/async/transform.js | 87 + .../webpack/node_modules/async/tryEach.js | 81 + .../webpack/node_modules/async/unmemoize.js | 25 + .../webpack/node_modules/async/until.js | 41 + .../webpack/node_modules/async/waterfall.js | 113 + .../webpack/node_modules/async/whilst.js | 72 + .../node_modules/supports-color/browser.js | 2 + .../node_modules/supports-color/index.js | 115 + .../node_modules/supports-color/license | 9 + .../node_modules/supports-color/package.json | 85 + .../node_modules/supports-color/readme.md | 66 + node_modules/webpack/package.json | 148 + .../webpack/schemas/ajv.absolutePath.js | 29 + .../webpack/schemas/webpackOptionsSchema.json | 1147 ++ .../webpack/web_modules/node-libs-browser.js | 0 node_modules/which-module/CHANGELOG.md | 26 + 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 | 68 + node_modules/which/CHANGELOG.md | 147 + node_modules/which/LICENSE | 15 + node_modules/which/README.md | 51 + node_modules/which/bin/which | 52 + node_modules/which/package.json | 65 + node_modules/which/which.js | 135 + 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 | 58 + 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 | 66 + node_modules/wordwrap/test/break.js | 30 + node_modules/wordwrap/test/idleness.txt | 63 + node_modules/wordwrap/test/wrap.js | 31 + node_modules/wrap-ansi/index.js | 168 + node_modules/wrap-ansi/license | 21 + .../node_modules/string-width/index.js | 37 + .../node_modules/string-width/license | 21 + .../node_modules/string-width/package.json | 88 + .../node_modules/string-width/readme.md | 42 + node_modules/wrap-ansi/package.json | 120 + node_modules/wrap-ansi/readme.md | 73 + node_modules/wrappy/LICENSE | 15 + node_modules/wrappy/README.md | 36 + node_modules/wrappy/package.json | 59 + node_modules/wrappy/wrappy.js | 33 + node_modules/xtend/.jshintrc | 30 + node_modules/xtend/.npmignore | 1 + node_modules/xtend/LICENCE | 19 + node_modules/xtend/Makefile | 4 + node_modules/xtend/README.md | 32 + node_modules/xtend/immutable.js | 19 + node_modules/xtend/mutable.js | 17 + node_modules/xtend/package.json | 86 + 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 | 65 + node_modules/yallist/LICENSE | 15 + node_modules/yallist/README.md | 204 + node_modules/yallist/iterator.js | 7 + node_modules/yallist/package.json | 62 + node_modules/yallist/yallist.js | 370 + node_modules/yargs-parser/CHANGELOG.md | 223 + node_modules/yargs-parser/LICENSE.txt | 14 + node_modules/yargs-parser/README.md | 281 + node_modules/yargs-parser/index.js | 764 + .../yargs-parser/lib/tokenize-arg-string.js | 34 + .../node_modules/camelcase/index.js | 64 + .../node_modules/camelcase/license | 21 + .../node_modules/camelcase/package.json | 74 + .../node_modules/camelcase/readme.md | 57 + node_modules/yargs-parser/package.json | 75 + node_modules/yargs/CHANGELOG.md | 961 + node_modules/yargs/LICENSE | 22 + node_modules/yargs/README.md | 103 + node_modules/yargs/completion.sh.hbs | 28 + node_modules/yargs/index.js | 31 + node_modules/yargs/lib/apply-extends.js | 52 + node_modules/yargs/lib/argsert.js | 72 + node_modules/yargs/lib/assign.js | 15 + node_modules/yargs/lib/command.js | 336 + node_modules/yargs/lib/completion.js | 104 + node_modules/yargs/lib/levenshtein.js | 47 + node_modules/yargs/lib/obj-filter.js | 10 + node_modules/yargs/lib/usage.js | 489 + node_modules/yargs/lib/validation.js | 364 + node_modules/yargs/lib/yerror.js | 10 + node_modules/yargs/locales/be.json | 39 + node_modules/yargs/locales/de.json | 39 + node_modules/yargs/locales/en.json | 40 + node_modules/yargs/locales/es.json | 39 + node_modules/yargs/locales/fr.json | 37 + node_modules/yargs/locales/hi.json | 39 + node_modules/yargs/locales/hu.json | 39 + node_modules/yargs/locales/id.json | 40 + node_modules/yargs/locales/it.json | 39 + node_modules/yargs/locales/ja.json | 39 + node_modules/yargs/locales/ko.json | 39 + node_modules/yargs/locales/nb.json | 37 + node_modules/yargs/locales/nl.json | 39 + node_modules/yargs/locales/pirate.json | 12 + node_modules/yargs/locales/pl.json | 39 + node_modules/yargs/locales/pt.json | 38 + node_modules/yargs/locales/pt_BR.json | 40 + node_modules/yargs/locales/ru.json | 39 + node_modules/yargs/locales/th.json | 39 + node_modules/yargs/locales/tr.json | 39 + node_modules/yargs/locales/zh_CN.json | 37 + node_modules/yargs/locales/zh_TW.json | 40 + .../yargs/node_modules/camelcase/index.js | 64 + .../yargs/node_modules/camelcase/license | 21 + .../yargs/node_modules/camelcase/package.json | 74 + .../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 + .../cliui/node_modules/string-width/index.js | 37 + .../cliui/node_modules/string-width/license | 21 + .../node_modules/string-width/package.json | 88 + .../cliui/node_modules/string-width/readme.md | 42 + .../yargs/node_modules/cliui/package.json | 100 + node_modules/yargs/package.json | 107 + node_modules/yargs/yargs.js | 1127 + package-lock.json | 3282 +++ package.json | 29 + ratefinder.html | 10 + webpack.config.js | 28 + 7102 files changed, 517723 insertions(+), 14 deletions(-) create mode 100644 build/app.bundle.js create mode 100644 build/app.bundle.js.map create mode 100644 build/main.bundle.js create mode 100644 build/main.bundle.js.map create mode 100644 build/ratefinder.bundle.js create mode 100644 build/ratefinder.bundle.js.map create mode 100644 js/mortgage.js create mode 100644 js/mortgage2.js create mode 100644 js/rate-service-mock.js create mode 100644 js/ratefinder.js create mode 120000 node_modules/.bin/acorn create mode 120000 node_modules/.bin/babel create mode 120000 node_modules/.bin/babel-doctor create mode 120000 node_modules/.bin/babel-external-helpers create mode 120000 node_modules/.bin/babel-node create mode 120000 node_modules/.bin/babylon create mode 120000 node_modules/.bin/ecstatic create mode 120000 node_modules/.bin/errno create mode 120000 node_modules/.bin/he create mode 120000 node_modules/.bin/hs create mode 120000 node_modules/.bin/http-server create mode 120000 node_modules/.bin/jsesc create mode 120000 node_modules/.bin/json5 create mode 120000 node_modules/.bin/loose-envify create mode 120000 node_modules/.bin/miller-rabin create mode 120000 node_modules/.bin/mime create mode 120000 node_modules/.bin/mkdirp create mode 120000 node_modules/.bin/opener create mode 120000 node_modules/.bin/regjsparser create mode 120000 node_modules/.bin/semver create mode 120000 node_modules/.bin/sha.js create mode 120000 node_modules/.bin/uglifyjs create mode 120000 node_modules/.bin/user-home create mode 120000 node_modules/.bin/webpack create mode 120000 node_modules/.bin/which create mode 100644 node_modules/acorn-dynamic-import/CHANGELOG.md create mode 100755 node_modules/acorn-dynamic-import/LICENSE create mode 100755 node_modules/acorn-dynamic-import/README.md create mode 100644 node_modules/acorn-dynamic-import/lib/index.js create mode 100644 node_modules/acorn-dynamic-import/lib/inject.js create mode 120000 node_modules/acorn-dynamic-import/node_modules/.bin/acorn create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/.npmignore create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/AUTHORS create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/CHANGELOG.md create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/LICENSE create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/README.md create mode 100755 node_modules/acorn-dynamic-import/node_modules/acorn/bin/acorn create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/dist/.keep create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/dist/acorn.es.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/dist/acorn.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/dist/acorn_loose.es.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/dist/acorn_loose.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/dist/walk.es.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/dist/walk.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/package.json create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/bin/acorn.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/expression.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/identifier.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/index.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/location.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/locutil.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/loose/expression.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/loose/index.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/loose/parseutil.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/loose/state.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/loose/statement.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/loose/tokenize.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/lval.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/node.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/options.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/parseutil.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/state.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/statement.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/tokencontext.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/tokenize.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/tokentype.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/util.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/walk/index.js create mode 100644 node_modules/acorn-dynamic-import/node_modules/acorn/src/whitespace.js create mode 100644 node_modules/acorn-dynamic-import/package.json create mode 100644 node_modules/acorn-dynamic-import/src/index.js create mode 100644 node_modules/acorn-dynamic-import/src/inject.js create mode 100644 node_modules/acorn/AUTHORS create mode 100644 node_modules/acorn/CHANGELOG.md create mode 100644 node_modules/acorn/LICENSE create mode 100644 node_modules/acorn/README.md create mode 100755 node_modules/acorn/bin/acorn create mode 100644 node_modules/acorn/dist/.keep create mode 100644 node_modules/acorn/dist/acorn.es.js create mode 100644 node_modules/acorn/dist/acorn.js create mode 100644 node_modules/acorn/dist/acorn_loose.es.js create mode 100644 node_modules/acorn/dist/acorn_loose.js create mode 100644 node_modules/acorn/dist/walk.es.js create mode 100644 node_modules/acorn/dist/walk.js create mode 100644 node_modules/acorn/package.json create mode 100644 node_modules/ajv-keywords/LICENSE create mode 100644 node_modules/ajv-keywords/README.md create mode 100644 node_modules/ajv-keywords/index.js create mode 100644 node_modules/ajv-keywords/keywords/_formatLimit.js create mode 100644 node_modules/ajv-keywords/keywords/_util.js create mode 100644 node_modules/ajv-keywords/keywords/deepProperties.js create mode 100644 node_modules/ajv-keywords/keywords/deepRequired.js create mode 100644 node_modules/ajv-keywords/keywords/dot/_formatLimit.jst create mode 100644 node_modules/ajv-keywords/keywords/dot/patternRequired.jst create mode 100644 node_modules/ajv-keywords/keywords/dot/switch.jst create mode 100644 node_modules/ajv-keywords/keywords/dotjs/README.md create mode 100644 node_modules/ajv-keywords/keywords/dotjs/_formatLimit.js create mode 100644 node_modules/ajv-keywords/keywords/dotjs/patternRequired.js create mode 100644 node_modules/ajv-keywords/keywords/dotjs/switch.js create mode 100644 node_modules/ajv-keywords/keywords/dynamicDefaults.js create mode 100644 node_modules/ajv-keywords/keywords/formatMaximum.js create mode 100644 node_modules/ajv-keywords/keywords/formatMinimum.js create mode 100644 node_modules/ajv-keywords/keywords/if.js create mode 100644 node_modules/ajv-keywords/keywords/index.js create mode 100644 node_modules/ajv-keywords/keywords/instanceof.js create mode 100644 node_modules/ajv-keywords/keywords/patternRequired.js create mode 100644 node_modules/ajv-keywords/keywords/prohibited.js create mode 100644 node_modules/ajv-keywords/keywords/range.js create mode 100644 node_modules/ajv-keywords/keywords/regexp.js create mode 100644 node_modules/ajv-keywords/keywords/select.js create mode 100644 node_modules/ajv-keywords/keywords/switch.js create mode 100644 node_modules/ajv-keywords/keywords/typeof.js create mode 100644 node_modules/ajv-keywords/keywords/uniqueItemProperties.js create mode 100644 node_modules/ajv-keywords/package.json create mode 100644 node_modules/ajv/.tonic_example.js create mode 100644 node_modules/ajv/LICENSE create mode 100644 node_modules/ajv/README.md create mode 100644 node_modules/ajv/dist/ajv.bundle.js create mode 100644 node_modules/ajv/dist/ajv.min.js create mode 100644 node_modules/ajv/dist/ajv.min.js.map create mode 100644 node_modules/ajv/dist/nodent.min.js create mode 100644 node_modules/ajv/dist/regenerator.min.js create mode 100644 node_modules/ajv/lib/$data.js create mode 100644 node_modules/ajv/lib/ajv.d.ts create mode 100644 node_modules/ajv/lib/ajv.js create mode 100644 node_modules/ajv/lib/cache.js create mode 100644 node_modules/ajv/lib/compile/_rules.js create mode 100644 node_modules/ajv/lib/compile/async.js create mode 100644 node_modules/ajv/lib/compile/equal.js create mode 100644 node_modules/ajv/lib/compile/error_classes.js create mode 100644 node_modules/ajv/lib/compile/formats.js create mode 100644 node_modules/ajv/lib/compile/index.js create mode 100644 node_modules/ajv/lib/compile/resolve.js create mode 100644 node_modules/ajv/lib/compile/rules.js create mode 100644 node_modules/ajv/lib/compile/schema_obj.js create mode 100644 node_modules/ajv/lib/compile/ucs2length.js create mode 100644 node_modules/ajv/lib/compile/util.js create mode 100644 node_modules/ajv/lib/dot/_limit.jst create mode 100644 node_modules/ajv/lib/dot/_limitItems.jst create mode 100644 node_modules/ajv/lib/dot/_limitLength.jst create mode 100644 node_modules/ajv/lib/dot/_limitProperties.jst create mode 100644 node_modules/ajv/lib/dot/allOf.jst create mode 100644 node_modules/ajv/lib/dot/anyOf.jst create mode 100644 node_modules/ajv/lib/dot/coerce.def create mode 100644 node_modules/ajv/lib/dot/const.jst create mode 100644 node_modules/ajv/lib/dot/contains.jst create mode 100644 node_modules/ajv/lib/dot/custom.jst create mode 100644 node_modules/ajv/lib/dot/defaults.def create mode 100644 node_modules/ajv/lib/dot/definitions.def create mode 100644 node_modules/ajv/lib/dot/dependencies.jst create mode 100644 node_modules/ajv/lib/dot/enum.jst create mode 100644 node_modules/ajv/lib/dot/errors.def create mode 100644 node_modules/ajv/lib/dot/format.jst create mode 100644 node_modules/ajv/lib/dot/items.jst create mode 100644 node_modules/ajv/lib/dot/missing.def create mode 100644 node_modules/ajv/lib/dot/multipleOf.jst create mode 100644 node_modules/ajv/lib/dot/not.jst create mode 100644 node_modules/ajv/lib/dot/oneOf.jst create mode 100644 node_modules/ajv/lib/dot/pattern.jst create mode 100644 node_modules/ajv/lib/dot/properties.jst create mode 100644 node_modules/ajv/lib/dot/propertyNames.jst create mode 100644 node_modules/ajv/lib/dot/ref.jst create mode 100644 node_modules/ajv/lib/dot/required.jst create mode 100644 node_modules/ajv/lib/dot/uniqueItems.jst create mode 100644 node_modules/ajv/lib/dot/validate.jst create mode 100644 node_modules/ajv/lib/dotjs/README.md create mode 100644 node_modules/ajv/lib/dotjs/_limit.js create mode 100644 node_modules/ajv/lib/dotjs/_limitItems.js create mode 100644 node_modules/ajv/lib/dotjs/_limitLength.js create mode 100644 node_modules/ajv/lib/dotjs/_limitProperties.js create mode 100644 node_modules/ajv/lib/dotjs/allOf.js create mode 100644 node_modules/ajv/lib/dotjs/anyOf.js create mode 100644 node_modules/ajv/lib/dotjs/const.js create mode 100644 node_modules/ajv/lib/dotjs/contains.js create mode 100644 node_modules/ajv/lib/dotjs/custom.js create mode 100644 node_modules/ajv/lib/dotjs/dependencies.js create mode 100644 node_modules/ajv/lib/dotjs/enum.js create mode 100644 node_modules/ajv/lib/dotjs/format.js create mode 100644 node_modules/ajv/lib/dotjs/items.js create mode 100644 node_modules/ajv/lib/dotjs/multipleOf.js create mode 100644 node_modules/ajv/lib/dotjs/not.js create mode 100644 node_modules/ajv/lib/dotjs/oneOf.js create mode 100644 node_modules/ajv/lib/dotjs/pattern.js create mode 100644 node_modules/ajv/lib/dotjs/properties.js create mode 100644 node_modules/ajv/lib/dotjs/propertyNames.js create mode 100644 node_modules/ajv/lib/dotjs/ref.js create mode 100644 node_modules/ajv/lib/dotjs/required.js create mode 100644 node_modules/ajv/lib/dotjs/uniqueItems.js create mode 100644 node_modules/ajv/lib/dotjs/validate.js create mode 100644 node_modules/ajv/lib/keyword.js create mode 100644 node_modules/ajv/lib/patternGroups.js create mode 100644 node_modules/ajv/lib/refs/$data.json create mode 100644 node_modules/ajv/lib/refs/json-schema-draft-04.json create mode 100644 node_modules/ajv/lib/refs/json-schema-draft-06.json create mode 100644 node_modules/ajv/lib/refs/json-schema-v5.json create mode 100644 node_modules/ajv/package.json create mode 100644 node_modules/ajv/scripts/.eslintrc.yml create mode 100644 node_modules/ajv/scripts/bundle.js create mode 100644 node_modules/ajv/scripts/compile-dots.js create mode 100755 node_modules/ajv/scripts/info create mode 100755 node_modules/ajv/scripts/prepare-tests create mode 100755 node_modules/ajv/scripts/travis-gh-pages create mode 100644 node_modules/align-text/LICENSE create mode 100644 node_modules/align-text/README.md create mode 100644 node_modules/align-text/index.js create mode 100644 node_modules/align-text/package.json create mode 100644 node_modules/ansi-regex/index.js create mode 100644 node_modules/ansi-regex/license create mode 100644 node_modules/ansi-regex/package.json create mode 100644 node_modules/ansi-regex/readme.md create mode 100644 node_modules/ansi-styles/index.js create mode 100644 node_modules/ansi-styles/license create mode 100644 node_modules/ansi-styles/package.json create mode 100644 node_modules/ansi-styles/readme.md create mode 100644 node_modules/anymatch/LICENSE create mode 100644 node_modules/anymatch/README.md create mode 100644 node_modules/anymatch/index.js create mode 100644 node_modules/anymatch/package.json create mode 100755 node_modules/arr-diff/LICENSE create mode 100644 node_modules/arr-diff/README.md create mode 100644 node_modules/arr-diff/index.js create mode 100644 node_modules/arr-diff/package.json create mode 100755 node_modules/arr-flatten/LICENSE create mode 100755 node_modules/arr-flatten/README.md create mode 100644 node_modules/arr-flatten/index.js create mode 100644 node_modules/arr-flatten/package.json create mode 100755 node_modules/array-unique/LICENSE create mode 100755 node_modules/array-unique/README.md create mode 100755 node_modules/array-unique/index.js create mode 100755 node_modules/array-unique/package.json create mode 100644 node_modules/asn1.js/.npmignore create mode 100644 node_modules/asn1.js/README.md create mode 100644 node_modules/asn1.js/lib/asn1.js create mode 100644 node_modules/asn1.js/lib/asn1/api.js create mode 100644 node_modules/asn1.js/lib/asn1/base/buffer.js create mode 100644 node_modules/asn1.js/lib/asn1/base/index.js create mode 100644 node_modules/asn1.js/lib/asn1/base/node.js create mode 100644 node_modules/asn1.js/lib/asn1/base/reporter.js create mode 100644 node_modules/asn1.js/lib/asn1/constants/der.js create mode 100644 node_modules/asn1.js/lib/asn1/constants/index.js create mode 100644 node_modules/asn1.js/lib/asn1/decoders/der.js create mode 100644 node_modules/asn1.js/lib/asn1/decoders/index.js create mode 100644 node_modules/asn1.js/lib/asn1/decoders/pem.js create mode 100644 node_modules/asn1.js/lib/asn1/encoders/der.js create mode 100644 node_modules/asn1.js/lib/asn1/encoders/index.js create mode 100644 node_modules/asn1.js/lib/asn1/encoders/pem.js create mode 100644 node_modules/asn1.js/package.json create mode 100644 node_modules/asn1.js/test.js create mode 100644 node_modules/assert/.npmignore create mode 100644 node_modules/assert/.travis.yml create mode 100644 node_modules/assert/.zuul.yml create mode 100644 node_modules/assert/LICENSE create mode 100644 node_modules/assert/README.md create mode 100644 node_modules/assert/assert.js create mode 100644 node_modules/assert/package.json create mode 100644 node_modules/assert/test.js create mode 100644 node_modules/async-each/.npmignore create mode 100644 node_modules/async-each/CHANGELOG.md create mode 100644 node_modules/async-each/README.md create mode 100644 node_modules/async-each/index.js create mode 100644 node_modules/async-each/package.json create mode 100644 node_modules/async/CHANGELOG.md create mode 100644 node_modules/async/LICENSE create mode 100644 node_modules/async/README.md create mode 100644 node_modules/async/dist/async.js create mode 100644 node_modules/async/dist/async.min.js create mode 100644 node_modules/async/lib/async.js create mode 100644 node_modules/async/package.json create mode 100644 node_modules/babel-cli/.npmignore create mode 100644 node_modules/babel-cli/README.md create mode 100755 node_modules/babel-cli/bin/babel-doctor.js create mode 100755 node_modules/babel-cli/bin/babel-external-helpers.js create mode 100755 node_modules/babel-cli/bin/babel-node.js create mode 100755 node_modules/babel-cli/bin/babel.js create mode 100644 node_modules/babel-cli/index.js create mode 100644 node_modules/babel-cli/lib/_babel-node.js create mode 100755 node_modules/babel-cli/lib/babel-external-helpers.js create mode 100755 node_modules/babel-cli/lib/babel-node.js create mode 100644 node_modules/babel-cli/lib/babel/dir.js create mode 100644 node_modules/babel-cli/lib/babel/file.js create mode 100755 node_modules/babel-cli/lib/babel/index.js create mode 100644 node_modules/babel-cli/lib/babel/util.js create mode 100644 node_modules/babel-cli/package-lock.json create mode 100644 node_modules/babel-cli/package.json create mode 100755 node_modules/babel-cli/scripts/bootstrap.sh create mode 100644 node_modules/babel-code-frame/.npmignore create mode 100644 node_modules/babel-code-frame/README.md create mode 100644 node_modules/babel-code-frame/lib/index.js create mode 100644 node_modules/babel-code-frame/package-lock.json create mode 100644 node_modules/babel-code-frame/package.json create mode 100644 node_modules/babel-core/README.md create mode 100644 node_modules/babel-core/index.js create mode 100644 node_modules/babel-core/lib/api/browser.js create mode 100644 node_modules/babel-core/lib/api/node.js create mode 100644 node_modules/babel-core/lib/helpers/get-possible-plugin-names.js create mode 100644 node_modules/babel-core/lib/helpers/get-possible-preset-names.js create mode 100644 node_modules/babel-core/lib/helpers/merge.js create mode 100644 node_modules/babel-core/lib/helpers/normalize-ast.js create mode 100644 node_modules/babel-core/lib/helpers/resolve-from-possible-names.js create mode 100644 node_modules/babel-core/lib/helpers/resolve-plugin.js create mode 100644 node_modules/babel-core/lib/helpers/resolve-preset.js create mode 100644 node_modules/babel-core/lib/helpers/resolve.js create mode 100644 node_modules/babel-core/lib/store.js create mode 100644 node_modules/babel-core/lib/tools/build-external-helpers.js create mode 100644 node_modules/babel-core/lib/transformation/file/index.js create mode 100644 node_modules/babel-core/lib/transformation/file/logger.js create mode 100644 node_modules/babel-core/lib/transformation/file/metadata.js create mode 100644 node_modules/babel-core/lib/transformation/file/options/build-config-chain.js create mode 100644 node_modules/babel-core/lib/transformation/file/options/config.js create mode 100644 node_modules/babel-core/lib/transformation/file/options/index.js create mode 100644 node_modules/babel-core/lib/transformation/file/options/option-manager.js create mode 100644 node_modules/babel-core/lib/transformation/file/options/parsers.js create mode 100644 node_modules/babel-core/lib/transformation/file/options/removed.js create mode 100644 node_modules/babel-core/lib/transformation/internal-plugins/block-hoist.js create mode 100644 node_modules/babel-core/lib/transformation/internal-plugins/shadow-functions.js create mode 100644 node_modules/babel-core/lib/transformation/pipeline.js create mode 100644 node_modules/babel-core/lib/transformation/plugin-pass.js create mode 100644 node_modules/babel-core/lib/transformation/plugin.js create mode 100644 node_modules/babel-core/lib/util.js create mode 100644 node_modules/babel-core/package-lock.json create mode 100644 node_modules/babel-core/package.json create mode 100644 node_modules/babel-core/register.js create mode 100644 node_modules/babel-generator/README.md create mode 100644 node_modules/babel-generator/lib/buffer.js create mode 100644 node_modules/babel-generator/lib/generators/base.js create mode 100644 node_modules/babel-generator/lib/generators/classes.js create mode 100644 node_modules/babel-generator/lib/generators/expressions.js create mode 100644 node_modules/babel-generator/lib/generators/flow.js create mode 100644 node_modules/babel-generator/lib/generators/jsx.js create mode 100644 node_modules/babel-generator/lib/generators/methods.js create mode 100644 node_modules/babel-generator/lib/generators/modules.js create mode 100644 node_modules/babel-generator/lib/generators/statements.js create mode 100644 node_modules/babel-generator/lib/generators/template-literals.js create mode 100644 node_modules/babel-generator/lib/generators/types.js create mode 100644 node_modules/babel-generator/lib/index.js create mode 100644 node_modules/babel-generator/lib/node/index.js create mode 100644 node_modules/babel-generator/lib/node/parentheses.js create mode 100644 node_modules/babel-generator/lib/node/whitespace.js create mode 100644 node_modules/babel-generator/lib/printer.js create mode 100644 node_modules/babel-generator/lib/source-map.js create mode 100644 node_modules/babel-generator/lib/whitespace.js create mode 100644 node_modules/babel-generator/package.json create mode 100644 node_modules/babel-helper-call-delegate/.npmignore create mode 100644 node_modules/babel-helper-call-delegate/README.md create mode 100644 node_modules/babel-helper-call-delegate/lib/index.js create mode 100644 node_modules/babel-helper-call-delegate/package.json create mode 100644 node_modules/babel-helper-define-map/.npmignore create mode 100644 node_modules/babel-helper-define-map/README.md create mode 100644 node_modules/babel-helper-define-map/lib/index.js create mode 100644 node_modules/babel-helper-define-map/package-lock.json create mode 100644 node_modules/babel-helper-define-map/package.json create mode 100644 node_modules/babel-helper-function-name/.npmignore create mode 100644 node_modules/babel-helper-function-name/README.md create mode 100644 node_modules/babel-helper-function-name/lib/index.js create mode 100644 node_modules/babel-helper-function-name/package.json create mode 100644 node_modules/babel-helper-get-function-arity/.npmignore create mode 100644 node_modules/babel-helper-get-function-arity/README.md create mode 100644 node_modules/babel-helper-get-function-arity/lib/index.js create mode 100644 node_modules/babel-helper-get-function-arity/package.json create mode 100644 node_modules/babel-helper-hoist-variables/.npmignore create mode 100644 node_modules/babel-helper-hoist-variables/README.md create mode 100644 node_modules/babel-helper-hoist-variables/lib/index.js create mode 100644 node_modules/babel-helper-hoist-variables/package.json create mode 100644 node_modules/babel-helper-optimise-call-expression/.npmignore create mode 100644 node_modules/babel-helper-optimise-call-expression/README.md create mode 100644 node_modules/babel-helper-optimise-call-expression/lib/index.js create mode 100644 node_modules/babel-helper-optimise-call-expression/package.json create mode 100644 node_modules/babel-helper-regex/.npmignore create mode 100644 node_modules/babel-helper-regex/README.md create mode 100644 node_modules/babel-helper-regex/lib/index.js create mode 100644 node_modules/babel-helper-regex/package-lock.json create mode 100644 node_modules/babel-helper-regex/package.json create mode 100644 node_modules/babel-helper-replace-supers/.npmignore create mode 100644 node_modules/babel-helper-replace-supers/README.md create mode 100644 node_modules/babel-helper-replace-supers/lib/index.js create mode 100644 node_modules/babel-helper-replace-supers/package.json create mode 100644 node_modules/babel-helpers/.npmignore create mode 100644 node_modules/babel-helpers/README.md create mode 100644 node_modules/babel-helpers/lib/helpers.js create mode 100644 node_modules/babel-helpers/lib/index.js create mode 100644 node_modules/babel-helpers/package.json create mode 100644 node_modules/babel-loader/CHANGELOG.md create mode 100644 node_modules/babel-loader/LICENSE create mode 100644 node_modules/babel-loader/README.md create mode 100644 node_modules/babel-loader/lib/fs-cache.js create mode 100644 node_modules/babel-loader/lib/index.js create mode 100644 node_modules/babel-loader/lib/resolve-rc.js create mode 100644 node_modules/babel-loader/lib/utils/exists.js create mode 100644 node_modules/babel-loader/lib/utils/read.js create mode 100644 node_modules/babel-loader/lib/utils/relative.js create mode 100644 node_modules/babel-loader/package.json create mode 100644 node_modules/babel-messages/.npmignore create mode 100644 node_modules/babel-messages/README.md create mode 100644 node_modules/babel-messages/lib/index.js create mode 100644 node_modules/babel-messages/package.json create mode 100644 node_modules/babel-plugin-check-es2015-constants/.npmignore create mode 100644 node_modules/babel-plugin-check-es2015-constants/README.md create mode 100644 node_modules/babel-plugin-check-es2015-constants/lib/index.js create mode 100644 node_modules/babel-plugin-check-es2015-constants/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-arrow-functions/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-arrow-functions/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-arrow-functions/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-arrow-functions/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoped-functions/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoped-functions/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoped-functions/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoped-functions/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoping/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoping/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoping/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoping/lib/tdz.js create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoping/package-lock.json create mode 100644 node_modules/babel-plugin-transform-es2015-block-scoping/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-classes/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-classes/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-classes/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-classes/lib/lib/memoise-decorators.js create mode 100644 node_modules/babel-plugin-transform-es2015-classes/lib/loose.js create mode 100644 node_modules/babel-plugin-transform-es2015-classes/lib/vanilla.js create mode 100644 node_modules/babel-plugin-transform-es2015-classes/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-computed-properties/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-computed-properties/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-computed-properties/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-computed-properties/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-destructuring/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-destructuring/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-destructuring/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-destructuring/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-duplicate-keys/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-duplicate-keys/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-duplicate-keys/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-duplicate-keys/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-for-of/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-for-of/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-for-of/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-for-of/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-function-name/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-function-name/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-function-name/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-function-name/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-literals/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-literals/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-literals/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-literals/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-modules-amd/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-modules-amd/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-modules-amd/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-modules-amd/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-modules-commonjs/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-modules-commonjs/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-modules-commonjs/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-modules-commonjs/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-modules-systemjs/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-modules-systemjs/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-modules-systemjs/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-modules-systemjs/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-modules-umd/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-modules-umd/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-modules-umd/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-modules-umd/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-object-super/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-object-super/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-object-super/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-object-super/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-parameters/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-parameters/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-parameters/lib/default.js create mode 100644 node_modules/babel-plugin-transform-es2015-parameters/lib/destructuring.js create mode 100644 node_modules/babel-plugin-transform-es2015-parameters/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-parameters/lib/rest.js create mode 100644 node_modules/babel-plugin-transform-es2015-parameters/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-shorthand-properties/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-shorthand-properties/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-shorthand-properties/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-shorthand-properties/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-spread/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-spread/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-spread/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-spread/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-sticky-regex/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-sticky-regex/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-sticky-regex/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-sticky-regex/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-template-literals/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-template-literals/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-template-literals/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-template-literals/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-typeof-symbol/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-typeof-symbol/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-typeof-symbol/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-typeof-symbol/package.json create mode 100644 node_modules/babel-plugin-transform-es2015-unicode-regex/.npmignore create mode 100644 node_modules/babel-plugin-transform-es2015-unicode-regex/README.md create mode 100644 node_modules/babel-plugin-transform-es2015-unicode-regex/lib/index.js create mode 100644 node_modules/babel-plugin-transform-es2015-unicode-regex/package.json create mode 100644 node_modules/babel-plugin-transform-regenerator/.npmignore create mode 100644 node_modules/babel-plugin-transform-regenerator/README.md create mode 100644 node_modules/babel-plugin-transform-regenerator/lib/index.js create mode 100644 node_modules/babel-plugin-transform-regenerator/package-lock.json create mode 100644 node_modules/babel-plugin-transform-regenerator/package.json create mode 100644 node_modules/babel-plugin-transform-strict-mode/.npmignore create mode 100644 node_modules/babel-plugin-transform-strict-mode/README.md create mode 100644 node_modules/babel-plugin-transform-strict-mode/lib/index.js create mode 100644 node_modules/babel-plugin-transform-strict-mode/package.json create mode 100644 node_modules/babel-polyfill/.npmignore create mode 100644 node_modules/babel-polyfill/README.md create mode 100644 node_modules/babel-polyfill/browser.js create mode 100644 node_modules/babel-polyfill/dist/polyfill.js create mode 100644 node_modules/babel-polyfill/dist/polyfill.min.js create mode 100644 node_modules/babel-polyfill/lib/index.js create mode 100644 node_modules/babel-polyfill/node_modules/regenerator-runtime/.npmignore create mode 100644 node_modules/babel-polyfill/node_modules/regenerator-runtime/README.md create mode 100644 node_modules/babel-polyfill/node_modules/regenerator-runtime/package.json create mode 100644 node_modules/babel-polyfill/node_modules/regenerator-runtime/path.js create mode 100644 node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime-module.js create mode 100644 node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js create mode 100644 node_modules/babel-polyfill/package-lock.json create mode 100644 node_modules/babel-polyfill/package.json create mode 100755 node_modules/babel-polyfill/scripts/build-dist.sh create mode 100644 node_modules/babel-polyfill/scripts/postpublish.js create mode 100644 node_modules/babel-polyfill/scripts/prepublish.js create mode 100644 node_modules/babel-preset-es2015/.npmignore create mode 100644 node_modules/babel-preset-es2015/README.md create mode 100644 node_modules/babel-preset-es2015/lib/index.js create mode 100644 node_modules/babel-preset-es2015/package.json create mode 100644 node_modules/babel-register/.npmignore create mode 100644 node_modules/babel-register/README.md create mode 100644 node_modules/babel-register/lib/browser.js create mode 100644 node_modules/babel-register/lib/cache.js create mode 100644 node_modules/babel-register/lib/node.js create mode 100644 node_modules/babel-register/package-lock.json create mode 100644 node_modules/babel-register/package.json create mode 100644 node_modules/babel-runtime/.npmignore create mode 100644 node_modules/babel-runtime/README.md create mode 100644 node_modules/babel-runtime/core-js.js create mode 100644 node_modules/babel-runtime/core-js/array/concat.js create mode 100644 node_modules/babel-runtime/core-js/array/copy-within.js create mode 100644 node_modules/babel-runtime/core-js/array/entries.js create mode 100644 node_modules/babel-runtime/core-js/array/every.js create mode 100644 node_modules/babel-runtime/core-js/array/fill.js create mode 100644 node_modules/babel-runtime/core-js/array/filter.js create mode 100644 node_modules/babel-runtime/core-js/array/find-index.js create mode 100644 node_modules/babel-runtime/core-js/array/find.js create mode 100644 node_modules/babel-runtime/core-js/array/for-each.js create mode 100644 node_modules/babel-runtime/core-js/array/from.js create mode 100644 node_modules/babel-runtime/core-js/array/includes.js create mode 100644 node_modules/babel-runtime/core-js/array/index-of.js create mode 100644 node_modules/babel-runtime/core-js/array/join.js create mode 100644 node_modules/babel-runtime/core-js/array/keys.js create mode 100644 node_modules/babel-runtime/core-js/array/last-index-of.js create mode 100644 node_modules/babel-runtime/core-js/array/map.js create mode 100644 node_modules/babel-runtime/core-js/array/of.js create mode 100644 node_modules/babel-runtime/core-js/array/pop.js create mode 100644 node_modules/babel-runtime/core-js/array/push.js create mode 100644 node_modules/babel-runtime/core-js/array/reduce-right.js create mode 100644 node_modules/babel-runtime/core-js/array/reduce.js create mode 100644 node_modules/babel-runtime/core-js/array/reverse.js create mode 100644 node_modules/babel-runtime/core-js/array/shift.js create mode 100644 node_modules/babel-runtime/core-js/array/slice.js create mode 100644 node_modules/babel-runtime/core-js/array/some.js create mode 100644 node_modules/babel-runtime/core-js/array/sort.js create mode 100644 node_modules/babel-runtime/core-js/array/splice.js create mode 100644 node_modules/babel-runtime/core-js/array/unshift.js create mode 100644 node_modules/babel-runtime/core-js/array/values.js create mode 100644 node_modules/babel-runtime/core-js/asap.js create mode 100644 node_modules/babel-runtime/core-js/clear-immediate.js create mode 100644 node_modules/babel-runtime/core-js/error/is-error.js create mode 100644 node_modules/babel-runtime/core-js/get-iterator.js create mode 100644 node_modules/babel-runtime/core-js/is-iterable.js create mode 100644 node_modules/babel-runtime/core-js/json/stringify.js create mode 100644 node_modules/babel-runtime/core-js/map.js create mode 100644 node_modules/babel-runtime/core-js/math/acosh.js create mode 100644 node_modules/babel-runtime/core-js/math/asinh.js create mode 100644 node_modules/babel-runtime/core-js/math/atanh.js create mode 100644 node_modules/babel-runtime/core-js/math/cbrt.js create mode 100644 node_modules/babel-runtime/core-js/math/clz32.js create mode 100644 node_modules/babel-runtime/core-js/math/cosh.js create mode 100644 node_modules/babel-runtime/core-js/math/expm1.js create mode 100644 node_modules/babel-runtime/core-js/math/fround.js create mode 100644 node_modules/babel-runtime/core-js/math/hypot.js create mode 100644 node_modules/babel-runtime/core-js/math/iaddh.js create mode 100644 node_modules/babel-runtime/core-js/math/imul.js create mode 100644 node_modules/babel-runtime/core-js/math/imulh.js create mode 100644 node_modules/babel-runtime/core-js/math/isubh.js create mode 100644 node_modules/babel-runtime/core-js/math/log10.js create mode 100644 node_modules/babel-runtime/core-js/math/log1p.js create mode 100644 node_modules/babel-runtime/core-js/math/log2.js create mode 100644 node_modules/babel-runtime/core-js/math/sign.js create mode 100644 node_modules/babel-runtime/core-js/math/sinh.js create mode 100644 node_modules/babel-runtime/core-js/math/tanh.js create mode 100644 node_modules/babel-runtime/core-js/math/trunc.js create mode 100644 node_modules/babel-runtime/core-js/math/umulh.js create mode 100644 node_modules/babel-runtime/core-js/number/epsilon.js create mode 100644 node_modules/babel-runtime/core-js/number/is-finite.js create mode 100644 node_modules/babel-runtime/core-js/number/is-integer.js create mode 100644 node_modules/babel-runtime/core-js/number/is-nan.js create mode 100644 node_modules/babel-runtime/core-js/number/is-safe-integer.js create mode 100644 node_modules/babel-runtime/core-js/number/max-safe-integer.js create mode 100644 node_modules/babel-runtime/core-js/number/min-safe-integer.js create mode 100644 node_modules/babel-runtime/core-js/number/parse-float.js create mode 100644 node_modules/babel-runtime/core-js/number/parse-int.js create mode 100644 node_modules/babel-runtime/core-js/object/assign.js create mode 100644 node_modules/babel-runtime/core-js/object/create.js create mode 100644 node_modules/babel-runtime/core-js/object/define-properties.js create mode 100644 node_modules/babel-runtime/core-js/object/define-property.js create mode 100644 node_modules/babel-runtime/core-js/object/entries.js create mode 100644 node_modules/babel-runtime/core-js/object/freeze.js create mode 100644 node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js create mode 100644 node_modules/babel-runtime/core-js/object/get-own-property-descriptors.js create mode 100644 node_modules/babel-runtime/core-js/object/get-own-property-names.js create mode 100644 node_modules/babel-runtime/core-js/object/get-own-property-symbols.js create mode 100644 node_modules/babel-runtime/core-js/object/get-prototype-of.js create mode 100644 node_modules/babel-runtime/core-js/object/is-extensible.js create mode 100644 node_modules/babel-runtime/core-js/object/is-frozen.js create mode 100644 node_modules/babel-runtime/core-js/object/is-sealed.js create mode 100644 node_modules/babel-runtime/core-js/object/is.js create mode 100644 node_modules/babel-runtime/core-js/object/keys.js create mode 100644 node_modules/babel-runtime/core-js/object/prevent-extensions.js create mode 100644 node_modules/babel-runtime/core-js/object/seal.js create mode 100644 node_modules/babel-runtime/core-js/object/set-prototype-of.js create mode 100644 node_modules/babel-runtime/core-js/object/values.js create mode 100644 node_modules/babel-runtime/core-js/observable.js create mode 100644 node_modules/babel-runtime/core-js/promise.js create mode 100644 node_modules/babel-runtime/core-js/reflect/apply.js create mode 100644 node_modules/babel-runtime/core-js/reflect/construct.js create mode 100644 node_modules/babel-runtime/core-js/reflect/define-metadata.js create mode 100644 node_modules/babel-runtime/core-js/reflect/define-property.js create mode 100644 node_modules/babel-runtime/core-js/reflect/delete-metadata.js create mode 100644 node_modules/babel-runtime/core-js/reflect/delete-property.js create mode 100644 node_modules/babel-runtime/core-js/reflect/enumerate.js create mode 100644 node_modules/babel-runtime/core-js/reflect/get-metadata-keys.js create mode 100644 node_modules/babel-runtime/core-js/reflect/get-metadata.js create mode 100644 node_modules/babel-runtime/core-js/reflect/get-own-metadata-keys.js create mode 100644 node_modules/babel-runtime/core-js/reflect/get-own-metadata.js create mode 100644 node_modules/babel-runtime/core-js/reflect/get-own-property-descriptor.js create mode 100644 node_modules/babel-runtime/core-js/reflect/get-prototype-of.js create mode 100644 node_modules/babel-runtime/core-js/reflect/get.js create mode 100644 node_modules/babel-runtime/core-js/reflect/has-metadata.js create mode 100644 node_modules/babel-runtime/core-js/reflect/has-own-metadata.js create mode 100644 node_modules/babel-runtime/core-js/reflect/has.js create mode 100644 node_modules/babel-runtime/core-js/reflect/is-extensible.js create mode 100644 node_modules/babel-runtime/core-js/reflect/metadata.js create mode 100644 node_modules/babel-runtime/core-js/reflect/own-keys.js create mode 100644 node_modules/babel-runtime/core-js/reflect/prevent-extensions.js create mode 100644 node_modules/babel-runtime/core-js/reflect/set-prototype-of.js create mode 100644 node_modules/babel-runtime/core-js/reflect/set.js create mode 100644 node_modules/babel-runtime/core-js/regexp/escape.js create mode 100644 node_modules/babel-runtime/core-js/set-immediate.js create mode 100644 node_modules/babel-runtime/core-js/set.js create mode 100644 node_modules/babel-runtime/core-js/string/at.js create mode 100644 node_modules/babel-runtime/core-js/string/code-point-at.js create mode 100644 node_modules/babel-runtime/core-js/string/ends-with.js create mode 100644 node_modules/babel-runtime/core-js/string/from-code-point.js create mode 100644 node_modules/babel-runtime/core-js/string/includes.js create mode 100644 node_modules/babel-runtime/core-js/string/match-all.js create mode 100644 node_modules/babel-runtime/core-js/string/pad-end.js create mode 100644 node_modules/babel-runtime/core-js/string/pad-left.js create mode 100644 node_modules/babel-runtime/core-js/string/pad-right.js create mode 100644 node_modules/babel-runtime/core-js/string/pad-start.js create mode 100644 node_modules/babel-runtime/core-js/string/raw.js create mode 100644 node_modules/babel-runtime/core-js/string/repeat.js create mode 100644 node_modules/babel-runtime/core-js/string/starts-with.js create mode 100644 node_modules/babel-runtime/core-js/string/trim-end.js create mode 100644 node_modules/babel-runtime/core-js/string/trim-left.js create mode 100644 node_modules/babel-runtime/core-js/string/trim-right.js create mode 100644 node_modules/babel-runtime/core-js/string/trim-start.js create mode 100644 node_modules/babel-runtime/core-js/string/trim.js create mode 100644 node_modules/babel-runtime/core-js/symbol.js create mode 100644 node_modules/babel-runtime/core-js/symbol/async-iterator.js create mode 100644 node_modules/babel-runtime/core-js/symbol/for.js create mode 100644 node_modules/babel-runtime/core-js/symbol/has-instance.js create mode 100644 node_modules/babel-runtime/core-js/symbol/is-concat-spreadable.js create mode 100644 node_modules/babel-runtime/core-js/symbol/iterator.js create mode 100644 node_modules/babel-runtime/core-js/symbol/key-for.js create mode 100644 node_modules/babel-runtime/core-js/symbol/match.js create mode 100644 node_modules/babel-runtime/core-js/symbol/observable.js create mode 100644 node_modules/babel-runtime/core-js/symbol/replace.js create mode 100644 node_modules/babel-runtime/core-js/symbol/search.js create mode 100644 node_modules/babel-runtime/core-js/symbol/species.js create mode 100644 node_modules/babel-runtime/core-js/symbol/split.js create mode 100644 node_modules/babel-runtime/core-js/symbol/to-primitive.js create mode 100644 node_modules/babel-runtime/core-js/symbol/to-string-tag.js create mode 100644 node_modules/babel-runtime/core-js/symbol/unscopables.js create mode 100644 node_modules/babel-runtime/core-js/system/global.js create mode 100644 node_modules/babel-runtime/core-js/weak-map.js create mode 100644 node_modules/babel-runtime/core-js/weak-set.js create mode 100644 node_modules/babel-runtime/helpers/_async-generator-delegate.js create mode 100644 node_modules/babel-runtime/helpers/_async-generator.js create mode 100644 node_modules/babel-runtime/helpers/_async-iterator.js create mode 100644 node_modules/babel-runtime/helpers/_async-to-generator.js create mode 100644 node_modules/babel-runtime/helpers/_class-call-check.js create mode 100644 node_modules/babel-runtime/helpers/_create-class.js create mode 100644 node_modules/babel-runtime/helpers/_defaults.js create mode 100644 node_modules/babel-runtime/helpers/_define-enumerable-properties.js create mode 100644 node_modules/babel-runtime/helpers/_define-property.js create mode 100644 node_modules/babel-runtime/helpers/_extends.js create mode 100644 node_modules/babel-runtime/helpers/_get.js create mode 100644 node_modules/babel-runtime/helpers/_inherits.js create mode 100644 node_modules/babel-runtime/helpers/_instanceof.js create mode 100644 node_modules/babel-runtime/helpers/_interop-require-default.js create mode 100644 node_modules/babel-runtime/helpers/_interop-require-wildcard.js create mode 100644 node_modules/babel-runtime/helpers/_jsx.js create mode 100644 node_modules/babel-runtime/helpers/_new-arrow-check.js create mode 100644 node_modules/babel-runtime/helpers/_object-destructuring-empty.js create mode 100644 node_modules/babel-runtime/helpers/_object-without-properties.js create mode 100644 node_modules/babel-runtime/helpers/_possible-constructor-return.js create mode 100644 node_modules/babel-runtime/helpers/_self-global.js create mode 100644 node_modules/babel-runtime/helpers/_set.js create mode 100644 node_modules/babel-runtime/helpers/_sliced-to-array-loose.js create mode 100644 node_modules/babel-runtime/helpers/_sliced-to-array.js create mode 100644 node_modules/babel-runtime/helpers/_tagged-template-literal-loose.js create mode 100644 node_modules/babel-runtime/helpers/_tagged-template-literal.js create mode 100644 node_modules/babel-runtime/helpers/_temporal-ref.js create mode 100644 node_modules/babel-runtime/helpers/_temporal-undefined.js create mode 100644 node_modules/babel-runtime/helpers/_to-array.js create mode 100644 node_modules/babel-runtime/helpers/_to-consumable-array.js create mode 100644 node_modules/babel-runtime/helpers/_typeof.js create mode 100644 node_modules/babel-runtime/helpers/async-generator-delegate.js create mode 100644 node_modules/babel-runtime/helpers/async-generator.js create mode 100644 node_modules/babel-runtime/helpers/async-iterator.js create mode 100644 node_modules/babel-runtime/helpers/async-to-generator.js create mode 100644 node_modules/babel-runtime/helpers/asyncGenerator.js create mode 100644 node_modules/babel-runtime/helpers/asyncGeneratorDelegate.js create mode 100644 node_modules/babel-runtime/helpers/asyncIterator.js create mode 100644 node_modules/babel-runtime/helpers/asyncToGenerator.js create mode 100644 node_modules/babel-runtime/helpers/class-call-check.js create mode 100644 node_modules/babel-runtime/helpers/classCallCheck.js create mode 100644 node_modules/babel-runtime/helpers/create-class.js create mode 100644 node_modules/babel-runtime/helpers/createClass.js create mode 100644 node_modules/babel-runtime/helpers/defaults.js create mode 100644 node_modules/babel-runtime/helpers/define-enumerable-properties.js create mode 100644 node_modules/babel-runtime/helpers/define-property.js create mode 100644 node_modules/babel-runtime/helpers/defineEnumerableProperties.js create mode 100644 node_modules/babel-runtime/helpers/defineProperty.js create mode 100644 node_modules/babel-runtime/helpers/extends.js create mode 100644 node_modules/babel-runtime/helpers/get.js create mode 100644 node_modules/babel-runtime/helpers/inherits.js create mode 100644 node_modules/babel-runtime/helpers/instanceof.js create mode 100644 node_modules/babel-runtime/helpers/interop-require-default.js create mode 100644 node_modules/babel-runtime/helpers/interop-require-wildcard.js create mode 100644 node_modules/babel-runtime/helpers/interopRequireDefault.js create mode 100644 node_modules/babel-runtime/helpers/interopRequireWildcard.js create mode 100644 node_modules/babel-runtime/helpers/jsx.js create mode 100644 node_modules/babel-runtime/helpers/new-arrow-check.js create mode 100644 node_modules/babel-runtime/helpers/newArrowCheck.js create mode 100644 node_modules/babel-runtime/helpers/object-destructuring-empty.js create mode 100644 node_modules/babel-runtime/helpers/object-without-properties.js create mode 100644 node_modules/babel-runtime/helpers/objectDestructuringEmpty.js create mode 100644 node_modules/babel-runtime/helpers/objectWithoutProperties.js create mode 100644 node_modules/babel-runtime/helpers/possible-constructor-return.js create mode 100644 node_modules/babel-runtime/helpers/possibleConstructorReturn.js create mode 100644 node_modules/babel-runtime/helpers/self-global.js create mode 100644 node_modules/babel-runtime/helpers/selfGlobal.js create mode 100644 node_modules/babel-runtime/helpers/set.js create mode 100644 node_modules/babel-runtime/helpers/sliced-to-array-loose.js create mode 100644 node_modules/babel-runtime/helpers/sliced-to-array.js create mode 100644 node_modules/babel-runtime/helpers/slicedToArray.js create mode 100644 node_modules/babel-runtime/helpers/slicedToArrayLoose.js create mode 100644 node_modules/babel-runtime/helpers/tagged-template-literal-loose.js create mode 100644 node_modules/babel-runtime/helpers/tagged-template-literal.js create mode 100644 node_modules/babel-runtime/helpers/taggedTemplateLiteral.js create mode 100644 node_modules/babel-runtime/helpers/taggedTemplateLiteralLoose.js create mode 100644 node_modules/babel-runtime/helpers/temporal-ref.js create mode 100644 node_modules/babel-runtime/helpers/temporal-undefined.js create mode 100644 node_modules/babel-runtime/helpers/temporalRef.js create mode 100644 node_modules/babel-runtime/helpers/temporalUndefined.js create mode 100644 node_modules/babel-runtime/helpers/to-array.js create mode 100644 node_modules/babel-runtime/helpers/to-consumable-array.js create mode 100644 node_modules/babel-runtime/helpers/toArray.js create mode 100644 node_modules/babel-runtime/helpers/toConsumableArray.js create mode 100644 node_modules/babel-runtime/helpers/typeof.js create mode 100644 node_modules/babel-runtime/package-lock.json create mode 100644 node_modules/babel-runtime/package.json create mode 100644 node_modules/babel-runtime/regenerator/index.js create mode 100644 node_modules/babel-template/.npmignore create mode 100644 node_modules/babel-template/README.md create mode 100644 node_modules/babel-template/lib/index.js create mode 100644 node_modules/babel-template/package-lock.json create mode 100644 node_modules/babel-template/package.json create mode 100644 node_modules/babel-traverse/.npmignore create mode 100644 node_modules/babel-traverse/README.md create mode 100644 node_modules/babel-traverse/lib/cache.js create mode 100644 node_modules/babel-traverse/lib/context.js create mode 100644 node_modules/babel-traverse/lib/hub.js create mode 100644 node_modules/babel-traverse/lib/index.js create mode 100644 node_modules/babel-traverse/lib/path/ancestry.js create mode 100644 node_modules/babel-traverse/lib/path/comments.js create mode 100644 node_modules/babel-traverse/lib/path/context.js create mode 100644 node_modules/babel-traverse/lib/path/conversion.js create mode 100644 node_modules/babel-traverse/lib/path/evaluation.js create mode 100644 node_modules/babel-traverse/lib/path/family.js create mode 100644 node_modules/babel-traverse/lib/path/index.js create mode 100644 node_modules/babel-traverse/lib/path/inference/index.js create mode 100644 node_modules/babel-traverse/lib/path/inference/inferer-reference.js create mode 100644 node_modules/babel-traverse/lib/path/inference/inferers.js create mode 100644 node_modules/babel-traverse/lib/path/introspection.js create mode 100644 node_modules/babel-traverse/lib/path/lib/hoister.js create mode 100644 node_modules/babel-traverse/lib/path/lib/removal-hooks.js create mode 100644 node_modules/babel-traverse/lib/path/lib/virtual-types.js create mode 100644 node_modules/babel-traverse/lib/path/modification.js create mode 100644 node_modules/babel-traverse/lib/path/removal.js create mode 100644 node_modules/babel-traverse/lib/path/replacement.js create mode 100644 node_modules/babel-traverse/lib/scope/binding.js create mode 100644 node_modules/babel-traverse/lib/scope/index.js create mode 100644 node_modules/babel-traverse/lib/scope/lib/renamer.js create mode 100644 node_modules/babel-traverse/lib/visitors.js create mode 100644 node_modules/babel-traverse/package-lock.json create mode 100644 node_modules/babel-traverse/package.json create mode 100644 node_modules/babel-types/.npmignore create mode 100644 node_modules/babel-types/README.md create mode 100644 node_modules/babel-types/lib/constants.js create mode 100644 node_modules/babel-types/lib/converters.js create mode 100644 node_modules/babel-types/lib/definitions/core.js create mode 100644 node_modules/babel-types/lib/definitions/es2015.js create mode 100644 node_modules/babel-types/lib/definitions/experimental.js create mode 100644 node_modules/babel-types/lib/definitions/flow.js create mode 100644 node_modules/babel-types/lib/definitions/index.js create mode 100644 node_modules/babel-types/lib/definitions/init.js create mode 100644 node_modules/babel-types/lib/definitions/jsx.js create mode 100644 node_modules/babel-types/lib/definitions/misc.js create mode 100644 node_modules/babel-types/lib/flow.js create mode 100644 node_modules/babel-types/lib/index.js create mode 100644 node_modules/babel-types/lib/react.js create mode 100644 node_modules/babel-types/lib/retrievers.js create mode 100644 node_modules/babel-types/lib/validators.js create mode 100644 node_modules/babel-types/package-lock.json create mode 100644 node_modules/babel-types/package.json create mode 100644 node_modules/babylon/CHANGELOG.md create mode 100644 node_modules/babylon/LICENSE create mode 100644 node_modules/babylon/README.md create mode 100755 node_modules/babylon/bin/babylon.js create mode 100644 node_modules/babylon/bin/generate-identifier-regex.js create mode 100644 node_modules/babylon/lib/index.js create mode 100644 node_modules/babylon/package.json create mode 100644 node_modules/balanced-match/.npmignore create mode 100644 node_modules/balanced-match/LICENSE.md create mode 100644 node_modules/balanced-match/README.md create mode 100644 node_modules/balanced-match/index.js create mode 100644 node_modules/balanced-match/package.json create mode 100644 node_modules/base64-js/LICENSE create mode 100644 node_modules/base64-js/README.md create mode 100644 node_modules/base64-js/base64js.min.js create mode 100644 node_modules/base64-js/index.js create mode 100644 node_modules/base64-js/package.json create mode 100644 node_modules/base64-js/test/big-data.js create mode 100644 node_modules/base64-js/test/convert.js create mode 100644 node_modules/base64-js/test/url-safe.js create mode 100644 node_modules/big.js/LICENCE create mode 100644 node_modules/big.js/README.md create mode 100644 node_modules/big.js/big.js create mode 100644 node_modules/big.js/big.min.js create mode 100644 node_modules/big.js/package.json create mode 100644 node_modules/binary-extensions/binary-extensions.json create mode 100644 node_modules/binary-extensions/license create mode 100644 node_modules/binary-extensions/package.json create mode 100644 node_modules/binary-extensions/readme.md create mode 100644 node_modules/bn.js/.npmignore create mode 100644 node_modules/bn.js/README.md create mode 100644 node_modules/bn.js/lib/bn.js create mode 100644 node_modules/bn.js/package.json create mode 100644 node_modules/bn.js/util/genCombMulTo.js create mode 100644 node_modules/bn.js/util/genCombMulTo10.js create mode 100644 node_modules/brace-expansion/README.md create mode 100644 node_modules/brace-expansion/index.js create mode 100644 node_modules/brace-expansion/package.json create mode 100644 node_modules/braces/LICENSE create mode 100644 node_modules/braces/README.md create mode 100644 node_modules/braces/index.js create mode 100644 node_modules/braces/package.json create mode 100644 node_modules/brorand/.npmignore create mode 100644 node_modules/brorand/README.md create mode 100644 node_modules/brorand/index.js create mode 100644 node_modules/brorand/package.json create mode 100644 node_modules/brorand/test/api-test.js create mode 100644 node_modules/browserify-aes/.npmignore create mode 100644 node_modules/browserify-aes/.travis.yml create mode 100644 node_modules/browserify-aes/LICENSE create mode 100644 node_modules/browserify-aes/README.md create mode 100644 node_modules/browserify-aes/aes.js create mode 100644 node_modules/browserify-aes/authCipher.js create mode 100644 node_modules/browserify-aes/browser.js create mode 100644 node_modules/browserify-aes/decrypter.js create mode 100644 node_modules/browserify-aes/encrypter.js create mode 100644 node_modules/browserify-aes/ghash.js create mode 100644 node_modules/browserify-aes/index.js create mode 100644 node_modules/browserify-aes/modes/cbc.js create mode 100644 node_modules/browserify-aes/modes/cfb.js create mode 100644 node_modules/browserify-aes/modes/cfb1.js create mode 100644 node_modules/browserify-aes/modes/cfb8.js create mode 100644 node_modules/browserify-aes/modes/ctr.js create mode 100644 node_modules/browserify-aes/modes/ecb.js create mode 100644 node_modules/browserify-aes/modes/index.js create mode 100644 node_modules/browserify-aes/modes/list.json create mode 100644 node_modules/browserify-aes/modes/ofb.js create mode 100644 node_modules/browserify-aes/package.json create mode 100644 node_modules/browserify-aes/streamCipher.js create mode 100644 node_modules/browserify-cipher/.travis.yml create mode 100644 node_modules/browserify-cipher/browser.js create mode 100644 node_modules/browserify-cipher/index.js create mode 100644 node_modules/browserify-cipher/package.json create mode 100644 node_modules/browserify-cipher/readme.md create mode 100644 node_modules/browserify-cipher/test.js create mode 100644 node_modules/browserify-des/index.js create mode 100644 node_modules/browserify-des/modes.js create mode 100644 node_modules/browserify-des/package.json create mode 100644 node_modules/browserify-des/readme.md create mode 100644 node_modules/browserify-des/test.js create mode 100644 node_modules/browserify-rsa/.travis.yml create mode 100644 node_modules/browserify-rsa/LICENSE create mode 100644 node_modules/browserify-rsa/index.js create mode 100644 node_modules/browserify-rsa/package.json create mode 100644 node_modules/browserify-rsa/readme.md create mode 100644 node_modules/browserify-rsa/test.js create mode 100644 node_modules/browserify-sign/LICENSE create mode 100644 node_modules/browserify-sign/README.md create mode 100644 node_modules/browserify-sign/algos.js create mode 100644 node_modules/browserify-sign/browser/algorithms.json create mode 100644 node_modules/browserify-sign/browser/curves.json create mode 100644 node_modules/browserify-sign/browser/index.js create mode 100644 node_modules/browserify-sign/browser/sign.js create mode 100644 node_modules/browserify-sign/browser/verify.js create mode 100644 node_modules/browserify-sign/index.js create mode 100644 node_modules/browserify-sign/package.json create mode 100644 node_modules/browserify-zlib/.npmignore create mode 100644 node_modules/browserify-zlib/.travis.yml create mode 100644 node_modules/browserify-zlib/README.md create mode 100644 node_modules/browserify-zlib/package.json create mode 100644 node_modules/browserify-zlib/src/binding.js create mode 100644 node_modules/browserify-zlib/src/index.js create mode 100644 node_modules/browserify-zlib/test/fixtures/elipses.txt create mode 100644 node_modules/browserify-zlib/test/fixtures/empty.txt create mode 100644 node_modules/browserify-zlib/test/fixtures/person.jpg create mode 100755 node_modules/browserify-zlib/test/ignored/test-zlib-dictionary-fail.js create mode 100755 node_modules/browserify-zlib/test/ignored/test-zlib-dictionary.js create mode 100755 node_modules/browserify-zlib/test/ignored/test-zlib-params.js create mode 100644 node_modules/browserify-zlib/test/package.json create mode 100755 node_modules/browserify-zlib/test/test-zlib-close-after-write.js create mode 100755 node_modules/browserify-zlib/test/test-zlib-convenience-methods.js create mode 100755 node_modules/browserify-zlib/test/test-zlib-from-string.js create mode 100755 node_modules/browserify-zlib/test/test-zlib-invalid-input.js create mode 100755 node_modules/browserify-zlib/test/test-zlib-random-byte-pipes.js create mode 100755 node_modules/browserify-zlib/test/test-zlib-write-after-flush.js create mode 100755 node_modules/browserify-zlib/test/test-zlib-zero-byte.js create mode 100644 node_modules/browserify-zlib/test/test-zlib.js create mode 100644 node_modules/buffer-xor/.npmignore create mode 100644 node_modules/buffer-xor/.travis.yml create mode 100644 node_modules/buffer-xor/LICENSE create mode 100644 node_modules/buffer-xor/README.md create mode 100644 node_modules/buffer-xor/index.js create mode 100644 node_modules/buffer-xor/inline.js create mode 100644 node_modules/buffer-xor/inplace.js create mode 100644 node_modules/buffer-xor/package.json create mode 100644 node_modules/buffer-xor/test/fixtures.json create mode 100644 node_modules/buffer-xor/test/index.js create mode 100644 node_modules/buffer/.npmignore create mode 100644 node_modules/buffer/.travis.yml create mode 100644 node_modules/buffer/AUTHORS.md create mode 100644 node_modules/buffer/LICENSE create mode 100644 node_modules/buffer/README.md create mode 100755 node_modules/buffer/bin/download-node-tests.js create mode 100644 node_modules/buffer/bin/test.js create mode 100755 node_modules/buffer/bin/update-authors.sh create mode 100644 node_modules/buffer/bin/zuul-es5.yml create mode 100644 node_modules/buffer/bin/zuul-es6.yml create mode 100644 node_modules/buffer/index.js create mode 100644 node_modules/buffer/package.json create mode 100644 node_modules/buffer/test/_polyfill.js create mode 100644 node_modules/buffer/test/base64.js create mode 100644 node_modules/buffer/test/basic.js create mode 100644 node_modules/buffer/test/compare.js create mode 100644 node_modules/buffer/test/constructor.js create mode 100644 node_modules/buffer/test/from-string.js create mode 100644 node_modules/buffer/test/is-buffer.js create mode 100644 node_modules/buffer/test/methods.js create mode 100644 node_modules/buffer/test/node/test-buffer-alloc.js create mode 100644 node_modules/buffer/test/node/test-buffer-arraybuffer.js create mode 100644 node_modules/buffer/test/node/test-buffer-ascii.js create mode 100644 node_modules/buffer/test/node/test-buffer-bad-overload.js create mode 100644 node_modules/buffer/test/node/test-buffer-badhex.js create mode 100644 node_modules/buffer/test/node/test-buffer-bytelength.js create mode 100644 node_modules/buffer/test/node/test-buffer-compare-offset.js create mode 100644 node_modules/buffer/test/node/test-buffer-concat.js create mode 100644 node_modules/buffer/test/node/test-buffer-fill.js create mode 100644 node_modules/buffer/test/node/test-buffer-includes.js create mode 100644 node_modules/buffer/test/node/test-buffer-indexof.js create mode 100644 node_modules/buffer/test/node/test-buffer-inheritance.js create mode 100644 node_modules/buffer/test/node/test-buffer-inspect.js create mode 100644 node_modules/buffer/test/node/test-buffer-iterator.js create mode 100644 node_modules/buffer/test/node/test-buffer-safe-unsafe.js create mode 100644 node_modules/buffer/test/node/test-buffer-slow.js create mode 100644 node_modules/buffer/test/node/test-buffer-swap.js create mode 100644 node_modules/buffer/test/node/test-buffer-zero-fill-cli.js create mode 100644 node_modules/buffer/test/node/test-buffer-zero-fill-reset.js create mode 100644 node_modules/buffer/test/node/test-buffer.js create mode 100644 node_modules/buffer/test/slice.js create mode 100644 node_modules/buffer/test/static.js create mode 100644 node_modules/buffer/test/to-string.js create mode 100644 node_modules/buffer/test/write.js create mode 100644 node_modules/buffer/test/write_infinity.js create mode 100644 node_modules/builtin-modules/builtin-modules.json create mode 100644 node_modules/builtin-modules/index.js create mode 100644 node_modules/builtin-modules/license create mode 100644 node_modules/builtin-modules/package.json create mode 100644 node_modules/builtin-modules/readme.md create mode 100644 node_modules/builtin-modules/static.js create mode 100644 node_modules/builtin-status-codes/browser.js create mode 100644 node_modules/builtin-status-codes/build.js create mode 100644 node_modules/builtin-status-codes/index.js create mode 100644 node_modules/builtin-status-codes/license create mode 100644 node_modules/builtin-status-codes/package.json create mode 100644 node_modules/builtin-status-codes/readme.md create mode 100644 node_modules/camelcase/index.js create mode 100644 node_modules/camelcase/license create mode 100644 node_modules/camelcase/package.json create mode 100644 node_modules/camelcase/readme.md create mode 100644 node_modules/center-align/LICENSE create mode 100644 node_modules/center-align/README.md create mode 100644 node_modules/center-align/index.js create mode 100644 node_modules/center-align/package.json create mode 100644 node_modules/center-align/utils.js create mode 100644 node_modules/chalk/index.js create mode 100644 node_modules/chalk/license create mode 100644 node_modules/chalk/package.json create mode 100644 node_modules/chalk/readme.md create mode 100644 node_modules/chokidar/CHANGELOG.md create mode 100644 node_modules/chokidar/README.md create mode 100644 node_modules/chokidar/index.js create mode 100644 node_modules/chokidar/lib/fsevents-handler.js create mode 100644 node_modules/chokidar/lib/nodefs-handler.js create mode 100644 node_modules/chokidar/package.json create mode 100644 node_modules/cipher-base/.eslintrc create mode 100644 node_modules/cipher-base/.npmignore create mode 100644 node_modules/cipher-base/.travis.yml create mode 100644 node_modules/cipher-base/LICENSE create mode 100644 node_modules/cipher-base/README.md create mode 100644 node_modules/cipher-base/index.js create mode 100644 node_modules/cipher-base/package.json create mode 100644 node_modules/cipher-base/test.js create mode 100644 node_modules/cliui/.coveralls.yml create mode 100644 node_modules/cliui/.npmignore create mode 100644 node_modules/cliui/.travis.yml create mode 100644 node_modules/cliui/LICENSE.txt create mode 100644 node_modules/cliui/README.md create mode 100644 node_modules/cliui/index.js create mode 100644 node_modules/cliui/node_modules/wordwrap/.npmignore create mode 100644 node_modules/cliui/node_modules/wordwrap/README.markdown create mode 100644 node_modules/cliui/node_modules/wordwrap/example/center.js create mode 100644 node_modules/cliui/node_modules/wordwrap/example/meat.js create mode 100644 node_modules/cliui/node_modules/wordwrap/index.js create mode 100644 node_modules/cliui/node_modules/wordwrap/package.json create mode 100644 node_modules/cliui/node_modules/wordwrap/test/break.js create mode 100644 node_modules/cliui/node_modules/wordwrap/test/idleness.txt create mode 100644 node_modules/cliui/node_modules/wordwrap/test/wrap.js create mode 100644 node_modules/cliui/package.json create mode 100644 node_modules/cliui/test/cliui.js create mode 100644 node_modules/co/History.md create mode 100644 node_modules/co/LICENSE create mode 100644 node_modules/co/Readme.md create mode 100644 node_modules/co/index.js create mode 100644 node_modules/co/package.json create mode 100644 node_modules/code-point-at/index.js create mode 100644 node_modules/code-point-at/license create mode 100644 node_modules/code-point-at/package.json create mode 100644 node_modules/code-point-at/readme.md create mode 100644 node_modules/colors/.travis.yml create mode 100644 node_modules/colors/MIT-LICENSE.txt create mode 100644 node_modules/colors/ReadMe.md create mode 100644 node_modules/colors/examples/normal-usage.js create mode 100644 node_modules/colors/examples/safe-string.js create mode 100644 node_modules/colors/lib/colors.js create mode 100644 node_modules/colors/lib/custom/trap.js create mode 100644 node_modules/colors/lib/custom/zalgo.js create mode 100644 node_modules/colors/lib/extendStringPrototype.js create mode 100644 node_modules/colors/lib/index.js create mode 100644 node_modules/colors/lib/maps/america.js create mode 100644 node_modules/colors/lib/maps/rainbow.js create mode 100644 node_modules/colors/lib/maps/random.js create mode 100644 node_modules/colors/lib/maps/zebra.js create mode 100644 node_modules/colors/lib/styles.js create mode 100644 node_modules/colors/lib/system/supports-colors.js create mode 100644 node_modules/colors/package.json create mode 100644 node_modules/colors/safe.js create mode 100644 node_modules/colors/screenshots/colors.png create mode 100644 node_modules/colors/tests/basic-test.js create mode 100644 node_modules/colors/tests/safe-test.js create mode 100644 node_modules/colors/themes/generic-logging.js create mode 100644 node_modules/commander/History.md create mode 100644 node_modules/commander/LICENSE create mode 100644 node_modules/commander/Readme.md create mode 100644 node_modules/commander/index.js create mode 100644 node_modules/commander/package.json create mode 100644 node_modules/commondir/LICENSE create mode 100644 node_modules/commondir/example/dir.js create mode 100644 node_modules/commondir/index.js create mode 100644 node_modules/commondir/package.json create mode 100644 node_modules/commondir/readme.markdown create mode 100644 node_modules/commondir/test/dirs.js create mode 100644 node_modules/concat-map/.travis.yml create mode 100644 node_modules/concat-map/LICENSE create mode 100644 node_modules/concat-map/README.markdown create mode 100644 node_modules/concat-map/example/map.js create mode 100644 node_modules/concat-map/index.js create mode 100644 node_modules/concat-map/package.json create mode 100644 node_modules/concat-map/test/map.js create mode 100644 node_modules/console-browserify/.npmignore create mode 100644 node_modules/console-browserify/.testem.json create mode 100644 node_modules/console-browserify/.travis.yml create mode 100644 node_modules/console-browserify/LICENCE create mode 100644 node_modules/console-browserify/README.md create mode 100644 node_modules/console-browserify/index.js create mode 100644 node_modules/console-browserify/package.json create mode 100644 node_modules/console-browserify/test/index.js create mode 100644 node_modules/console-browserify/test/static/index.html create mode 100644 node_modules/console-browserify/test/static/test-adapter.js create mode 100644 node_modules/constants-browserify/README.md create mode 100755 node_modules/constants-browserify/build.sh create mode 100644 node_modules/constants-browserify/constants.json create mode 100644 node_modules/constants-browserify/package.json create mode 100644 node_modules/constants-browserify/test.js create mode 100644 node_modules/convert-source-map/.npmignore create mode 100644 node_modules/convert-source-map/.travis.yml create mode 100644 node_modules/convert-source-map/LICENSE create mode 100644 node_modules/convert-source-map/README.md create mode 100644 node_modules/convert-source-map/example/comment-to-json.js create mode 100644 node_modules/convert-source-map/index.js create mode 100644 node_modules/convert-source-map/package.json create mode 100644 node_modules/convert-source-map/test/comment-regex.js create mode 100644 node_modules/convert-source-map/test/convert-source-map.js create mode 100644 node_modules/convert-source-map/test/fixtures/map-file-comment-double-slash.css create mode 100644 node_modules/convert-source-map/test/fixtures/map-file-comment-inline.css create mode 100644 node_modules/convert-source-map/test/fixtures/map-file-comment.css create mode 100644 node_modules/convert-source-map/test/fixtures/map-file-comment.css.map create mode 100644 node_modules/convert-source-map/test/map-file-comment.js create mode 100644 node_modules/core-js/CHANGELOG.md create mode 100644 node_modules/core-js/Gruntfile.js create mode 100644 node_modules/core-js/LICENSE create mode 100644 node_modules/core-js/README.md create mode 100644 node_modules/core-js/bower.json create mode 100644 node_modules/core-js/build/Gruntfile.ls create mode 100644 node_modules/core-js/build/build.ls create mode 100644 node_modules/core-js/build/config.js create mode 100644 node_modules/core-js/build/index.js create mode 100644 node_modules/core-js/client/core.js create mode 100644 node_modules/core-js/client/core.min.js create mode 100644 node_modules/core-js/client/core.min.js.map create mode 100644 node_modules/core-js/client/library.js create mode 100644 node_modules/core-js/client/library.min.js create mode 100644 node_modules/core-js/client/library.min.js.map create mode 100644 node_modules/core-js/client/shim.js create mode 100644 node_modules/core-js/client/shim.min.js create mode 100644 node_modules/core-js/client/shim.min.js.map create mode 100644 node_modules/core-js/core/_.js create mode 100644 node_modules/core-js/core/delay.js create mode 100644 node_modules/core-js/core/dict.js create mode 100644 node_modules/core-js/core/function.js create mode 100644 node_modules/core-js/core/index.js create mode 100644 node_modules/core-js/core/number.js create mode 100644 node_modules/core-js/core/object.js create mode 100644 node_modules/core-js/core/regexp.js create mode 100644 node_modules/core-js/core/string.js create mode 100644 node_modules/core-js/es5/index.js create mode 100644 node_modules/core-js/es6/array.js create mode 100644 node_modules/core-js/es6/date.js create mode 100644 node_modules/core-js/es6/function.js create mode 100644 node_modules/core-js/es6/index.js create mode 100644 node_modules/core-js/es6/map.js create mode 100644 node_modules/core-js/es6/math.js create mode 100644 node_modules/core-js/es6/number.js create mode 100644 node_modules/core-js/es6/object.js create mode 100644 node_modules/core-js/es6/parse-float.js create mode 100644 node_modules/core-js/es6/parse-int.js create mode 100644 node_modules/core-js/es6/promise.js create mode 100644 node_modules/core-js/es6/reflect.js create mode 100644 node_modules/core-js/es6/regexp.js create mode 100644 node_modules/core-js/es6/set.js create mode 100644 node_modules/core-js/es6/string.js create mode 100644 node_modules/core-js/es6/symbol.js create mode 100644 node_modules/core-js/es6/typed.js create mode 100644 node_modules/core-js/es6/weak-map.js create mode 100644 node_modules/core-js/es6/weak-set.js create mode 100644 node_modules/core-js/es7/array.js create mode 100644 node_modules/core-js/es7/asap.js create mode 100644 node_modules/core-js/es7/error.js create mode 100644 node_modules/core-js/es7/global.js create mode 100644 node_modules/core-js/es7/index.js create mode 100644 node_modules/core-js/es7/map.js create mode 100644 node_modules/core-js/es7/math.js create mode 100644 node_modules/core-js/es7/object.js create mode 100644 node_modules/core-js/es7/observable.js create mode 100644 node_modules/core-js/es7/promise.js create mode 100644 node_modules/core-js/es7/reflect.js create mode 100644 node_modules/core-js/es7/set.js create mode 100644 node_modules/core-js/es7/string.js create mode 100644 node_modules/core-js/es7/symbol.js create mode 100644 node_modules/core-js/es7/system.js create mode 100644 node_modules/core-js/es7/weak-map.js create mode 100644 node_modules/core-js/es7/weak-set.js create mode 100644 node_modules/core-js/fn/_.js create mode 100644 node_modules/core-js/fn/array/concat.js create mode 100644 node_modules/core-js/fn/array/copy-within.js create mode 100644 node_modules/core-js/fn/array/entries.js create mode 100644 node_modules/core-js/fn/array/every.js create mode 100644 node_modules/core-js/fn/array/fill.js create mode 100644 node_modules/core-js/fn/array/filter.js create mode 100644 node_modules/core-js/fn/array/find-index.js create mode 100644 node_modules/core-js/fn/array/find.js create mode 100644 node_modules/core-js/fn/array/flat-map.js create mode 100644 node_modules/core-js/fn/array/flatten.js create mode 100644 node_modules/core-js/fn/array/for-each.js create mode 100644 node_modules/core-js/fn/array/from.js create mode 100644 node_modules/core-js/fn/array/includes.js create mode 100644 node_modules/core-js/fn/array/index-of.js create mode 100644 node_modules/core-js/fn/array/index.js create mode 100644 node_modules/core-js/fn/array/is-array.js create mode 100644 node_modules/core-js/fn/array/iterator.js create mode 100644 node_modules/core-js/fn/array/join.js create mode 100644 node_modules/core-js/fn/array/keys.js create mode 100644 node_modules/core-js/fn/array/last-index-of.js create mode 100644 node_modules/core-js/fn/array/map.js create mode 100644 node_modules/core-js/fn/array/of.js create mode 100644 node_modules/core-js/fn/array/pop.js create mode 100644 node_modules/core-js/fn/array/push.js create mode 100644 node_modules/core-js/fn/array/reduce-right.js create mode 100644 node_modules/core-js/fn/array/reduce.js create mode 100644 node_modules/core-js/fn/array/reverse.js create mode 100644 node_modules/core-js/fn/array/shift.js create mode 100644 node_modules/core-js/fn/array/slice.js create mode 100644 node_modules/core-js/fn/array/some.js create mode 100644 node_modules/core-js/fn/array/sort.js create mode 100644 node_modules/core-js/fn/array/splice.js create mode 100644 node_modules/core-js/fn/array/unshift.js create mode 100644 node_modules/core-js/fn/array/values.js create mode 100644 node_modules/core-js/fn/array/virtual/copy-within.js create mode 100644 node_modules/core-js/fn/array/virtual/entries.js create mode 100644 node_modules/core-js/fn/array/virtual/every.js create mode 100644 node_modules/core-js/fn/array/virtual/fill.js create mode 100644 node_modules/core-js/fn/array/virtual/filter.js create mode 100644 node_modules/core-js/fn/array/virtual/find-index.js create mode 100644 node_modules/core-js/fn/array/virtual/find.js create mode 100644 node_modules/core-js/fn/array/virtual/flat-map.js create mode 100644 node_modules/core-js/fn/array/virtual/flatten.js create mode 100644 node_modules/core-js/fn/array/virtual/for-each.js create mode 100644 node_modules/core-js/fn/array/virtual/includes.js create mode 100644 node_modules/core-js/fn/array/virtual/index-of.js create mode 100644 node_modules/core-js/fn/array/virtual/index.js create mode 100644 node_modules/core-js/fn/array/virtual/iterator.js create mode 100644 node_modules/core-js/fn/array/virtual/join.js create mode 100644 node_modules/core-js/fn/array/virtual/keys.js create mode 100644 node_modules/core-js/fn/array/virtual/last-index-of.js create mode 100644 node_modules/core-js/fn/array/virtual/map.js create mode 100644 node_modules/core-js/fn/array/virtual/reduce-right.js create mode 100644 node_modules/core-js/fn/array/virtual/reduce.js create mode 100644 node_modules/core-js/fn/array/virtual/slice.js create mode 100644 node_modules/core-js/fn/array/virtual/some.js create mode 100644 node_modules/core-js/fn/array/virtual/sort.js create mode 100644 node_modules/core-js/fn/array/virtual/values.js create mode 100644 node_modules/core-js/fn/asap.js create mode 100644 node_modules/core-js/fn/clear-immediate.js create mode 100644 node_modules/core-js/fn/date/index.js create mode 100644 node_modules/core-js/fn/date/now.js create mode 100644 node_modules/core-js/fn/date/to-iso-string.js create mode 100644 node_modules/core-js/fn/date/to-json.js create mode 100644 node_modules/core-js/fn/date/to-primitive.js create mode 100644 node_modules/core-js/fn/date/to-string.js create mode 100644 node_modules/core-js/fn/delay.js create mode 100644 node_modules/core-js/fn/dict.js create mode 100644 node_modules/core-js/fn/dom-collections/index.js create mode 100644 node_modules/core-js/fn/dom-collections/iterator.js create mode 100644 node_modules/core-js/fn/error/index.js create mode 100644 node_modules/core-js/fn/error/is-error.js create mode 100644 node_modules/core-js/fn/function/bind.js create mode 100644 node_modules/core-js/fn/function/has-instance.js create mode 100644 node_modules/core-js/fn/function/index.js create mode 100644 node_modules/core-js/fn/function/name.js create mode 100644 node_modules/core-js/fn/function/part.js create mode 100644 node_modules/core-js/fn/function/virtual/bind.js create mode 100644 node_modules/core-js/fn/function/virtual/index.js create mode 100644 node_modules/core-js/fn/function/virtual/part.js create mode 100644 node_modules/core-js/fn/get-iterator-method.js create mode 100644 node_modules/core-js/fn/get-iterator.js create mode 100644 node_modules/core-js/fn/global.js create mode 100644 node_modules/core-js/fn/is-iterable.js create mode 100644 node_modules/core-js/fn/json/index.js create mode 100644 node_modules/core-js/fn/json/stringify.js create mode 100644 node_modules/core-js/fn/map.js create mode 100644 node_modules/core-js/fn/map/from.js create mode 100644 node_modules/core-js/fn/map/index.js create mode 100644 node_modules/core-js/fn/map/of.js create mode 100644 node_modules/core-js/fn/math/acosh.js create mode 100644 node_modules/core-js/fn/math/asinh.js create mode 100644 node_modules/core-js/fn/math/atanh.js create mode 100644 node_modules/core-js/fn/math/cbrt.js create mode 100644 node_modules/core-js/fn/math/clamp.js create mode 100644 node_modules/core-js/fn/math/clz32.js create mode 100644 node_modules/core-js/fn/math/cosh.js create mode 100644 node_modules/core-js/fn/math/deg-per-rad.js create mode 100644 node_modules/core-js/fn/math/degrees.js create mode 100644 node_modules/core-js/fn/math/expm1.js create mode 100644 node_modules/core-js/fn/math/fround.js create mode 100644 node_modules/core-js/fn/math/fscale.js create mode 100644 node_modules/core-js/fn/math/hypot.js create mode 100644 node_modules/core-js/fn/math/iaddh.js create mode 100644 node_modules/core-js/fn/math/imul.js create mode 100644 node_modules/core-js/fn/math/imulh.js create mode 100644 node_modules/core-js/fn/math/index.js create mode 100644 node_modules/core-js/fn/math/isubh.js create mode 100644 node_modules/core-js/fn/math/log10.js create mode 100644 node_modules/core-js/fn/math/log1p.js create mode 100644 node_modules/core-js/fn/math/log2.js create mode 100644 node_modules/core-js/fn/math/rad-per-deg.js create mode 100644 node_modules/core-js/fn/math/radians.js create mode 100644 node_modules/core-js/fn/math/scale.js create mode 100644 node_modules/core-js/fn/math/sign.js create mode 100644 node_modules/core-js/fn/math/signbit.js create mode 100644 node_modules/core-js/fn/math/sinh.js create mode 100644 node_modules/core-js/fn/math/tanh.js create mode 100644 node_modules/core-js/fn/math/trunc.js create mode 100644 node_modules/core-js/fn/math/umulh.js create mode 100644 node_modules/core-js/fn/number/constructor.js create mode 100644 node_modules/core-js/fn/number/epsilon.js create mode 100644 node_modules/core-js/fn/number/index.js create mode 100644 node_modules/core-js/fn/number/is-finite.js create mode 100644 node_modules/core-js/fn/number/is-integer.js create mode 100644 node_modules/core-js/fn/number/is-nan.js create mode 100644 node_modules/core-js/fn/number/is-safe-integer.js create mode 100644 node_modules/core-js/fn/number/iterator.js create mode 100644 node_modules/core-js/fn/number/max-safe-integer.js create mode 100644 node_modules/core-js/fn/number/min-safe-integer.js create mode 100644 node_modules/core-js/fn/number/parse-float.js create mode 100644 node_modules/core-js/fn/number/parse-int.js create mode 100644 node_modules/core-js/fn/number/to-fixed.js create mode 100644 node_modules/core-js/fn/number/to-precision.js create mode 100644 node_modules/core-js/fn/number/virtual/index.js create mode 100644 node_modules/core-js/fn/number/virtual/iterator.js create mode 100644 node_modules/core-js/fn/number/virtual/to-fixed.js create mode 100644 node_modules/core-js/fn/number/virtual/to-precision.js create mode 100644 node_modules/core-js/fn/object/assign.js create mode 100644 node_modules/core-js/fn/object/classof.js create mode 100644 node_modules/core-js/fn/object/create.js create mode 100644 node_modules/core-js/fn/object/define-getter.js create mode 100644 node_modules/core-js/fn/object/define-properties.js create mode 100644 node_modules/core-js/fn/object/define-property.js create mode 100644 node_modules/core-js/fn/object/define-setter.js create mode 100644 node_modules/core-js/fn/object/define.js create mode 100644 node_modules/core-js/fn/object/entries.js create mode 100644 node_modules/core-js/fn/object/freeze.js create mode 100644 node_modules/core-js/fn/object/get-own-property-descriptor.js create mode 100644 node_modules/core-js/fn/object/get-own-property-descriptors.js create mode 100644 node_modules/core-js/fn/object/get-own-property-names.js create mode 100644 node_modules/core-js/fn/object/get-own-property-symbols.js create mode 100644 node_modules/core-js/fn/object/get-prototype-of.js create mode 100644 node_modules/core-js/fn/object/index.js create mode 100644 node_modules/core-js/fn/object/is-extensible.js create mode 100644 node_modules/core-js/fn/object/is-frozen.js create mode 100644 node_modules/core-js/fn/object/is-object.js create mode 100644 node_modules/core-js/fn/object/is-sealed.js create mode 100644 node_modules/core-js/fn/object/is.js create mode 100644 node_modules/core-js/fn/object/keys.js create mode 100644 node_modules/core-js/fn/object/lookup-getter.js create mode 100644 node_modules/core-js/fn/object/lookup-setter.js create mode 100644 node_modules/core-js/fn/object/make.js create mode 100644 node_modules/core-js/fn/object/prevent-extensions.js create mode 100644 node_modules/core-js/fn/object/seal.js create mode 100644 node_modules/core-js/fn/object/set-prototype-of.js create mode 100644 node_modules/core-js/fn/object/values.js create mode 100644 node_modules/core-js/fn/observable.js create mode 100644 node_modules/core-js/fn/parse-float.js create mode 100644 node_modules/core-js/fn/parse-int.js create mode 100644 node_modules/core-js/fn/promise.js create mode 100644 node_modules/core-js/fn/promise/finally.js create mode 100644 node_modules/core-js/fn/promise/index.js create mode 100644 node_modules/core-js/fn/promise/try.js create mode 100644 node_modules/core-js/fn/reflect/apply.js create mode 100644 node_modules/core-js/fn/reflect/construct.js create mode 100644 node_modules/core-js/fn/reflect/define-metadata.js create mode 100644 node_modules/core-js/fn/reflect/define-property.js create mode 100644 node_modules/core-js/fn/reflect/delete-metadata.js create mode 100644 node_modules/core-js/fn/reflect/delete-property.js create mode 100644 node_modules/core-js/fn/reflect/enumerate.js create mode 100644 node_modules/core-js/fn/reflect/get-metadata-keys.js create mode 100644 node_modules/core-js/fn/reflect/get-metadata.js create mode 100644 node_modules/core-js/fn/reflect/get-own-metadata-keys.js create mode 100644 node_modules/core-js/fn/reflect/get-own-metadata.js create mode 100644 node_modules/core-js/fn/reflect/get-own-property-descriptor.js create mode 100644 node_modules/core-js/fn/reflect/get-prototype-of.js create mode 100644 node_modules/core-js/fn/reflect/get.js create mode 100644 node_modules/core-js/fn/reflect/has-metadata.js create mode 100644 node_modules/core-js/fn/reflect/has-own-metadata.js create mode 100644 node_modules/core-js/fn/reflect/has.js create mode 100644 node_modules/core-js/fn/reflect/index.js create mode 100644 node_modules/core-js/fn/reflect/is-extensible.js create mode 100644 node_modules/core-js/fn/reflect/metadata.js create mode 100644 node_modules/core-js/fn/reflect/own-keys.js create mode 100644 node_modules/core-js/fn/reflect/prevent-extensions.js create mode 100644 node_modules/core-js/fn/reflect/set-prototype-of.js create mode 100644 node_modules/core-js/fn/reflect/set.js create mode 100644 node_modules/core-js/fn/regexp/constructor.js create mode 100644 node_modules/core-js/fn/regexp/escape.js create mode 100644 node_modules/core-js/fn/regexp/flags.js create mode 100644 node_modules/core-js/fn/regexp/index.js create mode 100644 node_modules/core-js/fn/regexp/match.js create mode 100644 node_modules/core-js/fn/regexp/replace.js create mode 100644 node_modules/core-js/fn/regexp/search.js create mode 100644 node_modules/core-js/fn/regexp/split.js create mode 100644 node_modules/core-js/fn/regexp/to-string.js create mode 100644 node_modules/core-js/fn/set-immediate.js create mode 100644 node_modules/core-js/fn/set-interval.js create mode 100644 node_modules/core-js/fn/set-timeout.js create mode 100644 node_modules/core-js/fn/set.js create mode 100644 node_modules/core-js/fn/set/from.js create mode 100644 node_modules/core-js/fn/set/index.js create mode 100644 node_modules/core-js/fn/set/of.js create mode 100644 node_modules/core-js/fn/string/anchor.js create mode 100644 node_modules/core-js/fn/string/at.js create mode 100644 node_modules/core-js/fn/string/big.js create mode 100644 node_modules/core-js/fn/string/blink.js create mode 100644 node_modules/core-js/fn/string/bold.js create mode 100644 node_modules/core-js/fn/string/code-point-at.js create mode 100644 node_modules/core-js/fn/string/ends-with.js create mode 100644 node_modules/core-js/fn/string/escape-html.js create mode 100644 node_modules/core-js/fn/string/fixed.js create mode 100644 node_modules/core-js/fn/string/fontcolor.js create mode 100644 node_modules/core-js/fn/string/fontsize.js create mode 100644 node_modules/core-js/fn/string/from-code-point.js create mode 100644 node_modules/core-js/fn/string/includes.js create mode 100644 node_modules/core-js/fn/string/index.js create mode 100644 node_modules/core-js/fn/string/italics.js create mode 100644 node_modules/core-js/fn/string/iterator.js create mode 100644 node_modules/core-js/fn/string/link.js create mode 100644 node_modules/core-js/fn/string/match-all.js create mode 100644 node_modules/core-js/fn/string/pad-end.js create mode 100644 node_modules/core-js/fn/string/pad-start.js create mode 100644 node_modules/core-js/fn/string/raw.js create mode 100644 node_modules/core-js/fn/string/repeat.js create mode 100644 node_modules/core-js/fn/string/small.js create mode 100644 node_modules/core-js/fn/string/starts-with.js create mode 100644 node_modules/core-js/fn/string/strike.js create mode 100644 node_modules/core-js/fn/string/sub.js create mode 100644 node_modules/core-js/fn/string/sup.js create mode 100644 node_modules/core-js/fn/string/trim-end.js create mode 100644 node_modules/core-js/fn/string/trim-left.js create mode 100644 node_modules/core-js/fn/string/trim-right.js create mode 100644 node_modules/core-js/fn/string/trim-start.js create mode 100644 node_modules/core-js/fn/string/trim.js create mode 100644 node_modules/core-js/fn/string/unescape-html.js create mode 100644 node_modules/core-js/fn/string/virtual/anchor.js create mode 100644 node_modules/core-js/fn/string/virtual/at.js create mode 100644 node_modules/core-js/fn/string/virtual/big.js create mode 100644 node_modules/core-js/fn/string/virtual/blink.js create mode 100644 node_modules/core-js/fn/string/virtual/bold.js create mode 100644 node_modules/core-js/fn/string/virtual/code-point-at.js create mode 100644 node_modules/core-js/fn/string/virtual/ends-with.js create mode 100644 node_modules/core-js/fn/string/virtual/escape-html.js create mode 100644 node_modules/core-js/fn/string/virtual/fixed.js create mode 100644 node_modules/core-js/fn/string/virtual/fontcolor.js create mode 100644 node_modules/core-js/fn/string/virtual/fontsize.js create mode 100644 node_modules/core-js/fn/string/virtual/includes.js create mode 100644 node_modules/core-js/fn/string/virtual/index.js create mode 100644 node_modules/core-js/fn/string/virtual/italics.js create mode 100644 node_modules/core-js/fn/string/virtual/iterator.js create mode 100644 node_modules/core-js/fn/string/virtual/link.js create mode 100644 node_modules/core-js/fn/string/virtual/match-all.js create mode 100644 node_modules/core-js/fn/string/virtual/pad-end.js create mode 100644 node_modules/core-js/fn/string/virtual/pad-start.js create mode 100644 node_modules/core-js/fn/string/virtual/repeat.js create mode 100644 node_modules/core-js/fn/string/virtual/small.js create mode 100644 node_modules/core-js/fn/string/virtual/starts-with.js create mode 100644 node_modules/core-js/fn/string/virtual/strike.js create mode 100644 node_modules/core-js/fn/string/virtual/sub.js create mode 100644 node_modules/core-js/fn/string/virtual/sup.js create mode 100644 node_modules/core-js/fn/string/virtual/trim-end.js create mode 100644 node_modules/core-js/fn/string/virtual/trim-left.js create mode 100644 node_modules/core-js/fn/string/virtual/trim-right.js create mode 100644 node_modules/core-js/fn/string/virtual/trim-start.js create mode 100644 node_modules/core-js/fn/string/virtual/trim.js create mode 100644 node_modules/core-js/fn/string/virtual/unescape-html.js create mode 100644 node_modules/core-js/fn/symbol/async-iterator.js create mode 100644 node_modules/core-js/fn/symbol/for.js create mode 100644 node_modules/core-js/fn/symbol/has-instance.js create mode 100644 node_modules/core-js/fn/symbol/index.js create mode 100644 node_modules/core-js/fn/symbol/is-concat-spreadable.js create mode 100644 node_modules/core-js/fn/symbol/iterator.js create mode 100644 node_modules/core-js/fn/symbol/key-for.js create mode 100644 node_modules/core-js/fn/symbol/match.js create mode 100644 node_modules/core-js/fn/symbol/observable.js create mode 100644 node_modules/core-js/fn/symbol/replace.js create mode 100644 node_modules/core-js/fn/symbol/search.js create mode 100644 node_modules/core-js/fn/symbol/species.js create mode 100644 node_modules/core-js/fn/symbol/split.js create mode 100644 node_modules/core-js/fn/symbol/to-primitive.js create mode 100644 node_modules/core-js/fn/symbol/to-string-tag.js create mode 100644 node_modules/core-js/fn/symbol/unscopables.js create mode 100644 node_modules/core-js/fn/system/global.js create mode 100644 node_modules/core-js/fn/system/index.js create mode 100644 node_modules/core-js/fn/typed/array-buffer.js create mode 100644 node_modules/core-js/fn/typed/data-view.js create mode 100644 node_modules/core-js/fn/typed/float32-array.js create mode 100644 node_modules/core-js/fn/typed/float64-array.js create mode 100644 node_modules/core-js/fn/typed/index.js create mode 100644 node_modules/core-js/fn/typed/int16-array.js create mode 100644 node_modules/core-js/fn/typed/int32-array.js create mode 100644 node_modules/core-js/fn/typed/int8-array.js create mode 100644 node_modules/core-js/fn/typed/uint16-array.js create mode 100644 node_modules/core-js/fn/typed/uint32-array.js create mode 100644 node_modules/core-js/fn/typed/uint8-array.js create mode 100644 node_modules/core-js/fn/typed/uint8-clamped-array.js create mode 100644 node_modules/core-js/fn/weak-map.js create mode 100644 node_modules/core-js/fn/weak-map/from.js create mode 100644 node_modules/core-js/fn/weak-map/index.js create mode 100644 node_modules/core-js/fn/weak-map/of.js create mode 100644 node_modules/core-js/fn/weak-set.js create mode 100644 node_modules/core-js/fn/weak-set/from.js create mode 100644 node_modules/core-js/fn/weak-set/index.js create mode 100644 node_modules/core-js/fn/weak-set/of.js create mode 100644 node_modules/core-js/index.js create mode 100644 node_modules/core-js/library/core/_.js create mode 100644 node_modules/core-js/library/core/delay.js create mode 100644 node_modules/core-js/library/core/dict.js create mode 100644 node_modules/core-js/library/core/function.js create mode 100644 node_modules/core-js/library/core/index.js create mode 100644 node_modules/core-js/library/core/number.js create mode 100644 node_modules/core-js/library/core/object.js create mode 100644 node_modules/core-js/library/core/regexp.js create mode 100644 node_modules/core-js/library/core/string.js create mode 100644 node_modules/core-js/library/es5/index.js create mode 100644 node_modules/core-js/library/es6/array.js create mode 100644 node_modules/core-js/library/es6/date.js create mode 100644 node_modules/core-js/library/es6/function.js create mode 100644 node_modules/core-js/library/es6/index.js create mode 100644 node_modules/core-js/library/es6/map.js create mode 100644 node_modules/core-js/library/es6/math.js create mode 100644 node_modules/core-js/library/es6/number.js create mode 100644 node_modules/core-js/library/es6/object.js create mode 100644 node_modules/core-js/library/es6/parse-float.js create mode 100644 node_modules/core-js/library/es6/parse-int.js create mode 100644 node_modules/core-js/library/es6/promise.js create mode 100644 node_modules/core-js/library/es6/reflect.js create mode 100644 node_modules/core-js/library/es6/regexp.js create mode 100644 node_modules/core-js/library/es6/set.js create mode 100644 node_modules/core-js/library/es6/string.js create mode 100644 node_modules/core-js/library/es6/symbol.js create mode 100644 node_modules/core-js/library/es6/typed.js create mode 100644 node_modules/core-js/library/es6/weak-map.js create mode 100644 node_modules/core-js/library/es6/weak-set.js create mode 100644 node_modules/core-js/library/es7/array.js create mode 100644 node_modules/core-js/library/es7/asap.js create mode 100644 node_modules/core-js/library/es7/error.js create mode 100644 node_modules/core-js/library/es7/global.js create mode 100644 node_modules/core-js/library/es7/index.js create mode 100644 node_modules/core-js/library/es7/map.js create mode 100644 node_modules/core-js/library/es7/math.js create mode 100644 node_modules/core-js/library/es7/object.js create mode 100644 node_modules/core-js/library/es7/observable.js create mode 100644 node_modules/core-js/library/es7/promise.js create mode 100644 node_modules/core-js/library/es7/reflect.js create mode 100644 node_modules/core-js/library/es7/set.js create mode 100644 node_modules/core-js/library/es7/string.js create mode 100644 node_modules/core-js/library/es7/symbol.js create mode 100644 node_modules/core-js/library/es7/system.js create mode 100644 node_modules/core-js/library/es7/weak-map.js create mode 100644 node_modules/core-js/library/es7/weak-set.js create mode 100644 node_modules/core-js/library/fn/_.js create mode 100644 node_modules/core-js/library/fn/array/concat.js create mode 100644 node_modules/core-js/library/fn/array/copy-within.js create mode 100644 node_modules/core-js/library/fn/array/entries.js create mode 100644 node_modules/core-js/library/fn/array/every.js create mode 100644 node_modules/core-js/library/fn/array/fill.js create mode 100644 node_modules/core-js/library/fn/array/filter.js create mode 100644 node_modules/core-js/library/fn/array/find-index.js create mode 100644 node_modules/core-js/library/fn/array/find.js create mode 100644 node_modules/core-js/library/fn/array/flat-map.js create mode 100644 node_modules/core-js/library/fn/array/flatten.js create mode 100644 node_modules/core-js/library/fn/array/for-each.js create mode 100644 node_modules/core-js/library/fn/array/from.js create mode 100644 node_modules/core-js/library/fn/array/includes.js create mode 100644 node_modules/core-js/library/fn/array/index-of.js create mode 100644 node_modules/core-js/library/fn/array/index.js create mode 100644 node_modules/core-js/library/fn/array/is-array.js create mode 100644 node_modules/core-js/library/fn/array/iterator.js create mode 100644 node_modules/core-js/library/fn/array/join.js create mode 100644 node_modules/core-js/library/fn/array/keys.js create mode 100644 node_modules/core-js/library/fn/array/last-index-of.js create mode 100644 node_modules/core-js/library/fn/array/map.js create mode 100644 node_modules/core-js/library/fn/array/of.js create mode 100644 node_modules/core-js/library/fn/array/pop.js create mode 100644 node_modules/core-js/library/fn/array/push.js create mode 100644 node_modules/core-js/library/fn/array/reduce-right.js create mode 100644 node_modules/core-js/library/fn/array/reduce.js create mode 100644 node_modules/core-js/library/fn/array/reverse.js create mode 100644 node_modules/core-js/library/fn/array/shift.js create mode 100644 node_modules/core-js/library/fn/array/slice.js create mode 100644 node_modules/core-js/library/fn/array/some.js create mode 100644 node_modules/core-js/library/fn/array/sort.js create mode 100644 node_modules/core-js/library/fn/array/splice.js create mode 100644 node_modules/core-js/library/fn/array/unshift.js create mode 100644 node_modules/core-js/library/fn/array/values.js create mode 100644 node_modules/core-js/library/fn/array/virtual/copy-within.js create mode 100644 node_modules/core-js/library/fn/array/virtual/entries.js create mode 100644 node_modules/core-js/library/fn/array/virtual/every.js create mode 100644 node_modules/core-js/library/fn/array/virtual/fill.js create mode 100644 node_modules/core-js/library/fn/array/virtual/filter.js create mode 100644 node_modules/core-js/library/fn/array/virtual/find-index.js create mode 100644 node_modules/core-js/library/fn/array/virtual/find.js create mode 100644 node_modules/core-js/library/fn/array/virtual/flat-map.js create mode 100644 node_modules/core-js/library/fn/array/virtual/flatten.js create mode 100644 node_modules/core-js/library/fn/array/virtual/for-each.js create mode 100644 node_modules/core-js/library/fn/array/virtual/includes.js create mode 100644 node_modules/core-js/library/fn/array/virtual/index-of.js create mode 100644 node_modules/core-js/library/fn/array/virtual/index.js create mode 100644 node_modules/core-js/library/fn/array/virtual/iterator.js create mode 100644 node_modules/core-js/library/fn/array/virtual/join.js create mode 100644 node_modules/core-js/library/fn/array/virtual/keys.js create mode 100644 node_modules/core-js/library/fn/array/virtual/last-index-of.js create mode 100644 node_modules/core-js/library/fn/array/virtual/map.js create mode 100644 node_modules/core-js/library/fn/array/virtual/reduce-right.js create mode 100644 node_modules/core-js/library/fn/array/virtual/reduce.js create mode 100644 node_modules/core-js/library/fn/array/virtual/slice.js create mode 100644 node_modules/core-js/library/fn/array/virtual/some.js create mode 100644 node_modules/core-js/library/fn/array/virtual/sort.js create mode 100644 node_modules/core-js/library/fn/array/virtual/values.js create mode 100644 node_modules/core-js/library/fn/asap.js create mode 100644 node_modules/core-js/library/fn/clear-immediate.js create mode 100644 node_modules/core-js/library/fn/date/index.js create mode 100644 node_modules/core-js/library/fn/date/now.js create mode 100644 node_modules/core-js/library/fn/date/to-iso-string.js create mode 100644 node_modules/core-js/library/fn/date/to-json.js create mode 100644 node_modules/core-js/library/fn/date/to-primitive.js create mode 100644 node_modules/core-js/library/fn/date/to-string.js create mode 100644 node_modules/core-js/library/fn/delay.js create mode 100644 node_modules/core-js/library/fn/dict.js create mode 100644 node_modules/core-js/library/fn/dom-collections/index.js create mode 100644 node_modules/core-js/library/fn/dom-collections/iterator.js create mode 100644 node_modules/core-js/library/fn/error/index.js create mode 100644 node_modules/core-js/library/fn/error/is-error.js create mode 100644 node_modules/core-js/library/fn/function/bind.js create mode 100644 node_modules/core-js/library/fn/function/has-instance.js create mode 100644 node_modules/core-js/library/fn/function/index.js create mode 100644 node_modules/core-js/library/fn/function/name.js create mode 100644 node_modules/core-js/library/fn/function/part.js create mode 100644 node_modules/core-js/library/fn/function/virtual/bind.js create mode 100644 node_modules/core-js/library/fn/function/virtual/index.js create mode 100644 node_modules/core-js/library/fn/function/virtual/part.js create mode 100644 node_modules/core-js/library/fn/get-iterator-method.js create mode 100644 node_modules/core-js/library/fn/get-iterator.js create mode 100644 node_modules/core-js/library/fn/global.js create mode 100644 node_modules/core-js/library/fn/is-iterable.js create mode 100644 node_modules/core-js/library/fn/json/index.js create mode 100644 node_modules/core-js/library/fn/json/stringify.js create mode 100644 node_modules/core-js/library/fn/map.js create mode 100644 node_modules/core-js/library/fn/map/from.js create mode 100644 node_modules/core-js/library/fn/map/index.js create mode 100644 node_modules/core-js/library/fn/map/of.js create mode 100644 node_modules/core-js/library/fn/math/acosh.js create mode 100644 node_modules/core-js/library/fn/math/asinh.js create mode 100644 node_modules/core-js/library/fn/math/atanh.js create mode 100644 node_modules/core-js/library/fn/math/cbrt.js create mode 100644 node_modules/core-js/library/fn/math/clamp.js create mode 100644 node_modules/core-js/library/fn/math/clz32.js create mode 100644 node_modules/core-js/library/fn/math/cosh.js create mode 100644 node_modules/core-js/library/fn/math/deg-per-rad.js create mode 100644 node_modules/core-js/library/fn/math/degrees.js create mode 100644 node_modules/core-js/library/fn/math/expm1.js create mode 100644 node_modules/core-js/library/fn/math/fround.js create mode 100644 node_modules/core-js/library/fn/math/fscale.js create mode 100644 node_modules/core-js/library/fn/math/hypot.js create mode 100644 node_modules/core-js/library/fn/math/iaddh.js create mode 100644 node_modules/core-js/library/fn/math/imul.js create mode 100644 node_modules/core-js/library/fn/math/imulh.js create mode 100644 node_modules/core-js/library/fn/math/index.js create mode 100644 node_modules/core-js/library/fn/math/isubh.js create mode 100644 node_modules/core-js/library/fn/math/log10.js create mode 100644 node_modules/core-js/library/fn/math/log1p.js create mode 100644 node_modules/core-js/library/fn/math/log2.js create mode 100644 node_modules/core-js/library/fn/math/rad-per-deg.js create mode 100644 node_modules/core-js/library/fn/math/radians.js create mode 100644 node_modules/core-js/library/fn/math/scale.js create mode 100644 node_modules/core-js/library/fn/math/sign.js create mode 100644 node_modules/core-js/library/fn/math/signbit.js create mode 100644 node_modules/core-js/library/fn/math/sinh.js create mode 100644 node_modules/core-js/library/fn/math/tanh.js create mode 100644 node_modules/core-js/library/fn/math/trunc.js create mode 100644 node_modules/core-js/library/fn/math/umulh.js create mode 100644 node_modules/core-js/library/fn/number/constructor.js create mode 100644 node_modules/core-js/library/fn/number/epsilon.js create mode 100644 node_modules/core-js/library/fn/number/index.js create mode 100644 node_modules/core-js/library/fn/number/is-finite.js create mode 100644 node_modules/core-js/library/fn/number/is-integer.js create mode 100644 node_modules/core-js/library/fn/number/is-nan.js create mode 100644 node_modules/core-js/library/fn/number/is-safe-integer.js create mode 100644 node_modules/core-js/library/fn/number/iterator.js create mode 100644 node_modules/core-js/library/fn/number/max-safe-integer.js create mode 100644 node_modules/core-js/library/fn/number/min-safe-integer.js create mode 100644 node_modules/core-js/library/fn/number/parse-float.js create mode 100644 node_modules/core-js/library/fn/number/parse-int.js create mode 100644 node_modules/core-js/library/fn/number/to-fixed.js create mode 100644 node_modules/core-js/library/fn/number/to-precision.js create mode 100644 node_modules/core-js/library/fn/number/virtual/index.js create mode 100644 node_modules/core-js/library/fn/number/virtual/iterator.js create mode 100644 node_modules/core-js/library/fn/number/virtual/to-fixed.js create mode 100644 node_modules/core-js/library/fn/number/virtual/to-precision.js create mode 100644 node_modules/core-js/library/fn/object/assign.js create mode 100644 node_modules/core-js/library/fn/object/classof.js create mode 100644 node_modules/core-js/library/fn/object/create.js create mode 100644 node_modules/core-js/library/fn/object/define-getter.js create mode 100644 node_modules/core-js/library/fn/object/define-properties.js create mode 100644 node_modules/core-js/library/fn/object/define-property.js create mode 100644 node_modules/core-js/library/fn/object/define-setter.js create mode 100644 node_modules/core-js/library/fn/object/define.js create mode 100644 node_modules/core-js/library/fn/object/entries.js create mode 100644 node_modules/core-js/library/fn/object/freeze.js create mode 100644 node_modules/core-js/library/fn/object/get-own-property-descriptor.js create mode 100644 node_modules/core-js/library/fn/object/get-own-property-descriptors.js create mode 100644 node_modules/core-js/library/fn/object/get-own-property-names.js create mode 100644 node_modules/core-js/library/fn/object/get-own-property-symbols.js create mode 100644 node_modules/core-js/library/fn/object/get-prototype-of.js create mode 100644 node_modules/core-js/library/fn/object/index.js create mode 100644 node_modules/core-js/library/fn/object/is-extensible.js create mode 100644 node_modules/core-js/library/fn/object/is-frozen.js create mode 100644 node_modules/core-js/library/fn/object/is-object.js create mode 100644 node_modules/core-js/library/fn/object/is-sealed.js create mode 100644 node_modules/core-js/library/fn/object/is.js create mode 100644 node_modules/core-js/library/fn/object/keys.js create mode 100644 node_modules/core-js/library/fn/object/lookup-getter.js create mode 100644 node_modules/core-js/library/fn/object/lookup-setter.js create mode 100644 node_modules/core-js/library/fn/object/make.js create mode 100644 node_modules/core-js/library/fn/object/prevent-extensions.js create mode 100644 node_modules/core-js/library/fn/object/seal.js create mode 100644 node_modules/core-js/library/fn/object/set-prototype-of.js create mode 100644 node_modules/core-js/library/fn/object/values.js create mode 100644 node_modules/core-js/library/fn/observable.js create mode 100644 node_modules/core-js/library/fn/parse-float.js create mode 100644 node_modules/core-js/library/fn/parse-int.js create mode 100644 node_modules/core-js/library/fn/promise.js create mode 100644 node_modules/core-js/library/fn/promise/finally.js create mode 100644 node_modules/core-js/library/fn/promise/index.js create mode 100644 node_modules/core-js/library/fn/promise/try.js create mode 100644 node_modules/core-js/library/fn/reflect/apply.js create mode 100644 node_modules/core-js/library/fn/reflect/construct.js create mode 100644 node_modules/core-js/library/fn/reflect/define-metadata.js create mode 100644 node_modules/core-js/library/fn/reflect/define-property.js create mode 100644 node_modules/core-js/library/fn/reflect/delete-metadata.js create mode 100644 node_modules/core-js/library/fn/reflect/delete-property.js create mode 100644 node_modules/core-js/library/fn/reflect/enumerate.js create mode 100644 node_modules/core-js/library/fn/reflect/get-metadata-keys.js create mode 100644 node_modules/core-js/library/fn/reflect/get-metadata.js create mode 100644 node_modules/core-js/library/fn/reflect/get-own-metadata-keys.js create mode 100644 node_modules/core-js/library/fn/reflect/get-own-metadata.js create mode 100644 node_modules/core-js/library/fn/reflect/get-own-property-descriptor.js create mode 100644 node_modules/core-js/library/fn/reflect/get-prototype-of.js create mode 100644 node_modules/core-js/library/fn/reflect/get.js create mode 100644 node_modules/core-js/library/fn/reflect/has-metadata.js create mode 100644 node_modules/core-js/library/fn/reflect/has-own-metadata.js create mode 100644 node_modules/core-js/library/fn/reflect/has.js create mode 100644 node_modules/core-js/library/fn/reflect/index.js create mode 100644 node_modules/core-js/library/fn/reflect/is-extensible.js create mode 100644 node_modules/core-js/library/fn/reflect/metadata.js create mode 100644 node_modules/core-js/library/fn/reflect/own-keys.js create mode 100644 node_modules/core-js/library/fn/reflect/prevent-extensions.js create mode 100644 node_modules/core-js/library/fn/reflect/set-prototype-of.js create mode 100644 node_modules/core-js/library/fn/reflect/set.js create mode 100644 node_modules/core-js/library/fn/regexp/constructor.js create mode 100644 node_modules/core-js/library/fn/regexp/escape.js create mode 100644 node_modules/core-js/library/fn/regexp/flags.js create mode 100644 node_modules/core-js/library/fn/regexp/index.js create mode 100644 node_modules/core-js/library/fn/regexp/match.js create mode 100644 node_modules/core-js/library/fn/regexp/replace.js create mode 100644 node_modules/core-js/library/fn/regexp/search.js create mode 100644 node_modules/core-js/library/fn/regexp/split.js create mode 100644 node_modules/core-js/library/fn/regexp/to-string.js create mode 100644 node_modules/core-js/library/fn/set-immediate.js create mode 100644 node_modules/core-js/library/fn/set-interval.js create mode 100644 node_modules/core-js/library/fn/set-timeout.js create mode 100644 node_modules/core-js/library/fn/set.js create mode 100644 node_modules/core-js/library/fn/set/from.js create mode 100644 node_modules/core-js/library/fn/set/index.js create mode 100644 node_modules/core-js/library/fn/set/of.js create mode 100644 node_modules/core-js/library/fn/string/anchor.js create mode 100644 node_modules/core-js/library/fn/string/at.js create mode 100644 node_modules/core-js/library/fn/string/big.js create mode 100644 node_modules/core-js/library/fn/string/blink.js create mode 100644 node_modules/core-js/library/fn/string/bold.js create mode 100644 node_modules/core-js/library/fn/string/code-point-at.js create mode 100644 node_modules/core-js/library/fn/string/ends-with.js create mode 100644 node_modules/core-js/library/fn/string/escape-html.js create mode 100644 node_modules/core-js/library/fn/string/fixed.js create mode 100644 node_modules/core-js/library/fn/string/fontcolor.js create mode 100644 node_modules/core-js/library/fn/string/fontsize.js create mode 100644 node_modules/core-js/library/fn/string/from-code-point.js create mode 100644 node_modules/core-js/library/fn/string/includes.js create mode 100644 node_modules/core-js/library/fn/string/index.js create mode 100644 node_modules/core-js/library/fn/string/italics.js create mode 100644 node_modules/core-js/library/fn/string/iterator.js create mode 100644 node_modules/core-js/library/fn/string/link.js create mode 100644 node_modules/core-js/library/fn/string/match-all.js create mode 100644 node_modules/core-js/library/fn/string/pad-end.js create mode 100644 node_modules/core-js/library/fn/string/pad-start.js create mode 100644 node_modules/core-js/library/fn/string/raw.js create mode 100644 node_modules/core-js/library/fn/string/repeat.js create mode 100644 node_modules/core-js/library/fn/string/small.js create mode 100644 node_modules/core-js/library/fn/string/starts-with.js create mode 100644 node_modules/core-js/library/fn/string/strike.js create mode 100644 node_modules/core-js/library/fn/string/sub.js create mode 100644 node_modules/core-js/library/fn/string/sup.js create mode 100644 node_modules/core-js/library/fn/string/trim-end.js create mode 100644 node_modules/core-js/library/fn/string/trim-left.js create mode 100644 node_modules/core-js/library/fn/string/trim-right.js create mode 100644 node_modules/core-js/library/fn/string/trim-start.js create mode 100644 node_modules/core-js/library/fn/string/trim.js create mode 100644 node_modules/core-js/library/fn/string/unescape-html.js create mode 100644 node_modules/core-js/library/fn/string/virtual/anchor.js create mode 100644 node_modules/core-js/library/fn/string/virtual/at.js create mode 100644 node_modules/core-js/library/fn/string/virtual/big.js create mode 100644 node_modules/core-js/library/fn/string/virtual/blink.js create mode 100644 node_modules/core-js/library/fn/string/virtual/bold.js create mode 100644 node_modules/core-js/library/fn/string/virtual/code-point-at.js create mode 100644 node_modules/core-js/library/fn/string/virtual/ends-with.js create mode 100644 node_modules/core-js/library/fn/string/virtual/escape-html.js create mode 100644 node_modules/core-js/library/fn/string/virtual/fixed.js create mode 100644 node_modules/core-js/library/fn/string/virtual/fontcolor.js create mode 100644 node_modules/core-js/library/fn/string/virtual/fontsize.js create mode 100644 node_modules/core-js/library/fn/string/virtual/includes.js create mode 100644 node_modules/core-js/library/fn/string/virtual/index.js create mode 100644 node_modules/core-js/library/fn/string/virtual/italics.js create mode 100644 node_modules/core-js/library/fn/string/virtual/iterator.js create mode 100644 node_modules/core-js/library/fn/string/virtual/link.js create mode 100644 node_modules/core-js/library/fn/string/virtual/match-all.js create mode 100644 node_modules/core-js/library/fn/string/virtual/pad-end.js create mode 100644 node_modules/core-js/library/fn/string/virtual/pad-start.js create mode 100644 node_modules/core-js/library/fn/string/virtual/repeat.js create mode 100644 node_modules/core-js/library/fn/string/virtual/small.js create mode 100644 node_modules/core-js/library/fn/string/virtual/starts-with.js create mode 100644 node_modules/core-js/library/fn/string/virtual/strike.js create mode 100644 node_modules/core-js/library/fn/string/virtual/sub.js create mode 100644 node_modules/core-js/library/fn/string/virtual/sup.js create mode 100644 node_modules/core-js/library/fn/string/virtual/trim-end.js create mode 100644 node_modules/core-js/library/fn/string/virtual/trim-left.js create mode 100644 node_modules/core-js/library/fn/string/virtual/trim-right.js create mode 100644 node_modules/core-js/library/fn/string/virtual/trim-start.js create mode 100644 node_modules/core-js/library/fn/string/virtual/trim.js create mode 100644 node_modules/core-js/library/fn/string/virtual/unescape-html.js create mode 100644 node_modules/core-js/library/fn/symbol/async-iterator.js create mode 100644 node_modules/core-js/library/fn/symbol/for.js create mode 100644 node_modules/core-js/library/fn/symbol/has-instance.js create mode 100644 node_modules/core-js/library/fn/symbol/index.js create mode 100644 node_modules/core-js/library/fn/symbol/is-concat-spreadable.js create mode 100644 node_modules/core-js/library/fn/symbol/iterator.js create mode 100644 node_modules/core-js/library/fn/symbol/key-for.js create mode 100644 node_modules/core-js/library/fn/symbol/match.js create mode 100644 node_modules/core-js/library/fn/symbol/observable.js create mode 100644 node_modules/core-js/library/fn/symbol/replace.js create mode 100644 node_modules/core-js/library/fn/symbol/search.js create mode 100644 node_modules/core-js/library/fn/symbol/species.js create mode 100644 node_modules/core-js/library/fn/symbol/split.js create mode 100644 node_modules/core-js/library/fn/symbol/to-primitive.js create mode 100644 node_modules/core-js/library/fn/symbol/to-string-tag.js create mode 100644 node_modules/core-js/library/fn/symbol/unscopables.js create mode 100644 node_modules/core-js/library/fn/system/global.js create mode 100644 node_modules/core-js/library/fn/system/index.js create mode 100644 node_modules/core-js/library/fn/typed/array-buffer.js create mode 100644 node_modules/core-js/library/fn/typed/data-view.js create mode 100644 node_modules/core-js/library/fn/typed/float32-array.js create mode 100644 node_modules/core-js/library/fn/typed/float64-array.js create mode 100644 node_modules/core-js/library/fn/typed/index.js create mode 100644 node_modules/core-js/library/fn/typed/int16-array.js create mode 100644 node_modules/core-js/library/fn/typed/int32-array.js create mode 100644 node_modules/core-js/library/fn/typed/int8-array.js create mode 100644 node_modules/core-js/library/fn/typed/uint16-array.js create mode 100644 node_modules/core-js/library/fn/typed/uint32-array.js create mode 100644 node_modules/core-js/library/fn/typed/uint8-array.js create mode 100644 node_modules/core-js/library/fn/typed/uint8-clamped-array.js create mode 100644 node_modules/core-js/library/fn/weak-map.js create mode 100644 node_modules/core-js/library/fn/weak-map/from.js create mode 100644 node_modules/core-js/library/fn/weak-map/index.js create mode 100644 node_modules/core-js/library/fn/weak-map/of.js create mode 100644 node_modules/core-js/library/fn/weak-set.js create mode 100644 node_modules/core-js/library/fn/weak-set/from.js create mode 100644 node_modules/core-js/library/fn/weak-set/index.js create mode 100644 node_modules/core-js/library/fn/weak-set/of.js create mode 100644 node_modules/core-js/library/index.js create mode 100644 node_modules/core-js/library/modules/_a-function.js create mode 100644 node_modules/core-js/library/modules/_a-number-value.js create mode 100644 node_modules/core-js/library/modules/_add-to-unscopables.js create mode 100644 node_modules/core-js/library/modules/_an-instance.js create mode 100644 node_modules/core-js/library/modules/_an-object.js create mode 100644 node_modules/core-js/library/modules/_array-copy-within.js create mode 100644 node_modules/core-js/library/modules/_array-fill.js create mode 100644 node_modules/core-js/library/modules/_array-from-iterable.js create mode 100644 node_modules/core-js/library/modules/_array-includes.js create mode 100644 node_modules/core-js/library/modules/_array-methods.js create mode 100644 node_modules/core-js/library/modules/_array-reduce.js create mode 100644 node_modules/core-js/library/modules/_array-species-constructor.js create mode 100644 node_modules/core-js/library/modules/_array-species-create.js create mode 100644 node_modules/core-js/library/modules/_bind.js create mode 100644 node_modules/core-js/library/modules/_classof.js create mode 100644 node_modules/core-js/library/modules/_cof.js create mode 100644 node_modules/core-js/library/modules/_collection-strong.js create mode 100644 node_modules/core-js/library/modules/_collection-to-json.js create mode 100644 node_modules/core-js/library/modules/_collection-weak.js create mode 100644 node_modules/core-js/library/modules/_collection.js create mode 100644 node_modules/core-js/library/modules/_core.js create mode 100644 node_modules/core-js/library/modules/_create-property.js create mode 100644 node_modules/core-js/library/modules/_ctx.js create mode 100644 node_modules/core-js/library/modules/_date-to-iso-string.js create mode 100644 node_modules/core-js/library/modules/_date-to-primitive.js create mode 100644 node_modules/core-js/library/modules/_defined.js create mode 100644 node_modules/core-js/library/modules/_descriptors.js create mode 100644 node_modules/core-js/library/modules/_dom-create.js create mode 100644 node_modules/core-js/library/modules/_entry-virtual.js create mode 100644 node_modules/core-js/library/modules/_enum-bug-keys.js create mode 100644 node_modules/core-js/library/modules/_enum-keys.js create mode 100644 node_modules/core-js/library/modules/_export.js create mode 100644 node_modules/core-js/library/modules/_fails-is-regexp.js create mode 100644 node_modules/core-js/library/modules/_fails.js create mode 100644 node_modules/core-js/library/modules/_fix-re-wks.js create mode 100644 node_modules/core-js/library/modules/_flags.js create mode 100644 node_modules/core-js/library/modules/_flatten-into-array.js create mode 100644 node_modules/core-js/library/modules/_for-of.js create mode 100644 node_modules/core-js/library/modules/_global.js create mode 100644 node_modules/core-js/library/modules/_has.js create mode 100644 node_modules/core-js/library/modules/_hide.js create mode 100644 node_modules/core-js/library/modules/_html.js create mode 100644 node_modules/core-js/library/modules/_ie8-dom-define.js create mode 100644 node_modules/core-js/library/modules/_inherit-if-required.js create mode 100644 node_modules/core-js/library/modules/_invoke.js create mode 100644 node_modules/core-js/library/modules/_iobject.js create mode 100644 node_modules/core-js/library/modules/_is-array-iter.js create mode 100644 node_modules/core-js/library/modules/_is-array.js create mode 100644 node_modules/core-js/library/modules/_is-integer.js create mode 100644 node_modules/core-js/library/modules/_is-object.js create mode 100644 node_modules/core-js/library/modules/_is-regexp.js create mode 100644 node_modules/core-js/library/modules/_iter-call.js create mode 100644 node_modules/core-js/library/modules/_iter-create.js create mode 100644 node_modules/core-js/library/modules/_iter-define.js create mode 100644 node_modules/core-js/library/modules/_iter-detect.js create mode 100644 node_modules/core-js/library/modules/_iter-step.js create mode 100644 node_modules/core-js/library/modules/_iterators.js create mode 100644 node_modules/core-js/library/modules/_keyof.js create mode 100644 node_modules/core-js/library/modules/_library.js create mode 100644 node_modules/core-js/library/modules/_math-expm1.js create mode 100644 node_modules/core-js/library/modules/_math-fround.js create mode 100644 node_modules/core-js/library/modules/_math-log1p.js create mode 100644 node_modules/core-js/library/modules/_math-scale.js create mode 100644 node_modules/core-js/library/modules/_math-sign.js create mode 100644 node_modules/core-js/library/modules/_meta.js create mode 100644 node_modules/core-js/library/modules/_metadata.js create mode 100644 node_modules/core-js/library/modules/_microtask.js create mode 100644 node_modules/core-js/library/modules/_new-promise-capability.js create mode 100644 node_modules/core-js/library/modules/_object-assign.js create mode 100644 node_modules/core-js/library/modules/_object-create.js create mode 100644 node_modules/core-js/library/modules/_object-define.js create mode 100644 node_modules/core-js/library/modules/_object-dp.js create mode 100644 node_modules/core-js/library/modules/_object-dps.js create mode 100644 node_modules/core-js/library/modules/_object-forced-pam.js create mode 100644 node_modules/core-js/library/modules/_object-gopd.js create mode 100644 node_modules/core-js/library/modules/_object-gopn-ext.js create mode 100644 node_modules/core-js/library/modules/_object-gopn.js create mode 100644 node_modules/core-js/library/modules/_object-gops.js create mode 100644 node_modules/core-js/library/modules/_object-gpo.js create mode 100644 node_modules/core-js/library/modules/_object-keys-internal.js create mode 100644 node_modules/core-js/library/modules/_object-keys.js create mode 100644 node_modules/core-js/library/modules/_object-pie.js create mode 100644 node_modules/core-js/library/modules/_object-sap.js create mode 100644 node_modules/core-js/library/modules/_object-to-array.js create mode 100644 node_modules/core-js/library/modules/_own-keys.js create mode 100644 node_modules/core-js/library/modules/_parse-float.js create mode 100644 node_modules/core-js/library/modules/_parse-int.js create mode 100644 node_modules/core-js/library/modules/_partial.js create mode 100644 node_modules/core-js/library/modules/_path.js create mode 100644 node_modules/core-js/library/modules/_perform.js create mode 100644 node_modules/core-js/library/modules/_promise-resolve.js create mode 100644 node_modules/core-js/library/modules/_property-desc.js create mode 100644 node_modules/core-js/library/modules/_redefine-all.js create mode 100644 node_modules/core-js/library/modules/_redefine.js create mode 100644 node_modules/core-js/library/modules/_replacer.js create mode 100644 node_modules/core-js/library/modules/_same-value.js create mode 100644 node_modules/core-js/library/modules/_set-collection-from.js create mode 100644 node_modules/core-js/library/modules/_set-collection-of.js create mode 100644 node_modules/core-js/library/modules/_set-proto.js create mode 100644 node_modules/core-js/library/modules/_set-species.js create mode 100644 node_modules/core-js/library/modules/_set-to-string-tag.js create mode 100644 node_modules/core-js/library/modules/_shared-key.js create mode 100644 node_modules/core-js/library/modules/_shared.js create mode 100644 node_modules/core-js/library/modules/_species-constructor.js create mode 100644 node_modules/core-js/library/modules/_strict-method.js create mode 100644 node_modules/core-js/library/modules/_string-at.js create mode 100644 node_modules/core-js/library/modules/_string-context.js create mode 100644 node_modules/core-js/library/modules/_string-html.js create mode 100644 node_modules/core-js/library/modules/_string-pad.js create mode 100644 node_modules/core-js/library/modules/_string-repeat.js create mode 100644 node_modules/core-js/library/modules/_string-trim.js create mode 100644 node_modules/core-js/library/modules/_string-ws.js create mode 100644 node_modules/core-js/library/modules/_task.js create mode 100644 node_modules/core-js/library/modules/_to-absolute-index.js create mode 100644 node_modules/core-js/library/modules/_to-index.js create mode 100644 node_modules/core-js/library/modules/_to-integer.js create mode 100644 node_modules/core-js/library/modules/_to-iobject.js create mode 100644 node_modules/core-js/library/modules/_to-length.js create mode 100644 node_modules/core-js/library/modules/_to-object.js create mode 100644 node_modules/core-js/library/modules/_to-primitive.js create mode 100644 node_modules/core-js/library/modules/_typed-array.js create mode 100644 node_modules/core-js/library/modules/_typed-buffer.js create mode 100644 node_modules/core-js/library/modules/_typed.js create mode 100644 node_modules/core-js/library/modules/_uid.js create mode 100644 node_modules/core-js/library/modules/_validate-collection.js create mode 100644 node_modules/core-js/library/modules/_wks-define.js create mode 100644 node_modules/core-js/library/modules/_wks-ext.js create mode 100644 node_modules/core-js/library/modules/_wks.js create mode 100644 node_modules/core-js/library/modules/core.delay.js create mode 100644 node_modules/core-js/library/modules/core.dict.js create mode 100644 node_modules/core-js/library/modules/core.function.part.js create mode 100644 node_modules/core-js/library/modules/core.get-iterator-method.js create mode 100644 node_modules/core-js/library/modules/core.get-iterator.js create mode 100644 node_modules/core-js/library/modules/core.is-iterable.js create mode 100644 node_modules/core-js/library/modules/core.number.iterator.js create mode 100644 node_modules/core-js/library/modules/core.object.classof.js create mode 100644 node_modules/core-js/library/modules/core.object.define.js create mode 100644 node_modules/core-js/library/modules/core.object.is-object.js create mode 100644 node_modules/core-js/library/modules/core.object.make.js create mode 100644 node_modules/core-js/library/modules/core.regexp.escape.js create mode 100644 node_modules/core-js/library/modules/core.string.escape-html.js create mode 100644 node_modules/core-js/library/modules/core.string.unescape-html.js create mode 100644 node_modules/core-js/library/modules/es5.js create mode 100644 node_modules/core-js/library/modules/es6.array.copy-within.js create mode 100644 node_modules/core-js/library/modules/es6.array.every.js create mode 100644 node_modules/core-js/library/modules/es6.array.fill.js create mode 100644 node_modules/core-js/library/modules/es6.array.filter.js create mode 100644 node_modules/core-js/library/modules/es6.array.find-index.js create mode 100644 node_modules/core-js/library/modules/es6.array.find.js create mode 100644 node_modules/core-js/library/modules/es6.array.for-each.js create mode 100644 node_modules/core-js/library/modules/es6.array.from.js create mode 100644 node_modules/core-js/library/modules/es6.array.index-of.js create mode 100644 node_modules/core-js/library/modules/es6.array.is-array.js create mode 100644 node_modules/core-js/library/modules/es6.array.iterator.js create mode 100644 node_modules/core-js/library/modules/es6.array.join.js create mode 100644 node_modules/core-js/library/modules/es6.array.last-index-of.js create mode 100644 node_modules/core-js/library/modules/es6.array.map.js create mode 100644 node_modules/core-js/library/modules/es6.array.of.js create mode 100644 node_modules/core-js/library/modules/es6.array.reduce-right.js create mode 100644 node_modules/core-js/library/modules/es6.array.reduce.js create mode 100644 node_modules/core-js/library/modules/es6.array.slice.js create mode 100644 node_modules/core-js/library/modules/es6.array.some.js create mode 100644 node_modules/core-js/library/modules/es6.array.sort.js create mode 100644 node_modules/core-js/library/modules/es6.array.species.js create mode 100644 node_modules/core-js/library/modules/es6.date.now.js create mode 100644 node_modules/core-js/library/modules/es6.date.to-iso-string.js create mode 100644 node_modules/core-js/library/modules/es6.date.to-json.js create mode 100644 node_modules/core-js/library/modules/es6.date.to-primitive.js create mode 100644 node_modules/core-js/library/modules/es6.date.to-string.js create mode 100644 node_modules/core-js/library/modules/es6.function.bind.js create mode 100644 node_modules/core-js/library/modules/es6.function.has-instance.js create mode 100644 node_modules/core-js/library/modules/es6.function.name.js create mode 100644 node_modules/core-js/library/modules/es6.map.js create mode 100644 node_modules/core-js/library/modules/es6.math.acosh.js create mode 100644 node_modules/core-js/library/modules/es6.math.asinh.js create mode 100644 node_modules/core-js/library/modules/es6.math.atanh.js create mode 100644 node_modules/core-js/library/modules/es6.math.cbrt.js create mode 100644 node_modules/core-js/library/modules/es6.math.clz32.js create mode 100644 node_modules/core-js/library/modules/es6.math.cosh.js create mode 100644 node_modules/core-js/library/modules/es6.math.expm1.js create mode 100644 node_modules/core-js/library/modules/es6.math.fround.js create mode 100644 node_modules/core-js/library/modules/es6.math.hypot.js create mode 100644 node_modules/core-js/library/modules/es6.math.imul.js create mode 100644 node_modules/core-js/library/modules/es6.math.log10.js create mode 100644 node_modules/core-js/library/modules/es6.math.log1p.js create mode 100644 node_modules/core-js/library/modules/es6.math.log2.js create mode 100644 node_modules/core-js/library/modules/es6.math.sign.js create mode 100644 node_modules/core-js/library/modules/es6.math.sinh.js create mode 100644 node_modules/core-js/library/modules/es6.math.tanh.js create mode 100644 node_modules/core-js/library/modules/es6.math.trunc.js create mode 100644 node_modules/core-js/library/modules/es6.number.constructor.js create mode 100644 node_modules/core-js/library/modules/es6.number.epsilon.js create mode 100644 node_modules/core-js/library/modules/es6.number.is-finite.js create mode 100644 node_modules/core-js/library/modules/es6.number.is-integer.js create mode 100644 node_modules/core-js/library/modules/es6.number.is-nan.js create mode 100644 node_modules/core-js/library/modules/es6.number.is-safe-integer.js create mode 100644 node_modules/core-js/library/modules/es6.number.max-safe-integer.js create mode 100644 node_modules/core-js/library/modules/es6.number.min-safe-integer.js create mode 100644 node_modules/core-js/library/modules/es6.number.parse-float.js create mode 100644 node_modules/core-js/library/modules/es6.number.parse-int.js create mode 100644 node_modules/core-js/library/modules/es6.number.to-fixed.js create mode 100644 node_modules/core-js/library/modules/es6.number.to-precision.js create mode 100644 node_modules/core-js/library/modules/es6.object.assign.js create mode 100644 node_modules/core-js/library/modules/es6.object.create.js create mode 100644 node_modules/core-js/library/modules/es6.object.define-properties.js create mode 100644 node_modules/core-js/library/modules/es6.object.define-property.js create mode 100644 node_modules/core-js/library/modules/es6.object.freeze.js create mode 100644 node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js create mode 100644 node_modules/core-js/library/modules/es6.object.get-own-property-names.js create mode 100644 node_modules/core-js/library/modules/es6.object.get-prototype-of.js create mode 100644 node_modules/core-js/library/modules/es6.object.is-extensible.js create mode 100644 node_modules/core-js/library/modules/es6.object.is-frozen.js create mode 100644 node_modules/core-js/library/modules/es6.object.is-sealed.js create mode 100644 node_modules/core-js/library/modules/es6.object.is.js create mode 100644 node_modules/core-js/library/modules/es6.object.keys.js create mode 100644 node_modules/core-js/library/modules/es6.object.prevent-extensions.js create mode 100644 node_modules/core-js/library/modules/es6.object.seal.js create mode 100644 node_modules/core-js/library/modules/es6.object.set-prototype-of.js create mode 100644 node_modules/core-js/library/modules/es6.object.to-string.js create mode 100644 node_modules/core-js/library/modules/es6.parse-float.js create mode 100644 node_modules/core-js/library/modules/es6.parse-int.js create mode 100644 node_modules/core-js/library/modules/es6.promise.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.apply.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.construct.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.define-property.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.delete-property.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.enumerate.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.get-own-property-descriptor.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.get-prototype-of.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.get.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.has.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.is-extensible.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.own-keys.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.prevent-extensions.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.set-prototype-of.js create mode 100644 node_modules/core-js/library/modules/es6.reflect.set.js create mode 100644 node_modules/core-js/library/modules/es6.regexp.constructor.js create mode 100644 node_modules/core-js/library/modules/es6.regexp.flags.js create mode 100644 node_modules/core-js/library/modules/es6.regexp.match.js create mode 100644 node_modules/core-js/library/modules/es6.regexp.replace.js create mode 100644 node_modules/core-js/library/modules/es6.regexp.search.js create mode 100644 node_modules/core-js/library/modules/es6.regexp.split.js create mode 100644 node_modules/core-js/library/modules/es6.regexp.to-string.js create mode 100644 node_modules/core-js/library/modules/es6.set.js create mode 100644 node_modules/core-js/library/modules/es6.string.anchor.js create mode 100644 node_modules/core-js/library/modules/es6.string.big.js create mode 100644 node_modules/core-js/library/modules/es6.string.blink.js create mode 100644 node_modules/core-js/library/modules/es6.string.bold.js create mode 100644 node_modules/core-js/library/modules/es6.string.code-point-at.js create mode 100644 node_modules/core-js/library/modules/es6.string.ends-with.js create mode 100644 node_modules/core-js/library/modules/es6.string.fixed.js create mode 100644 node_modules/core-js/library/modules/es6.string.fontcolor.js create mode 100644 node_modules/core-js/library/modules/es6.string.fontsize.js create mode 100644 node_modules/core-js/library/modules/es6.string.from-code-point.js create mode 100644 node_modules/core-js/library/modules/es6.string.includes.js create mode 100644 node_modules/core-js/library/modules/es6.string.italics.js create mode 100644 node_modules/core-js/library/modules/es6.string.iterator.js create mode 100644 node_modules/core-js/library/modules/es6.string.link.js create mode 100644 node_modules/core-js/library/modules/es6.string.raw.js create mode 100644 node_modules/core-js/library/modules/es6.string.repeat.js create mode 100644 node_modules/core-js/library/modules/es6.string.small.js create mode 100644 node_modules/core-js/library/modules/es6.string.starts-with.js create mode 100644 node_modules/core-js/library/modules/es6.string.strike.js create mode 100644 node_modules/core-js/library/modules/es6.string.sub.js create mode 100644 node_modules/core-js/library/modules/es6.string.sup.js create mode 100644 node_modules/core-js/library/modules/es6.string.trim.js create mode 100644 node_modules/core-js/library/modules/es6.symbol.js create mode 100644 node_modules/core-js/library/modules/es6.typed.array-buffer.js create mode 100644 node_modules/core-js/library/modules/es6.typed.data-view.js create mode 100644 node_modules/core-js/library/modules/es6.typed.float32-array.js create mode 100644 node_modules/core-js/library/modules/es6.typed.float64-array.js create mode 100644 node_modules/core-js/library/modules/es6.typed.int16-array.js create mode 100644 node_modules/core-js/library/modules/es6.typed.int32-array.js create mode 100644 node_modules/core-js/library/modules/es6.typed.int8-array.js create mode 100644 node_modules/core-js/library/modules/es6.typed.uint16-array.js create mode 100644 node_modules/core-js/library/modules/es6.typed.uint32-array.js create mode 100644 node_modules/core-js/library/modules/es6.typed.uint8-array.js create mode 100644 node_modules/core-js/library/modules/es6.typed.uint8-clamped-array.js create mode 100644 node_modules/core-js/library/modules/es6.weak-map.js create mode 100644 node_modules/core-js/library/modules/es6.weak-set.js create mode 100644 node_modules/core-js/library/modules/es7.array.flat-map.js create mode 100644 node_modules/core-js/library/modules/es7.array.flatten.js create mode 100644 node_modules/core-js/library/modules/es7.array.includes.js create mode 100644 node_modules/core-js/library/modules/es7.asap.js create mode 100644 node_modules/core-js/library/modules/es7.error.is-error.js create mode 100644 node_modules/core-js/library/modules/es7.global.js create mode 100644 node_modules/core-js/library/modules/es7.map.from.js create mode 100644 node_modules/core-js/library/modules/es7.map.of.js create mode 100644 node_modules/core-js/library/modules/es7.map.to-json.js create mode 100644 node_modules/core-js/library/modules/es7.math.clamp.js create mode 100644 node_modules/core-js/library/modules/es7.math.deg-per-rad.js create mode 100644 node_modules/core-js/library/modules/es7.math.degrees.js create mode 100644 node_modules/core-js/library/modules/es7.math.fscale.js create mode 100644 node_modules/core-js/library/modules/es7.math.iaddh.js create mode 100644 node_modules/core-js/library/modules/es7.math.imulh.js create mode 100644 node_modules/core-js/library/modules/es7.math.isubh.js create mode 100644 node_modules/core-js/library/modules/es7.math.rad-per-deg.js create mode 100644 node_modules/core-js/library/modules/es7.math.radians.js create mode 100644 node_modules/core-js/library/modules/es7.math.scale.js create mode 100644 node_modules/core-js/library/modules/es7.math.signbit.js create mode 100644 node_modules/core-js/library/modules/es7.math.umulh.js create mode 100644 node_modules/core-js/library/modules/es7.object.define-getter.js create mode 100644 node_modules/core-js/library/modules/es7.object.define-setter.js create mode 100644 node_modules/core-js/library/modules/es7.object.entries.js create mode 100644 node_modules/core-js/library/modules/es7.object.get-own-property-descriptors.js create mode 100644 node_modules/core-js/library/modules/es7.object.lookup-getter.js create mode 100644 node_modules/core-js/library/modules/es7.object.lookup-setter.js create mode 100644 node_modules/core-js/library/modules/es7.object.values.js create mode 100644 node_modules/core-js/library/modules/es7.observable.js create mode 100644 node_modules/core-js/library/modules/es7.promise.finally.js create mode 100644 node_modules/core-js/library/modules/es7.promise.try.js create mode 100644 node_modules/core-js/library/modules/es7.reflect.define-metadata.js create mode 100644 node_modules/core-js/library/modules/es7.reflect.delete-metadata.js create mode 100644 node_modules/core-js/library/modules/es7.reflect.get-metadata-keys.js create mode 100644 node_modules/core-js/library/modules/es7.reflect.get-metadata.js create mode 100644 node_modules/core-js/library/modules/es7.reflect.get-own-metadata-keys.js create mode 100644 node_modules/core-js/library/modules/es7.reflect.get-own-metadata.js create mode 100644 node_modules/core-js/library/modules/es7.reflect.has-metadata.js create mode 100644 node_modules/core-js/library/modules/es7.reflect.has-own-metadata.js create mode 100644 node_modules/core-js/library/modules/es7.reflect.metadata.js create mode 100644 node_modules/core-js/library/modules/es7.set.from.js create mode 100644 node_modules/core-js/library/modules/es7.set.of.js create mode 100644 node_modules/core-js/library/modules/es7.set.to-json.js create mode 100644 node_modules/core-js/library/modules/es7.string.at.js create mode 100644 node_modules/core-js/library/modules/es7.string.match-all.js create mode 100644 node_modules/core-js/library/modules/es7.string.pad-end.js create mode 100644 node_modules/core-js/library/modules/es7.string.pad-start.js create mode 100644 node_modules/core-js/library/modules/es7.string.trim-left.js create mode 100644 node_modules/core-js/library/modules/es7.string.trim-right.js create mode 100644 node_modules/core-js/library/modules/es7.symbol.async-iterator.js create mode 100644 node_modules/core-js/library/modules/es7.symbol.observable.js create mode 100644 node_modules/core-js/library/modules/es7.system.global.js create mode 100644 node_modules/core-js/library/modules/es7.weak-map.from.js create mode 100644 node_modules/core-js/library/modules/es7.weak-map.of.js create mode 100644 node_modules/core-js/library/modules/es7.weak-set.from.js create mode 100644 node_modules/core-js/library/modules/es7.weak-set.of.js create mode 100644 node_modules/core-js/library/modules/web.dom.iterable.js create mode 100644 node_modules/core-js/library/modules/web.immediate.js create mode 100644 node_modules/core-js/library/modules/web.timers.js create mode 100644 node_modules/core-js/library/shim.js create mode 100644 node_modules/core-js/library/stage/0.js create mode 100644 node_modules/core-js/library/stage/1.js create mode 100644 node_modules/core-js/library/stage/2.js create mode 100644 node_modules/core-js/library/stage/3.js create mode 100644 node_modules/core-js/library/stage/4.js create mode 100644 node_modules/core-js/library/stage/index.js create mode 100644 node_modules/core-js/library/stage/pre.js create mode 100644 node_modules/core-js/library/web/dom-collections.js create mode 100644 node_modules/core-js/library/web/immediate.js create mode 100644 node_modules/core-js/library/web/index.js create mode 100644 node_modules/core-js/library/web/timers.js create mode 100644 node_modules/core-js/modules/_a-function.js create mode 100644 node_modules/core-js/modules/_a-number-value.js create mode 100644 node_modules/core-js/modules/_add-to-unscopables.js create mode 100644 node_modules/core-js/modules/_an-instance.js create mode 100644 node_modules/core-js/modules/_an-object.js create mode 100644 node_modules/core-js/modules/_array-copy-within.js create mode 100644 node_modules/core-js/modules/_array-fill.js create mode 100644 node_modules/core-js/modules/_array-from-iterable.js create mode 100644 node_modules/core-js/modules/_array-includes.js create mode 100644 node_modules/core-js/modules/_array-methods.js create mode 100644 node_modules/core-js/modules/_array-reduce.js create mode 100644 node_modules/core-js/modules/_array-species-constructor.js create mode 100644 node_modules/core-js/modules/_array-species-create.js create mode 100644 node_modules/core-js/modules/_bind.js create mode 100644 node_modules/core-js/modules/_classof.js create mode 100644 node_modules/core-js/modules/_cof.js create mode 100644 node_modules/core-js/modules/_collection-strong.js create mode 100644 node_modules/core-js/modules/_collection-to-json.js create mode 100644 node_modules/core-js/modules/_collection-weak.js create mode 100644 node_modules/core-js/modules/_collection.js create mode 100644 node_modules/core-js/modules/_core.js create mode 100644 node_modules/core-js/modules/_create-property.js create mode 100644 node_modules/core-js/modules/_ctx.js create mode 100644 node_modules/core-js/modules/_date-to-iso-string.js create mode 100644 node_modules/core-js/modules/_date-to-primitive.js create mode 100644 node_modules/core-js/modules/_defined.js create mode 100644 node_modules/core-js/modules/_descriptors.js create mode 100644 node_modules/core-js/modules/_dom-create.js create mode 100644 node_modules/core-js/modules/_entry-virtual.js create mode 100644 node_modules/core-js/modules/_enum-bug-keys.js create mode 100644 node_modules/core-js/modules/_enum-keys.js create mode 100644 node_modules/core-js/modules/_export.js create mode 100644 node_modules/core-js/modules/_fails-is-regexp.js create mode 100644 node_modules/core-js/modules/_fails.js create mode 100644 node_modules/core-js/modules/_fix-re-wks.js create mode 100644 node_modules/core-js/modules/_flags.js create mode 100644 node_modules/core-js/modules/_flatten-into-array.js create mode 100644 node_modules/core-js/modules/_for-of.js create mode 100644 node_modules/core-js/modules/_global.js create mode 100644 node_modules/core-js/modules/_has.js create mode 100644 node_modules/core-js/modules/_hide.js create mode 100644 node_modules/core-js/modules/_html.js create mode 100644 node_modules/core-js/modules/_ie8-dom-define.js create mode 100644 node_modules/core-js/modules/_inherit-if-required.js create mode 100644 node_modules/core-js/modules/_invoke.js create mode 100644 node_modules/core-js/modules/_iobject.js create mode 100644 node_modules/core-js/modules/_is-array-iter.js create mode 100644 node_modules/core-js/modules/_is-array.js create mode 100644 node_modules/core-js/modules/_is-integer.js create mode 100644 node_modules/core-js/modules/_is-object.js create mode 100644 node_modules/core-js/modules/_is-regexp.js create mode 100644 node_modules/core-js/modules/_iter-call.js create mode 100644 node_modules/core-js/modules/_iter-create.js create mode 100644 node_modules/core-js/modules/_iter-define.js create mode 100644 node_modules/core-js/modules/_iter-detect.js create mode 100644 node_modules/core-js/modules/_iter-step.js create mode 100644 node_modules/core-js/modules/_iterators.js create mode 100644 node_modules/core-js/modules/_keyof.js create mode 100644 node_modules/core-js/modules/_library.js create mode 100644 node_modules/core-js/modules/_math-expm1.js create mode 100644 node_modules/core-js/modules/_math-fround.js create mode 100644 node_modules/core-js/modules/_math-log1p.js create mode 100644 node_modules/core-js/modules/_math-scale.js create mode 100644 node_modules/core-js/modules/_math-sign.js create mode 100644 node_modules/core-js/modules/_meta.js create mode 100644 node_modules/core-js/modules/_metadata.js create mode 100644 node_modules/core-js/modules/_microtask.js create mode 100644 node_modules/core-js/modules/_new-promise-capability.js create mode 100644 node_modules/core-js/modules/_object-assign.js create mode 100644 node_modules/core-js/modules/_object-create.js create mode 100644 node_modules/core-js/modules/_object-define.js create mode 100644 node_modules/core-js/modules/_object-dp.js create mode 100644 node_modules/core-js/modules/_object-dps.js create mode 100644 node_modules/core-js/modules/_object-forced-pam.js create mode 100644 node_modules/core-js/modules/_object-gopd.js create mode 100644 node_modules/core-js/modules/_object-gopn-ext.js create mode 100644 node_modules/core-js/modules/_object-gopn.js create mode 100644 node_modules/core-js/modules/_object-gops.js create mode 100644 node_modules/core-js/modules/_object-gpo.js create mode 100644 node_modules/core-js/modules/_object-keys-internal.js create mode 100644 node_modules/core-js/modules/_object-keys.js create mode 100644 node_modules/core-js/modules/_object-pie.js create mode 100644 node_modules/core-js/modules/_object-sap.js create mode 100644 node_modules/core-js/modules/_object-to-array.js create mode 100644 node_modules/core-js/modules/_own-keys.js create mode 100644 node_modules/core-js/modules/_parse-float.js create mode 100644 node_modules/core-js/modules/_parse-int.js create mode 100644 node_modules/core-js/modules/_partial.js create mode 100644 node_modules/core-js/modules/_path.js create mode 100644 node_modules/core-js/modules/_perform.js create mode 100644 node_modules/core-js/modules/_promise-resolve.js create mode 100644 node_modules/core-js/modules/_property-desc.js create mode 100644 node_modules/core-js/modules/_redefine-all.js create mode 100644 node_modules/core-js/modules/_redefine.js create mode 100644 node_modules/core-js/modules/_replacer.js create mode 100644 node_modules/core-js/modules/_same-value.js create mode 100644 node_modules/core-js/modules/_set-collection-from.js create mode 100644 node_modules/core-js/modules/_set-collection-of.js create mode 100644 node_modules/core-js/modules/_set-proto.js create mode 100644 node_modules/core-js/modules/_set-species.js create mode 100644 node_modules/core-js/modules/_set-to-string-tag.js create mode 100644 node_modules/core-js/modules/_shared-key.js create mode 100644 node_modules/core-js/modules/_shared.js create mode 100644 node_modules/core-js/modules/_species-constructor.js create mode 100644 node_modules/core-js/modules/_strict-method.js create mode 100644 node_modules/core-js/modules/_string-at.js create mode 100644 node_modules/core-js/modules/_string-context.js create mode 100644 node_modules/core-js/modules/_string-html.js create mode 100644 node_modules/core-js/modules/_string-pad.js create mode 100644 node_modules/core-js/modules/_string-repeat.js create mode 100644 node_modules/core-js/modules/_string-trim.js create mode 100644 node_modules/core-js/modules/_string-ws.js create mode 100644 node_modules/core-js/modules/_task.js create mode 100644 node_modules/core-js/modules/_to-absolute-index.js create mode 100644 node_modules/core-js/modules/_to-index.js create mode 100644 node_modules/core-js/modules/_to-integer.js create mode 100644 node_modules/core-js/modules/_to-iobject.js create mode 100644 node_modules/core-js/modules/_to-length.js create mode 100644 node_modules/core-js/modules/_to-object.js create mode 100644 node_modules/core-js/modules/_to-primitive.js create mode 100644 node_modules/core-js/modules/_typed-array.js create mode 100644 node_modules/core-js/modules/_typed-buffer.js create mode 100644 node_modules/core-js/modules/_typed.js create mode 100644 node_modules/core-js/modules/_uid.js create mode 100644 node_modules/core-js/modules/_validate-collection.js create mode 100644 node_modules/core-js/modules/_wks-define.js create mode 100644 node_modules/core-js/modules/_wks-ext.js create mode 100644 node_modules/core-js/modules/_wks.js create mode 100644 node_modules/core-js/modules/core.delay.js create mode 100644 node_modules/core-js/modules/core.dict.js create mode 100644 node_modules/core-js/modules/core.function.part.js create mode 100644 node_modules/core-js/modules/core.get-iterator-method.js create mode 100644 node_modules/core-js/modules/core.get-iterator.js create mode 100644 node_modules/core-js/modules/core.is-iterable.js create mode 100644 node_modules/core-js/modules/core.number.iterator.js create mode 100644 node_modules/core-js/modules/core.object.classof.js create mode 100644 node_modules/core-js/modules/core.object.define.js create mode 100644 node_modules/core-js/modules/core.object.is-object.js create mode 100644 node_modules/core-js/modules/core.object.make.js create mode 100644 node_modules/core-js/modules/core.regexp.escape.js create mode 100644 node_modules/core-js/modules/core.string.escape-html.js create mode 100644 node_modules/core-js/modules/core.string.unescape-html.js create mode 100644 node_modules/core-js/modules/es5.js create mode 100644 node_modules/core-js/modules/es6.array.copy-within.js create mode 100644 node_modules/core-js/modules/es6.array.every.js create mode 100644 node_modules/core-js/modules/es6.array.fill.js create mode 100644 node_modules/core-js/modules/es6.array.filter.js create mode 100644 node_modules/core-js/modules/es6.array.find-index.js create mode 100644 node_modules/core-js/modules/es6.array.find.js create mode 100644 node_modules/core-js/modules/es6.array.for-each.js create mode 100644 node_modules/core-js/modules/es6.array.from.js create mode 100644 node_modules/core-js/modules/es6.array.index-of.js create mode 100644 node_modules/core-js/modules/es6.array.is-array.js create mode 100644 node_modules/core-js/modules/es6.array.iterator.js create mode 100644 node_modules/core-js/modules/es6.array.join.js create mode 100644 node_modules/core-js/modules/es6.array.last-index-of.js create mode 100644 node_modules/core-js/modules/es6.array.map.js create mode 100644 node_modules/core-js/modules/es6.array.of.js create mode 100644 node_modules/core-js/modules/es6.array.reduce-right.js create mode 100644 node_modules/core-js/modules/es6.array.reduce.js create mode 100644 node_modules/core-js/modules/es6.array.slice.js create mode 100644 node_modules/core-js/modules/es6.array.some.js create mode 100644 node_modules/core-js/modules/es6.array.sort.js create mode 100644 node_modules/core-js/modules/es6.array.species.js create mode 100644 node_modules/core-js/modules/es6.date.now.js create mode 100644 node_modules/core-js/modules/es6.date.to-iso-string.js create mode 100644 node_modules/core-js/modules/es6.date.to-json.js create mode 100644 node_modules/core-js/modules/es6.date.to-primitive.js create mode 100644 node_modules/core-js/modules/es6.date.to-string.js create mode 100644 node_modules/core-js/modules/es6.function.bind.js create mode 100644 node_modules/core-js/modules/es6.function.has-instance.js create mode 100644 node_modules/core-js/modules/es6.function.name.js create mode 100644 node_modules/core-js/modules/es6.map.js create mode 100644 node_modules/core-js/modules/es6.math.acosh.js create mode 100644 node_modules/core-js/modules/es6.math.asinh.js create mode 100644 node_modules/core-js/modules/es6.math.atanh.js create mode 100644 node_modules/core-js/modules/es6.math.cbrt.js create mode 100644 node_modules/core-js/modules/es6.math.clz32.js create mode 100644 node_modules/core-js/modules/es6.math.cosh.js create mode 100644 node_modules/core-js/modules/es6.math.expm1.js create mode 100644 node_modules/core-js/modules/es6.math.fround.js create mode 100644 node_modules/core-js/modules/es6.math.hypot.js create mode 100644 node_modules/core-js/modules/es6.math.imul.js create mode 100644 node_modules/core-js/modules/es6.math.log10.js create mode 100644 node_modules/core-js/modules/es6.math.log1p.js create mode 100644 node_modules/core-js/modules/es6.math.log2.js create mode 100644 node_modules/core-js/modules/es6.math.sign.js create mode 100644 node_modules/core-js/modules/es6.math.sinh.js create mode 100644 node_modules/core-js/modules/es6.math.tanh.js create mode 100644 node_modules/core-js/modules/es6.math.trunc.js create mode 100644 node_modules/core-js/modules/es6.number.constructor.js create mode 100644 node_modules/core-js/modules/es6.number.epsilon.js create mode 100644 node_modules/core-js/modules/es6.number.is-finite.js create mode 100644 node_modules/core-js/modules/es6.number.is-integer.js create mode 100644 node_modules/core-js/modules/es6.number.is-nan.js create mode 100644 node_modules/core-js/modules/es6.number.is-safe-integer.js create mode 100644 node_modules/core-js/modules/es6.number.max-safe-integer.js create mode 100644 node_modules/core-js/modules/es6.number.min-safe-integer.js create mode 100644 node_modules/core-js/modules/es6.number.parse-float.js create mode 100644 node_modules/core-js/modules/es6.number.parse-int.js create mode 100644 node_modules/core-js/modules/es6.number.to-fixed.js create mode 100644 node_modules/core-js/modules/es6.number.to-precision.js create mode 100644 node_modules/core-js/modules/es6.object.assign.js create mode 100644 node_modules/core-js/modules/es6.object.create.js create mode 100644 node_modules/core-js/modules/es6.object.define-properties.js create mode 100644 node_modules/core-js/modules/es6.object.define-property.js create mode 100644 node_modules/core-js/modules/es6.object.freeze.js create mode 100644 node_modules/core-js/modules/es6.object.get-own-property-descriptor.js create mode 100644 node_modules/core-js/modules/es6.object.get-own-property-names.js create mode 100644 node_modules/core-js/modules/es6.object.get-prototype-of.js create mode 100644 node_modules/core-js/modules/es6.object.is-extensible.js create mode 100644 node_modules/core-js/modules/es6.object.is-frozen.js create mode 100644 node_modules/core-js/modules/es6.object.is-sealed.js create mode 100644 node_modules/core-js/modules/es6.object.is.js create mode 100644 node_modules/core-js/modules/es6.object.keys.js create mode 100644 node_modules/core-js/modules/es6.object.prevent-extensions.js create mode 100644 node_modules/core-js/modules/es6.object.seal.js create mode 100644 node_modules/core-js/modules/es6.object.set-prototype-of.js create mode 100644 node_modules/core-js/modules/es6.object.to-string.js create mode 100644 node_modules/core-js/modules/es6.parse-float.js create mode 100644 node_modules/core-js/modules/es6.parse-int.js create mode 100644 node_modules/core-js/modules/es6.promise.js create mode 100644 node_modules/core-js/modules/es6.reflect.apply.js create mode 100644 node_modules/core-js/modules/es6.reflect.construct.js create mode 100644 node_modules/core-js/modules/es6.reflect.define-property.js create mode 100644 node_modules/core-js/modules/es6.reflect.delete-property.js create mode 100644 node_modules/core-js/modules/es6.reflect.enumerate.js create mode 100644 node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js create mode 100644 node_modules/core-js/modules/es6.reflect.get-prototype-of.js create mode 100644 node_modules/core-js/modules/es6.reflect.get.js create mode 100644 node_modules/core-js/modules/es6.reflect.has.js create mode 100644 node_modules/core-js/modules/es6.reflect.is-extensible.js create mode 100644 node_modules/core-js/modules/es6.reflect.own-keys.js create mode 100644 node_modules/core-js/modules/es6.reflect.prevent-extensions.js create mode 100644 node_modules/core-js/modules/es6.reflect.set-prototype-of.js create mode 100644 node_modules/core-js/modules/es6.reflect.set.js create mode 100644 node_modules/core-js/modules/es6.regexp.constructor.js create mode 100644 node_modules/core-js/modules/es6.regexp.flags.js create mode 100644 node_modules/core-js/modules/es6.regexp.match.js create mode 100644 node_modules/core-js/modules/es6.regexp.replace.js create mode 100644 node_modules/core-js/modules/es6.regexp.search.js create mode 100644 node_modules/core-js/modules/es6.regexp.split.js create mode 100644 node_modules/core-js/modules/es6.regexp.to-string.js create mode 100644 node_modules/core-js/modules/es6.set.js create mode 100644 node_modules/core-js/modules/es6.string.anchor.js create mode 100644 node_modules/core-js/modules/es6.string.big.js create mode 100644 node_modules/core-js/modules/es6.string.blink.js create mode 100644 node_modules/core-js/modules/es6.string.bold.js create mode 100644 node_modules/core-js/modules/es6.string.code-point-at.js create mode 100644 node_modules/core-js/modules/es6.string.ends-with.js create mode 100644 node_modules/core-js/modules/es6.string.fixed.js create mode 100644 node_modules/core-js/modules/es6.string.fontcolor.js create mode 100644 node_modules/core-js/modules/es6.string.fontsize.js create mode 100644 node_modules/core-js/modules/es6.string.from-code-point.js create mode 100644 node_modules/core-js/modules/es6.string.includes.js create mode 100644 node_modules/core-js/modules/es6.string.italics.js create mode 100644 node_modules/core-js/modules/es6.string.iterator.js create mode 100644 node_modules/core-js/modules/es6.string.link.js create mode 100644 node_modules/core-js/modules/es6.string.raw.js create mode 100644 node_modules/core-js/modules/es6.string.repeat.js create mode 100644 node_modules/core-js/modules/es6.string.small.js create mode 100644 node_modules/core-js/modules/es6.string.starts-with.js create mode 100644 node_modules/core-js/modules/es6.string.strike.js create mode 100644 node_modules/core-js/modules/es6.string.sub.js create mode 100644 node_modules/core-js/modules/es6.string.sup.js create mode 100644 node_modules/core-js/modules/es6.string.trim.js create mode 100644 node_modules/core-js/modules/es6.symbol.js create mode 100644 node_modules/core-js/modules/es6.typed.array-buffer.js create mode 100644 node_modules/core-js/modules/es6.typed.data-view.js create mode 100644 node_modules/core-js/modules/es6.typed.float32-array.js create mode 100644 node_modules/core-js/modules/es6.typed.float64-array.js create mode 100644 node_modules/core-js/modules/es6.typed.int16-array.js create mode 100644 node_modules/core-js/modules/es6.typed.int32-array.js create mode 100644 node_modules/core-js/modules/es6.typed.int8-array.js create mode 100644 node_modules/core-js/modules/es6.typed.uint16-array.js create mode 100644 node_modules/core-js/modules/es6.typed.uint32-array.js create mode 100644 node_modules/core-js/modules/es6.typed.uint8-array.js create mode 100644 node_modules/core-js/modules/es6.typed.uint8-clamped-array.js create mode 100644 node_modules/core-js/modules/es6.weak-map.js create mode 100644 node_modules/core-js/modules/es6.weak-set.js create mode 100644 node_modules/core-js/modules/es7.array.flat-map.js create mode 100644 node_modules/core-js/modules/es7.array.flatten.js create mode 100644 node_modules/core-js/modules/es7.array.includes.js create mode 100644 node_modules/core-js/modules/es7.asap.js create mode 100644 node_modules/core-js/modules/es7.error.is-error.js create mode 100644 node_modules/core-js/modules/es7.global.js create mode 100644 node_modules/core-js/modules/es7.map.from.js create mode 100644 node_modules/core-js/modules/es7.map.of.js create mode 100644 node_modules/core-js/modules/es7.map.to-json.js create mode 100644 node_modules/core-js/modules/es7.math.clamp.js create mode 100644 node_modules/core-js/modules/es7.math.deg-per-rad.js create mode 100644 node_modules/core-js/modules/es7.math.degrees.js create mode 100644 node_modules/core-js/modules/es7.math.fscale.js create mode 100644 node_modules/core-js/modules/es7.math.iaddh.js create mode 100644 node_modules/core-js/modules/es7.math.imulh.js create mode 100644 node_modules/core-js/modules/es7.math.isubh.js create mode 100644 node_modules/core-js/modules/es7.math.rad-per-deg.js create mode 100644 node_modules/core-js/modules/es7.math.radians.js create mode 100644 node_modules/core-js/modules/es7.math.scale.js create mode 100644 node_modules/core-js/modules/es7.math.signbit.js create mode 100644 node_modules/core-js/modules/es7.math.umulh.js create mode 100644 node_modules/core-js/modules/es7.object.define-getter.js create mode 100644 node_modules/core-js/modules/es7.object.define-setter.js create mode 100644 node_modules/core-js/modules/es7.object.entries.js create mode 100644 node_modules/core-js/modules/es7.object.get-own-property-descriptors.js create mode 100644 node_modules/core-js/modules/es7.object.lookup-getter.js create mode 100644 node_modules/core-js/modules/es7.object.lookup-setter.js create mode 100644 node_modules/core-js/modules/es7.object.values.js create mode 100644 node_modules/core-js/modules/es7.observable.js create mode 100644 node_modules/core-js/modules/es7.promise.finally.js create mode 100644 node_modules/core-js/modules/es7.promise.try.js create mode 100644 node_modules/core-js/modules/es7.reflect.define-metadata.js create mode 100644 node_modules/core-js/modules/es7.reflect.delete-metadata.js create mode 100644 node_modules/core-js/modules/es7.reflect.get-metadata-keys.js create mode 100644 node_modules/core-js/modules/es7.reflect.get-metadata.js create mode 100644 node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js create mode 100644 node_modules/core-js/modules/es7.reflect.get-own-metadata.js create mode 100644 node_modules/core-js/modules/es7.reflect.has-metadata.js create mode 100644 node_modules/core-js/modules/es7.reflect.has-own-metadata.js create mode 100644 node_modules/core-js/modules/es7.reflect.metadata.js create mode 100644 node_modules/core-js/modules/es7.set.from.js create mode 100644 node_modules/core-js/modules/es7.set.of.js create mode 100644 node_modules/core-js/modules/es7.set.to-json.js create mode 100644 node_modules/core-js/modules/es7.string.at.js create mode 100644 node_modules/core-js/modules/es7.string.match-all.js create mode 100644 node_modules/core-js/modules/es7.string.pad-end.js create mode 100644 node_modules/core-js/modules/es7.string.pad-start.js create mode 100644 node_modules/core-js/modules/es7.string.trim-left.js create mode 100644 node_modules/core-js/modules/es7.string.trim-right.js create mode 100644 node_modules/core-js/modules/es7.symbol.async-iterator.js create mode 100644 node_modules/core-js/modules/es7.symbol.observable.js create mode 100644 node_modules/core-js/modules/es7.system.global.js create mode 100644 node_modules/core-js/modules/es7.weak-map.from.js create mode 100644 node_modules/core-js/modules/es7.weak-map.of.js create mode 100644 node_modules/core-js/modules/es7.weak-set.from.js create mode 100644 node_modules/core-js/modules/es7.weak-set.of.js create mode 100644 node_modules/core-js/modules/library/_add-to-unscopables.js create mode 100644 node_modules/core-js/modules/library/_collection.js create mode 100644 node_modules/core-js/modules/library/_export.js create mode 100644 node_modules/core-js/modules/library/_library.js create mode 100644 node_modules/core-js/modules/library/_path.js create mode 100644 node_modules/core-js/modules/library/_redefine-all.js create mode 100644 node_modules/core-js/modules/library/_redefine.js create mode 100644 node_modules/core-js/modules/library/_set-species.js create mode 100644 node_modules/core-js/modules/library/es6.date.to-json.js create mode 100644 node_modules/core-js/modules/library/es6.date.to-primitive.js create mode 100644 node_modules/core-js/modules/library/es6.date.to-string.js create mode 100644 node_modules/core-js/modules/library/es6.function.name.js create mode 100644 node_modules/core-js/modules/library/es6.number.constructor.js create mode 100644 node_modules/core-js/modules/library/es6.object.to-string.js create mode 100644 node_modules/core-js/modules/library/es6.regexp.constructor.js create mode 100644 node_modules/core-js/modules/library/es6.regexp.flags.js create mode 100644 node_modules/core-js/modules/library/es6.regexp.match.js create mode 100644 node_modules/core-js/modules/library/es6.regexp.replace.js create mode 100644 node_modules/core-js/modules/library/es6.regexp.search.js create mode 100644 node_modules/core-js/modules/library/es6.regexp.split.js create mode 100644 node_modules/core-js/modules/library/es6.regexp.to-string.js create mode 100644 node_modules/core-js/modules/library/web.dom.iterable.js create mode 100644 node_modules/core-js/modules/web.dom.iterable.js create mode 100644 node_modules/core-js/modules/web.immediate.js create mode 100644 node_modules/core-js/modules/web.timers.js create mode 100644 node_modules/core-js/package.json create mode 100644 node_modules/core-js/shim.js create mode 100644 node_modules/core-js/stage/0.js create mode 100644 node_modules/core-js/stage/1.js create mode 100644 node_modules/core-js/stage/2.js create mode 100644 node_modules/core-js/stage/3.js create mode 100644 node_modules/core-js/stage/4.js create mode 100644 node_modules/core-js/stage/index.js create mode 100644 node_modules/core-js/stage/pre.js create mode 100644 node_modules/core-js/web/dom-collections.js create mode 100644 node_modules/core-js/web/immediate.js create mode 100644 node_modules/core-js/web/index.js create mode 100644 node_modules/core-js/web/timers.js create mode 100644 node_modules/core-util-is/LICENSE create mode 100644 node_modules/core-util-is/README.md create mode 100644 node_modules/core-util-is/float.patch create mode 100644 node_modules/core-util-is/lib/util.js create mode 100644 node_modules/core-util-is/package.json create mode 100644 node_modules/core-util-is/test.js create mode 100644 node_modules/corser/.npmignore create mode 100644 node_modules/corser/.travis.yml create mode 100644 node_modules/corser/LICENSE create mode 100644 node_modules/corser/README.md create mode 100644 node_modules/corser/lib/corser.js create mode 100644 node_modules/corser/package.json create mode 100644 node_modules/create-ecdh/.npmignore create mode 100644 node_modules/create-ecdh/.travis.yml create mode 100644 node_modules/create-ecdh/browser.js create mode 100644 node_modules/create-ecdh/index.js create mode 100644 node_modules/create-ecdh/package.json create mode 100644 node_modules/create-ecdh/readme.md create mode 100644 node_modules/create-hash/.npmignore create mode 100644 node_modules/create-hash/.travis.yml create mode 100644 node_modules/create-hash/browser.js create mode 100644 node_modules/create-hash/index.js create mode 100644 node_modules/create-hash/make-hash.js create mode 100644 node_modules/create-hash/md5.js create mode 100644 node_modules/create-hash/package.json create mode 100644 node_modules/create-hash/readme.md create mode 100644 node_modules/create-hash/test.js create mode 100644 node_modules/create-hmac/README.md create mode 100644 node_modules/create-hmac/browser.js create mode 100644 node_modules/create-hmac/index.js create mode 100644 node_modules/create-hmac/legacy.js create mode 100644 node_modules/create-hmac/package.json create mode 100644 node_modules/cross-spawn/CHANGELOG.md create mode 100644 node_modules/cross-spawn/LICENSE create mode 100644 node_modules/cross-spawn/README.md create mode 100644 node_modules/cross-spawn/index.js create mode 100644 node_modules/cross-spawn/lib/enoent.js create mode 100644 node_modules/cross-spawn/lib/parse.js create mode 100644 node_modules/cross-spawn/lib/util/escapeArgument.js create mode 100644 node_modules/cross-spawn/lib/util/escapeCommand.js create mode 100644 node_modules/cross-spawn/lib/util/hasEmptyArgumentBug.js create mode 100644 node_modules/cross-spawn/lib/util/readShebang.js create mode 100644 node_modules/cross-spawn/lib/util/resolveCommand.js create mode 100644 node_modules/cross-spawn/package.json create mode 100644 node_modules/crypto-browserify/.npmignore create mode 100644 node_modules/crypto-browserify/.travis.yml create mode 100644 node_modules/crypto-browserify/.zuul.yml create mode 100644 node_modules/crypto-browserify/LICENSE create mode 100644 node_modules/crypto-browserify/README.md create mode 100644 node_modules/crypto-browserify/example/bundle.js create mode 100644 node_modules/crypto-browserify/example/index.html create mode 100644 node_modules/crypto-browserify/example/test.js create mode 100644 node_modules/crypto-browserify/index.js create mode 100644 node_modules/crypto-browserify/package.json create mode 100644 node_modules/crypto-browserify/test/aes.js create mode 100644 node_modules/crypto-browserify/test/create-hash.js create mode 100644 node_modules/crypto-browserify/test/create-hmac.js create mode 100644 node_modules/crypto-browserify/test/dh.js create mode 100644 node_modules/crypto-browserify/test/ecdh.js create mode 100644 node_modules/crypto-browserify/test/index.js create mode 100644 node_modules/crypto-browserify/test/node/dh.js create mode 100644 node_modules/crypto-browserify/test/pbkdf2.js create mode 100644 node_modules/crypto-browserify/test/public-encrypt.js create mode 100644 node_modules/crypto-browserify/test/random-bytes.js create mode 100644 node_modules/crypto-browserify/test/sign.js create mode 100644 node_modules/d/.lint create mode 100644 node_modules/d/.npmignore create mode 100644 node_modules/d/.travis.yml create mode 100644 node_modules/d/CHANGES create mode 100644 node_modules/d/LICENSE create mode 100644 node_modules/d/README.md create mode 100644 node_modules/d/auto-bind.js create mode 100644 node_modules/d/index.js create mode 100644 node_modules/d/lazy.js create mode 100644 node_modules/d/package.json create mode 100644 node_modules/d/test/auto-bind.js create mode 100644 node_modules/d/test/index.js create mode 100644 node_modules/d/test/lazy.js create mode 100644 node_modules/date-now/.npmignore create mode 100644 node_modules/date-now/.testem.json create mode 100644 node_modules/date-now/.travis.yml create mode 100644 node_modules/date-now/LICENCE create mode 100644 node_modules/date-now/README.md create mode 100644 node_modules/date-now/index.js create mode 100644 node_modules/date-now/package.json create mode 100644 node_modules/date-now/seed.js create mode 100644 node_modules/date-now/test/index.js create mode 100644 node_modules/date-now/test/static/index.html create mode 100644 node_modules/debug/.coveralls.yml create mode 100644 node_modules/debug/.eslintrc create mode 100644 node_modules/debug/.npmignore create mode 100644 node_modules/debug/.travis.yml create mode 100644 node_modules/debug/CHANGELOG.md create mode 100644 node_modules/debug/LICENSE create mode 100644 node_modules/debug/Makefile create mode 100644 node_modules/debug/README.md create mode 100644 node_modules/debug/component.json create mode 100644 node_modules/debug/karma.conf.js create mode 100644 node_modules/debug/node.js create mode 100644 node_modules/debug/package.json create mode 100644 node_modules/debug/src/browser.js create mode 100644 node_modules/debug/src/debug.js create mode 100644 node_modules/debug/src/index.js create mode 100644 node_modules/debug/src/node.js create mode 100644 node_modules/decamelize/index.js create mode 100644 node_modules/decamelize/license create mode 100644 node_modules/decamelize/package.json create mode 100644 node_modules/decamelize/readme.md create mode 100644 node_modules/des.js/.jscsrc create mode 100644 node_modules/des.js/.jshintrc create mode 100644 node_modules/des.js/.npmignore create mode 100644 node_modules/des.js/README.md create mode 100644 node_modules/des.js/lib/des.js create mode 100644 node_modules/des.js/lib/des/cbc.js create mode 100644 node_modules/des.js/lib/des/cipher.js create mode 100644 node_modules/des.js/lib/des/des.js create mode 100644 node_modules/des.js/lib/des/ede.js create mode 100644 node_modules/des.js/lib/des/utils.js create mode 100644 node_modules/des.js/package.json create mode 100644 node_modules/des.js/test/cbc-test.js create mode 100644 node_modules/des.js/test/des-test.js create mode 100644 node_modules/des.js/test/ede-test.js create mode 100644 node_modules/des.js/test/fixtures.js create mode 100644 node_modules/des.js/test/utils-test.js create mode 100644 node_modules/detect-indent/index.js create mode 100644 node_modules/detect-indent/license create mode 100644 node_modules/detect-indent/package.json create mode 100644 node_modules/detect-indent/readme.md create mode 100644 node_modules/diffie-hellman/.npmignore create mode 100644 node_modules/diffie-hellman/.travis.yml create mode 100644 node_modules/diffie-hellman/browser.js create mode 100644 node_modules/diffie-hellman/index.js create mode 100644 node_modules/diffie-hellman/lib/dh.js create mode 100644 node_modules/diffie-hellman/lib/generatePrime.js create mode 100644 node_modules/diffie-hellman/lib/primes.json create mode 100644 node_modules/diffie-hellman/package.json create mode 100644 node_modules/diffie-hellman/readme.md create mode 100644 node_modules/domain-browser/.eslintrc.js create mode 100644 node_modules/domain-browser/.npmignore create mode 100644 node_modules/domain-browser/HISTORY.md create mode 100644 node_modules/domain-browser/LICENSE.md create mode 100644 node_modules/domain-browser/README.md create mode 100644 node_modules/domain-browser/index.js create mode 100644 node_modules/domain-browser/package.json create mode 100644 node_modules/domain-browser/test.js create mode 100644 node_modules/ecstatic/.npmignore create mode 100644 node_modules/ecstatic/.nyc_output/0e436f3bc14dc8ccedf3644f11d21bb2.json create mode 100644 node_modules/ecstatic/.nyc_output/1089e711f18d2cef72071d9d94b2113a.json create mode 100644 node_modules/ecstatic/.nyc_output/246c1d9b9690a1b25a37590e214926eb.json create mode 100644 node_modules/ecstatic/.nyc_output/28067239ca9b9a420d75718dc60e9794.json create mode 100644 node_modules/ecstatic/.nyc_output/370f05d87a90d99a9391d2c4707dabe7.json create mode 100644 node_modules/ecstatic/.nyc_output/3d0091927809edba2172020b3e0eb278.json create mode 100644 node_modules/ecstatic/.nyc_output/43ba11797e49f169b6e0ed203795ffc0.json create mode 100644 node_modules/ecstatic/.nyc_output/440e615b5769bc16d3a797b07369937b.json create mode 100644 node_modules/ecstatic/.nyc_output/45d156bbbe05e26013a2478828a2300f.json create mode 100644 node_modules/ecstatic/.nyc_output/47f92d828cfbd2b8e98f91d65290178c.json create mode 100644 node_modules/ecstatic/.nyc_output/49eb33cd8cebe3f4ac8c85d10406aa0d.json create mode 100644 node_modules/ecstatic/.nyc_output/4b420cf944a9102eadb9161a78cbe6d4.json create mode 100644 node_modules/ecstatic/.nyc_output/4d3a90c70f7e04637f342841413f105d.json create mode 100644 node_modules/ecstatic/.nyc_output/4e4208b377ac94a853b58ea95cf76678.json create mode 100644 node_modules/ecstatic/.nyc_output/72781a4abb14bb9fa12ab44adc03ae95.json create mode 100644 node_modules/ecstatic/.nyc_output/7dca6987350b11397f7b183230cd8ed3.json create mode 100644 node_modules/ecstatic/.nyc_output/8194b7c452bb548b092aced3e5cb504d.json create mode 100644 node_modules/ecstatic/.nyc_output/85d3709905e273444b70ec852b4995af.json create mode 100644 node_modules/ecstatic/.nyc_output/86f120f0940c97d5a9b83c119e07fd1b.json create mode 100644 node_modules/ecstatic/.nyc_output/90450770f19a6254f215aa67f3fd17ba.json create mode 100644 node_modules/ecstatic/.nyc_output/90ba340dcd6d2d939145d1d5dd4f00b3.json create mode 100644 node_modules/ecstatic/.nyc_output/95b26ca55299b8f0e6578dba3580cdd8.json create mode 100644 node_modules/ecstatic/.nyc_output/a2f2985a4ea3dffac854649c4653dd80.json create mode 100644 node_modules/ecstatic/.nyc_output/a708dc3afadc5f62acbddbac4ebe3b22.json create mode 100644 node_modules/ecstatic/.nyc_output/a860bba1a65f01c6497ea05b245f3478.json create mode 100644 node_modules/ecstatic/.nyc_output/aa457714b2f466ea5ef63eab9399b3ed.json create mode 100644 node_modules/ecstatic/.nyc_output/ac19822dc89661f902371db3d0a0c5e3.json create mode 100644 node_modules/ecstatic/.nyc_output/b5225977cfe01259785efd49292dac24.json create mode 100644 node_modules/ecstatic/.nyc_output/b82f09ad43968671cbe2e66ae7eec462.json create mode 100644 node_modules/ecstatic/.nyc_output/b99369b1a3b1c739915c627032b30676.json create mode 100644 node_modules/ecstatic/.nyc_output/ba58ee6f0559fcdd43eb68812779a128.json create mode 100644 node_modules/ecstatic/.nyc_output/bc92c2aaf165b06a2777c3c88f434a9d.json create mode 100644 node_modules/ecstatic/.nyc_output/c5599d16a8ee1389aae7c068c591c2a5.json create mode 100644 node_modules/ecstatic/.nyc_output/c5cd7f005408251e64df50ca2012ff6e.json create mode 100644 node_modules/ecstatic/.nyc_output/cc0c6b1e00994792240a528b9bac4eeb.json create mode 100644 node_modules/ecstatic/.nyc_output/d83cb5b33e0221913dd5ce977de3cdc2.json create mode 100644 node_modules/ecstatic/.nyc_output/de480016f80f842ede70e908d8d2914c.json create mode 100644 node_modules/ecstatic/.nyc_output/e4bc2f05dd42972945ce4bbe8df848f6.json create mode 100644 node_modules/ecstatic/.nyc_output/ef3194cd8a43a90bd63564bd70f59d3c.json create mode 100644 node_modules/ecstatic/.travis.yml create mode 100644 node_modules/ecstatic/CHANGELOG.md create mode 100644 node_modules/ecstatic/CONTRIBUTING.md create mode 100644 node_modules/ecstatic/CONTRIBUTORS.md create mode 100644 node_modules/ecstatic/LICENSE.txt create mode 100644 node_modules/ecstatic/README.md create mode 100644 node_modules/ecstatic/coverage/lcov-report/base.css create mode 100644 node_modules/ecstatic/coverage/lcov-report/index.html create mode 100644 node_modules/ecstatic/coverage/lcov-report/lib/ecstatic.js.html create mode 100644 node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/etag.js.html create mode 100644 node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/index.html create mode 100644 node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/opts.js.html create mode 100644 node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/showdir.js.html create mode 100644 node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/status-handlers.js.html create mode 100644 node_modules/ecstatic/coverage/lcov-report/lib/index.html create mode 100644 node_modules/ecstatic/coverage/lcov-report/prettify.css create mode 100644 node_modules/ecstatic/coverage/lcov-report/prettify.js create mode 100644 node_modules/ecstatic/coverage/lcov-report/sort-arrow-sprite.png create mode 100644 node_modules/ecstatic/coverage/lcov-report/sorter.js create mode 100644 node_modules/ecstatic/coverage/lcov.info create mode 100755 node_modules/ecstatic/example/cli.sh create mode 100644 node_modules/ecstatic/example/core.js create mode 100644 node_modules/ecstatic/example/express.js create mode 100644 node_modules/ecstatic/example/public/beep/index.html create mode 100644 node_modules/ecstatic/example/public/hello.txt create mode 100644 node_modules/ecstatic/example/public/subdir/world.txt create mode 100644 node_modules/ecstatic/example/public/turtle.png create mode 100644 node_modules/ecstatic/example/union.js create mode 100755 node_modules/ecstatic/lib/ecstatic.js create mode 100644 node_modules/ecstatic/lib/ecstatic/aliases.json create mode 100644 node_modules/ecstatic/lib/ecstatic/defaults.json create mode 100644 node_modules/ecstatic/lib/ecstatic/etag.js create mode 100644 node_modules/ecstatic/lib/ecstatic/opts.js create mode 100644 node_modules/ecstatic/lib/ecstatic/show-dir/icons.json create mode 100644 node_modules/ecstatic/lib/ecstatic/show-dir/index.js create mode 100644 node_modules/ecstatic/lib/ecstatic/show-dir/perms-to-string.js create mode 100644 node_modules/ecstatic/lib/ecstatic/show-dir/size-to-string.js create mode 100644 node_modules/ecstatic/lib/ecstatic/show-dir/sort-files.js create mode 100644 node_modules/ecstatic/lib/ecstatic/show-dir/styles.js create mode 100644 node_modules/ecstatic/lib/ecstatic/status-handlers.js create mode 100644 node_modules/ecstatic/node_modules/minimist/.travis.yml create mode 100644 node_modules/ecstatic/node_modules/minimist/LICENSE create mode 100644 node_modules/ecstatic/node_modules/minimist/example/parse.js create mode 100644 node_modules/ecstatic/node_modules/minimist/index.js create mode 100644 node_modules/ecstatic/node_modules/minimist/package.json create mode 100644 node_modules/ecstatic/node_modules/minimist/readme.markdown create mode 100644 node_modules/ecstatic/node_modules/minimist/test/all_bool.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/bool.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/dash.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/default_bool.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/dotted.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/kv_short.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/long.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/num.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/parse.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/short.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/stop_early.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/unknown.js create mode 100644 node_modules/ecstatic/node_modules/minimist/test/whitespace.js create mode 100644 node_modules/ecstatic/package.json create mode 100644 node_modules/ecstatic/test.js create mode 100644 node_modules/ecstatic/tools/build-icons.js create mode 100755 node_modules/ecstatic/tools/get-icons.sh create mode 100644 node_modules/elliptic/README.md create mode 100644 node_modules/elliptic/lib/elliptic.js create mode 100644 node_modules/elliptic/lib/elliptic/curve/base.js create mode 100644 node_modules/elliptic/lib/elliptic/curve/edwards.js create mode 100644 node_modules/elliptic/lib/elliptic/curve/index.js create mode 100644 node_modules/elliptic/lib/elliptic/curve/mont.js create mode 100644 node_modules/elliptic/lib/elliptic/curve/short.js create mode 100644 node_modules/elliptic/lib/elliptic/curves.js create mode 100644 node_modules/elliptic/lib/elliptic/ec/index.js create mode 100644 node_modules/elliptic/lib/elliptic/ec/key.js create mode 100644 node_modules/elliptic/lib/elliptic/ec/signature.js create mode 100644 node_modules/elliptic/lib/elliptic/eddsa/index.js create mode 100644 node_modules/elliptic/lib/elliptic/eddsa/key.js create mode 100644 node_modules/elliptic/lib/elliptic/eddsa/signature.js create mode 100644 node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js create mode 100644 node_modules/elliptic/lib/elliptic/utils.js create mode 100644 node_modules/elliptic/package.json create mode 100644 node_modules/emojis-list/CHANGELOG.md create mode 100755 node_modules/emojis-list/LICENSE.md create mode 100755 node_modules/emojis-list/README.md create mode 100644 node_modules/emojis-list/index.js create mode 100644 node_modules/emojis-list/package.json create mode 100644 node_modules/enhanced-resolve/README.md create mode 100644 node_modules/enhanced-resolve/lib/AliasFieldPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/AliasPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/AppendPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/CachedInputFileSystem.js create mode 100644 node_modules/enhanced-resolve/lib/CloneBasenamePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ConcordExtensionsPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ConcordMainPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ConcordModulesPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/DescriptionFileUtils.js create mode 100644 node_modules/enhanced-resolve/lib/DirectoryExistsPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/FileExistsPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/FileKindPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/JoinRequestPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/LogInfoPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/MainFieldPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ModuleAppendPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ModuleKindPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ModulesInHierachicDirectoriesPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ModulesInRootPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/NextPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/NodeJsInputFileSystem.js create mode 100644 node_modules/enhanced-resolve/lib/ParsePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/Resolver.js create mode 100644 node_modules/enhanced-resolve/lib/ResolverFactory.js create mode 100644 node_modules/enhanced-resolve/lib/ResultPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/SymlinkPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/SyncAsyncFileSystemDecorator.js create mode 100644 node_modules/enhanced-resolve/lib/TryNextPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/UseFilePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/concord.js create mode 100644 node_modules/enhanced-resolve/lib/createInnerCallback.js create mode 100644 node_modules/enhanced-resolve/lib/forEachBail.js create mode 100644 node_modules/enhanced-resolve/lib/getInnerRequest.js create mode 100644 node_modules/enhanced-resolve/lib/getPaths.js create mode 100644 node_modules/enhanced-resolve/lib/globToRegExp.js create mode 100644 node_modules/enhanced-resolve/lib/node.js create mode 100644 node_modules/enhanced-resolve/package.json create mode 100644 node_modules/errno/.jshintrc create mode 100644 node_modules/errno/.npmignore create mode 100644 node_modules/errno/README.md create mode 100755 node_modules/errno/build.js create mode 100755 node_modules/errno/cli.js create mode 100644 node_modules/errno/custom.js create mode 100644 node_modules/errno/errno.js create mode 100644 node_modules/errno/package.json create mode 100755 node_modules/errno/test.js create mode 100644 node_modules/error-ex/LICENSE create mode 100644 node_modules/error-ex/README.md create mode 100644 node_modules/error-ex/index.js create mode 100644 node_modules/error-ex/package.json create mode 100644 node_modules/es5-ext/.lint create mode 100644 node_modules/es5-ext/.lintignore create mode 100644 node_modules/es5-ext/.npmignore create mode 100644 node_modules/es5-ext/CHANGELOG.md create mode 100644 node_modules/es5-ext/CHANGES create mode 100644 node_modules/es5-ext/LICENSE create mode 100644 node_modules/es5-ext/README.md create mode 100644 node_modules/es5-ext/appveyor.yml create mode 100644 node_modules/es5-ext/array/#/@@iterator/implement.js create mode 100644 node_modules/es5-ext/array/#/@@iterator/index.js create mode 100644 node_modules/es5-ext/array/#/@@iterator/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/@@iterator/shim.js create mode 100644 node_modules/es5-ext/array/#/_compare-by-length.js create mode 100644 node_modules/es5-ext/array/#/binary-search.js create mode 100644 node_modules/es5-ext/array/#/clear.js create mode 100644 node_modules/es5-ext/array/#/compact.js create mode 100644 node_modules/es5-ext/array/#/concat/implement.js create mode 100644 node_modules/es5-ext/array/#/concat/index.js create mode 100644 node_modules/es5-ext/array/#/concat/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/concat/shim.js create mode 100644 node_modules/es5-ext/array/#/contains.js create mode 100644 node_modules/es5-ext/array/#/copy-within/implement.js create mode 100644 node_modules/es5-ext/array/#/copy-within/index.js create mode 100644 node_modules/es5-ext/array/#/copy-within/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/copy-within/shim.js create mode 100644 node_modules/es5-ext/array/#/diff.js create mode 100644 node_modules/es5-ext/array/#/e-index-of.js create mode 100644 node_modules/es5-ext/array/#/e-last-index-of.js create mode 100644 node_modules/es5-ext/array/#/entries/implement.js create mode 100644 node_modules/es5-ext/array/#/entries/index.js create mode 100644 node_modules/es5-ext/array/#/entries/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/entries/shim.js create mode 100644 node_modules/es5-ext/array/#/exclusion.js create mode 100644 node_modules/es5-ext/array/#/fill/implement.js create mode 100644 node_modules/es5-ext/array/#/fill/index.js create mode 100644 node_modules/es5-ext/array/#/fill/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/fill/shim.js create mode 100644 node_modules/es5-ext/array/#/filter/implement.js create mode 100644 node_modules/es5-ext/array/#/filter/index.js create mode 100644 node_modules/es5-ext/array/#/filter/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/filter/shim.js create mode 100644 node_modules/es5-ext/array/#/find-index/implement.js create mode 100644 node_modules/es5-ext/array/#/find-index/index.js create mode 100644 node_modules/es5-ext/array/#/find-index/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/find-index/shim.js create mode 100644 node_modules/es5-ext/array/#/find/implement.js create mode 100644 node_modules/es5-ext/array/#/find/index.js create mode 100644 node_modules/es5-ext/array/#/find/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/find/shim.js create mode 100644 node_modules/es5-ext/array/#/first-index.js create mode 100644 node_modules/es5-ext/array/#/first.js create mode 100644 node_modules/es5-ext/array/#/flatten.js create mode 100644 node_modules/es5-ext/array/#/for-each-right.js create mode 100644 node_modules/es5-ext/array/#/group.js create mode 100644 node_modules/es5-ext/array/#/index.js create mode 100644 node_modules/es5-ext/array/#/indexes-of.js create mode 100644 node_modules/es5-ext/array/#/intersection.js create mode 100644 node_modules/es5-ext/array/#/is-copy.js create mode 100644 node_modules/es5-ext/array/#/is-empty.js create mode 100644 node_modules/es5-ext/array/#/is-uniq.js create mode 100644 node_modules/es5-ext/array/#/keys/implement.js create mode 100644 node_modules/es5-ext/array/#/keys/index.js create mode 100644 node_modules/es5-ext/array/#/keys/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/keys/shim.js create mode 100644 node_modules/es5-ext/array/#/last-index.js create mode 100644 node_modules/es5-ext/array/#/last.js create mode 100644 node_modules/es5-ext/array/#/map/implement.js create mode 100644 node_modules/es5-ext/array/#/map/index.js create mode 100644 node_modules/es5-ext/array/#/map/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/map/shim.js create mode 100644 node_modules/es5-ext/array/#/remove.js create mode 100644 node_modules/es5-ext/array/#/separate.js create mode 100644 node_modules/es5-ext/array/#/slice/implement.js create mode 100644 node_modules/es5-ext/array/#/slice/index.js create mode 100644 node_modules/es5-ext/array/#/slice/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/slice/shim.js create mode 100644 node_modules/es5-ext/array/#/some-right.js create mode 100644 node_modules/es5-ext/array/#/splice/implement.js create mode 100644 node_modules/es5-ext/array/#/splice/index.js create mode 100644 node_modules/es5-ext/array/#/splice/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/splice/shim.js create mode 100644 node_modules/es5-ext/array/#/uniq.js create mode 100644 node_modules/es5-ext/array/#/values/implement.js create mode 100644 node_modules/es5-ext/array/#/values/index.js create mode 100644 node_modules/es5-ext/array/#/values/is-implemented.js create mode 100644 node_modules/es5-ext/array/#/values/shim.js create mode 100644 node_modules/es5-ext/array/_is-extensible.js create mode 100644 node_modules/es5-ext/array/_sub-array-dummy-safe.js create mode 100644 node_modules/es5-ext/array/_sub-array-dummy.js create mode 100644 node_modules/es5-ext/array/from/implement.js create mode 100644 node_modules/es5-ext/array/from/index.js create mode 100644 node_modules/es5-ext/array/from/is-implemented.js create mode 100644 node_modules/es5-ext/array/from/shim.js create mode 100644 node_modules/es5-ext/array/generate.js create mode 100644 node_modules/es5-ext/array/index.js create mode 100644 node_modules/es5-ext/array/is-plain-array.js create mode 100644 node_modules/es5-ext/array/of/implement.js create mode 100644 node_modules/es5-ext/array/of/index.js create mode 100644 node_modules/es5-ext/array/of/is-implemented.js create mode 100644 node_modules/es5-ext/array/of/shim.js create mode 100644 node_modules/es5-ext/array/to-array.js create mode 100644 node_modules/es5-ext/array/valid-array.js create mode 100644 node_modules/es5-ext/boolean/index.js create mode 100644 node_modules/es5-ext/boolean/is-boolean.js create mode 100644 node_modules/es5-ext/circle.yml create mode 100644 node_modules/es5-ext/date/#/copy.js create mode 100644 node_modules/es5-ext/date/#/days-in-month.js create mode 100644 node_modules/es5-ext/date/#/floor-day.js create mode 100644 node_modules/es5-ext/date/#/floor-month.js create mode 100644 node_modules/es5-ext/date/#/floor-year.js create mode 100644 node_modules/es5-ext/date/#/format.js create mode 100644 node_modules/es5-ext/date/#/index.js create mode 100644 node_modules/es5-ext/date/index.js create mode 100644 node_modules/es5-ext/date/is-date.js create mode 100644 node_modules/es5-ext/date/valid-date.js create mode 100644 node_modules/es5-ext/error/#/index.js create mode 100644 node_modules/es5-ext/error/#/throw.js create mode 100644 node_modules/es5-ext/error/custom.js create mode 100644 node_modules/es5-ext/error/index.js create mode 100644 node_modules/es5-ext/error/is-error.js create mode 100644 node_modules/es5-ext/error/valid-error.js create mode 100644 node_modules/es5-ext/function/#/compose.js create mode 100644 node_modules/es5-ext/function/#/copy.js create mode 100644 node_modules/es5-ext/function/#/curry.js create mode 100644 node_modules/es5-ext/function/#/index.js create mode 100644 node_modules/es5-ext/function/#/lock.js create mode 100644 node_modules/es5-ext/function/#/not.js create mode 100644 node_modules/es5-ext/function/#/partial.js create mode 100644 node_modules/es5-ext/function/#/spread.js create mode 100644 node_modules/es5-ext/function/#/to-string-tokens.js create mode 100644 node_modules/es5-ext/function/_define-length.js create mode 100644 node_modules/es5-ext/function/constant.js create mode 100644 node_modules/es5-ext/function/identity.js create mode 100644 node_modules/es5-ext/function/index.js create mode 100644 node_modules/es5-ext/function/invoke.js create mode 100644 node_modules/es5-ext/function/is-arguments.js create mode 100644 node_modules/es5-ext/function/is-function.js create mode 100644 node_modules/es5-ext/function/noop.js create mode 100644 node_modules/es5-ext/function/pluck.js create mode 100644 node_modules/es5-ext/function/valid-function.js create mode 100644 node_modules/es5-ext/global.js create mode 100644 node_modules/es5-ext/index.js create mode 100644 node_modules/es5-ext/iterable/for-each.js create mode 100644 node_modules/es5-ext/iterable/index.js create mode 100644 node_modules/es5-ext/iterable/is.js create mode 100644 node_modules/es5-ext/iterable/validate-object.js create mode 100644 node_modules/es5-ext/iterable/validate.js create mode 100644 node_modules/es5-ext/json/index.js create mode 100644 node_modules/es5-ext/json/safe-stringify.js create mode 100644 node_modules/es5-ext/math/_pack-ieee754.js create mode 100644 node_modules/es5-ext/math/_unpack-ieee754.js create mode 100644 node_modules/es5-ext/math/acosh/implement.js create mode 100644 node_modules/es5-ext/math/acosh/index.js create mode 100644 node_modules/es5-ext/math/acosh/is-implemented.js create mode 100644 node_modules/es5-ext/math/acosh/shim.js create mode 100644 node_modules/es5-ext/math/asinh/implement.js create mode 100644 node_modules/es5-ext/math/asinh/index.js create mode 100644 node_modules/es5-ext/math/asinh/is-implemented.js create mode 100644 node_modules/es5-ext/math/asinh/shim.js create mode 100644 node_modules/es5-ext/math/atanh/implement.js create mode 100644 node_modules/es5-ext/math/atanh/index.js create mode 100644 node_modules/es5-ext/math/atanh/is-implemented.js create mode 100644 node_modules/es5-ext/math/atanh/shim.js create mode 100644 node_modules/es5-ext/math/cbrt/implement.js create mode 100644 node_modules/es5-ext/math/cbrt/index.js create mode 100644 node_modules/es5-ext/math/cbrt/is-implemented.js create mode 100644 node_modules/es5-ext/math/cbrt/shim.js create mode 100644 node_modules/es5-ext/math/clz32/implement.js create mode 100644 node_modules/es5-ext/math/clz32/index.js create mode 100644 node_modules/es5-ext/math/clz32/is-implemented.js create mode 100644 node_modules/es5-ext/math/clz32/shim.js create mode 100644 node_modules/es5-ext/math/cosh/implement.js create mode 100644 node_modules/es5-ext/math/cosh/index.js create mode 100644 node_modules/es5-ext/math/cosh/is-implemented.js create mode 100644 node_modules/es5-ext/math/cosh/shim.js create mode 100644 node_modules/es5-ext/math/expm1/implement.js create mode 100644 node_modules/es5-ext/math/expm1/index.js create mode 100644 node_modules/es5-ext/math/expm1/is-implemented.js create mode 100644 node_modules/es5-ext/math/expm1/shim.js create mode 100644 node_modules/es5-ext/math/fround/implement.js create mode 100644 node_modules/es5-ext/math/fround/index.js create mode 100644 node_modules/es5-ext/math/fround/is-implemented.js create mode 100644 node_modules/es5-ext/math/fround/shim.js create mode 100644 node_modules/es5-ext/math/hypot/implement.js create mode 100644 node_modules/es5-ext/math/hypot/index.js create mode 100644 node_modules/es5-ext/math/hypot/is-implemented.js create mode 100644 node_modules/es5-ext/math/hypot/shim.js create mode 100644 node_modules/es5-ext/math/imul/implement.js create mode 100644 node_modules/es5-ext/math/imul/index.js create mode 100644 node_modules/es5-ext/math/imul/is-implemented.js create mode 100644 node_modules/es5-ext/math/imul/shim.js create mode 100644 node_modules/es5-ext/math/index.js create mode 100644 node_modules/es5-ext/math/log10/implement.js create mode 100644 node_modules/es5-ext/math/log10/index.js create mode 100644 node_modules/es5-ext/math/log10/is-implemented.js create mode 100644 node_modules/es5-ext/math/log10/shim.js create mode 100644 node_modules/es5-ext/math/log1p/implement.js create mode 100644 node_modules/es5-ext/math/log1p/index.js create mode 100644 node_modules/es5-ext/math/log1p/is-implemented.js create mode 100644 node_modules/es5-ext/math/log1p/shim.js create mode 100644 node_modules/es5-ext/math/log2/implement.js create mode 100644 node_modules/es5-ext/math/log2/index.js create mode 100644 node_modules/es5-ext/math/log2/is-implemented.js create mode 100644 node_modules/es5-ext/math/log2/shim.js create mode 100644 node_modules/es5-ext/math/sign/implement.js create mode 100644 node_modules/es5-ext/math/sign/index.js create mode 100644 node_modules/es5-ext/math/sign/is-implemented.js create mode 100644 node_modules/es5-ext/math/sign/shim.js create mode 100644 node_modules/es5-ext/math/sinh/implement.js create mode 100644 node_modules/es5-ext/math/sinh/index.js create mode 100644 node_modules/es5-ext/math/sinh/is-implemented.js create mode 100644 node_modules/es5-ext/math/sinh/shim.js create mode 100644 node_modules/es5-ext/math/tanh/implement.js create mode 100644 node_modules/es5-ext/math/tanh/index.js create mode 100644 node_modules/es5-ext/math/tanh/is-implemented.js create mode 100644 node_modules/es5-ext/math/tanh/shim.js create mode 100644 node_modules/es5-ext/math/trunc/implement.js create mode 100644 node_modules/es5-ext/math/trunc/index.js create mode 100644 node_modules/es5-ext/math/trunc/is-implemented.js create mode 100644 node_modules/es5-ext/math/trunc/shim.js create mode 100644 node_modules/es5-ext/number/#/index.js create mode 100644 node_modules/es5-ext/number/#/pad.js create mode 100644 node_modules/es5-ext/number/epsilon/implement.js create mode 100644 node_modules/es5-ext/number/epsilon/index.js create mode 100644 node_modules/es5-ext/number/epsilon/is-implemented.js create mode 100644 node_modules/es5-ext/number/index.js create mode 100644 node_modules/es5-ext/number/is-finite/implement.js create mode 100644 node_modules/es5-ext/number/is-finite/index.js create mode 100644 node_modules/es5-ext/number/is-finite/is-implemented.js create mode 100644 node_modules/es5-ext/number/is-finite/shim.js create mode 100644 node_modules/es5-ext/number/is-integer/implement.js create mode 100644 node_modules/es5-ext/number/is-integer/index.js create mode 100644 node_modules/es5-ext/number/is-integer/is-implemented.js create mode 100644 node_modules/es5-ext/number/is-integer/shim.js create mode 100644 node_modules/es5-ext/number/is-nan/implement.js create mode 100644 node_modules/es5-ext/number/is-nan/index.js create mode 100644 node_modules/es5-ext/number/is-nan/is-implemented.js create mode 100644 node_modules/es5-ext/number/is-nan/shim.js create mode 100644 node_modules/es5-ext/number/is-natural.js create mode 100644 node_modules/es5-ext/number/is-number.js create mode 100644 node_modules/es5-ext/number/is-safe-integer/implement.js create mode 100644 node_modules/es5-ext/number/is-safe-integer/index.js create mode 100644 node_modules/es5-ext/number/is-safe-integer/is-implemented.js create mode 100644 node_modules/es5-ext/number/is-safe-integer/shim.js create mode 100644 node_modules/es5-ext/number/max-safe-integer/implement.js create mode 100644 node_modules/es5-ext/number/max-safe-integer/index.js create mode 100644 node_modules/es5-ext/number/max-safe-integer/is-implemented.js create mode 100644 node_modules/es5-ext/number/min-safe-integer/implement.js create mode 100644 node_modules/es5-ext/number/min-safe-integer/index.js create mode 100644 node_modules/es5-ext/number/min-safe-integer/is-implemented.js create mode 100644 node_modules/es5-ext/number/to-integer.js create mode 100644 node_modules/es5-ext/number/to-pos-integer.js create mode 100644 node_modules/es5-ext/number/to-uint32.js create mode 100644 node_modules/es5-ext/object/_iterate.js create mode 100644 node_modules/es5-ext/object/assign/implement.js create mode 100644 node_modules/es5-ext/object/assign/index.js create mode 100644 node_modules/es5-ext/object/assign/is-implemented.js create mode 100644 node_modules/es5-ext/object/assign/shim.js create mode 100644 node_modules/es5-ext/object/clear.js create mode 100644 node_modules/es5-ext/object/compact.js create mode 100644 node_modules/es5-ext/object/compare.js create mode 100644 node_modules/es5-ext/object/copy-deep.js create mode 100644 node_modules/es5-ext/object/copy.js create mode 100644 node_modules/es5-ext/object/count.js create mode 100644 node_modules/es5-ext/object/create.js create mode 100644 node_modules/es5-ext/object/ensure-array.js create mode 100644 node_modules/es5-ext/object/ensure-finite-number.js create mode 100644 node_modules/es5-ext/object/ensure-natural-number-value.js create mode 100644 node_modules/es5-ext/object/ensure-natural-number.js create mode 100644 node_modules/es5-ext/object/ensure-promise.js create mode 100644 node_modules/es5-ext/object/eq.js create mode 100644 node_modules/es5-ext/object/every.js create mode 100644 node_modules/es5-ext/object/filter.js create mode 100644 node_modules/es5-ext/object/find-key.js create mode 100644 node_modules/es5-ext/object/find.js create mode 100644 node_modules/es5-ext/object/first-key.js create mode 100644 node_modules/es5-ext/object/flatten.js create mode 100644 node_modules/es5-ext/object/for-each.js create mode 100644 node_modules/es5-ext/object/get-property-names.js create mode 100644 node_modules/es5-ext/object/index.js create mode 100644 node_modules/es5-ext/object/is-array-like.js create mode 100644 node_modules/es5-ext/object/is-callable.js create mode 100644 node_modules/es5-ext/object/is-copy-deep.js create mode 100644 node_modules/es5-ext/object/is-copy.js create mode 100644 node_modules/es5-ext/object/is-empty.js create mode 100644 node_modules/es5-ext/object/is-finite-number.js create mode 100644 node_modules/es5-ext/object/is-number-value.js create mode 100644 node_modules/es5-ext/object/is-object.js create mode 100644 node_modules/es5-ext/object/is-plain-object.js create mode 100644 node_modules/es5-ext/object/is-promise.js create mode 100644 node_modules/es5-ext/object/is-value.js create mode 100644 node_modules/es5-ext/object/is.js create mode 100644 node_modules/es5-ext/object/key-of.js create mode 100644 node_modules/es5-ext/object/keys/implement.js create mode 100644 node_modules/es5-ext/object/keys/index.js create mode 100644 node_modules/es5-ext/object/keys/is-implemented.js create mode 100644 node_modules/es5-ext/object/keys/shim.js create mode 100644 node_modules/es5-ext/object/map-keys.js create mode 100644 node_modules/es5-ext/object/map.js create mode 100644 node_modules/es5-ext/object/mixin-prototypes.js create mode 100644 node_modules/es5-ext/object/mixin.js create mode 100644 node_modules/es5-ext/object/normalize-options.js create mode 100644 node_modules/es5-ext/object/primitive-set.js create mode 100644 node_modules/es5-ext/object/safe-traverse.js create mode 100644 node_modules/es5-ext/object/serialize.js create mode 100644 node_modules/es5-ext/object/set-prototype-of/implement.js create mode 100644 node_modules/es5-ext/object/set-prototype-of/index.js create mode 100644 node_modules/es5-ext/object/set-prototype-of/is-implemented.js create mode 100644 node_modules/es5-ext/object/set-prototype-of/shim.js create mode 100644 node_modules/es5-ext/object/some.js create mode 100644 node_modules/es5-ext/object/to-array.js create mode 100644 node_modules/es5-ext/object/unserialize.js create mode 100644 node_modules/es5-ext/object/valid-callable.js create mode 100644 node_modules/es5-ext/object/valid-object.js create mode 100644 node_modules/es5-ext/object/valid-value.js create mode 100644 node_modules/es5-ext/object/validate-array-like-object.js create mode 100644 node_modules/es5-ext/object/validate-array-like.js create mode 100644 node_modules/es5-ext/object/validate-stringifiable-value.js create mode 100644 node_modules/es5-ext/object/validate-stringifiable.js create mode 100644 node_modules/es5-ext/optional-chaining.js create mode 100644 node_modules/es5-ext/package.json create mode 100644 node_modules/es5-ext/reg-exp/#/index.js create mode 100644 node_modules/es5-ext/reg-exp/#/is-sticky.js create mode 100644 node_modules/es5-ext/reg-exp/#/is-unicode.js create mode 100644 node_modules/es5-ext/reg-exp/#/match/implement.js create mode 100644 node_modules/es5-ext/reg-exp/#/match/index.js create mode 100644 node_modules/es5-ext/reg-exp/#/match/is-implemented.js create mode 100644 node_modules/es5-ext/reg-exp/#/match/shim.js create mode 100644 node_modules/es5-ext/reg-exp/#/replace/implement.js create mode 100644 node_modules/es5-ext/reg-exp/#/replace/index.js create mode 100644 node_modules/es5-ext/reg-exp/#/replace/is-implemented.js create mode 100644 node_modules/es5-ext/reg-exp/#/replace/shim.js create mode 100644 node_modules/es5-ext/reg-exp/#/search/implement.js create mode 100644 node_modules/es5-ext/reg-exp/#/search/index.js create mode 100644 node_modules/es5-ext/reg-exp/#/search/is-implemented.js create mode 100644 node_modules/es5-ext/reg-exp/#/search/shim.js create mode 100644 node_modules/es5-ext/reg-exp/#/split/implement.js create mode 100644 node_modules/es5-ext/reg-exp/#/split/index.js create mode 100644 node_modules/es5-ext/reg-exp/#/split/is-implemented.js create mode 100644 node_modules/es5-ext/reg-exp/#/split/shim.js create mode 100644 node_modules/es5-ext/reg-exp/#/sticky/implement.js create mode 100644 node_modules/es5-ext/reg-exp/#/sticky/is-implemented.js create mode 100644 node_modules/es5-ext/reg-exp/#/unicode/implement.js create mode 100644 node_modules/es5-ext/reg-exp/#/unicode/is-implemented.js create mode 100644 node_modules/es5-ext/reg-exp/escape.js create mode 100644 node_modules/es5-ext/reg-exp/index.js create mode 100644 node_modules/es5-ext/reg-exp/is-reg-exp.js create mode 100644 node_modules/es5-ext/reg-exp/valid-reg-exp.js create mode 100644 node_modules/es5-ext/safe-to-string.js create mode 100644 node_modules/es5-ext/string/#/@@iterator/implement.js create mode 100644 node_modules/es5-ext/string/#/@@iterator/index.js create mode 100644 node_modules/es5-ext/string/#/@@iterator/is-implemented.js create mode 100644 node_modules/es5-ext/string/#/@@iterator/shim.js create mode 100644 node_modules/es5-ext/string/#/at.js create mode 100644 node_modules/es5-ext/string/#/camel-to-hyphen.js create mode 100644 node_modules/es5-ext/string/#/capitalize.js create mode 100644 node_modules/es5-ext/string/#/case-insensitive-compare.js create mode 100644 node_modules/es5-ext/string/#/code-point-at/implement.js create mode 100644 node_modules/es5-ext/string/#/code-point-at/index.js create mode 100644 node_modules/es5-ext/string/#/code-point-at/is-implemented.js create mode 100644 node_modules/es5-ext/string/#/code-point-at/shim.js create mode 100644 node_modules/es5-ext/string/#/contains/implement.js create mode 100644 node_modules/es5-ext/string/#/contains/index.js create mode 100644 node_modules/es5-ext/string/#/contains/is-implemented.js create mode 100644 node_modules/es5-ext/string/#/contains/shim.js create mode 100644 node_modules/es5-ext/string/#/count.js create mode 100644 node_modules/es5-ext/string/#/ends-with/implement.js create mode 100644 node_modules/es5-ext/string/#/ends-with/index.js create mode 100644 node_modules/es5-ext/string/#/ends-with/is-implemented.js create mode 100644 node_modules/es5-ext/string/#/ends-with/shim.js create mode 100644 node_modules/es5-ext/string/#/hyphen-to-camel.js create mode 100644 node_modules/es5-ext/string/#/indent.js create mode 100644 node_modules/es5-ext/string/#/index.js create mode 100644 node_modules/es5-ext/string/#/last.js create mode 100644 node_modules/es5-ext/string/#/normalize/_data.js create mode 100644 node_modules/es5-ext/string/#/normalize/implement.js create mode 100644 node_modules/es5-ext/string/#/normalize/index.js create mode 100644 node_modules/es5-ext/string/#/normalize/is-implemented.js create mode 100644 node_modules/es5-ext/string/#/normalize/shim.js create mode 100644 node_modules/es5-ext/string/#/pad.js create mode 100644 node_modules/es5-ext/string/#/plain-replace-all.js create mode 100644 node_modules/es5-ext/string/#/plain-replace.js create mode 100644 node_modules/es5-ext/string/#/repeat/implement.js create mode 100644 node_modules/es5-ext/string/#/repeat/index.js create mode 100644 node_modules/es5-ext/string/#/repeat/is-implemented.js create mode 100644 node_modules/es5-ext/string/#/repeat/shim.js create mode 100644 node_modules/es5-ext/string/#/starts-with/implement.js create mode 100644 node_modules/es5-ext/string/#/starts-with/index.js create mode 100644 node_modules/es5-ext/string/#/starts-with/is-implemented.js create mode 100644 node_modules/es5-ext/string/#/starts-with/shim.js create mode 100644 node_modules/es5-ext/string/#/uncapitalize.js create mode 100644 node_modules/es5-ext/string/format-method.js create mode 100644 node_modules/es5-ext/string/from-code-point/implement.js create mode 100644 node_modules/es5-ext/string/from-code-point/index.js create mode 100644 node_modules/es5-ext/string/from-code-point/is-implemented.js create mode 100644 node_modules/es5-ext/string/from-code-point/shim.js create mode 100644 node_modules/es5-ext/string/index.js create mode 100644 node_modules/es5-ext/string/is-string.js create mode 100644 node_modules/es5-ext/string/random-uniq.js create mode 100644 node_modules/es5-ext/string/raw/implement.js create mode 100644 node_modules/es5-ext/string/raw/index.js create mode 100644 node_modules/es5-ext/string/raw/is-implemented.js create mode 100644 node_modules/es5-ext/string/raw/shim.js create mode 100644 node_modules/es5-ext/test/.eslintrc.json create mode 100644 node_modules/es5-ext/test/__tad.js create mode 100644 node_modules/es5-ext/test/array/#/@@iterator/implement.js create mode 100644 node_modules/es5-ext/test/array/#/@@iterator/index.js create mode 100644 node_modules/es5-ext/test/array/#/@@iterator/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/@@iterator/shim.js create mode 100644 node_modules/es5-ext/test/array/#/_compare-by-length.js create mode 100644 node_modules/es5-ext/test/array/#/binary-search.js create mode 100644 node_modules/es5-ext/test/array/#/clear.js create mode 100644 node_modules/es5-ext/test/array/#/compact.js create mode 100644 node_modules/es5-ext/test/array/#/concat/implement.js create mode 100644 node_modules/es5-ext/test/array/#/concat/index.js create mode 100644 node_modules/es5-ext/test/array/#/concat/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/concat/shim.js create mode 100644 node_modules/es5-ext/test/array/#/contains.js create mode 100644 node_modules/es5-ext/test/array/#/copy-within/implement.js create mode 100644 node_modules/es5-ext/test/array/#/copy-within/index.js create mode 100644 node_modules/es5-ext/test/array/#/copy-within/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/copy-within/shim.js create mode 100644 node_modules/es5-ext/test/array/#/diff.js create mode 100644 node_modules/es5-ext/test/array/#/e-index-of.js create mode 100644 node_modules/es5-ext/test/array/#/e-last-index-of.js create mode 100644 node_modules/es5-ext/test/array/#/entries/implement.js create mode 100644 node_modules/es5-ext/test/array/#/entries/index.js create mode 100644 node_modules/es5-ext/test/array/#/entries/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/entries/shim.js create mode 100644 node_modules/es5-ext/test/array/#/exclusion.js create mode 100644 node_modules/es5-ext/test/array/#/fill/implement.js create mode 100644 node_modules/es5-ext/test/array/#/fill/index.js create mode 100644 node_modules/es5-ext/test/array/#/fill/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/fill/shim.js create mode 100644 node_modules/es5-ext/test/array/#/filter/implement.js create mode 100644 node_modules/es5-ext/test/array/#/filter/index.js create mode 100644 node_modules/es5-ext/test/array/#/filter/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/filter/shim.js create mode 100644 node_modules/es5-ext/test/array/#/find-index/implement.js create mode 100644 node_modules/es5-ext/test/array/#/find-index/index.js create mode 100644 node_modules/es5-ext/test/array/#/find-index/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/find-index/shim.js create mode 100644 node_modules/es5-ext/test/array/#/find/implement.js create mode 100644 node_modules/es5-ext/test/array/#/find/index.js create mode 100644 node_modules/es5-ext/test/array/#/find/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/find/shim.js create mode 100644 node_modules/es5-ext/test/array/#/first-index.js create mode 100644 node_modules/es5-ext/test/array/#/first.js create mode 100644 node_modules/es5-ext/test/array/#/flatten.js create mode 100644 node_modules/es5-ext/test/array/#/for-each-right.js create mode 100644 node_modules/es5-ext/test/array/#/group.js create mode 100644 node_modules/es5-ext/test/array/#/indexes-of.js create mode 100644 node_modules/es5-ext/test/array/#/intersection.js create mode 100644 node_modules/es5-ext/test/array/#/is-copy.js create mode 100644 node_modules/es5-ext/test/array/#/is-empty.js create mode 100644 node_modules/es5-ext/test/array/#/is-uniq.js create mode 100644 node_modules/es5-ext/test/array/#/keys/implement.js create mode 100644 node_modules/es5-ext/test/array/#/keys/index.js create mode 100644 node_modules/es5-ext/test/array/#/keys/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/keys/shim.js create mode 100644 node_modules/es5-ext/test/array/#/last-index.js create mode 100644 node_modules/es5-ext/test/array/#/last.js create mode 100644 node_modules/es5-ext/test/array/#/map/implement.js create mode 100644 node_modules/es5-ext/test/array/#/map/index.js create mode 100644 node_modules/es5-ext/test/array/#/map/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/map/shim.js create mode 100644 node_modules/es5-ext/test/array/#/remove.js create mode 100644 node_modules/es5-ext/test/array/#/separate.js create mode 100644 node_modules/es5-ext/test/array/#/slice/implement.js create mode 100644 node_modules/es5-ext/test/array/#/slice/index.js create mode 100644 node_modules/es5-ext/test/array/#/slice/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/slice/shim.js create mode 100644 node_modules/es5-ext/test/array/#/some-right.js create mode 100644 node_modules/es5-ext/test/array/#/splice/implement.js create mode 100644 node_modules/es5-ext/test/array/#/splice/index.js create mode 100644 node_modules/es5-ext/test/array/#/splice/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/splice/shim.js create mode 100644 node_modules/es5-ext/test/array/#/uniq.js create mode 100644 node_modules/es5-ext/test/array/#/values/implement.js create mode 100644 node_modules/es5-ext/test/array/#/values/index.js create mode 100644 node_modules/es5-ext/test/array/#/values/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/#/values/shim.js create mode 100644 node_modules/es5-ext/test/array/__scopes.js create mode 100644 node_modules/es5-ext/test/array/_is-extensible.js create mode 100644 node_modules/es5-ext/test/array/_sub-array-dummy-safe.js create mode 100644 node_modules/es5-ext/test/array/_sub-array-dummy.js create mode 100644 node_modules/es5-ext/test/array/from/implement.js create mode 100644 node_modules/es5-ext/test/array/from/index.js create mode 100644 node_modules/es5-ext/test/array/from/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/from/shim.js create mode 100644 node_modules/es5-ext/test/array/generate.js create mode 100644 node_modules/es5-ext/test/array/is-plain-array.js create mode 100644 node_modules/es5-ext/test/array/of/implement.js create mode 100644 node_modules/es5-ext/test/array/of/index.js create mode 100644 node_modules/es5-ext/test/array/of/is-implemented.js create mode 100644 node_modules/es5-ext/test/array/of/shim.js create mode 100644 node_modules/es5-ext/test/array/to-array.js create mode 100644 node_modules/es5-ext/test/array/valid-array.js create mode 100644 node_modules/es5-ext/test/boolean/is-boolean.js create mode 100644 node_modules/es5-ext/test/date/#/copy.js create mode 100644 node_modules/es5-ext/test/date/#/days-in-month.js create mode 100644 node_modules/es5-ext/test/date/#/floor-day.js create mode 100644 node_modules/es5-ext/test/date/#/floor-month.js create mode 100644 node_modules/es5-ext/test/date/#/floor-year.js create mode 100644 node_modules/es5-ext/test/date/#/format.js create mode 100644 node_modules/es5-ext/test/date/is-date.js create mode 100644 node_modules/es5-ext/test/date/valid-date.js create mode 100644 node_modules/es5-ext/test/error/#/throw.js create mode 100644 node_modules/es5-ext/test/error/custom.js create mode 100644 node_modules/es5-ext/test/error/is-error.js create mode 100644 node_modules/es5-ext/test/error/valid-error.js create mode 100644 node_modules/es5-ext/test/function/#/compose.js create mode 100644 node_modules/es5-ext/test/function/#/copy.js create mode 100644 node_modules/es5-ext/test/function/#/curry.js create mode 100644 node_modules/es5-ext/test/function/#/lock.js create mode 100644 node_modules/es5-ext/test/function/#/not.js create mode 100644 node_modules/es5-ext/test/function/#/partial.js create mode 100644 node_modules/es5-ext/test/function/#/spread.js create mode 100644 node_modules/es5-ext/test/function/#/to-string-tokens.js create mode 100644 node_modules/es5-ext/test/function/_define-length.js create mode 100644 node_modules/es5-ext/test/function/constant.js create mode 100644 node_modules/es5-ext/test/function/identity.js create mode 100644 node_modules/es5-ext/test/function/invoke.js create mode 100644 node_modules/es5-ext/test/function/is-arguments.js create mode 100644 node_modules/es5-ext/test/function/is-function.js create mode 100644 node_modules/es5-ext/test/function/noop.js create mode 100644 node_modules/es5-ext/test/function/pluck.js create mode 100644 node_modules/es5-ext/test/function/valid-function.js create mode 100644 node_modules/es5-ext/test/global.js create mode 100644 node_modules/es5-ext/test/iterable/for-each.js create mode 100644 node_modules/es5-ext/test/iterable/is.js create mode 100644 node_modules/es5-ext/test/iterable/validate-object.js create mode 100644 node_modules/es5-ext/test/iterable/validate.js create mode 100644 node_modules/es5-ext/test/json/safe-stringify.js create mode 100644 node_modules/es5-ext/test/math/_pack-ieee754.js create mode 100644 node_modules/es5-ext/test/math/_unpack-ieee754.js create mode 100644 node_modules/es5-ext/test/math/acosh/implement.js create mode 100644 node_modules/es5-ext/test/math/acosh/index.js create mode 100644 node_modules/es5-ext/test/math/acosh/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/acosh/shim.js create mode 100644 node_modules/es5-ext/test/math/asinh/implement.js create mode 100644 node_modules/es5-ext/test/math/asinh/index.js create mode 100644 node_modules/es5-ext/test/math/asinh/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/asinh/shim.js create mode 100644 node_modules/es5-ext/test/math/atanh/implement.js create mode 100644 node_modules/es5-ext/test/math/atanh/index.js create mode 100644 node_modules/es5-ext/test/math/atanh/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/atanh/shim.js create mode 100644 node_modules/es5-ext/test/math/cbrt/implement.js create mode 100644 node_modules/es5-ext/test/math/cbrt/index.js create mode 100644 node_modules/es5-ext/test/math/cbrt/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/cbrt/shim.js create mode 100644 node_modules/es5-ext/test/math/clz32/implement.js create mode 100644 node_modules/es5-ext/test/math/clz32/index.js create mode 100644 node_modules/es5-ext/test/math/clz32/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/clz32/shim.js create mode 100644 node_modules/es5-ext/test/math/cosh/implement.js create mode 100644 node_modules/es5-ext/test/math/cosh/index.js create mode 100644 node_modules/es5-ext/test/math/cosh/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/cosh/shim.js create mode 100644 node_modules/es5-ext/test/math/expm1/implement.js create mode 100644 node_modules/es5-ext/test/math/expm1/index.js create mode 100644 node_modules/es5-ext/test/math/expm1/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/expm1/shim.js create mode 100644 node_modules/es5-ext/test/math/fround/implement.js create mode 100644 node_modules/es5-ext/test/math/fround/index.js create mode 100644 node_modules/es5-ext/test/math/fround/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/fround/shim.js create mode 100644 node_modules/es5-ext/test/math/hypot/implement.js create mode 100644 node_modules/es5-ext/test/math/hypot/index.js create mode 100644 node_modules/es5-ext/test/math/hypot/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/hypot/shim.js create mode 100644 node_modules/es5-ext/test/math/imul/implement.js create mode 100644 node_modules/es5-ext/test/math/imul/index.js create mode 100644 node_modules/es5-ext/test/math/imul/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/imul/shim.js create mode 100644 node_modules/es5-ext/test/math/log10/implement.js create mode 100644 node_modules/es5-ext/test/math/log10/index.js create mode 100644 node_modules/es5-ext/test/math/log10/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/log10/shim.js create mode 100644 node_modules/es5-ext/test/math/log1p/implement.js create mode 100644 node_modules/es5-ext/test/math/log1p/index.js create mode 100644 node_modules/es5-ext/test/math/log1p/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/log1p/shim.js create mode 100644 node_modules/es5-ext/test/math/log2/implement.js create mode 100644 node_modules/es5-ext/test/math/log2/index.js create mode 100644 node_modules/es5-ext/test/math/log2/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/log2/shim.js create mode 100644 node_modules/es5-ext/test/math/sign/implement.js create mode 100644 node_modules/es5-ext/test/math/sign/index.js create mode 100644 node_modules/es5-ext/test/math/sign/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/sign/shim.js create mode 100644 node_modules/es5-ext/test/math/sinh/implement.js create mode 100644 node_modules/es5-ext/test/math/sinh/index.js create mode 100644 node_modules/es5-ext/test/math/sinh/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/sinh/shim.js create mode 100644 node_modules/es5-ext/test/math/tanh/implement.js create mode 100644 node_modules/es5-ext/test/math/tanh/index.js create mode 100644 node_modules/es5-ext/test/math/tanh/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/tanh/shim.js create mode 100644 node_modules/es5-ext/test/math/trunc/implement.js create mode 100644 node_modules/es5-ext/test/math/trunc/index.js create mode 100644 node_modules/es5-ext/test/math/trunc/is-implemented.js create mode 100644 node_modules/es5-ext/test/math/trunc/shim.js create mode 100644 node_modules/es5-ext/test/number/#/pad.js create mode 100644 node_modules/es5-ext/test/number/epsilon/implement.js create mode 100644 node_modules/es5-ext/test/number/epsilon/index.js create mode 100644 node_modules/es5-ext/test/number/epsilon/is-implemented.js create mode 100644 node_modules/es5-ext/test/number/is-finite/implement.js create mode 100644 node_modules/es5-ext/test/number/is-finite/index.js create mode 100644 node_modules/es5-ext/test/number/is-finite/is-implemented.js create mode 100644 node_modules/es5-ext/test/number/is-finite/shim.js create mode 100644 node_modules/es5-ext/test/number/is-integer/implement.js create mode 100644 node_modules/es5-ext/test/number/is-integer/index.js create mode 100644 node_modules/es5-ext/test/number/is-integer/is-implemented.js create mode 100644 node_modules/es5-ext/test/number/is-integer/shim.js create mode 100644 node_modules/es5-ext/test/number/is-nan/implement.js create mode 100644 node_modules/es5-ext/test/number/is-nan/index.js create mode 100644 node_modules/es5-ext/test/number/is-nan/is-implemented.js create mode 100644 node_modules/es5-ext/test/number/is-nan/shim.js create mode 100644 node_modules/es5-ext/test/number/is-natural.js create mode 100644 node_modules/es5-ext/test/number/is-number.js create mode 100644 node_modules/es5-ext/test/number/is-safe-integer/implement.js create mode 100644 node_modules/es5-ext/test/number/is-safe-integer/index.js create mode 100644 node_modules/es5-ext/test/number/is-safe-integer/is-implemented.js create mode 100644 node_modules/es5-ext/test/number/is-safe-integer/shim.js create mode 100644 node_modules/es5-ext/test/number/max-safe-integer/implement.js create mode 100644 node_modules/es5-ext/test/number/max-safe-integer/index.js create mode 100644 node_modules/es5-ext/test/number/max-safe-integer/is-implemented.js create mode 100644 node_modules/es5-ext/test/number/min-safe-integer/implement.js create mode 100644 node_modules/es5-ext/test/number/min-safe-integer/index.js create mode 100644 node_modules/es5-ext/test/number/min-safe-integer/is-implemented.js create mode 100644 node_modules/es5-ext/test/number/to-integer.js create mode 100644 node_modules/es5-ext/test/number/to-pos-integer.js create mode 100644 node_modules/es5-ext/test/number/to-uint32.js create mode 100644 node_modules/es5-ext/test/object/_iterate.js create mode 100644 node_modules/es5-ext/test/object/assign/implement.js create mode 100644 node_modules/es5-ext/test/object/assign/index.js create mode 100644 node_modules/es5-ext/test/object/assign/is-implemented.js create mode 100644 node_modules/es5-ext/test/object/assign/shim.js create mode 100644 node_modules/es5-ext/test/object/clear.js create mode 100644 node_modules/es5-ext/test/object/compact.js create mode 100644 node_modules/es5-ext/test/object/compare.js create mode 100644 node_modules/es5-ext/test/object/copy-deep.js create mode 100644 node_modules/es5-ext/test/object/copy.js create mode 100644 node_modules/es5-ext/test/object/count.js create mode 100644 node_modules/es5-ext/test/object/create.js create mode 100644 node_modules/es5-ext/test/object/ensure-array.js create mode 100644 node_modules/es5-ext/test/object/ensure-finite-number.js create mode 100644 node_modules/es5-ext/test/object/ensure-natural-number-value.js create mode 100644 node_modules/es5-ext/test/object/ensure-natural-number.js create mode 100644 node_modules/es5-ext/test/object/ensure-promise.js create mode 100644 node_modules/es5-ext/test/object/eq.js create mode 100644 node_modules/es5-ext/test/object/every.js create mode 100644 node_modules/es5-ext/test/object/filter.js create mode 100644 node_modules/es5-ext/test/object/find-key.js create mode 100644 node_modules/es5-ext/test/object/find.js create mode 100644 node_modules/es5-ext/test/object/first-key.js create mode 100644 node_modules/es5-ext/test/object/flatten.js create mode 100644 node_modules/es5-ext/test/object/for-each.js create mode 100644 node_modules/es5-ext/test/object/get-property-names.js create mode 100644 node_modules/es5-ext/test/object/is-array-like.js create mode 100644 node_modules/es5-ext/test/object/is-callable.js create mode 100644 node_modules/es5-ext/test/object/is-copy-deep.js create mode 100644 node_modules/es5-ext/test/object/is-copy.js create mode 100644 node_modules/es5-ext/test/object/is-empty.js create mode 100644 node_modules/es5-ext/test/object/is-finite-number.js create mode 100644 node_modules/es5-ext/test/object/is-number-value.js create mode 100644 node_modules/es5-ext/test/object/is-object.js create mode 100644 node_modules/es5-ext/test/object/is-plain-object.js create mode 100644 node_modules/es5-ext/test/object/is-promise.js create mode 100644 node_modules/es5-ext/test/object/is-value.js create mode 100644 node_modules/es5-ext/test/object/is.js create mode 100644 node_modules/es5-ext/test/object/key-of.js create mode 100644 node_modules/es5-ext/test/object/keys/implement.js create mode 100644 node_modules/es5-ext/test/object/keys/index.js create mode 100644 node_modules/es5-ext/test/object/keys/is-implemented.js create mode 100644 node_modules/es5-ext/test/object/keys/shim.js create mode 100644 node_modules/es5-ext/test/object/map-keys.js create mode 100644 node_modules/es5-ext/test/object/map.js create mode 100644 node_modules/es5-ext/test/object/mixin-prototypes.js create mode 100644 node_modules/es5-ext/test/object/mixin.js create mode 100644 node_modules/es5-ext/test/object/normalize-options.js create mode 100644 node_modules/es5-ext/test/object/primitive-set.js create mode 100644 node_modules/es5-ext/test/object/safe-traverse.js create mode 100644 node_modules/es5-ext/test/object/serialize.js create mode 100644 node_modules/es5-ext/test/object/set-prototype-of/implement.js create mode 100644 node_modules/es5-ext/test/object/set-prototype-of/index.js create mode 100644 node_modules/es5-ext/test/object/set-prototype-of/is-implemented.js create mode 100644 node_modules/es5-ext/test/object/set-prototype-of/shim.js create mode 100644 node_modules/es5-ext/test/object/some.js create mode 100644 node_modules/es5-ext/test/object/to-array.js create mode 100644 node_modules/es5-ext/test/object/unserialize.js create mode 100644 node_modules/es5-ext/test/object/valid-callable.js create mode 100644 node_modules/es5-ext/test/object/valid-object.js create mode 100644 node_modules/es5-ext/test/object/valid-value.js create mode 100644 node_modules/es5-ext/test/object/validate-array-like-object.js create mode 100644 node_modules/es5-ext/test/object/validate-array-like.js create mode 100644 node_modules/es5-ext/test/object/validate-stringifiable-value.js create mode 100644 node_modules/es5-ext/test/object/validate-stringifiable.js create mode 100644 node_modules/es5-ext/test/optional-chaining.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/index.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/is-sticky.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/is-unicode.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/match/implement.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/match/index.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/match/is-implemented.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/match/shim.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/replace/implement.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/replace/index.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/replace/is-implemented.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/replace/shim.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/search/implement.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/search/index.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/search/is-implemented.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/search/shim.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/split/implement.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/split/index.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/split/is-implemented.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/split/shim.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/sticky/implement.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/sticky/is-implemented.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/unicode/implement.js create mode 100644 node_modules/es5-ext/test/reg-exp/#/unicode/is-implemented.js create mode 100644 node_modules/es5-ext/test/reg-exp/escape.js create mode 100644 node_modules/es5-ext/test/reg-exp/is-reg-exp.js create mode 100644 node_modules/es5-ext/test/reg-exp/valid-reg-exp.js create mode 100644 node_modules/es5-ext/test/safe-to-string.js create mode 100644 node_modules/es5-ext/test/string/#/@@iterator/implement.js create mode 100644 node_modules/es5-ext/test/string/#/@@iterator/index.js create mode 100644 node_modules/es5-ext/test/string/#/@@iterator/is-implemented.js create mode 100644 node_modules/es5-ext/test/string/#/@@iterator/shim.js create mode 100644 node_modules/es5-ext/test/string/#/at.js create mode 100644 node_modules/es5-ext/test/string/#/camel-to-hyphen.js create mode 100644 node_modules/es5-ext/test/string/#/capitalize.js create mode 100644 node_modules/es5-ext/test/string/#/case-insensitive-compare.js create mode 100644 node_modules/es5-ext/test/string/#/code-point-at/implement.js create mode 100644 node_modules/es5-ext/test/string/#/code-point-at/index.js create mode 100644 node_modules/es5-ext/test/string/#/code-point-at/is-implemented.js create mode 100644 node_modules/es5-ext/test/string/#/code-point-at/shim.js create mode 100644 node_modules/es5-ext/test/string/#/contains/implement.js create mode 100644 node_modules/es5-ext/test/string/#/contains/index.js create mode 100644 node_modules/es5-ext/test/string/#/contains/is-implemented.js create mode 100644 node_modules/es5-ext/test/string/#/contains/shim.js create mode 100644 node_modules/es5-ext/test/string/#/count.js create mode 100644 node_modules/es5-ext/test/string/#/ends-with/implement.js create mode 100644 node_modules/es5-ext/test/string/#/ends-with/index.js create mode 100644 node_modules/es5-ext/test/string/#/ends-with/is-implemented.js create mode 100644 node_modules/es5-ext/test/string/#/ends-with/shim.js create mode 100644 node_modules/es5-ext/test/string/#/hyphen-to-camel.js create mode 100644 node_modules/es5-ext/test/string/#/indent.js create mode 100644 node_modules/es5-ext/test/string/#/last.js create mode 100644 node_modules/es5-ext/test/string/#/normalize/_data.js create mode 100644 node_modules/es5-ext/test/string/#/normalize/implement.js create mode 100644 node_modules/es5-ext/test/string/#/normalize/index.js create mode 100644 node_modules/es5-ext/test/string/#/normalize/is-implemented.js create mode 100644 node_modules/es5-ext/test/string/#/normalize/shim.js create mode 100644 node_modules/es5-ext/test/string/#/pad.js create mode 100644 node_modules/es5-ext/test/string/#/plain-replace-all.js create mode 100644 node_modules/es5-ext/test/string/#/plain-replace.js create mode 100644 node_modules/es5-ext/test/string/#/repeat/implement.js create mode 100644 node_modules/es5-ext/test/string/#/repeat/index.js create mode 100644 node_modules/es5-ext/test/string/#/repeat/is-implemented.js create mode 100644 node_modules/es5-ext/test/string/#/repeat/shim.js create mode 100644 node_modules/es5-ext/test/string/#/starts-with/implement.js create mode 100644 node_modules/es5-ext/test/string/#/starts-with/index.js create mode 100644 node_modules/es5-ext/test/string/#/starts-with/is-implemented.js create mode 100644 node_modules/es5-ext/test/string/#/starts-with/shim.js create mode 100644 node_modules/es5-ext/test/string/#/uncapitalize.js create mode 100644 node_modules/es5-ext/test/string/format-method.js create mode 100644 node_modules/es5-ext/test/string/from-code-point/implement.js create mode 100644 node_modules/es5-ext/test/string/from-code-point/index.js create mode 100644 node_modules/es5-ext/test/string/from-code-point/is-implemented.js create mode 100644 node_modules/es5-ext/test/string/from-code-point/shim.js create mode 100644 node_modules/es5-ext/test/string/is-string.js create mode 100644 node_modules/es5-ext/test/string/random-uniq.js create mode 100644 node_modules/es5-ext/test/string/raw/implement.js create mode 100644 node_modules/es5-ext/test/string/raw/index.js create mode 100644 node_modules/es5-ext/test/string/raw/is-implemented.js create mode 100644 node_modules/es5-ext/test/string/raw/shim.js create mode 100644 node_modules/es5-ext/test/to-short-string-representation.js create mode 100644 node_modules/es5-ext/to-short-string-representation.js create mode 100644 node_modules/es6-iterator/#/chain.js create mode 100644 node_modules/es6-iterator/.lint create mode 100644 node_modules/es6-iterator/.npmignore create mode 100644 node_modules/es6-iterator/.travis.yml create mode 100644 node_modules/es6-iterator/CHANGES create mode 100644 node_modules/es6-iterator/LICENSE create mode 100644 node_modules/es6-iterator/README.md create mode 100644 node_modules/es6-iterator/array.js create mode 100644 node_modules/es6-iterator/for-of.js create mode 100644 node_modules/es6-iterator/get.js create mode 100644 node_modules/es6-iterator/index.js create mode 100644 node_modules/es6-iterator/is-iterable.js create mode 100644 node_modules/es6-iterator/package.json create mode 100644 node_modules/es6-iterator/string.js create mode 100644 node_modules/es6-iterator/test/#/chain.js create mode 100644 node_modules/es6-iterator/test/array.js create mode 100644 node_modules/es6-iterator/test/for-of.js create mode 100644 node_modules/es6-iterator/test/get.js create mode 100644 node_modules/es6-iterator/test/index.js create mode 100644 node_modules/es6-iterator/test/is-iterable.js create mode 100644 node_modules/es6-iterator/test/string.js create mode 100644 node_modules/es6-iterator/test/valid-iterable.js create mode 100644 node_modules/es6-iterator/valid-iterable.js create mode 100644 node_modules/es6-map/.lint create mode 100644 node_modules/es6-map/.npmignore create mode 100644 node_modules/es6-map/.travis.yml create mode 100644 node_modules/es6-map/CHANGES create mode 100644 node_modules/es6-map/LICENSE create mode 100644 node_modules/es6-map/README.md create mode 100644 node_modules/es6-map/implement.js create mode 100644 node_modules/es6-map/index.js create mode 100644 node_modules/es6-map/is-implemented.js create mode 100644 node_modules/es6-map/is-map.js create mode 100644 node_modules/es6-map/is-native-implemented.js create mode 100644 node_modules/es6-map/lib/iterator-kinds.js create mode 100644 node_modules/es6-map/lib/iterator.js create mode 100644 node_modules/es6-map/lib/primitive-iterator.js create mode 100644 node_modules/es6-map/package.json create mode 100644 node_modules/es6-map/polyfill.js create mode 100644 node_modules/es6-map/primitive/index.js create mode 100644 node_modules/es6-map/test/implement.js create mode 100644 node_modules/es6-map/test/index.js create mode 100644 node_modules/es6-map/test/is-implemented.js create mode 100644 node_modules/es6-map/test/is-map.js create mode 100644 node_modules/es6-map/test/is-native-implemented.js create mode 100644 node_modules/es6-map/test/lib/iterator-kinds.js create mode 100644 node_modules/es6-map/test/lib/iterator.js create mode 100644 node_modules/es6-map/test/lib/primitive-iterator.js create mode 100644 node_modules/es6-map/test/polyfill.js create mode 100644 node_modules/es6-map/test/primitive/index.js create mode 100644 node_modules/es6-map/test/valid-map.js create mode 100644 node_modules/es6-map/valid-map.js create mode 100644 node_modules/es6-set/.lint create mode 100644 node_modules/es6-set/.npmignore create mode 100644 node_modules/es6-set/.travis.yml create mode 100644 node_modules/es6-set/CHANGES create mode 100644 node_modules/es6-set/LICENSE create mode 100644 node_modules/es6-set/README.md create mode 100644 node_modules/es6-set/ext/copy.js create mode 100644 node_modules/es6-set/ext/every.js create mode 100644 node_modules/es6-set/ext/filter.js create mode 100644 node_modules/es6-set/ext/get-first.js create mode 100644 node_modules/es6-set/ext/get-last.js create mode 100644 node_modules/es6-set/ext/some.js create mode 100644 node_modules/es6-set/implement.js create mode 100644 node_modules/es6-set/index.js create mode 100644 node_modules/es6-set/is-implemented.js create mode 100644 node_modules/es6-set/is-native-implemented.js create mode 100644 node_modules/es6-set/is-set.js create mode 100644 node_modules/es6-set/lib/iterator.js create mode 100644 node_modules/es6-set/lib/primitive-iterator.js create mode 100644 node_modules/es6-set/package.json create mode 100644 node_modules/es6-set/polyfill.js create mode 100644 node_modules/es6-set/primitive/index.js create mode 100644 node_modules/es6-set/test/ext/copy.js create mode 100644 node_modules/es6-set/test/ext/every.js create mode 100644 node_modules/es6-set/test/ext/filter.js create mode 100644 node_modules/es6-set/test/ext/get-first.js create mode 100644 node_modules/es6-set/test/ext/get-last.js create mode 100644 node_modules/es6-set/test/ext/some.js create mode 100644 node_modules/es6-set/test/implement.js create mode 100644 node_modules/es6-set/test/index.js create mode 100644 node_modules/es6-set/test/is-implemented.js create mode 100644 node_modules/es6-set/test/is-native-implemented.js create mode 100644 node_modules/es6-set/test/is-set.js create mode 100644 node_modules/es6-set/test/lib/iterator.js create mode 100644 node_modules/es6-set/test/lib/primitive-iterator.js create mode 100644 node_modules/es6-set/test/polyfill.js create mode 100644 node_modules/es6-set/test/primitive/index.js create mode 100644 node_modules/es6-set/test/valid-set.js create mode 100644 node_modules/es6-set/valid-set.js create mode 100644 node_modules/es6-symbol/.lint create mode 100644 node_modules/es6-symbol/.npmignore create mode 100644 node_modules/es6-symbol/.travis.yml create mode 100644 node_modules/es6-symbol/CHANGES create mode 100644 node_modules/es6-symbol/LICENSE create mode 100644 node_modules/es6-symbol/README.md create mode 100644 node_modules/es6-symbol/implement.js create mode 100644 node_modules/es6-symbol/index.js create mode 100644 node_modules/es6-symbol/is-implemented.js create mode 100644 node_modules/es6-symbol/is-native-implemented.js create mode 100644 node_modules/es6-symbol/is-symbol.js create mode 100644 node_modules/es6-symbol/package.json create mode 100644 node_modules/es6-symbol/polyfill.js create mode 100644 node_modules/es6-symbol/test/implement.js create mode 100644 node_modules/es6-symbol/test/index.js create mode 100644 node_modules/es6-symbol/test/is-implemented.js create mode 100644 node_modules/es6-symbol/test/is-native-implemented.js create mode 100644 node_modules/es6-symbol/test/is-symbol.js create mode 100644 node_modules/es6-symbol/test/polyfill.js create mode 100644 node_modules/es6-symbol/test/validate-symbol.js create mode 100644 node_modules/es6-symbol/validate-symbol.js create mode 100644 node_modules/es6-weak-map/.lint create mode 100644 node_modules/es6-weak-map/.npmignore create mode 100644 node_modules/es6-weak-map/.travis.yml create mode 100644 node_modules/es6-weak-map/CHANGES create mode 100644 node_modules/es6-weak-map/LICENSE create mode 100644 node_modules/es6-weak-map/README.md create mode 100644 node_modules/es6-weak-map/implement.js create mode 100644 node_modules/es6-weak-map/index.js create mode 100644 node_modules/es6-weak-map/is-implemented.js create mode 100644 node_modules/es6-weak-map/is-native-implemented.js create mode 100644 node_modules/es6-weak-map/is-weak-map.js create mode 100644 node_modules/es6-weak-map/package.json create mode 100644 node_modules/es6-weak-map/polyfill.js create mode 100644 node_modules/es6-weak-map/test/implement.js create mode 100644 node_modules/es6-weak-map/test/index.js create mode 100644 node_modules/es6-weak-map/test/is-implemented.js create mode 100644 node_modules/es6-weak-map/test/is-native-implemented.js create mode 100644 node_modules/es6-weak-map/test/is-weak-map.js create mode 100644 node_modules/es6-weak-map/test/polyfill.js create mode 100644 node_modules/es6-weak-map/test/valid-weak-map.js create mode 100644 node_modules/es6-weak-map/valid-weak-map.js create mode 100644 node_modules/escape-string-regexp/index.js create mode 100644 node_modules/escape-string-regexp/license create mode 100644 node_modules/escape-string-regexp/package.json create mode 100644 node_modules/escape-string-regexp/readme.md create mode 100644 node_modules/escope/.babelrc create mode 100644 node_modules/escope/.jshintrc create mode 100644 node_modules/escope/CONTRIBUTING.md create mode 100644 node_modules/escope/LICENSE.BSD create mode 100644 node_modules/escope/README.md create mode 100644 node_modules/escope/bower.json create mode 100644 node_modules/escope/gulpfile.js create mode 100644 node_modules/escope/lib/definition.js create mode 100644 node_modules/escope/lib/index.js create mode 100644 node_modules/escope/lib/pattern-visitor.js create mode 100644 node_modules/escope/lib/reference.js create mode 100644 node_modules/escope/lib/referencer.js create mode 100644 node_modules/escope/lib/scope-manager.js create mode 100644 node_modules/escope/lib/scope.js create mode 100644 node_modules/escope/lib/variable.js create mode 100644 node_modules/escope/package.json create mode 100644 node_modules/escope/powered-test/arguments.js create mode 100644 node_modules/escope/powered-test/catch-scope.js create mode 100644 node_modules/escope/powered-test/es6-arrow-function-expression.js create mode 100644 node_modules/escope/powered-test/es6-block-scope.js create mode 100644 node_modules/escope/powered-test/es6-catch.js create mode 100644 node_modules/escope/powered-test/es6-class.js create mode 100644 node_modules/escope/powered-test/es6-destructuring-assignments.js create mode 100644 node_modules/escope/powered-test/es6-export.js create mode 100644 node_modules/escope/powered-test/es6-import.js create mode 100644 node_modules/escope/powered-test/es6-iteration-scope.js create mode 100644 node_modules/escope/powered-test/es6-object.js create mode 100644 node_modules/escope/powered-test/es6-rest-args.js create mode 100644 node_modules/escope/powered-test/es6-switch.js create mode 100644 node_modules/escope/powered-test/es6-template-literal.js create mode 100644 node_modules/escope/powered-test/function-expression-name.js create mode 100644 node_modules/escope/powered-test/global-increment.js create mode 100644 node_modules/escope/powered-test/implicit-global-reference.js create mode 100644 node_modules/escope/powered-test/label-children.js create mode 100644 node_modules/escope/powered-test/label.js create mode 100644 node_modules/escope/powered-test/nodejs-scope.js create mode 100644 node_modules/escope/powered-test/object-expression.js create mode 100644 node_modules/escope/powered-test/optimistic.js create mode 100644 node_modules/escope/powered-test/with-scope.js create mode 100644 node_modules/escope/src/definition.js create mode 100644 node_modules/escope/src/index.js create mode 100644 node_modules/escope/src/pattern-visitor.js create mode 100644 node_modules/escope/src/reference.js create mode 100644 node_modules/escope/src/referencer.js create mode 100644 node_modules/escope/src/scope-manager.js create mode 100644 node_modules/escope/src/scope.js create mode 100644 node_modules/escope/src/variable.js create mode 100644 node_modules/escope/third_party/espree.js create mode 100644 node_modules/esrecurse/.babelrc create mode 100644 node_modules/esrecurse/README.md create mode 100644 node_modules/esrecurse/esrecurse.js create mode 100644 node_modules/esrecurse/gulpfile.babel.js create mode 100644 node_modules/esrecurse/package-lock.json create mode 100755 node_modules/esrecurse/package.json create mode 100644 node_modules/estraverse/.babelrc create mode 100644 node_modules/estraverse/.jshintrc create mode 100644 node_modules/estraverse/LICENSE.BSD create mode 100644 node_modules/estraverse/estraverse.js create mode 100644 node_modules/estraverse/gulpfile.js create mode 100644 node_modules/estraverse/package.json create mode 100644 node_modules/esutils/LICENSE.BSD create mode 100644 node_modules/esutils/README.md create mode 100644 node_modules/esutils/lib/ast.js create mode 100644 node_modules/esutils/lib/code.js create mode 100644 node_modules/esutils/lib/keyword.js create mode 100644 node_modules/esutils/lib/utils.js create mode 100644 node_modules/esutils/package.json create mode 100644 node_modules/event-emitter/.lint create mode 100644 node_modules/event-emitter/.npmignore create mode 100644 node_modules/event-emitter/.testignore create mode 100644 node_modules/event-emitter/.travis.yml create mode 100644 node_modules/event-emitter/CHANGES create mode 100644 node_modules/event-emitter/LICENSE create mode 100644 node_modules/event-emitter/README.md create mode 100644 node_modules/event-emitter/all-off.js create mode 100644 node_modules/event-emitter/benchmark/many-on.js create mode 100644 node_modules/event-emitter/benchmark/single-on.js create mode 100644 node_modules/event-emitter/emit-error.js create mode 100644 node_modules/event-emitter/has-listeners.js create mode 100644 node_modules/event-emitter/index.js create mode 100644 node_modules/event-emitter/package.json create mode 100644 node_modules/event-emitter/pipe.js create mode 100644 node_modules/event-emitter/test/all-off.js create mode 100644 node_modules/event-emitter/test/emit-error.js create mode 100644 node_modules/event-emitter/test/has-listeners.js create mode 100644 node_modules/event-emitter/test/index.js create mode 100644 node_modules/event-emitter/test/pipe.js create mode 100644 node_modules/event-emitter/test/unify.js create mode 100644 node_modules/event-emitter/unify.js create mode 100644 node_modules/eventemitter3/LICENSE create mode 100644 node_modules/eventemitter3/README.md create mode 100644 node_modules/eventemitter3/index.js create mode 100644 node_modules/eventemitter3/package.json create mode 100644 node_modules/events/.npmignore create mode 100644 node_modules/events/.travis.yml create mode 100644 node_modules/events/.zuul.yml create mode 100644 node_modules/events/History.md create mode 100644 node_modules/events/LICENSE create mode 100644 node_modules/events/Readme.md create mode 100644 node_modules/events/events.js create mode 100644 node_modules/events/package.json create mode 100644 node_modules/events/tests/add-listeners.js create mode 100644 node_modules/events/tests/check-listener-leaks.js create mode 100644 node_modules/events/tests/common.js create mode 100644 node_modules/events/tests/index.js create mode 100644 node_modules/events/tests/legacy-compat.js create mode 100644 node_modules/events/tests/listener-count.js create mode 100644 node_modules/events/tests/listeners-side-effects.js create mode 100644 node_modules/events/tests/listeners.js create mode 100644 node_modules/events/tests/max-listeners.js create mode 100644 node_modules/events/tests/modify-in-emit.js create mode 100644 node_modules/events/tests/num-args.js create mode 100644 node_modules/events/tests/once.js create mode 100644 node_modules/events/tests/remove-all-listeners.js create mode 100644 node_modules/events/tests/remove-listeners.js create mode 100644 node_modules/events/tests/set-max-listeners-side-effects.js create mode 100644 node_modules/events/tests/subclass.js create mode 100644 node_modules/evp_bytestokey/LICENSE create mode 100644 node_modules/evp_bytestokey/README.md create mode 100644 node_modules/evp_bytestokey/index.js create mode 100644 node_modules/evp_bytestokey/package.json create mode 100644 node_modules/execa/index.js create mode 100644 node_modules/execa/lib/errname.js create mode 100644 node_modules/execa/lib/stdio.js create mode 100644 node_modules/execa/license create mode 100644 node_modules/execa/package.json create mode 100644 node_modules/execa/readme.md create mode 100644 node_modules/expand-brackets/LICENSE create mode 100644 node_modules/expand-brackets/README.md create mode 100644 node_modules/expand-brackets/index.js create mode 100644 node_modules/expand-brackets/package.json create mode 100644 node_modules/expand-range/LICENSE create mode 100644 node_modules/expand-range/README.md create mode 100644 node_modules/expand-range/index.js create mode 100644 node_modules/expand-range/package.json create mode 100644 node_modules/extglob/LICENSE create mode 100644 node_modules/extglob/README.md create mode 100644 node_modules/extglob/index.js create mode 100644 node_modules/extglob/package.json create mode 100644 node_modules/fast-deep-equal/.eslintrc.yml create mode 100644 node_modules/fast-deep-equal/.npmignore create mode 100644 node_modules/fast-deep-equal/.travis.yml create mode 100644 node_modules/fast-deep-equal/LICENSE create mode 100644 node_modules/fast-deep-equal/README.md create mode 100644 node_modules/fast-deep-equal/benchmark/.eslintrc.yml create mode 100644 node_modules/fast-deep-equal/benchmark/index.js create mode 100644 node_modules/fast-deep-equal/index.js create mode 100644 node_modules/fast-deep-equal/package.json create mode 100644 node_modules/fast-deep-equal/spec/.eslintrc.yml create mode 100644 node_modules/fast-deep-equal/spec/index.spec.js create mode 100644 node_modules/fast-deep-equal/spec/tests.js create mode 100644 node_modules/filename-regex/LICENSE create mode 100644 node_modules/filename-regex/README.md create mode 100644 node_modules/filename-regex/index.js create mode 100644 node_modules/filename-regex/package.json create mode 100755 node_modules/fill-range/LICENSE create mode 100755 node_modules/fill-range/README.md create mode 100644 node_modules/fill-range/index.js create mode 100644 node_modules/fill-range/package.json create mode 100644 node_modules/find-cache-dir/index.js create mode 100644 node_modules/find-cache-dir/license create mode 100644 node_modules/find-cache-dir/package.json create mode 100644 node_modules/find-cache-dir/readme.md create mode 100644 node_modules/find-up/index.js create mode 100644 node_modules/find-up/license create mode 100644 node_modules/find-up/package.json create mode 100644 node_modules/find-up/readme.md create mode 100644 node_modules/for-in/LICENSE create mode 100644 node_modules/for-in/README.md create mode 100644 node_modules/for-in/index.js create mode 100644 node_modules/for-in/package.json create mode 100644 node_modules/for-own/LICENSE create mode 100644 node_modules/for-own/README.md create mode 100644 node_modules/for-own/index.js create mode 100644 node_modules/for-own/package.json create mode 100644 node_modules/fs-readdir-recursive/LICENSE create mode 100644 node_modules/fs-readdir-recursive/README.md create mode 100644 node_modules/fs-readdir-recursive/index.js create mode 100644 node_modules/fs-readdir-recursive/package.json create mode 100644 node_modules/fs.realpath/LICENSE create mode 100644 node_modules/fs.realpath/README.md create mode 100644 node_modules/fs.realpath/index.js create mode 100644 node_modules/fs.realpath/old.js create mode 100644 node_modules/fs.realpath/package.json create mode 100644 node_modules/get-caller-file/README.md create mode 100644 node_modules/get-caller-file/index.js create mode 100644 node_modules/get-caller-file/package.json create mode 100644 node_modules/get-stream/buffer-stream.js create mode 100644 node_modules/get-stream/index.js create mode 100644 node_modules/get-stream/license create mode 100644 node_modules/get-stream/package.json create mode 100644 node_modules/get-stream/readme.md create mode 100644 node_modules/glob-base/LICENSE create mode 100644 node_modules/glob-base/README.md create mode 100644 node_modules/glob-base/index.js create mode 100644 node_modules/glob-base/package.json create mode 100644 node_modules/glob-parent/.npmignore create mode 100644 node_modules/glob-parent/.travis.yml create mode 100644 node_modules/glob-parent/LICENSE create mode 100644 node_modules/glob-parent/README.md create mode 100644 node_modules/glob-parent/index.js create mode 100644 node_modules/glob-parent/package.json create mode 100644 node_modules/glob-parent/test.js create mode 100644 node_modules/glob/LICENSE create mode 100644 node_modules/glob/README.md create mode 100644 node_modules/glob/changelog.md create mode 100644 node_modules/glob/common.js create mode 100644 node_modules/glob/glob.js create mode 100644 node_modules/glob/package.json create mode 100644 node_modules/glob/sync.js create mode 100644 node_modules/globals/globals.json create mode 100644 node_modules/globals/index.js create mode 100644 node_modules/globals/license create mode 100644 node_modules/globals/package.json create mode 100644 node_modules/globals/readme.md create mode 100644 node_modules/graceful-fs/LICENSE create mode 100644 node_modules/graceful-fs/README.md create mode 100644 node_modules/graceful-fs/fs.js create mode 100644 node_modules/graceful-fs/graceful-fs.js create mode 100644 node_modules/graceful-fs/legacy-streams.js create mode 100644 node_modules/graceful-fs/package.json create mode 100644 node_modules/graceful-fs/polyfills.js create mode 100644 node_modules/has-ansi/index.js create mode 100644 node_modules/has-ansi/license create mode 100644 node_modules/has-ansi/package.json create mode 100644 node_modules/has-ansi/readme.md create mode 100644 node_modules/has-flag/index.js create mode 100644 node_modules/has-flag/license create mode 100644 node_modules/has-flag/package.json create mode 100644 node_modules/has-flag/readme.md create mode 100644 node_modules/hash-base/README.md create mode 100644 node_modules/hash-base/index.js create mode 100644 node_modules/hash-base/package.json create mode 100644 node_modules/hash.js/.eslintrc.js create mode 100644 node_modules/hash.js/.npmignore create mode 100644 node_modules/hash.js/.travis.yml create mode 100644 node_modules/hash.js/README.md create mode 100644 node_modules/hash.js/lib/hash.d.ts create mode 100644 node_modules/hash.js/lib/hash.js create mode 100644 node_modules/hash.js/lib/hash/common.js create mode 100644 node_modules/hash.js/lib/hash/hmac.js create mode 100644 node_modules/hash.js/lib/hash/ripemd.js create mode 100644 node_modules/hash.js/lib/hash/sha.js create mode 100644 node_modules/hash.js/lib/hash/sha/1.js create mode 100644 node_modules/hash.js/lib/hash/sha/224.js create mode 100644 node_modules/hash.js/lib/hash/sha/256.js create mode 100644 node_modules/hash.js/lib/hash/sha/384.js create mode 100644 node_modules/hash.js/lib/hash/sha/512.js create mode 100644 node_modules/hash.js/lib/hash/sha/common.js create mode 100644 node_modules/hash.js/lib/hash/utils.js create mode 100644 node_modules/hash.js/package.json create mode 100644 node_modules/hash.js/test/hash-test.js create mode 100644 node_modules/hash.js/test/hmac-test.js create mode 100644 node_modules/he/LICENSE-MIT.txt create mode 100644 node_modules/he/README.md create mode 100755 node_modules/he/bin/he create mode 100644 node_modules/he/he.js create mode 100644 node_modules/he/man/he.1 create mode 100644 node_modules/he/package.json create mode 100644 node_modules/hmac-drbg/.npmignore create mode 100644 node_modules/hmac-drbg/.travis.yml create mode 100644 node_modules/hmac-drbg/README.md create mode 100644 node_modules/hmac-drbg/lib/hmac-drbg.js create mode 100644 node_modules/hmac-drbg/package.json create mode 100644 node_modules/hmac-drbg/test/drbg-test.js create mode 100644 node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json create mode 100644 node_modules/home-or-tmp/index.js create mode 100644 node_modules/home-or-tmp/license create mode 100644 node_modules/home-or-tmp/package.json create mode 100644 node_modules/home-or-tmp/readme.md create mode 100644 node_modules/hosted-git-info/LICENSE create mode 100644 node_modules/hosted-git-info/README.md create mode 100644 node_modules/hosted-git-info/git-host-info.js create mode 100644 node_modules/hosted-git-info/git-host.js create mode 100644 node_modules/hosted-git-info/index.js create mode 100644 node_modules/hosted-git-info/package.json create mode 100644 node_modules/http-proxy/.npmignore create mode 100644 node_modules/http-proxy/LICENSE create mode 100644 node_modules/http-proxy/README.md create mode 100644 node_modules/http-proxy/index.js create mode 100644 node_modules/http-proxy/lib/http-proxy.js create mode 100644 node_modules/http-proxy/lib/http-proxy/common.js create mode 100644 node_modules/http-proxy/lib/http-proxy/index.js create mode 100644 node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js create mode 100644 node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js create mode 100644 node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js create mode 100644 node_modules/http-proxy/package.json create mode 100644 node_modules/http-server/.npmignore create mode 100644 node_modules/http-server/.travis.yml create mode 100644 node_modules/http-server/LICENSE create mode 100644 node_modules/http-server/README.md create mode 100755 node_modules/http-server/bin/http-server create mode 100644 node_modules/http-server/lib/http-server.js create mode 100644 node_modules/http-server/package.json create mode 100644 node_modules/http-server/public/404.html create mode 100644 node_modules/http-server/public/img/turtle.png create mode 100644 node_modules/http-server/public/index.html create mode 100644 node_modules/http-server/screenshots/directory.png create mode 100644 node_modules/http-server/screenshots/public.png create mode 100644 node_modules/http-server/screenshots/start.png create mode 100644 node_modules/http-server/test/fixtures/root/canYouSeeMe create mode 100644 node_modules/http-server/test/fixtures/root/file create mode 100644 node_modules/http-server/test/http-server-test.js create mode 100644 node_modules/https-browserify/LICENSE create mode 100644 node_modules/https-browserify/index.js create mode 100644 node_modules/https-browserify/package.json create mode 100644 node_modules/https-browserify/readme.markdown create mode 100644 node_modules/ieee754/.travis.yml create mode 100644 node_modules/ieee754/.zuul.yml create mode 100644 node_modules/ieee754/LICENSE create mode 100644 node_modules/ieee754/README.md create mode 100644 node_modules/ieee754/index.js create mode 100644 node_modules/ieee754/package.json create mode 100644 node_modules/ieee754/test/basic.js create mode 100644 node_modules/indexof/.npmignore create mode 100644 node_modules/indexof/Makefile create mode 100644 node_modules/indexof/Readme.md create mode 100644 node_modules/indexof/component.json create mode 100644 node_modules/indexof/index.js create mode 100644 node_modules/indexof/package.json create mode 100644 node_modules/inflight/LICENSE create mode 100644 node_modules/inflight/README.md create mode 100644 node_modules/inflight/inflight.js create mode 100644 node_modules/inflight/package.json create mode 100644 node_modules/inherits/LICENSE create mode 100644 node_modules/inherits/README.md create mode 100644 node_modules/inherits/inherits.js create mode 100644 node_modules/inherits/inherits_browser.js create mode 100644 node_modules/inherits/package.json create mode 100644 node_modules/interpret/CHANGELOG create mode 100644 node_modules/interpret/LICENSE create mode 100644 node_modules/interpret/README.md create mode 100644 node_modules/interpret/index.js create mode 100644 node_modules/interpret/package.json create mode 100644 node_modules/invariant/CHANGELOG.md create mode 100644 node_modules/invariant/LICENSE create mode 100644 node_modules/invariant/README.md create mode 100644 node_modules/invariant/browser.js create mode 100644 node_modules/invariant/invariant.js create mode 100644 node_modules/invariant/invariant.js.flow create mode 100644 node_modules/invariant/package.json create mode 100644 node_modules/invert-kv/index.js create mode 100644 node_modules/invert-kv/package.json create mode 100644 node_modules/invert-kv/readme.md create mode 100644 node_modules/is-arrayish/.editorconfig create mode 100644 node_modules/is-arrayish/.istanbul.yml create mode 100644 node_modules/is-arrayish/.npmignore create mode 100644 node_modules/is-arrayish/.travis.yml create mode 100644 node_modules/is-arrayish/LICENSE create mode 100644 node_modules/is-arrayish/README.md create mode 100644 node_modules/is-arrayish/index.js create mode 100644 node_modules/is-arrayish/package.json create mode 100644 node_modules/is-binary-path/index.js create mode 100644 node_modules/is-binary-path/license create mode 100644 node_modules/is-binary-path/package.json create mode 100644 node_modules/is-binary-path/readme.md create mode 100644 node_modules/is-buffer/.npmignore create mode 100644 node_modules/is-buffer/LICENSE create mode 100644 node_modules/is-buffer/README.md create mode 100644 node_modules/is-buffer/index.js create mode 100644 node_modules/is-buffer/package.json create mode 100644 node_modules/is-buffer/test/basic.js create mode 100644 node_modules/is-builtin-module/index.js create mode 100644 node_modules/is-builtin-module/license create mode 100644 node_modules/is-builtin-module/package.json create mode 100644 node_modules/is-builtin-module/readme.md create mode 100644 node_modules/is-dotfile/LICENSE create mode 100644 node_modules/is-dotfile/README.md create mode 100644 node_modules/is-dotfile/index.js create mode 100644 node_modules/is-dotfile/package.json create mode 100644 node_modules/is-equal-shallow/LICENSE create mode 100644 node_modules/is-equal-shallow/README.md create mode 100644 node_modules/is-equal-shallow/index.js create mode 100644 node_modules/is-equal-shallow/package.json create mode 100644 node_modules/is-extendable/LICENSE create mode 100644 node_modules/is-extendable/README.md create mode 100644 node_modules/is-extendable/index.js create mode 100644 node_modules/is-extendable/package.json create mode 100644 node_modules/is-extglob/LICENSE create mode 100644 node_modules/is-extglob/README.md create mode 100644 node_modules/is-extglob/index.js create mode 100644 node_modules/is-extglob/package.json create mode 100644 node_modules/is-finite/index.js create mode 100644 node_modules/is-finite/license create mode 100644 node_modules/is-finite/package.json create mode 100644 node_modules/is-finite/readme.md create mode 100644 node_modules/is-fullwidth-code-point/index.js create mode 100644 node_modules/is-fullwidth-code-point/license create mode 100644 node_modules/is-fullwidth-code-point/package.json create mode 100644 node_modules/is-fullwidth-code-point/readme.md create mode 100644 node_modules/is-glob/LICENSE create mode 100644 node_modules/is-glob/README.md create mode 100644 node_modules/is-glob/index.js create mode 100644 node_modules/is-glob/package.json create mode 100644 node_modules/is-number/LICENSE create mode 100644 node_modules/is-number/README.md create mode 100644 node_modules/is-number/index.js create mode 100644 node_modules/is-number/package.json create mode 100644 node_modules/is-posix-bracket/LICENSE create mode 100644 node_modules/is-posix-bracket/README.md create mode 100644 node_modules/is-posix-bracket/index.js create mode 100644 node_modules/is-posix-bracket/package.json create mode 100644 node_modules/is-primitive/LICENSE create mode 100644 node_modules/is-primitive/README.md create mode 100644 node_modules/is-primitive/index.js create mode 100644 node_modules/is-primitive/package.json create mode 100644 node_modules/is-stream/index.js create mode 100644 node_modules/is-stream/license create mode 100644 node_modules/is-stream/package.json create mode 100644 node_modules/is-stream/readme.md create mode 100644 node_modules/isarray/.npmignore create mode 100644 node_modules/isarray/.travis.yml create mode 100644 node_modules/isarray/Makefile create mode 100644 node_modules/isarray/README.md create mode 100644 node_modules/isarray/component.json create mode 100644 node_modules/isarray/index.js create mode 100644 node_modules/isarray/package.json create mode 100644 node_modules/isarray/test.js create mode 100644 node_modules/isexe/.npmignore create mode 100644 node_modules/isexe/LICENSE create mode 100644 node_modules/isexe/README.md create mode 100644 node_modules/isexe/index.js create mode 100644 node_modules/isexe/mode.js create mode 100644 node_modules/isexe/package.json create mode 100644 node_modules/isexe/test/basic.js create mode 100644 node_modules/isexe/windows.js create mode 100644 node_modules/isobject/LICENSE create mode 100644 node_modules/isobject/README.md create mode 100644 node_modules/isobject/index.js create mode 100644 node_modules/isobject/package.json create mode 100644 node_modules/js-tokens/CHANGELOG.md create mode 100644 node_modules/js-tokens/LICENSE create mode 100644 node_modules/js-tokens/README.md create mode 100644 node_modules/js-tokens/index.js create mode 100644 node_modules/js-tokens/package.json create mode 100644 node_modules/jsesc/LICENSE-MIT.txt create mode 100755 node_modules/jsesc/bin/jsesc create mode 100644 node_modules/jsesc/jsesc.js create mode 100644 node_modules/jsesc/man/jsesc.1 create mode 100644 node_modules/jsesc/package.json create mode 100644 node_modules/json-loader/.npmignore create mode 100644 node_modules/json-loader/CHANGELOG.md create mode 100644 node_modules/json-loader/LICENSE create mode 100644 node_modules/json-loader/README.md create mode 100644 node_modules/json-loader/index.js create mode 100644 node_modules/json-loader/package.json create mode 100644 node_modules/json-schema-traverse/.eslintrc.yml create mode 100644 node_modules/json-schema-traverse/.npmignore create mode 100644 node_modules/json-schema-traverse/.travis.yml create mode 100644 node_modules/json-schema-traverse/LICENSE create mode 100644 node_modules/json-schema-traverse/README.md create mode 100644 node_modules/json-schema-traverse/index.js create mode 100644 node_modules/json-schema-traverse/package.json create mode 100644 node_modules/json-schema-traverse/spec/.eslintrc.yml create mode 100644 node_modules/json-schema-traverse/spec/fixtures/schema.js create mode 100644 node_modules/json-schema-traverse/spec/index.spec.js create mode 100644 node_modules/json-stable-stringify/.npmignore create mode 100644 node_modules/json-stable-stringify/.travis.yml create mode 100644 node_modules/json-stable-stringify/LICENSE create mode 100644 node_modules/json-stable-stringify/example/key_cmp.js create mode 100644 node_modules/json-stable-stringify/example/nested.js create mode 100644 node_modules/json-stable-stringify/example/str.js create mode 100644 node_modules/json-stable-stringify/example/value_cmp.js create mode 100644 node_modules/json-stable-stringify/index.js create mode 100644 node_modules/json-stable-stringify/package.json create mode 100644 node_modules/json-stable-stringify/readme.markdown create mode 100644 node_modules/json-stable-stringify/test/cmp.js create mode 100644 node_modules/json-stable-stringify/test/nested.js create mode 100644 node_modules/json-stable-stringify/test/replacer.js create mode 100644 node_modules/json-stable-stringify/test/space.js create mode 100644 node_modules/json-stable-stringify/test/str.js create mode 100644 node_modules/json-stable-stringify/test/to-json.js create mode 100644 node_modules/json5/CHANGELOG.md create mode 100644 node_modules/json5/LICENSE.md create mode 100644 node_modules/json5/README.md create mode 100755 node_modules/json5/lib/cli.js create mode 100644 node_modules/json5/lib/json5.js create mode 100644 node_modules/json5/lib/require.js create mode 100644 node_modules/json5/package.json create mode 100644 node_modules/jsonify/README.markdown create mode 100644 node_modules/jsonify/index.js create mode 100644 node_modules/jsonify/lib/parse.js create mode 100644 node_modules/jsonify/lib/stringify.js create mode 100644 node_modules/jsonify/package.json create mode 100644 node_modules/jsonify/test/parse.js create mode 100644 node_modules/jsonify/test/stringify.js create mode 100644 node_modules/kind-of/LICENSE create mode 100644 node_modules/kind-of/README.md create mode 100644 node_modules/kind-of/index.js create mode 100644 node_modules/kind-of/package.json create mode 100644 node_modules/lazy-cache/LICENSE create mode 100644 node_modules/lazy-cache/README.md create mode 100644 node_modules/lazy-cache/index.js create mode 100644 node_modules/lazy-cache/package.json create mode 100644 node_modules/lcid/index.js create mode 100644 node_modules/lcid/lcid.json create mode 100644 node_modules/lcid/license create mode 100644 node_modules/lcid/package.json create mode 100644 node_modules/lcid/readme.md create mode 100644 node_modules/load-json-file/index.js create mode 100644 node_modules/load-json-file/license create mode 100644 node_modules/load-json-file/package.json create mode 100644 node_modules/load-json-file/readme.md create mode 100644 node_modules/loader-runner/README.md create mode 100644 node_modules/loader-runner/lib/LoaderRunner.js create mode 100644 node_modules/loader-runner/lib/loadLoader.js create mode 100644 node_modules/loader-runner/package.json create mode 100644 node_modules/loader-utils/CHANGELOG.md create mode 100644 node_modules/loader-utils/LICENSE create mode 100644 node_modules/loader-utils/README.md create mode 100644 node_modules/loader-utils/lib/getCurrentRequest.js create mode 100644 node_modules/loader-utils/lib/getHashDigest.js create mode 100644 node_modules/loader-utils/lib/getOptions.js create mode 100644 node_modules/loader-utils/lib/getRemainingRequest.js create mode 100644 node_modules/loader-utils/lib/index.js create mode 100644 node_modules/loader-utils/lib/interpolateName.js create mode 100644 node_modules/loader-utils/lib/isUrlRequest.js create mode 100644 node_modules/loader-utils/lib/parseQuery.js create mode 100644 node_modules/loader-utils/lib/parseString.js create mode 100644 node_modules/loader-utils/lib/stringifyRequest.js create mode 100644 node_modules/loader-utils/lib/urlToRequest.js create mode 100644 node_modules/loader-utils/package.json create mode 100644 node_modules/locate-path/index.js create mode 100644 node_modules/locate-path/license create mode 100644 node_modules/locate-path/package.json create mode 100644 node_modules/locate-path/readme.md create mode 100644 node_modules/lodash/LICENSE create mode 100644 node_modules/lodash/README.md create mode 100644 node_modules/lodash/_DataView.js create mode 100644 node_modules/lodash/_Hash.js create mode 100644 node_modules/lodash/_LazyWrapper.js create mode 100644 node_modules/lodash/_ListCache.js create mode 100644 node_modules/lodash/_LodashWrapper.js create mode 100644 node_modules/lodash/_Map.js create mode 100644 node_modules/lodash/_MapCache.js create mode 100644 node_modules/lodash/_Promise.js create mode 100644 node_modules/lodash/_Set.js create mode 100644 node_modules/lodash/_SetCache.js create mode 100644 node_modules/lodash/_Stack.js create mode 100644 node_modules/lodash/_Symbol.js create mode 100644 node_modules/lodash/_Uint8Array.js create mode 100644 node_modules/lodash/_WeakMap.js create mode 100644 node_modules/lodash/_addMapEntry.js create mode 100644 node_modules/lodash/_addSetEntry.js create mode 100644 node_modules/lodash/_apply.js create mode 100644 node_modules/lodash/_arrayAggregator.js create mode 100644 node_modules/lodash/_arrayEach.js create mode 100644 node_modules/lodash/_arrayEachRight.js create mode 100644 node_modules/lodash/_arrayEvery.js create mode 100644 node_modules/lodash/_arrayFilter.js create mode 100644 node_modules/lodash/_arrayIncludes.js create mode 100644 node_modules/lodash/_arrayIncludesWith.js create mode 100644 node_modules/lodash/_arrayLikeKeys.js create mode 100644 node_modules/lodash/_arrayMap.js create mode 100644 node_modules/lodash/_arrayPush.js create mode 100644 node_modules/lodash/_arrayReduce.js create mode 100644 node_modules/lodash/_arrayReduceRight.js create mode 100644 node_modules/lodash/_arraySample.js create mode 100644 node_modules/lodash/_arraySampleSize.js create mode 100644 node_modules/lodash/_arrayShuffle.js create mode 100644 node_modules/lodash/_arraySome.js create mode 100644 node_modules/lodash/_asciiSize.js create mode 100644 node_modules/lodash/_asciiToArray.js create mode 100644 node_modules/lodash/_asciiWords.js create mode 100644 node_modules/lodash/_assignMergeValue.js create mode 100644 node_modules/lodash/_assignValue.js create mode 100644 node_modules/lodash/_assocIndexOf.js create mode 100644 node_modules/lodash/_baseAggregator.js create mode 100644 node_modules/lodash/_baseAssign.js create mode 100644 node_modules/lodash/_baseAssignIn.js create mode 100644 node_modules/lodash/_baseAssignValue.js create mode 100644 node_modules/lodash/_baseAt.js create mode 100644 node_modules/lodash/_baseClamp.js create mode 100644 node_modules/lodash/_baseClone.js create mode 100644 node_modules/lodash/_baseConforms.js create mode 100644 node_modules/lodash/_baseConformsTo.js create mode 100644 node_modules/lodash/_baseCreate.js create mode 100644 node_modules/lodash/_baseDelay.js create mode 100644 node_modules/lodash/_baseDifference.js create mode 100644 node_modules/lodash/_baseEach.js create mode 100644 node_modules/lodash/_baseEachRight.js create mode 100644 node_modules/lodash/_baseEvery.js create mode 100644 node_modules/lodash/_baseExtremum.js create mode 100644 node_modules/lodash/_baseFill.js create mode 100644 node_modules/lodash/_baseFilter.js create mode 100644 node_modules/lodash/_baseFindIndex.js create mode 100644 node_modules/lodash/_baseFindKey.js create mode 100644 node_modules/lodash/_baseFlatten.js create mode 100644 node_modules/lodash/_baseFor.js create mode 100644 node_modules/lodash/_baseForOwn.js create mode 100644 node_modules/lodash/_baseForOwnRight.js create mode 100644 node_modules/lodash/_baseForRight.js create mode 100644 node_modules/lodash/_baseFunctions.js create mode 100644 node_modules/lodash/_baseGet.js create mode 100644 node_modules/lodash/_baseGetAllKeys.js create mode 100644 node_modules/lodash/_baseGetTag.js create mode 100644 node_modules/lodash/_baseGt.js create mode 100644 node_modules/lodash/_baseHas.js create mode 100644 node_modules/lodash/_baseHasIn.js create mode 100644 node_modules/lodash/_baseInRange.js create mode 100644 node_modules/lodash/_baseIndexOf.js create mode 100644 node_modules/lodash/_baseIndexOfWith.js create mode 100644 node_modules/lodash/_baseIntersection.js create mode 100644 node_modules/lodash/_baseInverter.js create mode 100644 node_modules/lodash/_baseInvoke.js create mode 100644 node_modules/lodash/_baseIsArguments.js create mode 100644 node_modules/lodash/_baseIsArrayBuffer.js create mode 100644 node_modules/lodash/_baseIsDate.js create mode 100644 node_modules/lodash/_baseIsEqual.js create mode 100644 node_modules/lodash/_baseIsEqualDeep.js create mode 100644 node_modules/lodash/_baseIsMap.js create mode 100644 node_modules/lodash/_baseIsMatch.js create mode 100644 node_modules/lodash/_baseIsNaN.js create mode 100644 node_modules/lodash/_baseIsNative.js create mode 100644 node_modules/lodash/_baseIsRegExp.js create mode 100644 node_modules/lodash/_baseIsSet.js create mode 100644 node_modules/lodash/_baseIsTypedArray.js create mode 100644 node_modules/lodash/_baseIteratee.js create mode 100644 node_modules/lodash/_baseKeys.js create mode 100644 node_modules/lodash/_baseKeysIn.js create mode 100644 node_modules/lodash/_baseLodash.js create mode 100644 node_modules/lodash/_baseLt.js create mode 100644 node_modules/lodash/_baseMap.js create mode 100644 node_modules/lodash/_baseMatches.js create mode 100644 node_modules/lodash/_baseMatchesProperty.js create mode 100644 node_modules/lodash/_baseMean.js create mode 100644 node_modules/lodash/_baseMerge.js create mode 100644 node_modules/lodash/_baseMergeDeep.js create mode 100644 node_modules/lodash/_baseNth.js create mode 100644 node_modules/lodash/_baseOrderBy.js create mode 100644 node_modules/lodash/_basePick.js create mode 100644 node_modules/lodash/_basePickBy.js create mode 100644 node_modules/lodash/_baseProperty.js create mode 100644 node_modules/lodash/_basePropertyDeep.js create mode 100644 node_modules/lodash/_basePropertyOf.js create mode 100644 node_modules/lodash/_basePullAll.js create mode 100644 node_modules/lodash/_basePullAt.js create mode 100644 node_modules/lodash/_baseRandom.js create mode 100644 node_modules/lodash/_baseRange.js create mode 100644 node_modules/lodash/_baseReduce.js create mode 100644 node_modules/lodash/_baseRepeat.js create mode 100644 node_modules/lodash/_baseRest.js create mode 100644 node_modules/lodash/_baseSample.js create mode 100644 node_modules/lodash/_baseSampleSize.js create mode 100644 node_modules/lodash/_baseSet.js create mode 100644 node_modules/lodash/_baseSetData.js create mode 100644 node_modules/lodash/_baseSetToString.js create mode 100644 node_modules/lodash/_baseShuffle.js create mode 100644 node_modules/lodash/_baseSlice.js create mode 100644 node_modules/lodash/_baseSome.js create mode 100644 node_modules/lodash/_baseSortBy.js create mode 100644 node_modules/lodash/_baseSortedIndex.js create mode 100644 node_modules/lodash/_baseSortedIndexBy.js create mode 100644 node_modules/lodash/_baseSortedUniq.js create mode 100644 node_modules/lodash/_baseSum.js create mode 100644 node_modules/lodash/_baseTimes.js create mode 100644 node_modules/lodash/_baseToNumber.js create mode 100644 node_modules/lodash/_baseToPairs.js create mode 100644 node_modules/lodash/_baseToString.js create mode 100644 node_modules/lodash/_baseUnary.js create mode 100644 node_modules/lodash/_baseUniq.js create mode 100644 node_modules/lodash/_baseUnset.js create mode 100644 node_modules/lodash/_baseUpdate.js create mode 100644 node_modules/lodash/_baseValues.js create mode 100644 node_modules/lodash/_baseWhile.js create mode 100644 node_modules/lodash/_baseWrapperValue.js create mode 100644 node_modules/lodash/_baseXor.js create mode 100644 node_modules/lodash/_baseZipObject.js create mode 100644 node_modules/lodash/_cacheHas.js create mode 100644 node_modules/lodash/_castArrayLikeObject.js create mode 100644 node_modules/lodash/_castFunction.js create mode 100644 node_modules/lodash/_castPath.js create mode 100644 node_modules/lodash/_castRest.js create mode 100644 node_modules/lodash/_castSlice.js create mode 100644 node_modules/lodash/_charsEndIndex.js create mode 100644 node_modules/lodash/_charsStartIndex.js create mode 100644 node_modules/lodash/_cloneArrayBuffer.js create mode 100644 node_modules/lodash/_cloneBuffer.js create mode 100644 node_modules/lodash/_cloneDataView.js create mode 100644 node_modules/lodash/_cloneMap.js create mode 100644 node_modules/lodash/_cloneRegExp.js create mode 100644 node_modules/lodash/_cloneSet.js create mode 100644 node_modules/lodash/_cloneSymbol.js create mode 100644 node_modules/lodash/_cloneTypedArray.js create mode 100644 node_modules/lodash/_compareAscending.js create mode 100644 node_modules/lodash/_compareMultiple.js create mode 100644 node_modules/lodash/_composeArgs.js create mode 100644 node_modules/lodash/_composeArgsRight.js create mode 100644 node_modules/lodash/_copyArray.js create mode 100644 node_modules/lodash/_copyObject.js create mode 100644 node_modules/lodash/_copySymbols.js create mode 100644 node_modules/lodash/_copySymbolsIn.js create mode 100644 node_modules/lodash/_coreJsData.js create mode 100644 node_modules/lodash/_countHolders.js create mode 100644 node_modules/lodash/_createAggregator.js create mode 100644 node_modules/lodash/_createAssigner.js create mode 100644 node_modules/lodash/_createBaseEach.js create mode 100644 node_modules/lodash/_createBaseFor.js create mode 100644 node_modules/lodash/_createBind.js create mode 100644 node_modules/lodash/_createCaseFirst.js create mode 100644 node_modules/lodash/_createCompounder.js create mode 100644 node_modules/lodash/_createCtor.js create mode 100644 node_modules/lodash/_createCurry.js create mode 100644 node_modules/lodash/_createFind.js create mode 100644 node_modules/lodash/_createFlow.js create mode 100644 node_modules/lodash/_createHybrid.js create mode 100644 node_modules/lodash/_createInverter.js create mode 100644 node_modules/lodash/_createMathOperation.js create mode 100644 node_modules/lodash/_createOver.js create mode 100644 node_modules/lodash/_createPadding.js create mode 100644 node_modules/lodash/_createPartial.js create mode 100644 node_modules/lodash/_createRange.js create mode 100644 node_modules/lodash/_createRecurry.js create mode 100644 node_modules/lodash/_createRelationalOperation.js create mode 100644 node_modules/lodash/_createRound.js create mode 100644 node_modules/lodash/_createSet.js create mode 100644 node_modules/lodash/_createToPairs.js create mode 100644 node_modules/lodash/_createWrap.js create mode 100644 node_modules/lodash/_customDefaultsAssignIn.js create mode 100644 node_modules/lodash/_customDefaultsMerge.js create mode 100644 node_modules/lodash/_customOmitClone.js create mode 100644 node_modules/lodash/_deburrLetter.js create mode 100644 node_modules/lodash/_defineProperty.js create mode 100644 node_modules/lodash/_equalArrays.js create mode 100644 node_modules/lodash/_equalByTag.js create mode 100644 node_modules/lodash/_equalObjects.js create mode 100644 node_modules/lodash/_escapeHtmlChar.js create mode 100644 node_modules/lodash/_escapeStringChar.js create mode 100644 node_modules/lodash/_flatRest.js create mode 100644 node_modules/lodash/_freeGlobal.js create mode 100644 node_modules/lodash/_getAllKeys.js create mode 100644 node_modules/lodash/_getAllKeysIn.js create mode 100644 node_modules/lodash/_getData.js create mode 100644 node_modules/lodash/_getFuncName.js create mode 100644 node_modules/lodash/_getHolder.js create mode 100644 node_modules/lodash/_getMapData.js create mode 100644 node_modules/lodash/_getMatchData.js create mode 100644 node_modules/lodash/_getNative.js create mode 100644 node_modules/lodash/_getPrototype.js create mode 100644 node_modules/lodash/_getRawTag.js create mode 100644 node_modules/lodash/_getSymbols.js create mode 100644 node_modules/lodash/_getSymbolsIn.js create mode 100644 node_modules/lodash/_getTag.js create mode 100644 node_modules/lodash/_getValue.js create mode 100644 node_modules/lodash/_getView.js create mode 100644 node_modules/lodash/_getWrapDetails.js create mode 100644 node_modules/lodash/_hasPath.js create mode 100644 node_modules/lodash/_hasUnicode.js create mode 100644 node_modules/lodash/_hasUnicodeWord.js create mode 100644 node_modules/lodash/_hashClear.js create mode 100644 node_modules/lodash/_hashDelete.js create mode 100644 node_modules/lodash/_hashGet.js create mode 100644 node_modules/lodash/_hashHas.js create mode 100644 node_modules/lodash/_hashSet.js create mode 100644 node_modules/lodash/_initCloneArray.js create mode 100644 node_modules/lodash/_initCloneByTag.js create mode 100644 node_modules/lodash/_initCloneObject.js create mode 100644 node_modules/lodash/_insertWrapDetails.js create mode 100644 node_modules/lodash/_isFlattenable.js create mode 100644 node_modules/lodash/_isIndex.js create mode 100644 node_modules/lodash/_isIterateeCall.js create mode 100644 node_modules/lodash/_isKey.js create mode 100644 node_modules/lodash/_isKeyable.js create mode 100644 node_modules/lodash/_isLaziable.js create mode 100644 node_modules/lodash/_isMaskable.js create mode 100644 node_modules/lodash/_isMasked.js create mode 100644 node_modules/lodash/_isPrototype.js create mode 100644 node_modules/lodash/_isStrictComparable.js create mode 100644 node_modules/lodash/_iteratorToArray.js create mode 100644 node_modules/lodash/_lazyClone.js create mode 100644 node_modules/lodash/_lazyReverse.js create mode 100644 node_modules/lodash/_lazyValue.js create mode 100644 node_modules/lodash/_listCacheClear.js create mode 100644 node_modules/lodash/_listCacheDelete.js create mode 100644 node_modules/lodash/_listCacheGet.js create mode 100644 node_modules/lodash/_listCacheHas.js create mode 100644 node_modules/lodash/_listCacheSet.js create mode 100644 node_modules/lodash/_mapCacheClear.js create mode 100644 node_modules/lodash/_mapCacheDelete.js create mode 100644 node_modules/lodash/_mapCacheGet.js create mode 100644 node_modules/lodash/_mapCacheHas.js create mode 100644 node_modules/lodash/_mapCacheSet.js create mode 100644 node_modules/lodash/_mapToArray.js create mode 100644 node_modules/lodash/_matchesStrictComparable.js create mode 100644 node_modules/lodash/_memoizeCapped.js create mode 100644 node_modules/lodash/_mergeData.js create mode 100644 node_modules/lodash/_metaMap.js create mode 100644 node_modules/lodash/_nativeCreate.js create mode 100644 node_modules/lodash/_nativeKeys.js create mode 100644 node_modules/lodash/_nativeKeysIn.js create mode 100644 node_modules/lodash/_nodeUtil.js create mode 100644 node_modules/lodash/_objectToString.js create mode 100644 node_modules/lodash/_overArg.js create mode 100644 node_modules/lodash/_overRest.js create mode 100644 node_modules/lodash/_parent.js create mode 100644 node_modules/lodash/_reEscape.js create mode 100644 node_modules/lodash/_reEvaluate.js create mode 100644 node_modules/lodash/_reInterpolate.js create mode 100644 node_modules/lodash/_realNames.js create mode 100644 node_modules/lodash/_reorder.js create mode 100644 node_modules/lodash/_replaceHolders.js create mode 100644 node_modules/lodash/_root.js create mode 100644 node_modules/lodash/_setCacheAdd.js create mode 100644 node_modules/lodash/_setCacheHas.js create mode 100644 node_modules/lodash/_setData.js create mode 100644 node_modules/lodash/_setToArray.js create mode 100644 node_modules/lodash/_setToPairs.js create mode 100644 node_modules/lodash/_setToString.js create mode 100644 node_modules/lodash/_setWrapToString.js create mode 100644 node_modules/lodash/_shortOut.js create mode 100644 node_modules/lodash/_shuffleSelf.js create mode 100644 node_modules/lodash/_stackClear.js create mode 100644 node_modules/lodash/_stackDelete.js create mode 100644 node_modules/lodash/_stackGet.js create mode 100644 node_modules/lodash/_stackHas.js create mode 100644 node_modules/lodash/_stackSet.js create mode 100644 node_modules/lodash/_strictIndexOf.js create mode 100644 node_modules/lodash/_strictLastIndexOf.js create mode 100644 node_modules/lodash/_stringSize.js create mode 100644 node_modules/lodash/_stringToArray.js create mode 100644 node_modules/lodash/_stringToPath.js create mode 100644 node_modules/lodash/_toKey.js create mode 100644 node_modules/lodash/_toSource.js create mode 100644 node_modules/lodash/_unescapeHtmlChar.js create mode 100644 node_modules/lodash/_unicodeSize.js create mode 100644 node_modules/lodash/_unicodeToArray.js create mode 100644 node_modules/lodash/_unicodeWords.js create mode 100644 node_modules/lodash/_updateWrapDetails.js create mode 100644 node_modules/lodash/_wrapperClone.js create mode 100644 node_modules/lodash/add.js create mode 100644 node_modules/lodash/after.js create mode 100644 node_modules/lodash/array.js create mode 100644 node_modules/lodash/ary.js create mode 100644 node_modules/lodash/assign.js create mode 100644 node_modules/lodash/assignIn.js create mode 100644 node_modules/lodash/assignInWith.js create mode 100644 node_modules/lodash/assignWith.js create mode 100644 node_modules/lodash/at.js create mode 100644 node_modules/lodash/attempt.js create mode 100644 node_modules/lodash/before.js create mode 100644 node_modules/lodash/bind.js create mode 100644 node_modules/lodash/bindAll.js create mode 100644 node_modules/lodash/bindKey.js create mode 100644 node_modules/lodash/camelCase.js create mode 100644 node_modules/lodash/capitalize.js create mode 100644 node_modules/lodash/castArray.js create mode 100644 node_modules/lodash/ceil.js create mode 100644 node_modules/lodash/chain.js create mode 100644 node_modules/lodash/chunk.js create mode 100644 node_modules/lodash/clamp.js create mode 100644 node_modules/lodash/clone.js create mode 100644 node_modules/lodash/cloneDeep.js create mode 100644 node_modules/lodash/cloneDeepWith.js create mode 100644 node_modules/lodash/cloneWith.js create mode 100644 node_modules/lodash/collection.js create mode 100644 node_modules/lodash/commit.js create mode 100644 node_modules/lodash/compact.js create mode 100644 node_modules/lodash/concat.js create mode 100644 node_modules/lodash/cond.js create mode 100644 node_modules/lodash/conforms.js create mode 100644 node_modules/lodash/conformsTo.js create mode 100644 node_modules/lodash/constant.js create mode 100644 node_modules/lodash/core.js create mode 100644 node_modules/lodash/core.min.js create mode 100644 node_modules/lodash/countBy.js create mode 100644 node_modules/lodash/create.js create mode 100644 node_modules/lodash/curry.js create mode 100644 node_modules/lodash/curryRight.js create mode 100644 node_modules/lodash/date.js create mode 100644 node_modules/lodash/debounce.js create mode 100644 node_modules/lodash/deburr.js create mode 100644 node_modules/lodash/defaultTo.js create mode 100644 node_modules/lodash/defaults.js create mode 100644 node_modules/lodash/defaultsDeep.js create mode 100644 node_modules/lodash/defer.js create mode 100644 node_modules/lodash/delay.js create mode 100644 node_modules/lodash/difference.js create mode 100644 node_modules/lodash/differenceBy.js create mode 100644 node_modules/lodash/differenceWith.js create mode 100644 node_modules/lodash/divide.js create mode 100644 node_modules/lodash/drop.js create mode 100644 node_modules/lodash/dropRight.js create mode 100644 node_modules/lodash/dropRightWhile.js create mode 100644 node_modules/lodash/dropWhile.js create mode 100644 node_modules/lodash/each.js create mode 100644 node_modules/lodash/eachRight.js create mode 100644 node_modules/lodash/endsWith.js create mode 100644 node_modules/lodash/entries.js create mode 100644 node_modules/lodash/entriesIn.js create mode 100644 node_modules/lodash/eq.js create mode 100644 node_modules/lodash/escape.js create mode 100644 node_modules/lodash/escapeRegExp.js create mode 100644 node_modules/lodash/every.js create mode 100644 node_modules/lodash/extend.js create mode 100644 node_modules/lodash/extendWith.js create mode 100644 node_modules/lodash/fill.js create mode 100644 node_modules/lodash/filter.js create mode 100644 node_modules/lodash/find.js create mode 100644 node_modules/lodash/findIndex.js create mode 100644 node_modules/lodash/findKey.js create mode 100644 node_modules/lodash/findLast.js create mode 100644 node_modules/lodash/findLastIndex.js create mode 100644 node_modules/lodash/findLastKey.js create mode 100644 node_modules/lodash/first.js create mode 100644 node_modules/lodash/flatMap.js create mode 100644 node_modules/lodash/flatMapDeep.js create mode 100644 node_modules/lodash/flatMapDepth.js create mode 100644 node_modules/lodash/flatten.js create mode 100644 node_modules/lodash/flattenDeep.js create mode 100644 node_modules/lodash/flattenDepth.js create mode 100644 node_modules/lodash/flip.js create mode 100644 node_modules/lodash/floor.js create mode 100644 node_modules/lodash/flow.js create mode 100644 node_modules/lodash/flowRight.js create mode 100644 node_modules/lodash/forEach.js create mode 100644 node_modules/lodash/forEachRight.js create mode 100644 node_modules/lodash/forIn.js create mode 100644 node_modules/lodash/forInRight.js create mode 100644 node_modules/lodash/forOwn.js create mode 100644 node_modules/lodash/forOwnRight.js create mode 100644 node_modules/lodash/fp.js create mode 100644 node_modules/lodash/fp/F.js create mode 100644 node_modules/lodash/fp/T.js create mode 100644 node_modules/lodash/fp/__.js create mode 100644 node_modules/lodash/fp/_baseConvert.js create mode 100644 node_modules/lodash/fp/_convertBrowser.js create mode 100644 node_modules/lodash/fp/_falseOptions.js create mode 100644 node_modules/lodash/fp/_mapping.js create mode 100644 node_modules/lodash/fp/_util.js create mode 100644 node_modules/lodash/fp/add.js create mode 100644 node_modules/lodash/fp/after.js create mode 100644 node_modules/lodash/fp/all.js create mode 100644 node_modules/lodash/fp/allPass.js create mode 100644 node_modules/lodash/fp/always.js create mode 100644 node_modules/lodash/fp/any.js create mode 100644 node_modules/lodash/fp/anyPass.js create mode 100644 node_modules/lodash/fp/apply.js create mode 100644 node_modules/lodash/fp/array.js create mode 100644 node_modules/lodash/fp/ary.js create mode 100644 node_modules/lodash/fp/assign.js create mode 100644 node_modules/lodash/fp/assignAll.js create mode 100644 node_modules/lodash/fp/assignAllWith.js create mode 100644 node_modules/lodash/fp/assignIn.js create mode 100644 node_modules/lodash/fp/assignInAll.js create mode 100644 node_modules/lodash/fp/assignInAllWith.js create mode 100644 node_modules/lodash/fp/assignInWith.js create mode 100644 node_modules/lodash/fp/assignWith.js create mode 100644 node_modules/lodash/fp/assoc.js create mode 100644 node_modules/lodash/fp/assocPath.js create mode 100644 node_modules/lodash/fp/at.js create mode 100644 node_modules/lodash/fp/attempt.js create mode 100644 node_modules/lodash/fp/before.js create mode 100644 node_modules/lodash/fp/bind.js create mode 100644 node_modules/lodash/fp/bindAll.js create mode 100644 node_modules/lodash/fp/bindKey.js create mode 100644 node_modules/lodash/fp/camelCase.js create mode 100644 node_modules/lodash/fp/capitalize.js create mode 100644 node_modules/lodash/fp/castArray.js create mode 100644 node_modules/lodash/fp/ceil.js create mode 100644 node_modules/lodash/fp/chain.js create mode 100644 node_modules/lodash/fp/chunk.js create mode 100644 node_modules/lodash/fp/clamp.js create mode 100644 node_modules/lodash/fp/clone.js create mode 100644 node_modules/lodash/fp/cloneDeep.js create mode 100644 node_modules/lodash/fp/cloneDeepWith.js create mode 100644 node_modules/lodash/fp/cloneWith.js create mode 100644 node_modules/lodash/fp/collection.js create mode 100644 node_modules/lodash/fp/commit.js create mode 100644 node_modules/lodash/fp/compact.js create mode 100644 node_modules/lodash/fp/complement.js create mode 100644 node_modules/lodash/fp/compose.js create mode 100644 node_modules/lodash/fp/concat.js create mode 100644 node_modules/lodash/fp/cond.js create mode 100644 node_modules/lodash/fp/conforms.js create mode 100644 node_modules/lodash/fp/conformsTo.js create mode 100644 node_modules/lodash/fp/constant.js create mode 100644 node_modules/lodash/fp/contains.js create mode 100644 node_modules/lodash/fp/convert.js create mode 100644 node_modules/lodash/fp/countBy.js create mode 100644 node_modules/lodash/fp/create.js create mode 100644 node_modules/lodash/fp/curry.js create mode 100644 node_modules/lodash/fp/curryN.js create mode 100644 node_modules/lodash/fp/curryRight.js create mode 100644 node_modules/lodash/fp/curryRightN.js create mode 100644 node_modules/lodash/fp/date.js create mode 100644 node_modules/lodash/fp/debounce.js create mode 100644 node_modules/lodash/fp/deburr.js create mode 100644 node_modules/lodash/fp/defaultTo.js create mode 100644 node_modules/lodash/fp/defaults.js create mode 100644 node_modules/lodash/fp/defaultsAll.js create mode 100644 node_modules/lodash/fp/defaultsDeep.js create mode 100644 node_modules/lodash/fp/defaultsDeepAll.js create mode 100644 node_modules/lodash/fp/defer.js create mode 100644 node_modules/lodash/fp/delay.js create mode 100644 node_modules/lodash/fp/difference.js create mode 100644 node_modules/lodash/fp/differenceBy.js create mode 100644 node_modules/lodash/fp/differenceWith.js create mode 100644 node_modules/lodash/fp/dissoc.js create mode 100644 node_modules/lodash/fp/dissocPath.js create mode 100644 node_modules/lodash/fp/divide.js create mode 100644 node_modules/lodash/fp/drop.js create mode 100644 node_modules/lodash/fp/dropLast.js create mode 100644 node_modules/lodash/fp/dropLastWhile.js create mode 100644 node_modules/lodash/fp/dropRight.js create mode 100644 node_modules/lodash/fp/dropRightWhile.js create mode 100644 node_modules/lodash/fp/dropWhile.js create mode 100644 node_modules/lodash/fp/each.js create mode 100644 node_modules/lodash/fp/eachRight.js create mode 100644 node_modules/lodash/fp/endsWith.js create mode 100644 node_modules/lodash/fp/entries.js create mode 100644 node_modules/lodash/fp/entriesIn.js create mode 100644 node_modules/lodash/fp/eq.js create mode 100644 node_modules/lodash/fp/equals.js create mode 100644 node_modules/lodash/fp/escape.js create mode 100644 node_modules/lodash/fp/escapeRegExp.js create mode 100644 node_modules/lodash/fp/every.js create mode 100644 node_modules/lodash/fp/extend.js create mode 100644 node_modules/lodash/fp/extendAll.js create mode 100644 node_modules/lodash/fp/extendAllWith.js create mode 100644 node_modules/lodash/fp/extendWith.js create mode 100644 node_modules/lodash/fp/fill.js create mode 100644 node_modules/lodash/fp/filter.js create mode 100644 node_modules/lodash/fp/find.js create mode 100644 node_modules/lodash/fp/findFrom.js create mode 100644 node_modules/lodash/fp/findIndex.js create mode 100644 node_modules/lodash/fp/findIndexFrom.js create mode 100644 node_modules/lodash/fp/findKey.js create mode 100644 node_modules/lodash/fp/findLast.js create mode 100644 node_modules/lodash/fp/findLastFrom.js create mode 100644 node_modules/lodash/fp/findLastIndex.js create mode 100644 node_modules/lodash/fp/findLastIndexFrom.js create mode 100644 node_modules/lodash/fp/findLastKey.js create mode 100644 node_modules/lodash/fp/first.js create mode 100644 node_modules/lodash/fp/flatMap.js create mode 100644 node_modules/lodash/fp/flatMapDeep.js create mode 100644 node_modules/lodash/fp/flatMapDepth.js create mode 100644 node_modules/lodash/fp/flatten.js create mode 100644 node_modules/lodash/fp/flattenDeep.js create mode 100644 node_modules/lodash/fp/flattenDepth.js create mode 100644 node_modules/lodash/fp/flip.js create mode 100644 node_modules/lodash/fp/floor.js create mode 100644 node_modules/lodash/fp/flow.js create mode 100644 node_modules/lodash/fp/flowRight.js create mode 100644 node_modules/lodash/fp/forEach.js create mode 100644 node_modules/lodash/fp/forEachRight.js create mode 100644 node_modules/lodash/fp/forIn.js create mode 100644 node_modules/lodash/fp/forInRight.js create mode 100644 node_modules/lodash/fp/forOwn.js create mode 100644 node_modules/lodash/fp/forOwnRight.js create mode 100644 node_modules/lodash/fp/fromPairs.js create mode 100644 node_modules/lodash/fp/function.js create mode 100644 node_modules/lodash/fp/functions.js create mode 100644 node_modules/lodash/fp/functionsIn.js create mode 100644 node_modules/lodash/fp/get.js create mode 100644 node_modules/lodash/fp/getOr.js create mode 100644 node_modules/lodash/fp/groupBy.js create mode 100644 node_modules/lodash/fp/gt.js create mode 100644 node_modules/lodash/fp/gte.js create mode 100644 node_modules/lodash/fp/has.js create mode 100644 node_modules/lodash/fp/hasIn.js create mode 100644 node_modules/lodash/fp/head.js create mode 100644 node_modules/lodash/fp/identical.js create mode 100644 node_modules/lodash/fp/identity.js create mode 100644 node_modules/lodash/fp/inRange.js create mode 100644 node_modules/lodash/fp/includes.js create mode 100644 node_modules/lodash/fp/includesFrom.js create mode 100644 node_modules/lodash/fp/indexBy.js create mode 100644 node_modules/lodash/fp/indexOf.js create mode 100644 node_modules/lodash/fp/indexOfFrom.js create mode 100644 node_modules/lodash/fp/init.js create mode 100644 node_modules/lodash/fp/initial.js create mode 100644 node_modules/lodash/fp/intersection.js create mode 100644 node_modules/lodash/fp/intersectionBy.js create mode 100644 node_modules/lodash/fp/intersectionWith.js create mode 100644 node_modules/lodash/fp/invert.js create mode 100644 node_modules/lodash/fp/invertBy.js create mode 100644 node_modules/lodash/fp/invertObj.js create mode 100644 node_modules/lodash/fp/invoke.js create mode 100644 node_modules/lodash/fp/invokeArgs.js create mode 100644 node_modules/lodash/fp/invokeArgsMap.js create mode 100644 node_modules/lodash/fp/invokeMap.js create mode 100644 node_modules/lodash/fp/isArguments.js create mode 100644 node_modules/lodash/fp/isArray.js create mode 100644 node_modules/lodash/fp/isArrayBuffer.js create mode 100644 node_modules/lodash/fp/isArrayLike.js create mode 100644 node_modules/lodash/fp/isArrayLikeObject.js create mode 100644 node_modules/lodash/fp/isBoolean.js create mode 100644 node_modules/lodash/fp/isBuffer.js create mode 100644 node_modules/lodash/fp/isDate.js create mode 100644 node_modules/lodash/fp/isElement.js create mode 100644 node_modules/lodash/fp/isEmpty.js create mode 100644 node_modules/lodash/fp/isEqual.js create mode 100644 node_modules/lodash/fp/isEqualWith.js create mode 100644 node_modules/lodash/fp/isError.js create mode 100644 node_modules/lodash/fp/isFinite.js create mode 100644 node_modules/lodash/fp/isFunction.js create mode 100644 node_modules/lodash/fp/isInteger.js create mode 100644 node_modules/lodash/fp/isLength.js create mode 100644 node_modules/lodash/fp/isMap.js create mode 100644 node_modules/lodash/fp/isMatch.js create mode 100644 node_modules/lodash/fp/isMatchWith.js create mode 100644 node_modules/lodash/fp/isNaN.js create mode 100644 node_modules/lodash/fp/isNative.js create mode 100644 node_modules/lodash/fp/isNil.js create mode 100644 node_modules/lodash/fp/isNull.js create mode 100644 node_modules/lodash/fp/isNumber.js create mode 100644 node_modules/lodash/fp/isObject.js create mode 100644 node_modules/lodash/fp/isObjectLike.js create mode 100644 node_modules/lodash/fp/isPlainObject.js create mode 100644 node_modules/lodash/fp/isRegExp.js create mode 100644 node_modules/lodash/fp/isSafeInteger.js create mode 100644 node_modules/lodash/fp/isSet.js create mode 100644 node_modules/lodash/fp/isString.js create mode 100644 node_modules/lodash/fp/isSymbol.js create mode 100644 node_modules/lodash/fp/isTypedArray.js create mode 100644 node_modules/lodash/fp/isUndefined.js create mode 100644 node_modules/lodash/fp/isWeakMap.js create mode 100644 node_modules/lodash/fp/isWeakSet.js create mode 100644 node_modules/lodash/fp/iteratee.js create mode 100644 node_modules/lodash/fp/join.js create mode 100644 node_modules/lodash/fp/juxt.js create mode 100644 node_modules/lodash/fp/kebabCase.js create mode 100644 node_modules/lodash/fp/keyBy.js create mode 100644 node_modules/lodash/fp/keys.js create mode 100644 node_modules/lodash/fp/keysIn.js create mode 100644 node_modules/lodash/fp/lang.js create mode 100644 node_modules/lodash/fp/last.js create mode 100644 node_modules/lodash/fp/lastIndexOf.js create mode 100644 node_modules/lodash/fp/lastIndexOfFrom.js create mode 100644 node_modules/lodash/fp/lowerCase.js create mode 100644 node_modules/lodash/fp/lowerFirst.js create mode 100644 node_modules/lodash/fp/lt.js create mode 100644 node_modules/lodash/fp/lte.js create mode 100644 node_modules/lodash/fp/map.js create mode 100644 node_modules/lodash/fp/mapKeys.js create mode 100644 node_modules/lodash/fp/mapValues.js create mode 100644 node_modules/lodash/fp/matches.js create mode 100644 node_modules/lodash/fp/matchesProperty.js create mode 100644 node_modules/lodash/fp/math.js create mode 100644 node_modules/lodash/fp/max.js create mode 100644 node_modules/lodash/fp/maxBy.js create mode 100644 node_modules/lodash/fp/mean.js create mode 100644 node_modules/lodash/fp/meanBy.js create mode 100644 node_modules/lodash/fp/memoize.js create mode 100644 node_modules/lodash/fp/merge.js create mode 100644 node_modules/lodash/fp/mergeAll.js create mode 100644 node_modules/lodash/fp/mergeAllWith.js create mode 100644 node_modules/lodash/fp/mergeWith.js create mode 100644 node_modules/lodash/fp/method.js create mode 100644 node_modules/lodash/fp/methodOf.js create mode 100644 node_modules/lodash/fp/min.js create mode 100644 node_modules/lodash/fp/minBy.js create mode 100644 node_modules/lodash/fp/mixin.js create mode 100644 node_modules/lodash/fp/multiply.js create mode 100644 node_modules/lodash/fp/nAry.js create mode 100644 node_modules/lodash/fp/negate.js create mode 100644 node_modules/lodash/fp/next.js create mode 100644 node_modules/lodash/fp/noop.js create mode 100644 node_modules/lodash/fp/now.js create mode 100644 node_modules/lodash/fp/nth.js create mode 100644 node_modules/lodash/fp/nthArg.js create mode 100644 node_modules/lodash/fp/number.js create mode 100644 node_modules/lodash/fp/object.js create mode 100644 node_modules/lodash/fp/omit.js create mode 100644 node_modules/lodash/fp/omitAll.js create mode 100644 node_modules/lodash/fp/omitBy.js create mode 100644 node_modules/lodash/fp/once.js create mode 100644 node_modules/lodash/fp/orderBy.js create mode 100644 node_modules/lodash/fp/over.js create mode 100644 node_modules/lodash/fp/overArgs.js create mode 100644 node_modules/lodash/fp/overEvery.js create mode 100644 node_modules/lodash/fp/overSome.js create mode 100644 node_modules/lodash/fp/pad.js create mode 100644 node_modules/lodash/fp/padChars.js create mode 100644 node_modules/lodash/fp/padCharsEnd.js create mode 100644 node_modules/lodash/fp/padCharsStart.js create mode 100644 node_modules/lodash/fp/padEnd.js create mode 100644 node_modules/lodash/fp/padStart.js create mode 100644 node_modules/lodash/fp/parseInt.js create mode 100644 node_modules/lodash/fp/partial.js create mode 100644 node_modules/lodash/fp/partialRight.js create mode 100644 node_modules/lodash/fp/partition.js create mode 100644 node_modules/lodash/fp/path.js create mode 100644 node_modules/lodash/fp/pathEq.js create mode 100644 node_modules/lodash/fp/pathOr.js create mode 100644 node_modules/lodash/fp/paths.js create mode 100644 node_modules/lodash/fp/pick.js create mode 100644 node_modules/lodash/fp/pickAll.js create mode 100644 node_modules/lodash/fp/pickBy.js create mode 100644 node_modules/lodash/fp/pipe.js create mode 100644 node_modules/lodash/fp/placeholder.js create mode 100644 node_modules/lodash/fp/plant.js create mode 100644 node_modules/lodash/fp/pluck.js create mode 100644 node_modules/lodash/fp/prop.js create mode 100644 node_modules/lodash/fp/propEq.js create mode 100644 node_modules/lodash/fp/propOr.js create mode 100644 node_modules/lodash/fp/property.js create mode 100644 node_modules/lodash/fp/propertyOf.js create mode 100644 node_modules/lodash/fp/props.js create mode 100644 node_modules/lodash/fp/pull.js create mode 100644 node_modules/lodash/fp/pullAll.js create mode 100644 node_modules/lodash/fp/pullAllBy.js create mode 100644 node_modules/lodash/fp/pullAllWith.js create mode 100644 node_modules/lodash/fp/pullAt.js create mode 100644 node_modules/lodash/fp/random.js create mode 100644 node_modules/lodash/fp/range.js create mode 100644 node_modules/lodash/fp/rangeRight.js create mode 100644 node_modules/lodash/fp/rangeStep.js create mode 100644 node_modules/lodash/fp/rangeStepRight.js create mode 100644 node_modules/lodash/fp/rearg.js create mode 100644 node_modules/lodash/fp/reduce.js create mode 100644 node_modules/lodash/fp/reduceRight.js create mode 100644 node_modules/lodash/fp/reject.js create mode 100644 node_modules/lodash/fp/remove.js create mode 100644 node_modules/lodash/fp/repeat.js create mode 100644 node_modules/lodash/fp/replace.js create mode 100644 node_modules/lodash/fp/rest.js create mode 100644 node_modules/lodash/fp/restFrom.js create mode 100644 node_modules/lodash/fp/result.js create mode 100644 node_modules/lodash/fp/reverse.js create mode 100644 node_modules/lodash/fp/round.js create mode 100644 node_modules/lodash/fp/sample.js create mode 100644 node_modules/lodash/fp/sampleSize.js create mode 100644 node_modules/lodash/fp/seq.js create mode 100644 node_modules/lodash/fp/set.js create mode 100644 node_modules/lodash/fp/setWith.js create mode 100644 node_modules/lodash/fp/shuffle.js create mode 100644 node_modules/lodash/fp/size.js create mode 100644 node_modules/lodash/fp/slice.js create mode 100644 node_modules/lodash/fp/snakeCase.js create mode 100644 node_modules/lodash/fp/some.js create mode 100644 node_modules/lodash/fp/sortBy.js create mode 100644 node_modules/lodash/fp/sortedIndex.js create mode 100644 node_modules/lodash/fp/sortedIndexBy.js create mode 100644 node_modules/lodash/fp/sortedIndexOf.js create mode 100644 node_modules/lodash/fp/sortedLastIndex.js create mode 100644 node_modules/lodash/fp/sortedLastIndexBy.js create mode 100644 node_modules/lodash/fp/sortedLastIndexOf.js create mode 100644 node_modules/lodash/fp/sortedUniq.js create mode 100644 node_modules/lodash/fp/sortedUniqBy.js create mode 100644 node_modules/lodash/fp/split.js create mode 100644 node_modules/lodash/fp/spread.js create mode 100644 node_modules/lodash/fp/spreadFrom.js create mode 100644 node_modules/lodash/fp/startCase.js create mode 100644 node_modules/lodash/fp/startsWith.js create mode 100644 node_modules/lodash/fp/string.js create mode 100644 node_modules/lodash/fp/stubArray.js create mode 100644 node_modules/lodash/fp/stubFalse.js create mode 100644 node_modules/lodash/fp/stubObject.js create mode 100644 node_modules/lodash/fp/stubString.js create mode 100644 node_modules/lodash/fp/stubTrue.js create mode 100644 node_modules/lodash/fp/subtract.js create mode 100644 node_modules/lodash/fp/sum.js create mode 100644 node_modules/lodash/fp/sumBy.js create mode 100644 node_modules/lodash/fp/symmetricDifference.js create mode 100644 node_modules/lodash/fp/symmetricDifferenceBy.js create mode 100644 node_modules/lodash/fp/symmetricDifferenceWith.js create mode 100644 node_modules/lodash/fp/tail.js create mode 100644 node_modules/lodash/fp/take.js create mode 100644 node_modules/lodash/fp/takeLast.js create mode 100644 node_modules/lodash/fp/takeLastWhile.js create mode 100644 node_modules/lodash/fp/takeRight.js create mode 100644 node_modules/lodash/fp/takeRightWhile.js create mode 100644 node_modules/lodash/fp/takeWhile.js create mode 100644 node_modules/lodash/fp/tap.js create mode 100644 node_modules/lodash/fp/template.js create mode 100644 node_modules/lodash/fp/templateSettings.js create mode 100644 node_modules/lodash/fp/throttle.js create mode 100644 node_modules/lodash/fp/thru.js create mode 100644 node_modules/lodash/fp/times.js create mode 100644 node_modules/lodash/fp/toArray.js create mode 100644 node_modules/lodash/fp/toFinite.js create mode 100644 node_modules/lodash/fp/toInteger.js create mode 100644 node_modules/lodash/fp/toIterator.js create mode 100644 node_modules/lodash/fp/toJSON.js create mode 100644 node_modules/lodash/fp/toLength.js create mode 100644 node_modules/lodash/fp/toLower.js create mode 100644 node_modules/lodash/fp/toNumber.js create mode 100644 node_modules/lodash/fp/toPairs.js create mode 100644 node_modules/lodash/fp/toPairsIn.js create mode 100644 node_modules/lodash/fp/toPath.js create mode 100644 node_modules/lodash/fp/toPlainObject.js create mode 100644 node_modules/lodash/fp/toSafeInteger.js create mode 100644 node_modules/lodash/fp/toString.js create mode 100644 node_modules/lodash/fp/toUpper.js create mode 100644 node_modules/lodash/fp/transform.js create mode 100644 node_modules/lodash/fp/trim.js create mode 100644 node_modules/lodash/fp/trimChars.js create mode 100644 node_modules/lodash/fp/trimCharsEnd.js create mode 100644 node_modules/lodash/fp/trimCharsStart.js create mode 100644 node_modules/lodash/fp/trimEnd.js create mode 100644 node_modules/lodash/fp/trimStart.js create mode 100644 node_modules/lodash/fp/truncate.js create mode 100644 node_modules/lodash/fp/unapply.js create mode 100644 node_modules/lodash/fp/unary.js create mode 100644 node_modules/lodash/fp/unescape.js create mode 100644 node_modules/lodash/fp/union.js create mode 100644 node_modules/lodash/fp/unionBy.js create mode 100644 node_modules/lodash/fp/unionWith.js create mode 100644 node_modules/lodash/fp/uniq.js create mode 100644 node_modules/lodash/fp/uniqBy.js create mode 100644 node_modules/lodash/fp/uniqWith.js create mode 100644 node_modules/lodash/fp/uniqueId.js create mode 100644 node_modules/lodash/fp/unnest.js create mode 100644 node_modules/lodash/fp/unset.js create mode 100644 node_modules/lodash/fp/unzip.js create mode 100644 node_modules/lodash/fp/unzipWith.js create mode 100644 node_modules/lodash/fp/update.js create mode 100644 node_modules/lodash/fp/updateWith.js create mode 100644 node_modules/lodash/fp/upperCase.js create mode 100644 node_modules/lodash/fp/upperFirst.js create mode 100644 node_modules/lodash/fp/useWith.js create mode 100644 node_modules/lodash/fp/util.js create mode 100644 node_modules/lodash/fp/value.js create mode 100644 node_modules/lodash/fp/valueOf.js create mode 100644 node_modules/lodash/fp/values.js create mode 100644 node_modules/lodash/fp/valuesIn.js create mode 100644 node_modules/lodash/fp/where.js create mode 100644 node_modules/lodash/fp/whereEq.js create mode 100644 node_modules/lodash/fp/without.js create mode 100644 node_modules/lodash/fp/words.js create mode 100644 node_modules/lodash/fp/wrap.js create mode 100644 node_modules/lodash/fp/wrapperAt.js create mode 100644 node_modules/lodash/fp/wrapperChain.js create mode 100644 node_modules/lodash/fp/wrapperLodash.js create mode 100644 node_modules/lodash/fp/wrapperReverse.js create mode 100644 node_modules/lodash/fp/wrapperValue.js create mode 100644 node_modules/lodash/fp/xor.js create mode 100644 node_modules/lodash/fp/xorBy.js create mode 100644 node_modules/lodash/fp/xorWith.js create mode 100644 node_modules/lodash/fp/zip.js create mode 100644 node_modules/lodash/fp/zipAll.js create mode 100644 node_modules/lodash/fp/zipObj.js create mode 100644 node_modules/lodash/fp/zipObject.js create mode 100644 node_modules/lodash/fp/zipObjectDeep.js create mode 100644 node_modules/lodash/fp/zipWith.js create mode 100644 node_modules/lodash/fromPairs.js create mode 100644 node_modules/lodash/function.js create mode 100644 node_modules/lodash/functions.js create mode 100644 node_modules/lodash/functionsIn.js create mode 100644 node_modules/lodash/get.js create mode 100644 node_modules/lodash/groupBy.js create mode 100644 node_modules/lodash/gt.js create mode 100644 node_modules/lodash/gte.js create mode 100644 node_modules/lodash/has.js create mode 100644 node_modules/lodash/hasIn.js create mode 100644 node_modules/lodash/head.js create mode 100644 node_modules/lodash/identity.js create mode 100644 node_modules/lodash/inRange.js create mode 100644 node_modules/lodash/includes.js create mode 100644 node_modules/lodash/index.js create mode 100644 node_modules/lodash/indexOf.js create mode 100644 node_modules/lodash/initial.js create mode 100644 node_modules/lodash/intersection.js create mode 100644 node_modules/lodash/intersectionBy.js create mode 100644 node_modules/lodash/intersectionWith.js create mode 100644 node_modules/lodash/invert.js create mode 100644 node_modules/lodash/invertBy.js create mode 100644 node_modules/lodash/invoke.js create mode 100644 node_modules/lodash/invokeMap.js create mode 100644 node_modules/lodash/isArguments.js create mode 100644 node_modules/lodash/isArray.js create mode 100644 node_modules/lodash/isArrayBuffer.js create mode 100644 node_modules/lodash/isArrayLike.js create mode 100644 node_modules/lodash/isArrayLikeObject.js create mode 100644 node_modules/lodash/isBoolean.js create mode 100644 node_modules/lodash/isBuffer.js create mode 100644 node_modules/lodash/isDate.js create mode 100644 node_modules/lodash/isElement.js create mode 100644 node_modules/lodash/isEmpty.js create mode 100644 node_modules/lodash/isEqual.js create mode 100644 node_modules/lodash/isEqualWith.js create mode 100644 node_modules/lodash/isError.js create mode 100644 node_modules/lodash/isFinite.js create mode 100644 node_modules/lodash/isFunction.js create mode 100644 node_modules/lodash/isInteger.js create mode 100644 node_modules/lodash/isLength.js create mode 100644 node_modules/lodash/isMap.js create mode 100644 node_modules/lodash/isMatch.js create mode 100644 node_modules/lodash/isMatchWith.js create mode 100644 node_modules/lodash/isNaN.js create mode 100644 node_modules/lodash/isNative.js create mode 100644 node_modules/lodash/isNil.js create mode 100644 node_modules/lodash/isNull.js create mode 100644 node_modules/lodash/isNumber.js create mode 100644 node_modules/lodash/isObject.js create mode 100644 node_modules/lodash/isObjectLike.js create mode 100644 node_modules/lodash/isPlainObject.js create mode 100644 node_modules/lodash/isRegExp.js create mode 100644 node_modules/lodash/isSafeInteger.js create mode 100644 node_modules/lodash/isSet.js create mode 100644 node_modules/lodash/isString.js create mode 100644 node_modules/lodash/isSymbol.js create mode 100644 node_modules/lodash/isTypedArray.js create mode 100644 node_modules/lodash/isUndefined.js create mode 100644 node_modules/lodash/isWeakMap.js create mode 100644 node_modules/lodash/isWeakSet.js create mode 100644 node_modules/lodash/iteratee.js create mode 100644 node_modules/lodash/join.js create mode 100644 node_modules/lodash/kebabCase.js create mode 100644 node_modules/lodash/keyBy.js create mode 100644 node_modules/lodash/keys.js create mode 100644 node_modules/lodash/keysIn.js create mode 100644 node_modules/lodash/lang.js create mode 100644 node_modules/lodash/last.js create mode 100644 node_modules/lodash/lastIndexOf.js create mode 100644 node_modules/lodash/lodash.js create mode 100644 node_modules/lodash/lodash.min.js create mode 100644 node_modules/lodash/lowerCase.js create mode 100644 node_modules/lodash/lowerFirst.js create mode 100644 node_modules/lodash/lt.js create mode 100644 node_modules/lodash/lte.js create mode 100644 node_modules/lodash/map.js create mode 100644 node_modules/lodash/mapKeys.js create mode 100644 node_modules/lodash/mapValues.js create mode 100644 node_modules/lodash/matches.js create mode 100644 node_modules/lodash/matchesProperty.js create mode 100644 node_modules/lodash/math.js create mode 100644 node_modules/lodash/max.js create mode 100644 node_modules/lodash/maxBy.js create mode 100644 node_modules/lodash/mean.js create mode 100644 node_modules/lodash/meanBy.js create mode 100644 node_modules/lodash/memoize.js create mode 100644 node_modules/lodash/merge.js create mode 100644 node_modules/lodash/mergeWith.js create mode 100644 node_modules/lodash/method.js create mode 100644 node_modules/lodash/methodOf.js create mode 100644 node_modules/lodash/min.js create mode 100644 node_modules/lodash/minBy.js create mode 100644 node_modules/lodash/mixin.js create mode 100644 node_modules/lodash/multiply.js create mode 100644 node_modules/lodash/negate.js create mode 100644 node_modules/lodash/next.js create mode 100644 node_modules/lodash/noop.js create mode 100644 node_modules/lodash/now.js create mode 100644 node_modules/lodash/nth.js create mode 100644 node_modules/lodash/nthArg.js create mode 100644 node_modules/lodash/number.js create mode 100644 node_modules/lodash/object.js create mode 100644 node_modules/lodash/omit.js create mode 100644 node_modules/lodash/omitBy.js create mode 100644 node_modules/lodash/once.js create mode 100644 node_modules/lodash/orderBy.js create mode 100644 node_modules/lodash/over.js create mode 100644 node_modules/lodash/overArgs.js create mode 100644 node_modules/lodash/overEvery.js create mode 100644 node_modules/lodash/overSome.js create mode 100644 node_modules/lodash/package.json create mode 100644 node_modules/lodash/pad.js create mode 100644 node_modules/lodash/padEnd.js create mode 100644 node_modules/lodash/padStart.js create mode 100644 node_modules/lodash/parseInt.js create mode 100644 node_modules/lodash/partial.js create mode 100644 node_modules/lodash/partialRight.js create mode 100644 node_modules/lodash/partition.js create mode 100644 node_modules/lodash/pick.js create mode 100644 node_modules/lodash/pickBy.js create mode 100644 node_modules/lodash/plant.js create mode 100644 node_modules/lodash/property.js create mode 100644 node_modules/lodash/propertyOf.js create mode 100644 node_modules/lodash/pull.js create mode 100644 node_modules/lodash/pullAll.js create mode 100644 node_modules/lodash/pullAllBy.js create mode 100644 node_modules/lodash/pullAllWith.js create mode 100644 node_modules/lodash/pullAt.js create mode 100644 node_modules/lodash/random.js create mode 100644 node_modules/lodash/range.js create mode 100644 node_modules/lodash/rangeRight.js create mode 100644 node_modules/lodash/rearg.js create mode 100644 node_modules/lodash/reduce.js create mode 100644 node_modules/lodash/reduceRight.js create mode 100644 node_modules/lodash/reject.js create mode 100644 node_modules/lodash/remove.js create mode 100644 node_modules/lodash/repeat.js create mode 100644 node_modules/lodash/replace.js create mode 100644 node_modules/lodash/rest.js create mode 100644 node_modules/lodash/result.js create mode 100644 node_modules/lodash/reverse.js create mode 100644 node_modules/lodash/round.js create mode 100644 node_modules/lodash/sample.js create mode 100644 node_modules/lodash/sampleSize.js create mode 100644 node_modules/lodash/seq.js create mode 100644 node_modules/lodash/set.js create mode 100644 node_modules/lodash/setWith.js create mode 100644 node_modules/lodash/shuffle.js create mode 100644 node_modules/lodash/size.js create mode 100644 node_modules/lodash/slice.js create mode 100644 node_modules/lodash/snakeCase.js create mode 100644 node_modules/lodash/some.js create mode 100644 node_modules/lodash/sortBy.js create mode 100644 node_modules/lodash/sortedIndex.js create mode 100644 node_modules/lodash/sortedIndexBy.js create mode 100644 node_modules/lodash/sortedIndexOf.js create mode 100644 node_modules/lodash/sortedLastIndex.js create mode 100644 node_modules/lodash/sortedLastIndexBy.js create mode 100644 node_modules/lodash/sortedLastIndexOf.js create mode 100644 node_modules/lodash/sortedUniq.js create mode 100644 node_modules/lodash/sortedUniqBy.js create mode 100644 node_modules/lodash/split.js create mode 100644 node_modules/lodash/spread.js create mode 100644 node_modules/lodash/startCase.js create mode 100644 node_modules/lodash/startsWith.js create mode 100644 node_modules/lodash/string.js create mode 100644 node_modules/lodash/stubArray.js create mode 100644 node_modules/lodash/stubFalse.js create mode 100644 node_modules/lodash/stubObject.js create mode 100644 node_modules/lodash/stubString.js create mode 100644 node_modules/lodash/stubTrue.js create mode 100644 node_modules/lodash/subtract.js create mode 100644 node_modules/lodash/sum.js create mode 100644 node_modules/lodash/sumBy.js create mode 100644 node_modules/lodash/tail.js create mode 100644 node_modules/lodash/take.js create mode 100644 node_modules/lodash/takeRight.js create mode 100644 node_modules/lodash/takeRightWhile.js create mode 100644 node_modules/lodash/takeWhile.js create mode 100644 node_modules/lodash/tap.js create mode 100644 node_modules/lodash/template.js create mode 100644 node_modules/lodash/templateSettings.js create mode 100644 node_modules/lodash/throttle.js create mode 100644 node_modules/lodash/thru.js create mode 100644 node_modules/lodash/times.js create mode 100644 node_modules/lodash/toArray.js create mode 100644 node_modules/lodash/toFinite.js create mode 100644 node_modules/lodash/toInteger.js create mode 100644 node_modules/lodash/toIterator.js create mode 100644 node_modules/lodash/toJSON.js create mode 100644 node_modules/lodash/toLength.js create mode 100644 node_modules/lodash/toLower.js create mode 100644 node_modules/lodash/toNumber.js create mode 100644 node_modules/lodash/toPairs.js create mode 100644 node_modules/lodash/toPairsIn.js create mode 100644 node_modules/lodash/toPath.js create mode 100644 node_modules/lodash/toPlainObject.js create mode 100644 node_modules/lodash/toSafeInteger.js create mode 100644 node_modules/lodash/toString.js create mode 100644 node_modules/lodash/toUpper.js create mode 100644 node_modules/lodash/transform.js create mode 100644 node_modules/lodash/trim.js create mode 100644 node_modules/lodash/trimEnd.js create mode 100644 node_modules/lodash/trimStart.js create mode 100644 node_modules/lodash/truncate.js create mode 100644 node_modules/lodash/unary.js create mode 100644 node_modules/lodash/unescape.js create mode 100644 node_modules/lodash/union.js create mode 100644 node_modules/lodash/unionBy.js create mode 100644 node_modules/lodash/unionWith.js create mode 100644 node_modules/lodash/uniq.js create mode 100644 node_modules/lodash/uniqBy.js create mode 100644 node_modules/lodash/uniqWith.js create mode 100644 node_modules/lodash/uniqueId.js create mode 100644 node_modules/lodash/unset.js create mode 100644 node_modules/lodash/unzip.js create mode 100644 node_modules/lodash/unzipWith.js create mode 100644 node_modules/lodash/update.js create mode 100644 node_modules/lodash/updateWith.js create mode 100644 node_modules/lodash/upperCase.js create mode 100644 node_modules/lodash/upperFirst.js create mode 100644 node_modules/lodash/util.js create mode 100644 node_modules/lodash/value.js create mode 100644 node_modules/lodash/valueOf.js create mode 100644 node_modules/lodash/values.js create mode 100644 node_modules/lodash/valuesIn.js create mode 100644 node_modules/lodash/without.js create mode 100644 node_modules/lodash/words.js create mode 100644 node_modules/lodash/wrap.js create mode 100644 node_modules/lodash/wrapperAt.js create mode 100644 node_modules/lodash/wrapperChain.js create mode 100644 node_modules/lodash/wrapperLodash.js create mode 100644 node_modules/lodash/wrapperReverse.js create mode 100644 node_modules/lodash/wrapperValue.js create mode 100644 node_modules/lodash/xor.js create mode 100644 node_modules/lodash/xorBy.js create mode 100644 node_modules/lodash/xorWith.js create mode 100644 node_modules/lodash/zip.js create mode 100644 node_modules/lodash/zipObject.js create mode 100644 node_modules/lodash/zipObjectDeep.js create mode 100644 node_modules/lodash/zipWith.js create mode 100644 node_modules/longest/LICENSE create mode 100644 node_modules/longest/README.md create mode 100644 node_modules/longest/index.js create mode 100644 node_modules/longest/package.json create mode 100644 node_modules/loose-envify/.npmignore create mode 100644 node_modules/loose-envify/LICENSE create mode 100644 node_modules/loose-envify/README.md create mode 100755 node_modules/loose-envify/cli.js create mode 100644 node_modules/loose-envify/custom.js create mode 100644 node_modules/loose-envify/index.js create mode 100644 node_modules/loose-envify/loose-envify.js create mode 100644 node_modules/loose-envify/package.json create mode 100644 node_modules/loose-envify/replace.js create mode 100644 node_modules/lru-cache/LICENSE create mode 100644 node_modules/lru-cache/README.md create mode 100644 node_modules/lru-cache/index.js create mode 100644 node_modules/lru-cache/package.json create mode 100644 node_modules/make-dir/index.js create mode 100644 node_modules/make-dir/license create mode 100644 node_modules/make-dir/package.json create mode 100644 node_modules/make-dir/readme.md create mode 100644 node_modules/md5.js/LICENSE create mode 100644 node_modules/md5.js/README.md create mode 100644 node_modules/md5.js/index.js create mode 100644 node_modules/md5.js/node_modules/hash-base/LICENSE create mode 100644 node_modules/md5.js/node_modules/hash-base/README.md create mode 100644 node_modules/md5.js/node_modules/hash-base/index.js create mode 100644 node_modules/md5.js/node_modules/hash-base/package.json create mode 100644 node_modules/md5.js/package.json create mode 100644 node_modules/mem/index.js create mode 100644 node_modules/mem/license create mode 100644 node_modules/mem/package.json create mode 100644 node_modules/mem/readme.md create mode 100644 node_modules/memory-fs/README.md create mode 100644 node_modules/memory-fs/lib/MemoryFileSystem.js create mode 100644 node_modules/memory-fs/lib/join.js create mode 100644 node_modules/memory-fs/lib/normalize.js create mode 100644 node_modules/memory-fs/package.json create mode 100755 node_modules/micromatch/LICENSE create mode 100644 node_modules/micromatch/README.md create mode 100755 node_modules/micromatch/index.js create mode 100644 node_modules/micromatch/lib/chars.js create mode 100644 node_modules/micromatch/lib/expand.js create mode 100644 node_modules/micromatch/lib/glob.js create mode 100644 node_modules/micromatch/lib/utils.js create mode 100644 node_modules/micromatch/package.json create mode 100644 node_modules/miller-rabin/.npmignore create mode 100644 node_modules/miller-rabin/README.md create mode 100755 node_modules/miller-rabin/bin/miller-rabin create mode 100644 node_modules/miller-rabin/lib/mr.js create mode 100644 node_modules/miller-rabin/package.json create mode 100644 node_modules/miller-rabin/test/api-test.js create mode 100644 node_modules/mime/.npmignore create mode 100644 node_modules/mime/LICENSE create mode 100644 node_modules/mime/README.md create mode 100644 node_modules/mime/build/build.js create mode 100644 node_modules/mime/build/test.js create mode 100755 node_modules/mime/cli.js create mode 100644 node_modules/mime/mime.js create mode 100644 node_modules/mime/package.json create mode 100644 node_modules/mime/types.json create mode 100644 node_modules/mimic-fn/index.js create mode 100644 node_modules/mimic-fn/license create mode 100644 node_modules/mimic-fn/package.json create mode 100644 node_modules/mimic-fn/readme.md create mode 100644 node_modules/minimalistic-assert/index.js create mode 100644 node_modules/minimalistic-assert/package.json create mode 100644 node_modules/minimalistic-assert/readme.md create mode 100644 node_modules/minimalistic-crypto-utils/.npmignore create mode 100644 node_modules/minimalistic-crypto-utils/.travis.yml create mode 100644 node_modules/minimalistic-crypto-utils/README.md create mode 100644 node_modules/minimalistic-crypto-utils/lib/utils.js create mode 100644 node_modules/minimalistic-crypto-utils/package.json create mode 100644 node_modules/minimalistic-crypto-utils/test/utils-test.js create mode 100644 node_modules/minimatch/LICENSE create mode 100644 node_modules/minimatch/README.md create mode 100644 node_modules/minimatch/minimatch.js create mode 100644 node_modules/minimatch/package.json create mode 100644 node_modules/minimist/.travis.yml create mode 100644 node_modules/minimist/LICENSE create mode 100644 node_modules/minimist/example/parse.js create mode 100644 node_modules/minimist/index.js create mode 100644 node_modules/minimist/package.json create mode 100644 node_modules/minimist/readme.markdown create mode 100644 node_modules/minimist/test/dash.js create mode 100644 node_modules/minimist/test/default_bool.js create mode 100644 node_modules/minimist/test/dotted.js create mode 100644 node_modules/minimist/test/long.js create mode 100644 node_modules/minimist/test/parse.js create mode 100644 node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/minimist/test/short.js create mode 100644 node_modules/minimist/test/whitespace.js create mode 100644 node_modules/mkdirp/.travis.yml create mode 100644 node_modules/mkdirp/LICENSE create mode 100755 node_modules/mkdirp/bin/cmd.js create mode 100644 node_modules/mkdirp/bin/usage.txt create mode 100644 node_modules/mkdirp/examples/pow.js create mode 100644 node_modules/mkdirp/index.js create mode 100644 node_modules/mkdirp/package.json create mode 100644 node_modules/mkdirp/readme.markdown create mode 100644 node_modules/mkdirp/test/chmod.js create mode 100644 node_modules/mkdirp/test/clobber.js create mode 100644 node_modules/mkdirp/test/mkdirp.js create mode 100644 node_modules/mkdirp/test/opts_fs.js create mode 100644 node_modules/mkdirp/test/opts_fs_sync.js create mode 100644 node_modules/mkdirp/test/perm.js create mode 100644 node_modules/mkdirp/test/perm_sync.js create mode 100644 node_modules/mkdirp/test/race.js create mode 100644 node_modules/mkdirp/test/rel.js create mode 100644 node_modules/mkdirp/test/return.js create mode 100644 node_modules/mkdirp/test/return_sync.js create mode 100644 node_modules/mkdirp/test/root.js create mode 100644 node_modules/mkdirp/test/sync.js create mode 100644 node_modules/mkdirp/test/umask.js create mode 100644 node_modules/mkdirp/test/umask_sync.js create mode 100644 node_modules/ms/index.js create mode 100644 node_modules/ms/license.md create mode 100644 node_modules/ms/package.json create mode 100644 node_modules/ms/readme.md create mode 100644 node_modules/node-libs-browser/LICENSE create mode 100644 node_modules/node-libs-browser/README.md create mode 100644 node_modules/node-libs-browser/index.js create mode 100644 node_modules/node-libs-browser/mock/buffer.js create mode 100644 node_modules/node-libs-browser/mock/console.js create mode 100644 node_modules/node-libs-browser/mock/dns.js create mode 100644 node_modules/node-libs-browser/mock/empty.js create mode 100644 node_modules/node-libs-browser/mock/net.js create mode 100644 node_modules/node-libs-browser/mock/process.js create mode 100644 node_modules/node-libs-browser/mock/punycode.js create mode 100644 node_modules/node-libs-browser/mock/tls.js create mode 100644 node_modules/node-libs-browser/mock/tty.js create mode 100644 node_modules/node-libs-browser/node_modules/string_decoder/.npmignore create mode 100644 node_modules/node-libs-browser/node_modules/string_decoder/LICENSE create mode 100644 node_modules/node-libs-browser/node_modules/string_decoder/README.md create mode 100644 node_modules/node-libs-browser/node_modules/string_decoder/index.js create mode 100644 node_modules/node-libs-browser/node_modules/string_decoder/package.json create mode 100644 node_modules/node-libs-browser/package.json create mode 100644 node_modules/normalize-package-data/AUTHORS create mode 100644 node_modules/normalize-package-data/LICENSE create mode 100644 node_modules/normalize-package-data/README.md create mode 100644 node_modules/normalize-package-data/lib/extract_description.js create mode 100644 node_modules/normalize-package-data/lib/fixer.js create mode 100644 node_modules/normalize-package-data/lib/make_warning.js create mode 100644 node_modules/normalize-package-data/lib/normalize.js create mode 100644 node_modules/normalize-package-data/lib/safe_format.js create mode 100644 node_modules/normalize-package-data/lib/typos.json create mode 100644 node_modules/normalize-package-data/lib/warning_messages.json create mode 100644 node_modules/normalize-package-data/package.json create mode 100644 node_modules/normalize-path/LICENSE create mode 100644 node_modules/normalize-path/README.md create mode 100644 node_modules/normalize-path/index.js create mode 100644 node_modules/normalize-path/package.json create mode 100644 node_modules/npm-run-path/index.js create mode 100644 node_modules/npm-run-path/license create mode 100644 node_modules/npm-run-path/package.json create mode 100644 node_modules/npm-run-path/readme.md create mode 100644 node_modules/number-is-nan/index.js create mode 100644 node_modules/number-is-nan/license create mode 100644 node_modules/number-is-nan/package.json create mode 100644 node_modules/number-is-nan/readme.md create mode 100644 node_modules/object-assign/index.js create mode 100644 node_modules/object-assign/license create mode 100644 node_modules/object-assign/package.json create mode 100644 node_modules/object-assign/readme.md create mode 100644 node_modules/object.omit/LICENSE create mode 100644 node_modules/object.omit/README.md create mode 100644 node_modules/object.omit/index.js create mode 100644 node_modules/object.omit/package.json create mode 100644 node_modules/once/LICENSE create mode 100644 node_modules/once/README.md create mode 100644 node_modules/once/once.js create mode 100644 node_modules/once/package.json create mode 100644 node_modules/opener/LICENSE.txt create mode 100644 node_modules/opener/README.md create mode 100755 node_modules/opener/opener.js create mode 100644 node_modules/opener/package.json create mode 100644 node_modules/optimist/.travis.yml create mode 100644 node_modules/optimist/LICENSE create mode 100644 node_modules/optimist/example/bool.js create mode 100644 node_modules/optimist/example/boolean_double.js create mode 100644 node_modules/optimist/example/boolean_single.js create mode 100644 node_modules/optimist/example/default_hash.js create mode 100644 node_modules/optimist/example/default_singles.js create mode 100644 node_modules/optimist/example/divide.js create mode 100644 node_modules/optimist/example/line_count.js create mode 100644 node_modules/optimist/example/line_count_options.js create mode 100644 node_modules/optimist/example/line_count_wrap.js create mode 100644 node_modules/optimist/example/nonopt.js create mode 100644 node_modules/optimist/example/reflect.js create mode 100644 node_modules/optimist/example/short.js create mode 100644 node_modules/optimist/example/string.js create mode 100644 node_modules/optimist/example/usage-options.js create mode 100644 node_modules/optimist/example/xup.js create mode 100644 node_modules/optimist/index.js create mode 100644 node_modules/optimist/package.json create mode 100644 node_modules/optimist/readme.markdown create mode 100644 node_modules/optimist/test/_.js create mode 100644 node_modules/optimist/test/_/argv.js create mode 100755 node_modules/optimist/test/_/bin.js create mode 100644 node_modules/optimist/test/dash.js create mode 100644 node_modules/optimist/test/parse.js create mode 100644 node_modules/optimist/test/parse_modified.js create mode 100644 node_modules/optimist/test/short.js create mode 100644 node_modules/optimist/test/usage.js create mode 100644 node_modules/optimist/test/whitespace.js create mode 100644 node_modules/os-browserify/.npmignore create mode 100644 node_modules/os-browserify/LICENSE create mode 100644 node_modules/os-browserify/README.md create mode 100644 node_modules/os-browserify/browser.js create mode 100644 node_modules/os-browserify/main.js create mode 100644 node_modules/os-browserify/package.json create mode 100644 node_modules/os-homedir/index.js create mode 100644 node_modules/os-homedir/license create mode 100644 node_modules/os-homedir/package.json create mode 100644 node_modules/os-homedir/readme.md create mode 100644 node_modules/os-locale/index.js create mode 100644 node_modules/os-locale/license create mode 100644 node_modules/os-locale/package.json create mode 100644 node_modules/os-locale/readme.md create mode 100644 node_modules/os-tmpdir/index.js create mode 100644 node_modules/os-tmpdir/license create mode 100644 node_modules/os-tmpdir/package.json create mode 100644 node_modules/os-tmpdir/readme.md create mode 100644 node_modules/output-file-sync/LICENSE create mode 100644 node_modules/output-file-sync/index.js create mode 100644 node_modules/output-file-sync/package.json create mode 100644 node_modules/p-finally/index.js create mode 100644 node_modules/p-finally/license create mode 100644 node_modules/p-finally/package.json create mode 100644 node_modules/p-finally/readme.md create mode 100644 node_modules/p-limit/index.js create mode 100644 node_modules/p-limit/license create mode 100644 node_modules/p-limit/package.json create mode 100644 node_modules/p-limit/readme.md create mode 100644 node_modules/p-locate/index.js create mode 100644 node_modules/p-locate/license create mode 100644 node_modules/p-locate/package.json create mode 100644 node_modules/p-locate/readme.md create mode 100644 node_modules/pako/CHANGELOG.md create mode 100644 node_modules/pako/LICENSE create mode 100644 node_modules/pako/README.md create mode 100644 node_modules/pako/dist/pako.js create mode 100644 node_modules/pako/dist/pako.min.js create mode 100644 node_modules/pako/dist/pako_deflate.js create mode 100644 node_modules/pako/dist/pako_deflate.min.js create mode 100644 node_modules/pako/dist/pako_inflate.js create mode 100644 node_modules/pako/dist/pako_inflate.min.js create mode 100644 node_modules/pako/index.js create mode 100644 node_modules/pako/lib/deflate.js create mode 100644 node_modules/pako/lib/inflate.js create mode 100644 node_modules/pako/lib/utils/common.js create mode 100644 node_modules/pako/lib/utils/strings.js create mode 100644 node_modules/pako/lib/zlib/adler32.js create mode 100644 node_modules/pako/lib/zlib/constants.js create mode 100644 node_modules/pako/lib/zlib/crc32.js create mode 100644 node_modules/pako/lib/zlib/deflate.js create mode 100644 node_modules/pako/lib/zlib/gzheader.js create mode 100644 node_modules/pako/lib/zlib/inffast.js create mode 100644 node_modules/pako/lib/zlib/inflate.js create mode 100644 node_modules/pako/lib/zlib/inftrees.js create mode 100644 node_modules/pako/lib/zlib/messages.js create mode 100644 node_modules/pako/lib/zlib/trees.js create mode 100644 node_modules/pako/lib/zlib/zstream.js create mode 100644 node_modules/pako/package.json create mode 100644 node_modules/parse-asn1/.npmignore create mode 100644 node_modules/parse-asn1/.travis.yml create mode 100644 node_modules/parse-asn1/README.md create mode 100644 node_modules/parse-asn1/aesid.json create mode 100644 node_modules/parse-asn1/asn1.js create mode 100644 node_modules/parse-asn1/certificate.js create mode 100644 node_modules/parse-asn1/fixProc.js create mode 100644 node_modules/parse-asn1/index.js create mode 100644 node_modules/parse-asn1/package.json create mode 100644 node_modules/parse-asn1/test/1024.priv create mode 100644 node_modules/parse-asn1/test/1024.pub create mode 100644 node_modules/parse-asn1/test/dsa.1024.priv create mode 100644 node_modules/parse-asn1/test/dsa.1024.pub create mode 100644 node_modules/parse-asn1/test/dsa.2048.priv create mode 100644 node_modules/parse-asn1/test/dsa.2048.pub create mode 100644 node_modules/parse-asn1/test/ec.pass.priv create mode 100644 node_modules/parse-asn1/test/ec.priv create mode 100644 node_modules/parse-asn1/test/ec.pub create mode 100644 node_modules/parse-asn1/test/index.js create mode 100644 node_modules/parse-asn1/test/node.cert create mode 100644 node_modules/parse-asn1/test/pass.1024.priv create mode 100644 node_modules/parse-asn1/test/pass.1024.pub create mode 100644 node_modules/parse-asn1/test/pass.dsa.1024.priv create mode 100644 node_modules/parse-asn1/test/pass.dsa.1024.pub create mode 100644 node_modules/parse-asn1/test/pass.rsa.1024.priv create mode 100644 node_modules/parse-asn1/test/pass.rsa.1024.pub create mode 100644 node_modules/parse-asn1/test/pass.rsa.2028.priv create mode 100644 node_modules/parse-asn1/test/pass.rsa.2028.pub create mode 100644 node_modules/parse-asn1/test/pass2.dsa.1024.priv create mode 100644 node_modules/parse-asn1/test/pass2.dsa.1024.pub create mode 100644 node_modules/parse-asn1/test/rsa.1024.priv create mode 100644 node_modules/parse-asn1/test/rsa.1024.pub create mode 100644 node_modules/parse-asn1/test/rsa.2028.priv create mode 100644 node_modules/parse-asn1/test/rsa.2028.pub create mode 100644 node_modules/parse-asn1/test/vector.js create mode 100644 node_modules/parse-asn1/test/vector.priv create mode 100644 node_modules/parse-asn1/test/vector2.priv create mode 100644 node_modules/parse-glob/LICENSE create mode 100644 node_modules/parse-glob/README.md create mode 100644 node_modules/parse-glob/index.js create mode 100644 node_modules/parse-glob/package.json create mode 100644 node_modules/parse-json/index.js create mode 100644 node_modules/parse-json/license create mode 100644 node_modules/parse-json/package.json create mode 100644 node_modules/parse-json/readme.md create mode 100644 node_modules/parse-json/vendor/parse.js create mode 100644 node_modules/parse-json/vendor/unicode.js create mode 100644 node_modules/path-browserify/LICENSE create mode 100644 node_modules/path-browserify/index.js create mode 100644 node_modules/path-browserify/package.json create mode 100644 node_modules/path-browserify/readme.markdown create mode 100644 node_modules/path-exists/index.js create mode 100644 node_modules/path-exists/license create mode 100644 node_modules/path-exists/package.json create mode 100644 node_modules/path-exists/readme.md create mode 100644 node_modules/path-is-absolute/index.js create mode 100644 node_modules/path-is-absolute/license create mode 100644 node_modules/path-is-absolute/package.json create mode 100644 node_modules/path-is-absolute/readme.md create mode 100644 node_modules/path-key/index.js create mode 100644 node_modules/path-key/license create mode 100644 node_modules/path-key/package.json create mode 100644 node_modules/path-key/readme.md create mode 100644 node_modules/path-type/index.js create mode 100644 node_modules/path-type/license create mode 100644 node_modules/path-type/package.json create mode 100644 node_modules/path-type/readme.md create mode 100644 node_modules/pbkdf2/LICENSE create mode 100644 node_modules/pbkdf2/README.md create mode 100644 node_modules/pbkdf2/browser.js create mode 100644 node_modules/pbkdf2/index.js create mode 100644 node_modules/pbkdf2/lib/async.js create mode 100644 node_modules/pbkdf2/lib/default-encoding.js create mode 100644 node_modules/pbkdf2/lib/precondition.js create mode 100644 node_modules/pbkdf2/lib/sync-browser.js create mode 100644 node_modules/pbkdf2/lib/sync.js create mode 100644 node_modules/pbkdf2/package.json create mode 100644 node_modules/pify/index.js create mode 100644 node_modules/pify/license create mode 100644 node_modules/pify/package.json create mode 100644 node_modules/pify/readme.md create mode 100644 node_modules/pkg-dir/index.js create mode 100644 node_modules/pkg-dir/license create mode 100644 node_modules/pkg-dir/package.json create mode 100644 node_modules/pkg-dir/readme.md create mode 100644 node_modules/portfinder/LICENSE create mode 100644 node_modules/portfinder/README.md create mode 100644 node_modules/portfinder/lib/portfinder.d.ts create mode 100644 node_modules/portfinder/lib/portfinder.js create mode 100644 node_modules/portfinder/package.json create mode 100644 node_modules/preserve/.gitattributes create mode 100644 node_modules/preserve/.jshintrc create mode 100644 node_modules/preserve/.npmignore create mode 100644 node_modules/preserve/.travis.yml create mode 100644 node_modules/preserve/.verb.md create mode 100644 node_modules/preserve/LICENSE create mode 100644 node_modules/preserve/README.md create mode 100644 node_modules/preserve/index.js create mode 100644 node_modules/preserve/package.json create mode 100644 node_modules/preserve/test.js create mode 100644 node_modules/private/LICENSE create mode 100644 node_modules/private/README.md create mode 100644 node_modules/private/package.json create mode 100644 node_modules/private/private.js create mode 100644 node_modules/process-nextick-args/.travis.yml create mode 100644 node_modules/process-nextick-args/index.js create mode 100644 node_modules/process-nextick-args/license.md create mode 100644 node_modules/process-nextick-args/package.json create mode 100644 node_modules/process-nextick-args/readme.md create mode 100644 node_modules/process-nextick-args/test.js create mode 100644 node_modules/process/.eslintrc create mode 100644 node_modules/process/LICENSE create mode 100644 node_modules/process/README.md create mode 100644 node_modules/process/browser.js create mode 100644 node_modules/process/index.js create mode 100644 node_modules/process/package.json create mode 100644 node_modules/process/test.js create mode 100644 node_modules/prr/.jshintrc create mode 100644 node_modules/prr/.npmignore create mode 100644 node_modules/prr/.travis.yml create mode 100644 node_modules/prr/LICENSE create mode 100644 node_modules/prr/README.md create mode 100644 node_modules/prr/package.json create mode 100644 node_modules/prr/prr.js create mode 100644 node_modules/prr/test.js create mode 100644 node_modules/pseudomap/LICENSE create mode 100644 node_modules/pseudomap/README.md create mode 100644 node_modules/pseudomap/map.js create mode 100644 node_modules/pseudomap/package.json create mode 100644 node_modules/pseudomap/pseudomap.js create mode 100644 node_modules/pseudomap/test/basic.js create mode 100644 node_modules/public-encrypt/.travis.yml create mode 100644 node_modules/public-encrypt/browser.js create mode 100644 node_modules/public-encrypt/index.js create mode 100644 node_modules/public-encrypt/mgf.js create mode 100644 node_modules/public-encrypt/package.json create mode 100644 node_modules/public-encrypt/privateDecrypt.js create mode 100644 node_modules/public-encrypt/publicEncrypt.js create mode 100644 node_modules/public-encrypt/readme.md create mode 100644 node_modules/public-encrypt/test/1024.priv create mode 100644 node_modules/public-encrypt/test/1024.pub create mode 100644 node_modules/public-encrypt/test/ec.pass.priv create mode 100644 node_modules/public-encrypt/test/ec.priv create mode 100644 node_modules/public-encrypt/test/ec.pub create mode 100644 node_modules/public-encrypt/test/index.js create mode 100644 node_modules/public-encrypt/test/nodeTests.js create mode 100644 node_modules/public-encrypt/test/pass.1024.priv create mode 100644 node_modules/public-encrypt/test/pass.1024.pub create mode 100644 node_modules/public-encrypt/test/rsa.1024.priv create mode 100644 node_modules/public-encrypt/test/rsa.1024.pub create mode 100644 node_modules/public-encrypt/test/rsa.2028.priv create mode 100644 node_modules/public-encrypt/test/rsa.2028.pub create mode 100644 node_modules/public-encrypt/test/rsa.pass.priv create mode 100644 node_modules/public-encrypt/test/rsa.pass.pub create mode 100644 node_modules/public-encrypt/test/test_cert.pem create mode 100644 node_modules/public-encrypt/test/test_key.pem create mode 100644 node_modules/public-encrypt/test/test_rsa_privkey.pem create mode 100644 node_modules/public-encrypt/test/test_rsa_privkey_encrypted.pem create mode 100644 node_modules/public-encrypt/test/test_rsa_pubkey.pem create mode 100644 node_modules/public-encrypt/withPublic.js create mode 100644 node_modules/public-encrypt/xor.js create mode 100644 node_modules/punycode/LICENSE-MIT.txt create mode 100644 node_modules/punycode/README.md create mode 100644 node_modules/punycode/package.json create mode 100644 node_modules/punycode/punycode.js create mode 100644 node_modules/qs/.jshintignore create mode 100644 node_modules/qs/.jshintrc create mode 100644 node_modules/qs/.npmignore create mode 100644 node_modules/qs/.travis.yml create mode 100644 node_modules/qs/CHANGELOG.md create mode 100644 node_modules/qs/CONTRIBUTING.md create mode 100755 node_modules/qs/LICENSE create mode 100644 node_modules/qs/Makefile create mode 100755 node_modules/qs/README.md create mode 100644 node_modules/qs/index.js create mode 100755 node_modules/qs/lib/index.js create mode 100755 node_modules/qs/lib/parse.js create mode 100755 node_modules/qs/lib/stringify.js create mode 100755 node_modules/qs/lib/utils.js create mode 100644 node_modules/qs/package.json create mode 100755 node_modules/qs/test/parse.js create mode 100755 node_modules/qs/test/stringify.js create mode 100644 node_modules/querystring-es3/.travis.yml create mode 100644 node_modules/querystring-es3/History.md create mode 100644 node_modules/querystring-es3/License.md create mode 100644 node_modules/querystring-es3/Readme.md create mode 100644 node_modules/querystring-es3/decode.js create mode 100644 node_modules/querystring-es3/encode.js create mode 100644 node_modules/querystring-es3/index.js create mode 100644 node_modules/querystring-es3/package.json create mode 100644 node_modules/querystring-es3/test/common-index.js create mode 100644 node_modules/querystring-es3/test/index.js create mode 100644 node_modules/querystring-es3/test/tap-index.js create mode 100644 node_modules/querystring/.History.md.un~ create mode 100644 node_modules/querystring/.Readme.md.un~ create mode 100644 node_modules/querystring/.package.json.un~ create mode 100644 node_modules/querystring/.travis.yml create mode 100644 node_modules/querystring/History.md create mode 100644 node_modules/querystring/License.md create mode 100644 node_modules/querystring/Readme.md create mode 100644 node_modules/querystring/decode.js create mode 100644 node_modules/querystring/encode.js create mode 100644 node_modules/querystring/index.js create mode 100644 node_modules/querystring/package.json create mode 100644 node_modules/querystring/test/.index.js.un~ create mode 100644 node_modules/querystring/test/common-index.js create mode 100644 node_modules/querystring/test/index.js create mode 100644 node_modules/querystring/test/tap-index.js create mode 100755 node_modules/randomatic/LICENSE create mode 100644 node_modules/randomatic/README.md create mode 100644 node_modules/randomatic/index.js create mode 100644 node_modules/randomatic/node_modules/is-number/LICENSE create mode 100644 node_modules/randomatic/node_modules/is-number/README.md create mode 100644 node_modules/randomatic/node_modules/is-number/index.js create mode 100644 node_modules/randomatic/node_modules/is-number/node_modules/kind-of/LICENSE create mode 100644 node_modules/randomatic/node_modules/is-number/node_modules/kind-of/README.md create mode 100644 node_modules/randomatic/node_modules/is-number/node_modules/kind-of/index.js create mode 100644 node_modules/randomatic/node_modules/is-number/node_modules/kind-of/package.json create mode 100644 node_modules/randomatic/node_modules/is-number/package.json create mode 100644 node_modules/randomatic/node_modules/kind-of/LICENSE create mode 100644 node_modules/randomatic/node_modules/kind-of/README.md create mode 100644 node_modules/randomatic/node_modules/kind-of/index.js create mode 100644 node_modules/randomatic/node_modules/kind-of/package.json create mode 100644 node_modules/randomatic/package.json create mode 100644 node_modules/randombytes/.npmignore create mode 100644 node_modules/randombytes/.travis.yml create mode 100644 node_modules/randombytes/.zuul.yml create mode 100644 node_modules/randombytes/LICENSE create mode 100644 node_modules/randombytes/README.md create mode 100644 node_modules/randombytes/browser.js create mode 100644 node_modules/randombytes/index.js create mode 100644 node_modules/randombytes/package.json create mode 100644 node_modules/randombytes/test.js create mode 100644 node_modules/read-pkg-up/index.js create mode 100644 node_modules/read-pkg-up/license create mode 100644 node_modules/read-pkg-up/package.json create mode 100644 node_modules/read-pkg-up/readme.md create mode 100644 node_modules/read-pkg/index.js create mode 100644 node_modules/read-pkg/license create mode 100644 node_modules/read-pkg/package.json create mode 100644 node_modules/read-pkg/readme.md create mode 100644 node_modules/readable-stream/.npmignore create mode 100644 node_modules/readable-stream/.travis.yml create mode 100644 node_modules/readable-stream/CONTRIBUTING.md create mode 100644 node_modules/readable-stream/GOVERNANCE.md create mode 100644 node_modules/readable-stream/LICENSE create mode 100644 node_modules/readable-stream/README.md create mode 100644 node_modules/readable-stream/doc/wg-meetings/2015-01-30.md create mode 100644 node_modules/readable-stream/duplex-browser.js create mode 100644 node_modules/readable-stream/duplex.js create mode 100644 node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 node_modules/readable-stream/lib/_stream_readable.js create mode 100644 node_modules/readable-stream/lib/_stream_transform.js create mode 100644 node_modules/readable-stream/lib/_stream_writable.js create mode 100644 node_modules/readable-stream/lib/internal/streams/BufferList.js create mode 100644 node_modules/readable-stream/lib/internal/streams/destroy.js create mode 100644 node_modules/readable-stream/lib/internal/streams/stream-browser.js create mode 100644 node_modules/readable-stream/lib/internal/streams/stream.js create mode 100644 node_modules/readable-stream/package.json create mode 100644 node_modules/readable-stream/passthrough.js create mode 100644 node_modules/readable-stream/readable-browser.js create mode 100644 node_modules/readable-stream/readable.js create mode 100644 node_modules/readable-stream/transform.js create mode 100644 node_modules/readable-stream/writable-browser.js create mode 100644 node_modules/readable-stream/writable.js create mode 100644 node_modules/readdirp/.npmignore create mode 100644 node_modules/readdirp/.travis.yml create mode 100644 node_modules/readdirp/LICENSE create mode 100644 node_modules/readdirp/README.md create mode 100644 node_modules/readdirp/examples/Readme.md create mode 100644 node_modules/readdirp/examples/callback-api.js create mode 100644 node_modules/readdirp/examples/grep.js create mode 100644 node_modules/readdirp/examples/package.json create mode 100644 node_modules/readdirp/examples/stream-api-pipe.js create mode 100644 node_modules/readdirp/examples/stream-api.js create mode 100644 node_modules/readdirp/package.json create mode 100644 node_modules/readdirp/readdirp.js create mode 100644 node_modules/readdirp/stream-api.js create mode 100644 node_modules/readdirp/test/bed/root_dir1/root_dir1_file1.ext1 create mode 100644 node_modules/readdirp/test/bed/root_dir1/root_dir1_file2.ext2 create mode 100644 node_modules/readdirp/test/bed/root_dir1/root_dir1_file3.ext3 create mode 100644 node_modules/readdirp/test/bed/root_dir1/root_dir1_subdir1/root1_dir1_subdir1_file1.ext1 create mode 100644 node_modules/readdirp/test/bed/root_dir2/root_dir2_file1.ext1 create mode 100644 node_modules/readdirp/test/bed/root_dir2/root_dir2_file2.ext2 create mode 100644 node_modules/readdirp/test/bed/root_file1.ext1 create mode 100644 node_modules/readdirp/test/bed/root_file2.ext2 create mode 100644 node_modules/readdirp/test/bed/root_file3.ext3 create mode 100644 node_modules/readdirp/test/readdirp-stream.js create mode 100644 node_modules/readdirp/test/readdirp.js create mode 100644 node_modules/regenerate/LICENSE-MIT.txt create mode 100644 node_modules/regenerate/README.md create mode 100644 node_modules/regenerate/package.json create mode 100644 node_modules/regenerate/regenerate.js create mode 100644 node_modules/regenerator-runtime/.npmignore create mode 100644 node_modules/regenerator-runtime/README.md create mode 100644 node_modules/regenerator-runtime/package.json create mode 100644 node_modules/regenerator-runtime/path.js create mode 100644 node_modules/regenerator-runtime/runtime-module.js create mode 100644 node_modules/regenerator-runtime/runtime.js create mode 100644 node_modules/regenerator-transform/.npmignore create mode 100644 node_modules/regenerator-transform/README.md create mode 100644 node_modules/regenerator-transform/lib/emit.js create mode 100644 node_modules/regenerator-transform/lib/hoist.js create mode 100644 node_modules/regenerator-transform/lib/index.js create mode 100644 node_modules/regenerator-transform/lib/leap.js create mode 100644 node_modules/regenerator-transform/lib/meta.js create mode 100644 node_modules/regenerator-transform/lib/replaceShorthandObjectMethod.js create mode 100644 node_modules/regenerator-transform/lib/util.js create mode 100644 node_modules/regenerator-transform/lib/visit.js create mode 100644 node_modules/regenerator-transform/package.json create mode 100644 node_modules/regenerator-transform/src/emit.js create mode 100644 node_modules/regenerator-transform/src/hoist.js create mode 100644 node_modules/regenerator-transform/src/index.js create mode 100644 node_modules/regenerator-transform/src/leap.js create mode 100644 node_modules/regenerator-transform/src/meta.js create mode 100644 node_modules/regenerator-transform/src/replaceShorthandObjectMethod.js create mode 100644 node_modules/regenerator-transform/src/util.js create mode 100644 node_modules/regenerator-transform/src/visit.js create mode 100644 node_modules/regex-cache/LICENSE create mode 100644 node_modules/regex-cache/README.md create mode 100644 node_modules/regex-cache/index.js create mode 100644 node_modules/regex-cache/package.json create mode 100644 node_modules/regexpu-core/LICENSE-MIT.txt create mode 100644 node_modules/regexpu-core/README.md create mode 100644 node_modules/regexpu-core/data/character-class-escape-sets.js create mode 100644 node_modules/regexpu-core/data/iu-mappings.json create mode 100644 node_modules/regexpu-core/package.json create mode 100644 node_modules/regexpu-core/rewrite-pattern.js create mode 100644 node_modules/regjsgen/LICENSE.txt create mode 100644 node_modules/regjsgen/README.md create mode 100644 node_modules/regjsgen/package.json create mode 100644 node_modules/regjsgen/regjsgen.js create mode 100644 node_modules/regjsparser/CHANGELOG create mode 100644 node_modules/regjsparser/LICENSE.BSD create mode 100644 node_modules/regjsparser/README.md create mode 100755 node_modules/regjsparser/bin/parser create mode 120000 node_modules/regjsparser/node_modules/.bin/jsesc create mode 100644 node_modules/regjsparser/node_modules/jsesc/LICENSE-MIT.txt create mode 100644 node_modules/regjsparser/node_modules/jsesc/README.md create mode 100755 node_modules/regjsparser/node_modules/jsesc/bin/jsesc create mode 100644 node_modules/regjsparser/node_modules/jsesc/jsesc.js create mode 100644 node_modules/regjsparser/node_modules/jsesc/man/jsesc.1 create mode 100644 node_modules/regjsparser/node_modules/jsesc/package.json create mode 100644 node_modules/regjsparser/package.json create mode 100644 node_modules/regjsparser/parser.js create mode 100644 node_modules/remove-trailing-separator/history.md create mode 100644 node_modules/remove-trailing-separator/index.js create mode 100644 node_modules/remove-trailing-separator/license create mode 100644 node_modules/remove-trailing-separator/package.json create mode 100644 node_modules/remove-trailing-separator/readme.md create mode 100644 node_modules/repeat-element/LICENSE create mode 100644 node_modules/repeat-element/README.md create mode 100644 node_modules/repeat-element/index.js create mode 100644 node_modules/repeat-element/package.json create mode 100644 node_modules/repeat-string/LICENSE create mode 100644 node_modules/repeat-string/README.md create mode 100644 node_modules/repeat-string/index.js create mode 100644 node_modules/repeat-string/package.json create mode 100644 node_modules/repeating/index.js create mode 100644 node_modules/repeating/license create mode 100644 node_modules/repeating/package.json create mode 100644 node_modules/repeating/readme.md create mode 100644 node_modules/require-directory/.jshintrc create mode 100644 node_modules/require-directory/.npmignore create mode 100644 node_modules/require-directory/.travis.yml create mode 100644 node_modules/require-directory/LICENSE create mode 100644 node_modules/require-directory/README.markdown create mode 100644 node_modules/require-directory/index.js create mode 100644 node_modules/require-directory/package.json create mode 100644 node_modules/require-main-filename/.npmignore create mode 100644 node_modules/require-main-filename/.travis.yml create mode 100644 node_modules/require-main-filename/LICENSE.txt create mode 100644 node_modules/require-main-filename/README.md create mode 100644 node_modules/require-main-filename/index.js create mode 100644 node_modules/require-main-filename/package.json create mode 100644 node_modules/require-main-filename/test.js create mode 100644 node_modules/requires-port/.npmignore create mode 100644 node_modules/requires-port/.travis.yml create mode 100644 node_modules/requires-port/LICENSE create mode 100644 node_modules/requires-port/README.md create mode 100644 node_modules/requires-port/index.js create mode 100644 node_modules/requires-port/package.json create mode 100644 node_modules/requires-port/test.js create mode 100644 node_modules/right-align/LICENSE create mode 100644 node_modules/right-align/README.md create mode 100644 node_modules/right-align/index.js create mode 100644 node_modules/right-align/package.json create mode 100644 node_modules/ripemd160/CHANGELOG.md create mode 100644 node_modules/ripemd160/LICENSE.md create mode 100644 node_modules/ripemd160/README.md create mode 100644 node_modules/ripemd160/index.js create mode 100644 node_modules/ripemd160/package.json create mode 100644 node_modules/safe-buffer/.travis.yml create mode 100644 node_modules/safe-buffer/LICENSE create mode 100644 node_modules/safe-buffer/README.md create mode 100644 node_modules/safe-buffer/index.js create mode 100644 node_modules/safe-buffer/package.json create mode 100644 node_modules/safe-buffer/test.js create mode 100644 node_modules/semver/LICENSE create mode 100644 node_modules/semver/README.md create mode 100755 node_modules/semver/bin/semver create mode 100644 node_modules/semver/package.json create mode 100644 node_modules/semver/range.bnf create mode 100644 node_modules/semver/semver.js create mode 100644 node_modules/set-blocking/CHANGELOG.md create mode 100644 node_modules/set-blocking/LICENSE.txt create mode 100644 node_modules/set-blocking/README.md create mode 100644 node_modules/set-blocking/index.js create mode 100644 node_modules/set-blocking/package.json create mode 100644 node_modules/set-immediate-shim/index.js create mode 100644 node_modules/set-immediate-shim/package.json create mode 100644 node_modules/set-immediate-shim/readme.md create mode 100644 node_modules/setimmediate/LICENSE.txt create mode 100644 node_modules/setimmediate/package.json create mode 100644 node_modules/setimmediate/setImmediate.js create mode 100644 node_modules/sha.js/.npmignore create mode 100644 node_modules/sha.js/.travis.yml create mode 100644 node_modules/sha.js/LICENSE create mode 100644 node_modules/sha.js/README.md create mode 100755 node_modules/sha.js/bin.js create mode 100644 node_modules/sha.js/hash.js create mode 100644 node_modules/sha.js/hexpp.js create mode 100644 node_modules/sha.js/index.js create mode 100644 node_modules/sha.js/package.json create mode 100644 node_modules/sha.js/sha.js create mode 100644 node_modules/sha.js/sha1.js create mode 100644 node_modules/sha.js/sha224.js create mode 100644 node_modules/sha.js/sha256.js create mode 100644 node_modules/sha.js/sha384.js create mode 100644 node_modules/sha.js/sha512.js create mode 100644 node_modules/sha.js/test/hash.js create mode 100644 node_modules/sha.js/test/test.js create mode 100644 node_modules/sha.js/test/vectors.js create mode 100644 node_modules/shebang-command/index.js create mode 100644 node_modules/shebang-command/license create mode 100644 node_modules/shebang-command/package.json create mode 100644 node_modules/shebang-command/readme.md create mode 100644 node_modules/shebang-regex/index.js create mode 100644 node_modules/shebang-regex/license create mode 100644 node_modules/shebang-regex/package.json create mode 100644 node_modules/shebang-regex/readme.md create mode 100644 node_modules/signal-exit/CHANGELOG.md create mode 100644 node_modules/signal-exit/LICENSE.txt create mode 100644 node_modules/signal-exit/README.md create mode 100644 node_modules/signal-exit/index.js create mode 100644 node_modules/signal-exit/package.json create mode 100644 node_modules/signal-exit/signals.js create mode 100644 node_modules/slash/index.js create mode 100644 node_modules/slash/package.json create mode 100644 node_modules/slash/readme.md create mode 100644 node_modules/source-list-map/README.md create mode 100644 node_modules/source-list-map/lib/CodeNode.js create mode 100644 node_modules/source-list-map/lib/MappingsContext.js create mode 100644 node_modules/source-list-map/lib/SingleLineNode.js create mode 100644 node_modules/source-list-map/lib/SourceListMap.js create mode 100644 node_modules/source-list-map/lib/SourceNode.js create mode 100644 node_modules/source-list-map/lib/base64-vlq.js create mode 100644 node_modules/source-list-map/lib/fromStringWithSourceMap.js create mode 100644 node_modules/source-list-map/lib/helpers.js create mode 100644 node_modules/source-list-map/lib/index.js create mode 100644 node_modules/source-list-map/package.json create mode 100644 node_modules/source-map-support/LICENSE.md create mode 100644 node_modules/source-map-support/README.md create mode 100644 node_modules/source-map-support/browser-source-map-support.js create mode 100644 node_modules/source-map-support/package.json create mode 100644 node_modules/source-map-support/register.js create mode 100644 node_modules/source-map-support/source-map-support.js create mode 100644 node_modules/source-map/CHANGELOG.md create mode 100644 node_modules/source-map/LICENSE create mode 100644 node_modules/source-map/README.md create mode 100644 node_modules/source-map/dist/source-map.debug.js create mode 100644 node_modules/source-map/dist/source-map.js create mode 100644 node_modules/source-map/dist/source-map.min.js create mode 100644 node_modules/source-map/dist/source-map.min.js.map create mode 100644 node_modules/source-map/lib/array-set.js create mode 100644 node_modules/source-map/lib/base64-vlq.js create mode 100644 node_modules/source-map/lib/base64.js create mode 100644 node_modules/source-map/lib/binary-search.js create mode 100644 node_modules/source-map/lib/mapping-list.js create mode 100644 node_modules/source-map/lib/quick-sort.js create mode 100644 node_modules/source-map/lib/source-map-consumer.js create mode 100644 node_modules/source-map/lib/source-map-generator.js create mode 100644 node_modules/source-map/lib/source-node.js create mode 100644 node_modules/source-map/lib/util.js create mode 100644 node_modules/source-map/package.json create mode 100644 node_modules/source-map/source-map.js create mode 100644 node_modules/spdx-correct/LICENSE create mode 100644 node_modules/spdx-correct/README.md create mode 100644 node_modules/spdx-correct/index.js create mode 100644 node_modules/spdx-correct/package.json create mode 100644 node_modules/spdx-expression-parse/AUTHORS create mode 100644 node_modules/spdx-expression-parse/LICENSE create mode 100644 node_modules/spdx-expression-parse/README.md create mode 100644 node_modules/spdx-expression-parse/index.js create mode 100644 node_modules/spdx-expression-parse/package.json create mode 100644 node_modules/spdx-expression-parse/parser.js create mode 100644 node_modules/spdx-license-ids/LICENSE create mode 100755 node_modules/spdx-license-ids/README.md create mode 100644 node_modules/spdx-license-ids/package.json create mode 100644 node_modules/spdx-license-ids/spdx-license-ids.json create mode 100644 node_modules/stream-browserify/.npmignore create mode 100644 node_modules/stream-browserify/.travis.yml create mode 100644 node_modules/stream-browserify/LICENSE create mode 100644 node_modules/stream-browserify/index.js create mode 100644 node_modules/stream-browserify/package.json create mode 100644 node_modules/stream-browserify/readme.markdown create mode 100644 node_modules/stream-browserify/test/buf.js create mode 100644 node_modules/stream-http/.npmignore create mode 100644 node_modules/stream-http/.travis.yml create mode 100644 node_modules/stream-http/.zuul.yml create mode 100644 node_modules/stream-http/LICENSE create mode 100644 node_modules/stream-http/README.md create mode 100644 node_modules/stream-http/ie8-polyfill.js create mode 100644 node_modules/stream-http/index.js create mode 100644 node_modules/stream-http/lib/capability.js create mode 100644 node_modules/stream-http/lib/request.js create mode 100644 node_modules/stream-http/lib/response.js create mode 100644 node_modules/stream-http/package.json create mode 100644 node_modules/stream-http/test/browser/abort.js create mode 100644 node_modules/stream-http/test/browser/auth.js create mode 100644 node_modules/stream-http/test/browser/binary-streaming.js create mode 100644 node_modules/stream-http/test/browser/binary.js create mode 100644 node_modules/stream-http/test/browser/body-empty.js create mode 100644 node_modules/stream-http/test/browser/cookie.js create mode 100644 node_modules/stream-http/test/browser/disable-fetch.js create mode 100644 node_modules/stream-http/test/browser/error.js.disabled create mode 100644 node_modules/stream-http/test/browser/headers.js create mode 100644 node_modules/stream-http/test/browser/lib/webworker-worker.js create mode 100644 node_modules/stream-http/test/browser/package.json create mode 100644 node_modules/stream-http/test/browser/post-binary.js create mode 100644 node_modules/stream-http/test/browser/post-text.js create mode 100644 node_modules/stream-http/test/browser/text-streaming.js create mode 100644 node_modules/stream-http/test/browser/text.js create mode 100644 node_modules/stream-http/test/browser/timeout.js.disabled create mode 100644 node_modules/stream-http/test/browser/webworker.js create mode 100644 node_modules/stream-http/test/node/http-browserify.js create mode 100644 node_modules/stream-http/test/server/index.js create mode 100644 node_modules/stream-http/test/server/static/basic.txt create mode 100644 node_modules/stream-http/test/server/static/browserify.png create mode 100644 node_modules/stream-http/test/server/static/test-polyfill.js create mode 100644 node_modules/string-width/index.js create mode 100644 node_modules/string-width/license create mode 100644 node_modules/string-width/node_modules/ansi-regex/index.js create mode 100644 node_modules/string-width/node_modules/ansi-regex/license create mode 100644 node_modules/string-width/node_modules/ansi-regex/package.json create mode 100644 node_modules/string-width/node_modules/ansi-regex/readme.md create mode 100644 node_modules/string-width/node_modules/is-fullwidth-code-point/index.js create mode 100644 node_modules/string-width/node_modules/is-fullwidth-code-point/license create mode 100644 node_modules/string-width/node_modules/is-fullwidth-code-point/package.json create mode 100644 node_modules/string-width/node_modules/is-fullwidth-code-point/readme.md create mode 100644 node_modules/string-width/node_modules/strip-ansi/index.js create mode 100644 node_modules/string-width/node_modules/strip-ansi/license create mode 100644 node_modules/string-width/node_modules/strip-ansi/package.json create mode 100644 node_modules/string-width/node_modules/strip-ansi/readme.md create mode 100644 node_modules/string-width/package.json create mode 100644 node_modules/string-width/readme.md create mode 100644 node_modules/string_decoder/.npmignore create mode 100644 node_modules/string_decoder/LICENSE create mode 100644 node_modules/string_decoder/README.md create mode 100644 node_modules/string_decoder/lib/string_decoder.js create mode 100644 node_modules/string_decoder/package.json create mode 100644 node_modules/strip-ansi/index.js create mode 100644 node_modules/strip-ansi/license create mode 100644 node_modules/strip-ansi/package.json create mode 100644 node_modules/strip-ansi/readme.md create mode 100644 node_modules/strip-bom/index.js create mode 100644 node_modules/strip-bom/license create mode 100644 node_modules/strip-bom/package.json create mode 100644 node_modules/strip-bom/readme.md create mode 100644 node_modules/strip-eof/index.js create mode 100644 node_modules/strip-eof/license create mode 100644 node_modules/strip-eof/package.json create mode 100644 node_modules/strip-eof/readme.md create mode 100644 node_modules/supports-color/index.js create mode 100644 node_modules/supports-color/license create mode 100644 node_modules/supports-color/package.json create mode 100644 node_modules/supports-color/readme.md create mode 100644 node_modules/tapable/README.md create mode 100644 node_modules/tapable/lib/Tapable.js create mode 100644 node_modules/tapable/package.json create mode 100644 node_modules/timers-browserify/.npmignore create mode 100644 node_modules/timers-browserify/CHANGELOG.md create mode 100644 node_modules/timers-browserify/LICENSE.md create mode 100644 node_modules/timers-browserify/README.md create mode 100644 node_modules/timers-browserify/main.js create mode 100644 node_modules/timers-browserify/package.json create mode 100644 node_modules/to-arraybuffer/.npmignore create mode 100644 node_modules/to-arraybuffer/.travis.yml create mode 100644 node_modules/to-arraybuffer/.zuul.yml create mode 100644 node_modules/to-arraybuffer/LICENSE create mode 100644 node_modules/to-arraybuffer/README.md create mode 100644 node_modules/to-arraybuffer/index.js create mode 100644 node_modules/to-arraybuffer/package.json create mode 100644 node_modules/to-arraybuffer/test.js create mode 100644 node_modules/to-fast-properties/index.js create mode 100644 node_modules/to-fast-properties/license create mode 100644 node_modules/to-fast-properties/package.json create mode 100644 node_modules/to-fast-properties/readme.md create mode 100644 node_modules/trim-right/index.js create mode 100644 node_modules/trim-right/license create mode 100644 node_modules/trim-right/package.json create mode 100644 node_modules/trim-right/readme.md create mode 100644 node_modules/tty-browserify/LICENSE create mode 100644 node_modules/tty-browserify/index.js create mode 100644 node_modules/tty-browserify/package.json create mode 100644 node_modules/tty-browserify/readme.markdown create mode 100644 node_modules/uglify-js/LICENSE create mode 100644 node_modules/uglify-js/README.md create mode 100644 node_modules/uglify-js/bin/extract-props.js create mode 100755 node_modules/uglify-js/bin/uglifyjs create mode 100644 node_modules/uglify-js/lib/ast.js create mode 100644 node_modules/uglify-js/lib/compress.js create mode 100644 node_modules/uglify-js/lib/mozilla-ast.js create mode 100644 node_modules/uglify-js/lib/output.js create mode 100644 node_modules/uglify-js/lib/parse.js create mode 100644 node_modules/uglify-js/lib/propmangle.js create mode 100644 node_modules/uglify-js/lib/scope.js create mode 100644 node_modules/uglify-js/lib/sourcemap.js create mode 100644 node_modules/uglify-js/lib/transform.js create mode 100644 node_modules/uglify-js/lib/utils.js create mode 100644 node_modules/uglify-js/node_modules/yargs/CHANGELOG.md create mode 100644 node_modules/uglify-js/node_modules/yargs/LICENSE create mode 100644 node_modules/uglify-js/node_modules/yargs/README.md create mode 100644 node_modules/uglify-js/node_modules/yargs/completion.sh.hbs create mode 100644 node_modules/uglify-js/node_modules/yargs/index.js create mode 100644 node_modules/uglify-js/node_modules/yargs/lib/completion.js create mode 100644 node_modules/uglify-js/node_modules/yargs/lib/parser.js create mode 100644 node_modules/uglify-js/node_modules/yargs/lib/usage.js create mode 100644 node_modules/uglify-js/node_modules/yargs/lib/validation.js create mode 100644 node_modules/uglify-js/node_modules/yargs/package.json create mode 100644 node_modules/uglify-js/package.json create mode 100644 node_modules/uglify-js/tools/domprops.json create mode 100644 node_modules/uglify-js/tools/exports.js create mode 100644 node_modules/uglify-js/tools/node.js create mode 100644 node_modules/uglify-js/tools/props.html create mode 100644 node_modules/uglify-to-browserify/.npmignore create mode 100644 node_modules/uglify-to-browserify/.travis.yml create mode 100644 node_modules/uglify-to-browserify/LICENSE create mode 100644 node_modules/uglify-to-browserify/README.md create mode 100644 node_modules/uglify-to-browserify/index.js create mode 100644 node_modules/uglify-to-browserify/package.json create mode 100644 node_modules/uglify-to-browserify/test/index.js create mode 100644 node_modules/uglifyjs-webpack-plugin/CHANGELOG.md create mode 100644 node_modules/uglifyjs-webpack-plugin/LICENSE create mode 100644 node_modules/uglifyjs-webpack-plugin/README.md create mode 100644 node_modules/uglifyjs-webpack-plugin/dist/index.js create mode 100644 node_modules/uglifyjs-webpack-plugin/lib/post_install.js create mode 100644 node_modules/uglifyjs-webpack-plugin/package.json create mode 100644 node_modules/union/.npmignore create mode 100644 node_modules/union/.travis.yml create mode 100644 node_modules/union/CHANGELOG.md create mode 100644 node_modules/union/LICENSE create mode 100644 node_modules/union/README.md create mode 100644 node_modules/union/examples/after/index.js create mode 100644 node_modules/union/examples/simple/favicon.png create mode 100644 node_modules/union/examples/simple/middleware/favicon.js create mode 100644 node_modules/union/examples/simple/middleware/gzip-decode.js create mode 100644 node_modules/union/examples/simple/middleware/gzip-encode.js create mode 100644 node_modules/union/examples/simple/simple.js create mode 100644 node_modules/union/examples/simple/spdy.js create mode 100644 node_modules/union/examples/socketio/README create mode 100644 node_modules/union/examples/socketio/index.html create mode 100644 node_modules/union/examples/socketio/server.js create mode 100644 node_modules/union/lib/buffered-stream.js create mode 100644 node_modules/union/lib/core.js create mode 100644 node_modules/union/lib/http-stream.js create mode 100644 node_modules/union/lib/index.js create mode 100644 node_modules/union/lib/request-stream.js create mode 100644 node_modules/union/lib/response-stream.js create mode 100644 node_modules/union/lib/routing-stream.js create mode 100644 node_modules/union/package.json create mode 100644 node_modules/union/test/after-test.js create mode 100644 node_modules/union/test/body-parser-test.js create mode 100644 node_modules/union/test/double-write-test.js create mode 100644 node_modules/union/test/ecstatic-test.js create mode 100644 node_modules/union/test/fixtures/index.js create mode 100644 node_modules/union/test/fixtures/static/some-file.txt create mode 100644 node_modules/union/test/header-test.js create mode 100644 node_modules/union/test/helpers/index.js create mode 100644 node_modules/union/test/helpers/macros.js create mode 100644 node_modules/union/test/prop-test.js create mode 100644 node_modules/union/test/simple-test.js create mode 100644 node_modules/union/test/status-code-test.js create mode 100644 node_modules/union/test/streaming-test.js create mode 100644 node_modules/union/union.png create mode 100644 node_modules/url-join/.npmignore create mode 100644 node_modules/url-join/.travis.yml create mode 100644 node_modules/url-join/LICENSE create mode 100644 node_modules/url-join/README.md create mode 100644 node_modules/url-join/bower.json create mode 100644 node_modules/url-join/lib/url-join.js create mode 100644 node_modules/url-join/package.json create mode 100644 node_modules/url-join/test/tests.js create mode 100644 node_modules/url/.npmignore create mode 100644 node_modules/url/.travis.yml create mode 100644 node_modules/url/.zuul.yml create mode 100644 node_modules/url/LICENSE create mode 100644 node_modules/url/README.md create mode 100644 node_modules/url/node_modules/punycode/LICENSE-MIT.txt create mode 100644 node_modules/url/node_modules/punycode/README.md create mode 100644 node_modules/url/node_modules/punycode/package.json create mode 100644 node_modules/url/node_modules/punycode/punycode.js create mode 100644 node_modules/url/package.json create mode 100644 node_modules/url/test.js create mode 100644 node_modules/url/url.js create mode 100644 node_modules/url/util.js create mode 100755 node_modules/user-home/cli.js create mode 100644 node_modules/user-home/index.js create mode 100644 node_modules/user-home/license create mode 100644 node_modules/user-home/package.json create mode 100644 node_modules/user-home/readme.md create mode 100644 node_modules/util-deprecate/History.md create mode 100644 node_modules/util-deprecate/LICENSE create mode 100644 node_modules/util-deprecate/README.md create mode 100644 node_modules/util-deprecate/browser.js create mode 100644 node_modules/util-deprecate/node.js create mode 100644 node_modules/util-deprecate/package.json create mode 100644 node_modules/util/.npmignore create mode 100644 node_modules/util/.travis.yml create mode 100644 node_modules/util/.zuul.yml create mode 100644 node_modules/util/LICENSE create mode 100644 node_modules/util/README.md create mode 100644 node_modules/util/node_modules/inherits/LICENSE create mode 100644 node_modules/util/node_modules/inherits/README.md create mode 100644 node_modules/util/node_modules/inherits/inherits.js create mode 100644 node_modules/util/node_modules/inherits/inherits_browser.js create mode 100644 node_modules/util/node_modules/inherits/package.json create mode 100644 node_modules/util/node_modules/inherits/test.js create mode 100644 node_modules/util/package.json create mode 100644 node_modules/util/support/isBuffer.js create mode 100644 node_modules/util/support/isBufferBrowser.js create mode 100644 node_modules/util/test/browser/inspect.js create mode 100644 node_modules/util/test/browser/is.js create mode 100644 node_modules/util/test/node/debug.js create mode 100644 node_modules/util/test/node/format.js create mode 100644 node_modules/util/test/node/inspect.js create mode 100644 node_modules/util/test/node/log.js create mode 100644 node_modules/util/test/node/util.js create mode 100644 node_modules/util/util.js create mode 100644 node_modules/v8flags/.npmignore create mode 100644 node_modules/v8flags/LICENSE create mode 100644 node_modules/v8flags/README.md create mode 100644 node_modules/v8flags/index.js create mode 100644 node_modules/v8flags/package.json create mode 100644 node_modules/validate-npm-package-license/LICENSE create mode 100644 node_modules/validate-npm-package-license/README.md create mode 100644 node_modules/validate-npm-package-license/index.js create mode 100644 node_modules/validate-npm-package-license/package.json create mode 100644 node_modules/vm-browserify/LICENSE create mode 100644 node_modules/vm-browserify/example/run/bundle.js create mode 100644 node_modules/vm-browserify/example/run/entry.js create mode 100644 node_modules/vm-browserify/example/run/index.html create mode 100644 node_modules/vm-browserify/example/run/server.js create mode 100644 node_modules/vm-browserify/index.js create mode 100644 node_modules/vm-browserify/package.json create mode 100644 node_modules/vm-browserify/readme.markdown create mode 100644 node_modules/vm-browserify/test/vm.js create mode 100644 node_modules/watchpack/LICENSE create mode 100644 node_modules/watchpack/README.md create mode 100644 node_modules/watchpack/lib/DirectoryWatcher.js create mode 100644 node_modules/watchpack/lib/watcherManager.js create mode 100644 node_modules/watchpack/lib/watchpack.js create mode 100644 node_modules/watchpack/node_modules/async/CHANGELOG.md create mode 100644 node_modules/watchpack/node_modules/async/LICENSE create mode 100644 node_modules/watchpack/node_modules/async/README.md create mode 100644 node_modules/watchpack/node_modules/async/apply.js create mode 100644 node_modules/watchpack/node_modules/async/applyEach.js create mode 100644 node_modules/watchpack/node_modules/async/applyEachSeries.js create mode 100644 node_modules/watchpack/node_modules/async/asyncify.js create mode 100644 node_modules/watchpack/node_modules/async/auto.js create mode 100644 node_modules/watchpack/node_modules/async/autoInject.js create mode 100644 node_modules/watchpack/node_modules/async/bower.json create mode 100644 node_modules/watchpack/node_modules/async/cargo.js create mode 100644 node_modules/watchpack/node_modules/async/compose.js create mode 100644 node_modules/watchpack/node_modules/async/concat.js create mode 100644 node_modules/watchpack/node_modules/async/concatLimit.js create mode 100644 node_modules/watchpack/node_modules/async/concatSeries.js create mode 100644 node_modules/watchpack/node_modules/async/constant.js create mode 100644 node_modules/watchpack/node_modules/async/detect.js create mode 100644 node_modules/watchpack/node_modules/async/detectLimit.js create mode 100644 node_modules/watchpack/node_modules/async/detectSeries.js create mode 100644 node_modules/watchpack/node_modules/async/dir.js create mode 100644 node_modules/watchpack/node_modules/async/dist/async.js create mode 100644 node_modules/watchpack/node_modules/async/dist/async.min.js create mode 100644 node_modules/watchpack/node_modules/async/doDuring.js create mode 100644 node_modules/watchpack/node_modules/async/doUntil.js create mode 100644 node_modules/watchpack/node_modules/async/doWhilst.js create mode 100644 node_modules/watchpack/node_modules/async/during.js create mode 100644 node_modules/watchpack/node_modules/async/each.js create mode 100644 node_modules/watchpack/node_modules/async/eachLimit.js create mode 100644 node_modules/watchpack/node_modules/async/eachOf.js create mode 100644 node_modules/watchpack/node_modules/async/eachOfLimit.js create mode 100644 node_modules/watchpack/node_modules/async/eachOfSeries.js create mode 100644 node_modules/watchpack/node_modules/async/eachSeries.js create mode 100644 node_modules/watchpack/node_modules/async/ensureAsync.js create mode 100644 node_modules/watchpack/node_modules/async/every.js create mode 100644 node_modules/watchpack/node_modules/async/everyLimit.js create mode 100644 node_modules/watchpack/node_modules/async/everySeries.js create mode 100644 node_modules/watchpack/node_modules/async/filter.js create mode 100644 node_modules/watchpack/node_modules/async/filterLimit.js create mode 100644 node_modules/watchpack/node_modules/async/filterSeries.js create mode 100644 node_modules/watchpack/node_modules/async/forever.js create mode 100644 node_modules/watchpack/node_modules/async/groupBy.js create mode 100644 node_modules/watchpack/node_modules/async/groupByLimit.js create mode 100644 node_modules/watchpack/node_modules/async/groupBySeries.js create mode 100644 node_modules/watchpack/node_modules/async/index.js create mode 100644 node_modules/watchpack/node_modules/async/internal/DoublyLinkedList.js create mode 100644 node_modules/watchpack/node_modules/async/internal/applyEach.js create mode 100644 node_modules/watchpack/node_modules/async/internal/breakLoop.js create mode 100644 node_modules/watchpack/node_modules/async/internal/consoleFunc.js create mode 100644 node_modules/watchpack/node_modules/async/internal/createTester.js create mode 100644 node_modules/watchpack/node_modules/async/internal/doLimit.js create mode 100644 node_modules/watchpack/node_modules/async/internal/doParallel.js create mode 100644 node_modules/watchpack/node_modules/async/internal/doParallelLimit.js create mode 100644 node_modules/watchpack/node_modules/async/internal/eachOfLimit.js create mode 100644 node_modules/watchpack/node_modules/async/internal/filter.js create mode 100644 node_modules/watchpack/node_modules/async/internal/findGetResult.js create mode 100644 node_modules/watchpack/node_modules/async/internal/getIterator.js create mode 100644 node_modules/watchpack/node_modules/async/internal/initialParams.js create mode 100644 node_modules/watchpack/node_modules/async/internal/iterator.js create mode 100644 node_modules/watchpack/node_modules/async/internal/map.js create mode 100644 node_modules/watchpack/node_modules/async/internal/notId.js create mode 100644 node_modules/watchpack/node_modules/async/internal/once.js create mode 100644 node_modules/watchpack/node_modules/async/internal/onlyOnce.js create mode 100644 node_modules/watchpack/node_modules/async/internal/parallel.js create mode 100644 node_modules/watchpack/node_modules/async/internal/queue.js create mode 100644 node_modules/watchpack/node_modules/async/internal/reject.js create mode 100644 node_modules/watchpack/node_modules/async/internal/setImmediate.js create mode 100644 node_modules/watchpack/node_modules/async/internal/slice.js create mode 100644 node_modules/watchpack/node_modules/async/internal/withoutIndex.js create mode 100644 node_modules/watchpack/node_modules/async/internal/wrapAsync.js create mode 100644 node_modules/watchpack/node_modules/async/log.js create mode 100644 node_modules/watchpack/node_modules/async/map.js create mode 100644 node_modules/watchpack/node_modules/async/mapLimit.js create mode 100644 node_modules/watchpack/node_modules/async/mapSeries.js create mode 100644 node_modules/watchpack/node_modules/async/mapValues.js create mode 100644 node_modules/watchpack/node_modules/async/mapValuesLimit.js create mode 100644 node_modules/watchpack/node_modules/async/mapValuesSeries.js create mode 100644 node_modules/watchpack/node_modules/async/memoize.js create mode 100644 node_modules/watchpack/node_modules/async/nextTick.js create mode 100644 node_modules/watchpack/node_modules/async/package.json create mode 100644 node_modules/watchpack/node_modules/async/parallel.js create mode 100644 node_modules/watchpack/node_modules/async/parallelLimit.js create mode 100644 node_modules/watchpack/node_modules/async/priorityQueue.js create mode 100644 node_modules/watchpack/node_modules/async/queue.js create mode 100644 node_modules/watchpack/node_modules/async/race.js create mode 100644 node_modules/watchpack/node_modules/async/reduce.js create mode 100644 node_modules/watchpack/node_modules/async/reduceRight.js create mode 100644 node_modules/watchpack/node_modules/async/reflect.js create mode 100644 node_modules/watchpack/node_modules/async/reflectAll.js create mode 100644 node_modules/watchpack/node_modules/async/reject.js create mode 100644 node_modules/watchpack/node_modules/async/rejectLimit.js create mode 100644 node_modules/watchpack/node_modules/async/rejectSeries.js create mode 100644 node_modules/watchpack/node_modules/async/retry.js create mode 100644 node_modules/watchpack/node_modules/async/retryable.js create mode 100644 node_modules/watchpack/node_modules/async/seq.js create mode 100644 node_modules/watchpack/node_modules/async/series.js create mode 100644 node_modules/watchpack/node_modules/async/setImmediate.js create mode 100644 node_modules/watchpack/node_modules/async/some.js create mode 100644 node_modules/watchpack/node_modules/async/someLimit.js create mode 100644 node_modules/watchpack/node_modules/async/someSeries.js create mode 100644 node_modules/watchpack/node_modules/async/sortBy.js create mode 100644 node_modules/watchpack/node_modules/async/timeout.js create mode 100644 node_modules/watchpack/node_modules/async/times.js create mode 100644 node_modules/watchpack/node_modules/async/timesLimit.js create mode 100644 node_modules/watchpack/node_modules/async/timesSeries.js create mode 100644 node_modules/watchpack/node_modules/async/transform.js create mode 100644 node_modules/watchpack/node_modules/async/tryEach.js create mode 100644 node_modules/watchpack/node_modules/async/unmemoize.js create mode 100644 node_modules/watchpack/node_modules/async/until.js create mode 100644 node_modules/watchpack/node_modules/async/waterfall.js create mode 100644 node_modules/watchpack/node_modules/async/whilst.js create mode 100644 node_modules/watchpack/package.json create mode 100644 node_modules/webpack-sources/README.md create mode 100644 node_modules/webpack-sources/lib/CachedSource.js create mode 100644 node_modules/webpack-sources/lib/ConcatSource.js create mode 100644 node_modules/webpack-sources/lib/LineToLineMappedSource.js create mode 100644 node_modules/webpack-sources/lib/OriginalSource.js create mode 100644 node_modules/webpack-sources/lib/PrefixSource.js create mode 100644 node_modules/webpack-sources/lib/RawSource.js create mode 100644 node_modules/webpack-sources/lib/ReplaceSource.js create mode 100644 node_modules/webpack-sources/lib/Source.js create mode 100644 node_modules/webpack-sources/lib/SourceAndMapMixin.js create mode 100644 node_modules/webpack-sources/lib/SourceMapSource.js create mode 100644 node_modules/webpack-sources/lib/index.js create mode 100644 node_modules/webpack-sources/package.json create mode 100644 node_modules/webpack/LICENSE create mode 100644 node_modules/webpack/README.md create mode 100644 node_modules/webpack/bin/config-optimist.js create mode 100644 node_modules/webpack/bin/config-yargs.js create mode 100644 node_modules/webpack/bin/convert-argv.js create mode 100755 node_modules/webpack/bin/webpack.js create mode 100644 node_modules/webpack/buildin/.eslintrc create mode 100644 node_modules/webpack/buildin/amd-define.js create mode 100644 node_modules/webpack/buildin/amd-options.js create mode 100644 node_modules/webpack/buildin/global.js create mode 100644 node_modules/webpack/buildin/harmony-module.js create mode 100644 node_modules/webpack/buildin/module.js create mode 100644 node_modules/webpack/buildin/system.js create mode 100644 node_modules/webpack/hot/.eslintrc create mode 100644 node_modules/webpack/hot/dev-server.js create mode 100644 node_modules/webpack/hot/emitter.js create mode 100644 node_modules/webpack/hot/log-apply-result.js create mode 100644 node_modules/webpack/hot/log.js create mode 100644 node_modules/webpack/hot/only-dev-server.js create mode 100644 node_modules/webpack/hot/poll.js create mode 100644 node_modules/webpack/hot/signal.js create mode 100644 node_modules/webpack/lib/APIPlugin.js create mode 100644 node_modules/webpack/lib/AmdMainTemplatePlugin.js create mode 100644 node_modules/webpack/lib/AsyncDependenciesBlock.js create mode 100644 node_modules/webpack/lib/AutomaticPrefetchPlugin.js create mode 100644 node_modules/webpack/lib/BannerPlugin.js create mode 100644 node_modules/webpack/lib/BasicEvaluatedExpression.js create mode 100644 node_modules/webpack/lib/CachePlugin.js create mode 100644 node_modules/webpack/lib/CaseSensitiveModulesWarning.js create mode 100644 node_modules/webpack/lib/Chunk.js create mode 100644 node_modules/webpack/lib/ChunkRenderError.js create mode 100644 node_modules/webpack/lib/ChunkTemplate.js create mode 100644 node_modules/webpack/lib/CompatibilityPlugin.js create mode 100644 node_modules/webpack/lib/Compilation.js create mode 100644 node_modules/webpack/lib/Compiler.js create mode 100644 node_modules/webpack/lib/ConstPlugin.js create mode 100644 node_modules/webpack/lib/ContextModule.js create mode 100644 node_modules/webpack/lib/ContextModuleFactory.js create mode 100644 node_modules/webpack/lib/ContextReplacementPlugin.js create mode 100644 node_modules/webpack/lib/DefinePlugin.js create mode 100644 node_modules/webpack/lib/DelegatedModule.js create mode 100644 node_modules/webpack/lib/DelegatedModuleFactoryPlugin.js create mode 100644 node_modules/webpack/lib/DelegatedPlugin.js create mode 100644 node_modules/webpack/lib/DependenciesBlock.js create mode 100644 node_modules/webpack/lib/DependenciesBlockVariable.js create mode 100644 node_modules/webpack/lib/Dependency.js create mode 100644 node_modules/webpack/lib/DllEntryPlugin.js create mode 100644 node_modules/webpack/lib/DllModule.js create mode 100644 node_modules/webpack/lib/DllModuleFactory.js create mode 100644 node_modules/webpack/lib/DllPlugin.js create mode 100644 node_modules/webpack/lib/DllReferencePlugin.js create mode 100644 node_modules/webpack/lib/DynamicEntryPlugin.js create mode 100644 node_modules/webpack/lib/EntryModuleNotFoundError.js create mode 100644 node_modules/webpack/lib/EntryOptionPlugin.js create mode 100644 node_modules/webpack/lib/Entrypoint.js create mode 100644 node_modules/webpack/lib/EnvironmentPlugin.js create mode 100644 node_modules/webpack/lib/ErrorHelpers.js create mode 100644 node_modules/webpack/lib/EvalDevToolModulePlugin.js create mode 100644 node_modules/webpack/lib/EvalDevToolModuleTemplatePlugin.js create mode 100644 node_modules/webpack/lib/EvalSourceMapDevToolModuleTemplatePlugin.js create mode 100644 node_modules/webpack/lib/EvalSourceMapDevToolPlugin.js create mode 100644 node_modules/webpack/lib/ExportPropertyMainTemplatePlugin.js create mode 100644 node_modules/webpack/lib/ExtendedAPIPlugin.js create mode 100644 node_modules/webpack/lib/ExternalModule.js create mode 100644 node_modules/webpack/lib/ExternalModuleFactoryPlugin.js create mode 100644 node_modules/webpack/lib/ExternalsPlugin.js create mode 100644 node_modules/webpack/lib/FlagDependencyExportsPlugin.js create mode 100644 node_modules/webpack/lib/FlagDependencyUsagePlugin.js create mode 100644 node_modules/webpack/lib/FlagInitialModulesAsUsedPlugin.js create mode 100644 node_modules/webpack/lib/FunctionModulePlugin.js create mode 100644 node_modules/webpack/lib/FunctionModuleTemplatePlugin.js create mode 100644 node_modules/webpack/lib/HashedModuleIdsPlugin.js create mode 100644 node_modules/webpack/lib/HotModuleReplacement.runtime.js create mode 100644 node_modules/webpack/lib/HotModuleReplacementPlugin.js create mode 100644 node_modules/webpack/lib/HotUpdateChunkTemplate.js create mode 100644 node_modules/webpack/lib/IgnorePlugin.js create mode 100644 node_modules/webpack/lib/JsonpChunkTemplatePlugin.js create mode 100644 node_modules/webpack/lib/JsonpExportMainTemplatePlugin.js create mode 100644 node_modules/webpack/lib/JsonpHotUpdateChunkTemplatePlugin.js create mode 100644 node_modules/webpack/lib/JsonpMainTemplate.runtime.js create mode 100644 node_modules/webpack/lib/JsonpMainTemplatePlugin.js create mode 100644 node_modules/webpack/lib/JsonpTemplatePlugin.js create mode 100644 node_modules/webpack/lib/LibManifestPlugin.js create mode 100644 node_modules/webpack/lib/LibraryTemplatePlugin.js create mode 100644 node_modules/webpack/lib/LoaderOptionsPlugin.js create mode 100644 node_modules/webpack/lib/LoaderTargetPlugin.js create mode 100644 node_modules/webpack/lib/MainTemplate.js create mode 100644 node_modules/webpack/lib/MemoryOutputFileSystem.js create mode 100644 node_modules/webpack/lib/Module.js create mode 100644 node_modules/webpack/lib/ModuleBuildError.js create mode 100644 node_modules/webpack/lib/ModuleDependencyError.js create mode 100644 node_modules/webpack/lib/ModuleDependencyWarning.js create mode 100644 node_modules/webpack/lib/ModuleError.js create mode 100644 node_modules/webpack/lib/ModuleFilenameHelpers.js create mode 100644 node_modules/webpack/lib/ModuleNotFoundError.js create mode 100644 node_modules/webpack/lib/ModuleParseError.js create mode 100644 node_modules/webpack/lib/ModuleReason.js create mode 100644 node_modules/webpack/lib/ModuleTemplate.js create mode 100644 node_modules/webpack/lib/ModuleWarning.js create mode 100644 node_modules/webpack/lib/MovedToPluginWarningPlugin.js create mode 100644 node_modules/webpack/lib/MultiCompiler.js create mode 100644 node_modules/webpack/lib/MultiEntryPlugin.js create mode 100644 node_modules/webpack/lib/MultiModule.js create mode 100644 node_modules/webpack/lib/MultiModuleFactory.js create mode 100644 node_modules/webpack/lib/MultiStats.js create mode 100644 node_modules/webpack/lib/MultiWatching.js create mode 100644 node_modules/webpack/lib/NamedChunksPlugin.js create mode 100644 node_modules/webpack/lib/NamedModulesPlugin.js create mode 100644 node_modules/webpack/lib/NewWatchingPlugin.js create mode 100644 node_modules/webpack/lib/NoEmitOnErrorsPlugin.js create mode 100644 node_modules/webpack/lib/NoErrorsPlugin.js create mode 100644 node_modules/webpack/lib/NodeStuffPlugin.js create mode 100644 node_modules/webpack/lib/NormalModule.js create mode 100644 node_modules/webpack/lib/NormalModuleFactory.js create mode 100644 node_modules/webpack/lib/NormalModuleReplacementPlugin.js create mode 100644 node_modules/webpack/lib/NullFactory.js create mode 100644 node_modules/webpack/lib/OptionsApply.js create mode 100644 node_modules/webpack/lib/OptionsDefaulter.js create mode 100644 node_modules/webpack/lib/Parser.js create mode 100644 node_modules/webpack/lib/ParserHelpers.js create mode 100644 node_modules/webpack/lib/PrefetchPlugin.js create mode 100644 node_modules/webpack/lib/ProgressPlugin.js create mode 100644 node_modules/webpack/lib/ProvidePlugin.js create mode 100644 node_modules/webpack/lib/RawModule.js create mode 100644 node_modules/webpack/lib/RecordIdsPlugin.js create mode 100644 node_modules/webpack/lib/RequestShortener.js create mode 100644 node_modules/webpack/lib/RequireJsStuffPlugin.js create mode 100644 node_modules/webpack/lib/RuleSet.js create mode 100644 node_modules/webpack/lib/SetVarMainTemplatePlugin.js create mode 100644 node_modules/webpack/lib/SingleEntryPlugin.js create mode 100644 node_modules/webpack/lib/SizeFormatHelpers.js create mode 100644 node_modules/webpack/lib/SourceMapDevToolModuleOptionsPlugin.js create mode 100644 node_modules/webpack/lib/SourceMapDevToolPlugin.js create mode 100644 node_modules/webpack/lib/Stats.js create mode 100644 node_modules/webpack/lib/Template.js create mode 100644 node_modules/webpack/lib/TemplatedPathPlugin.js create mode 100644 node_modules/webpack/lib/UmdMainTemplatePlugin.js create mode 100644 node_modules/webpack/lib/UnsupportedFeatureWarning.js create mode 100644 node_modules/webpack/lib/UseStrictPlugin.js create mode 100644 node_modules/webpack/lib/WarnCaseSensitiveModulesPlugin.js create mode 100644 node_modules/webpack/lib/WatchIgnorePlugin.js create mode 100644 node_modules/webpack/lib/WebpackError.js create mode 100644 node_modules/webpack/lib/WebpackOptionsApply.js create mode 100644 node_modules/webpack/lib/WebpackOptionsDefaulter.js create mode 100644 node_modules/webpack/lib/WebpackOptionsValidationError.js create mode 100644 node_modules/webpack/lib/compareLocations.js create mode 100644 node_modules/webpack/lib/dependencies/AMDDefineDependency.js create mode 100644 node_modules/webpack/lib/dependencies/AMDDefineDependencyParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/AMDPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/AMDRequireArrayDependency.js create mode 100644 node_modules/webpack/lib/dependencies/AMDRequireContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/AMDRequireDependenciesBlock.js create mode 100644 node_modules/webpack/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/AMDRequireDependency.js create mode 100644 node_modules/webpack/lib/dependencies/AMDRequireItemDependency.js create mode 100644 node_modules/webpack/lib/dependencies/CommonJsPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/CommonJsRequireContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/CommonJsRequireDependency.js create mode 100644 node_modules/webpack/lib/dependencies/CommonJsRequireDependencyParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/ConstDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js create mode 100644 node_modules/webpack/lib/dependencies/ContextDependencyTemplateAsId.js create mode 100644 node_modules/webpack/lib/dependencies/ContextDependencyTemplateAsRequireCall.js create mode 100644 node_modules/webpack/lib/dependencies/ContextElementDependency.js create mode 100644 node_modules/webpack/lib/dependencies/CriticalDependencyWarning.js create mode 100644 node_modules/webpack/lib/dependencies/DelegatedExportsDependency.js create mode 100644 node_modules/webpack/lib/dependencies/DelegatedSourceDependency.js create mode 100644 node_modules/webpack/lib/dependencies/DepBlockHelpers.js create mode 100644 node_modules/webpack/lib/dependencies/DllEntryDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyAcceptDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyAcceptImportDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyCompatibilityDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyExportDependencyParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyExportExpressionDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyExportHeaderDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyExportImportedSpecifierDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyExportSpecifierDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyImportDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyImportDependencyParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyImportSpecifierDependency.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyModulesHelpers.js create mode 100644 node_modules/webpack/lib/dependencies/HarmonyModulesPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/ImportContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ImportDependenciesBlock.js create mode 100644 node_modules/webpack/lib/dependencies/ImportDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ImportEagerContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ImportEagerDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ImportLazyContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ImportLazyOnceContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ImportParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/ImportPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/ImportWeakContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ImportWeakDependency.js create mode 100644 node_modules/webpack/lib/dependencies/LoaderDependency.js create mode 100644 node_modules/webpack/lib/dependencies/LoaderPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/LocalModule.js create mode 100644 node_modules/webpack/lib/dependencies/LocalModuleDependency.js create mode 100644 node_modules/webpack/lib/dependencies/LocalModulesHelpers.js create mode 100644 node_modules/webpack/lib/dependencies/ModuleDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ModuleDependencyTemplateAsId.js create mode 100644 node_modules/webpack/lib/dependencies/ModuleDependencyTemplateAsRequireId.js create mode 100644 node_modules/webpack/lib/dependencies/ModuleHotAcceptDependency.js create mode 100644 node_modules/webpack/lib/dependencies/ModuleHotDeclineDependency.js create mode 100644 node_modules/webpack/lib/dependencies/MultiEntryDependency.js create mode 100644 node_modules/webpack/lib/dependencies/NullDependency.js create mode 100644 node_modules/webpack/lib/dependencies/PrefetchDependency.js create mode 100644 node_modules/webpack/lib/dependencies/RequireContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/RequireContextDependencyParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/RequireContextPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/RequireEnsureDependenciesBlock.js create mode 100644 node_modules/webpack/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/RequireEnsureDependency.js create mode 100644 node_modules/webpack/lib/dependencies/RequireEnsureItemDependency.js create mode 100644 node_modules/webpack/lib/dependencies/RequireEnsurePlugin.js create mode 100644 node_modules/webpack/lib/dependencies/RequireHeaderDependency.js create mode 100644 node_modules/webpack/lib/dependencies/RequireIncludeDependency.js create mode 100644 node_modules/webpack/lib/dependencies/RequireIncludeDependencyParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/RequireIncludePlugin.js create mode 100644 node_modules/webpack/lib/dependencies/RequireResolveContextDependency.js create mode 100644 node_modules/webpack/lib/dependencies/RequireResolveDependency.js create mode 100644 node_modules/webpack/lib/dependencies/RequireResolveDependencyParserPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/RequireResolveHeaderDependency.js create mode 100644 node_modules/webpack/lib/dependencies/SingleEntryDependency.js create mode 100644 node_modules/webpack/lib/dependencies/SystemPlugin.js create mode 100644 node_modules/webpack/lib/dependencies/UnsupportedDependency.js create mode 100644 node_modules/webpack/lib/dependencies/WebpackMissingModule.js create mode 100644 node_modules/webpack/lib/dependencies/getFunctionExpression.js create mode 100644 node_modules/webpack/lib/formatLocation.js create mode 100644 node_modules/webpack/lib/node/NodeChunkTemplatePlugin.js create mode 100644 node_modules/webpack/lib/node/NodeEnvironmentPlugin.js create mode 100644 node_modules/webpack/lib/node/NodeHotUpdateChunkTemplatePlugin.js create mode 100644 node_modules/webpack/lib/node/NodeMainTemplate.runtime.js create mode 100644 node_modules/webpack/lib/node/NodeMainTemplateAsync.runtime.js create mode 100644 node_modules/webpack/lib/node/NodeMainTemplatePlugin.js create mode 100644 node_modules/webpack/lib/node/NodeOutputFileSystem.js create mode 100644 node_modules/webpack/lib/node/NodeSourcePlugin.js create mode 100644 node_modules/webpack/lib/node/NodeTargetPlugin.js create mode 100644 node_modules/webpack/lib/node/NodeTemplatePlugin.js create mode 100644 node_modules/webpack/lib/node/NodeWatchFileSystem.js create mode 100644 node_modules/webpack/lib/optimize/AggressiveMergingPlugin.js create mode 100644 node_modules/webpack/lib/optimize/AggressiveSplittingPlugin.js create mode 100644 node_modules/webpack/lib/optimize/ChunkModuleIdRangePlugin.js create mode 100644 node_modules/webpack/lib/optimize/CommonsChunkPlugin.js create mode 100644 node_modules/webpack/lib/optimize/ConcatenatedModule.js create mode 100644 node_modules/webpack/lib/optimize/DedupePlugin.js create mode 100644 node_modules/webpack/lib/optimize/EnsureChunkConditionsPlugin.js create mode 100644 node_modules/webpack/lib/optimize/FlagIncludedChunksPlugin.js create mode 100644 node_modules/webpack/lib/optimize/LimitChunkCountPlugin.js create mode 100644 node_modules/webpack/lib/optimize/MergeDuplicateChunksPlugin.js create mode 100644 node_modules/webpack/lib/optimize/MinChunkSizePlugin.js create mode 100644 node_modules/webpack/lib/optimize/ModuleConcatenationPlugin.js create mode 100644 node_modules/webpack/lib/optimize/OccurrenceOrderPlugin.js create mode 100644 node_modules/webpack/lib/optimize/RemoveEmptyChunksPlugin.js create mode 100644 node_modules/webpack/lib/optimize/RemoveParentModulesPlugin.js create mode 100644 node_modules/webpack/lib/optimize/UglifyJsPlugin.js create mode 100644 node_modules/webpack/lib/performance/AssetsOverSizeLimitWarning.js create mode 100644 node_modules/webpack/lib/performance/EntrypointsOverSizeLimitWarning.js create mode 100644 node_modules/webpack/lib/performance/NoAsyncChunksWarning.js create mode 100644 node_modules/webpack/lib/performance/SizeLimitsPlugin.js create mode 100644 node_modules/webpack/lib/prepareOptions.js create mode 100644 node_modules/webpack/lib/removeAndDo.js create mode 100644 node_modules/webpack/lib/util/Semaphore.js create mode 100644 node_modules/webpack/lib/util/SortableSet.js create mode 100644 node_modules/webpack/lib/util/identifier.js create mode 100644 node_modules/webpack/lib/validateSchema.js create mode 100644 node_modules/webpack/lib/web/WebEnvironmentPlugin.js create mode 100644 node_modules/webpack/lib/webpack.js create mode 100644 node_modules/webpack/lib/webpack.web.js create mode 100644 node_modules/webpack/lib/webworker/WebWorkerChunkTemplatePlugin.js create mode 100644 node_modules/webpack/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js create mode 100644 node_modules/webpack/lib/webworker/WebWorkerMainTemplate.runtime.js create mode 100644 node_modules/webpack/lib/webworker/WebWorkerMainTemplatePlugin.js create mode 100644 node_modules/webpack/lib/webworker/WebWorkerTemplatePlugin.js create mode 100644 node_modules/webpack/node_modules/async/CHANGELOG.md create mode 100644 node_modules/webpack/node_modules/async/LICENSE create mode 100644 node_modules/webpack/node_modules/async/README.md create mode 100644 node_modules/webpack/node_modules/async/apply.js create mode 100644 node_modules/webpack/node_modules/async/applyEach.js create mode 100644 node_modules/webpack/node_modules/async/applyEachSeries.js create mode 100644 node_modules/webpack/node_modules/async/asyncify.js create mode 100644 node_modules/webpack/node_modules/async/auto.js create mode 100644 node_modules/webpack/node_modules/async/autoInject.js create mode 100644 node_modules/webpack/node_modules/async/bower.json create mode 100644 node_modules/webpack/node_modules/async/cargo.js create mode 100644 node_modules/webpack/node_modules/async/compose.js create mode 100644 node_modules/webpack/node_modules/async/concat.js create mode 100644 node_modules/webpack/node_modules/async/concatLimit.js create mode 100644 node_modules/webpack/node_modules/async/concatSeries.js create mode 100644 node_modules/webpack/node_modules/async/constant.js create mode 100644 node_modules/webpack/node_modules/async/detect.js create mode 100644 node_modules/webpack/node_modules/async/detectLimit.js create mode 100644 node_modules/webpack/node_modules/async/detectSeries.js create mode 100644 node_modules/webpack/node_modules/async/dir.js create mode 100644 node_modules/webpack/node_modules/async/dist/async.js create mode 100644 node_modules/webpack/node_modules/async/dist/async.min.js create mode 100644 node_modules/webpack/node_modules/async/doDuring.js create mode 100644 node_modules/webpack/node_modules/async/doUntil.js create mode 100644 node_modules/webpack/node_modules/async/doWhilst.js create mode 100644 node_modules/webpack/node_modules/async/during.js create mode 100644 node_modules/webpack/node_modules/async/each.js create mode 100644 node_modules/webpack/node_modules/async/eachLimit.js create mode 100644 node_modules/webpack/node_modules/async/eachOf.js create mode 100644 node_modules/webpack/node_modules/async/eachOfLimit.js create mode 100644 node_modules/webpack/node_modules/async/eachOfSeries.js create mode 100644 node_modules/webpack/node_modules/async/eachSeries.js create mode 100644 node_modules/webpack/node_modules/async/ensureAsync.js create mode 100644 node_modules/webpack/node_modules/async/every.js create mode 100644 node_modules/webpack/node_modules/async/everyLimit.js create mode 100644 node_modules/webpack/node_modules/async/everySeries.js create mode 100644 node_modules/webpack/node_modules/async/filter.js create mode 100644 node_modules/webpack/node_modules/async/filterLimit.js create mode 100644 node_modules/webpack/node_modules/async/filterSeries.js create mode 100644 node_modules/webpack/node_modules/async/forever.js create mode 100644 node_modules/webpack/node_modules/async/groupBy.js create mode 100644 node_modules/webpack/node_modules/async/groupByLimit.js create mode 100644 node_modules/webpack/node_modules/async/groupBySeries.js create mode 100644 node_modules/webpack/node_modules/async/index.js create mode 100644 node_modules/webpack/node_modules/async/internal/DoublyLinkedList.js create mode 100644 node_modules/webpack/node_modules/async/internal/applyEach.js create mode 100644 node_modules/webpack/node_modules/async/internal/breakLoop.js create mode 100644 node_modules/webpack/node_modules/async/internal/consoleFunc.js create mode 100644 node_modules/webpack/node_modules/async/internal/createTester.js create mode 100644 node_modules/webpack/node_modules/async/internal/doLimit.js create mode 100644 node_modules/webpack/node_modules/async/internal/doParallel.js create mode 100644 node_modules/webpack/node_modules/async/internal/doParallelLimit.js create mode 100644 node_modules/webpack/node_modules/async/internal/eachOfLimit.js create mode 100644 node_modules/webpack/node_modules/async/internal/filter.js create mode 100644 node_modules/webpack/node_modules/async/internal/findGetResult.js create mode 100644 node_modules/webpack/node_modules/async/internal/getIterator.js create mode 100644 node_modules/webpack/node_modules/async/internal/initialParams.js create mode 100644 node_modules/webpack/node_modules/async/internal/iterator.js create mode 100644 node_modules/webpack/node_modules/async/internal/map.js create mode 100644 node_modules/webpack/node_modules/async/internal/notId.js create mode 100644 node_modules/webpack/node_modules/async/internal/once.js create mode 100644 node_modules/webpack/node_modules/async/internal/onlyOnce.js create mode 100644 node_modules/webpack/node_modules/async/internal/parallel.js create mode 100644 node_modules/webpack/node_modules/async/internal/queue.js create mode 100644 node_modules/webpack/node_modules/async/internal/reject.js create mode 100644 node_modules/webpack/node_modules/async/internal/setImmediate.js create mode 100644 node_modules/webpack/node_modules/async/internal/slice.js create mode 100644 node_modules/webpack/node_modules/async/internal/withoutIndex.js create mode 100644 node_modules/webpack/node_modules/async/internal/wrapAsync.js create mode 100644 node_modules/webpack/node_modules/async/log.js create mode 100644 node_modules/webpack/node_modules/async/map.js create mode 100644 node_modules/webpack/node_modules/async/mapLimit.js create mode 100644 node_modules/webpack/node_modules/async/mapSeries.js create mode 100644 node_modules/webpack/node_modules/async/mapValues.js create mode 100644 node_modules/webpack/node_modules/async/mapValuesLimit.js create mode 100644 node_modules/webpack/node_modules/async/mapValuesSeries.js create mode 100644 node_modules/webpack/node_modules/async/memoize.js create mode 100644 node_modules/webpack/node_modules/async/nextTick.js create mode 100644 node_modules/webpack/node_modules/async/package.json create mode 100644 node_modules/webpack/node_modules/async/parallel.js create mode 100644 node_modules/webpack/node_modules/async/parallelLimit.js create mode 100644 node_modules/webpack/node_modules/async/priorityQueue.js create mode 100644 node_modules/webpack/node_modules/async/queue.js create mode 100644 node_modules/webpack/node_modules/async/race.js create mode 100644 node_modules/webpack/node_modules/async/reduce.js create mode 100644 node_modules/webpack/node_modules/async/reduceRight.js create mode 100644 node_modules/webpack/node_modules/async/reflect.js create mode 100644 node_modules/webpack/node_modules/async/reflectAll.js create mode 100644 node_modules/webpack/node_modules/async/reject.js create mode 100644 node_modules/webpack/node_modules/async/rejectLimit.js create mode 100644 node_modules/webpack/node_modules/async/rejectSeries.js create mode 100644 node_modules/webpack/node_modules/async/retry.js create mode 100644 node_modules/webpack/node_modules/async/retryable.js create mode 100644 node_modules/webpack/node_modules/async/seq.js create mode 100644 node_modules/webpack/node_modules/async/series.js create mode 100644 node_modules/webpack/node_modules/async/setImmediate.js create mode 100644 node_modules/webpack/node_modules/async/some.js create mode 100644 node_modules/webpack/node_modules/async/someLimit.js create mode 100644 node_modules/webpack/node_modules/async/someSeries.js create mode 100644 node_modules/webpack/node_modules/async/sortBy.js create mode 100644 node_modules/webpack/node_modules/async/timeout.js create mode 100644 node_modules/webpack/node_modules/async/times.js create mode 100644 node_modules/webpack/node_modules/async/timesLimit.js create mode 100644 node_modules/webpack/node_modules/async/timesSeries.js create mode 100644 node_modules/webpack/node_modules/async/transform.js create mode 100644 node_modules/webpack/node_modules/async/tryEach.js create mode 100644 node_modules/webpack/node_modules/async/unmemoize.js create mode 100644 node_modules/webpack/node_modules/async/until.js create mode 100644 node_modules/webpack/node_modules/async/waterfall.js create mode 100644 node_modules/webpack/node_modules/async/whilst.js create mode 100644 node_modules/webpack/node_modules/supports-color/browser.js create mode 100644 node_modules/webpack/node_modules/supports-color/index.js create mode 100644 node_modules/webpack/node_modules/supports-color/license create mode 100644 node_modules/webpack/node_modules/supports-color/package.json create mode 100644 node_modules/webpack/node_modules/supports-color/readme.md create mode 100644 node_modules/webpack/package.json create mode 100644 node_modules/webpack/schemas/ajv.absolutePath.js create mode 100644 node_modules/webpack/schemas/webpackOptionsSchema.json create mode 100644 node_modules/webpack/web_modules/node-libs-browser.js create mode 100644 node_modules/which-module/CHANGELOG.md create mode 100644 node_modules/which-module/LICENSE create mode 100644 node_modules/which-module/README.md create mode 100644 node_modules/which-module/index.js create mode 100644 node_modules/which-module/package.json create mode 100644 node_modules/which/CHANGELOG.md create mode 100644 node_modules/which/LICENSE create mode 100644 node_modules/which/README.md create mode 100755 node_modules/which/bin/which create mode 100644 node_modules/which/package.json create mode 100644 node_modules/which/which.js create mode 100644 node_modules/window-size/LICENSE-MIT create mode 100644 node_modules/window-size/README.md create mode 100644 node_modules/window-size/index.js create mode 100644 node_modules/window-size/package.json create mode 100644 node_modules/wordwrap/LICENSE create mode 100644 node_modules/wordwrap/README.markdown create mode 100644 node_modules/wordwrap/example/center.js create mode 100644 node_modules/wordwrap/example/meat.js create mode 100644 node_modules/wordwrap/index.js create mode 100644 node_modules/wordwrap/package.json create mode 100644 node_modules/wordwrap/test/break.js create mode 100644 node_modules/wordwrap/test/idleness.txt create mode 100644 node_modules/wordwrap/test/wrap.js create mode 100755 node_modules/wrap-ansi/index.js create mode 100644 node_modules/wrap-ansi/license create mode 100644 node_modules/wrap-ansi/node_modules/string-width/index.js create mode 100644 node_modules/wrap-ansi/node_modules/string-width/license create mode 100644 node_modules/wrap-ansi/node_modules/string-width/package.json create mode 100644 node_modules/wrap-ansi/node_modules/string-width/readme.md create mode 100644 node_modules/wrap-ansi/package.json create mode 100644 node_modules/wrap-ansi/readme.md create mode 100644 node_modules/wrappy/LICENSE create mode 100644 node_modules/wrappy/README.md create mode 100644 node_modules/wrappy/package.json create mode 100644 node_modules/wrappy/wrappy.js create mode 100644 node_modules/xtend/.jshintrc create mode 100644 node_modules/xtend/.npmignore create mode 100644 node_modules/xtend/LICENCE create mode 100644 node_modules/xtend/Makefile create mode 100644 node_modules/xtend/README.md create mode 100644 node_modules/xtend/immutable.js create mode 100644 node_modules/xtend/mutable.js create mode 100644 node_modules/xtend/package.json create mode 100644 node_modules/xtend/test.js create mode 100644 node_modules/y18n/LICENSE create mode 100644 node_modules/y18n/README.md create mode 100644 node_modules/y18n/index.js create mode 100644 node_modules/y18n/package.json create mode 100644 node_modules/yallist/LICENSE create mode 100644 node_modules/yallist/README.md create mode 100644 node_modules/yallist/iterator.js create mode 100644 node_modules/yallist/package.json create mode 100644 node_modules/yallist/yallist.js create mode 100644 node_modules/yargs-parser/CHANGELOG.md create mode 100644 node_modules/yargs-parser/LICENSE.txt create mode 100644 node_modules/yargs-parser/README.md create mode 100644 node_modules/yargs-parser/index.js create mode 100644 node_modules/yargs-parser/lib/tokenize-arg-string.js create mode 100644 node_modules/yargs-parser/node_modules/camelcase/index.js create mode 100644 node_modules/yargs-parser/node_modules/camelcase/license create mode 100644 node_modules/yargs-parser/node_modules/camelcase/package.json create mode 100644 node_modules/yargs-parser/node_modules/camelcase/readme.md create mode 100644 node_modules/yargs-parser/package.json create mode 100644 node_modules/yargs/CHANGELOG.md create mode 100644 node_modules/yargs/LICENSE create mode 100644 node_modules/yargs/README.md create mode 100644 node_modules/yargs/completion.sh.hbs create mode 100644 node_modules/yargs/index.js create mode 100644 node_modules/yargs/lib/apply-extends.js create mode 100644 node_modules/yargs/lib/argsert.js create mode 100644 node_modules/yargs/lib/assign.js create mode 100644 node_modules/yargs/lib/command.js create mode 100644 node_modules/yargs/lib/completion.js create mode 100644 node_modules/yargs/lib/levenshtein.js create mode 100644 node_modules/yargs/lib/obj-filter.js create mode 100644 node_modules/yargs/lib/usage.js create mode 100644 node_modules/yargs/lib/validation.js create mode 100644 node_modules/yargs/lib/yerror.js create mode 100644 node_modules/yargs/locales/be.json create mode 100644 node_modules/yargs/locales/de.json create mode 100644 node_modules/yargs/locales/en.json create mode 100644 node_modules/yargs/locales/es.json create mode 100644 node_modules/yargs/locales/fr.json create mode 100644 node_modules/yargs/locales/hi.json create mode 100644 node_modules/yargs/locales/hu.json create mode 100644 node_modules/yargs/locales/id.json create mode 100644 node_modules/yargs/locales/it.json create mode 100644 node_modules/yargs/locales/ja.json create mode 100644 node_modules/yargs/locales/ko.json create mode 100644 node_modules/yargs/locales/nb.json create mode 100644 node_modules/yargs/locales/nl.json create mode 100644 node_modules/yargs/locales/pirate.json create mode 100644 node_modules/yargs/locales/pl.json create mode 100644 node_modules/yargs/locales/pt.json create mode 100644 node_modules/yargs/locales/pt_BR.json create mode 100644 node_modules/yargs/locales/ru.json create mode 100644 node_modules/yargs/locales/th.json create mode 100644 node_modules/yargs/locales/tr.json create mode 100644 node_modules/yargs/locales/zh_CN.json create mode 100644 node_modules/yargs/locales/zh_TW.json create mode 100644 node_modules/yargs/node_modules/camelcase/index.js create mode 100644 node_modules/yargs/node_modules/camelcase/license create mode 100644 node_modules/yargs/node_modules/camelcase/package.json create mode 100644 node_modules/yargs/node_modules/camelcase/readme.md create mode 100644 node_modules/yargs/node_modules/cliui/CHANGELOG.md create mode 100644 node_modules/yargs/node_modules/cliui/LICENSE.txt create mode 100644 node_modules/yargs/node_modules/cliui/README.md create mode 100644 node_modules/yargs/node_modules/cliui/index.js create mode 100644 node_modules/yargs/node_modules/cliui/node_modules/string-width/index.js create mode 100644 node_modules/yargs/node_modules/cliui/node_modules/string-width/license create mode 100644 node_modules/yargs/node_modules/cliui/node_modules/string-width/package.json create mode 100644 node_modules/yargs/node_modules/cliui/node_modules/string-width/readme.md create mode 100644 node_modules/yargs/node_modules/cliui/package.json create mode 100644 node_modules/yargs/package.json create mode 100644 node_modules/yargs/yargs.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 ratefinder.html create mode 100644 webpack.config.js diff --git a/build/app.bundle.js b/build/app.bundle.js new file mode 100644 index 000000000..51c9f4a8a --- /dev/null +++ b/build/app.bundle.js @@ -0,0 +1,164 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _mortgage = __webpack_require__(1); + +var _mortgage2 = _interopRequireDefault(_mortgage); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// document.getElementById('calcBtn').addEventListener('click', () => { +// let principal = document.getElementById("principal").value; +// let years = document.getElementById("years").value; +// let rate = document.getElementById("rate").value; +// let {monthlyPayment, monthlyRate, amortization} = +// mortgage.calculateAmortization(principal, years, rate); +// document.getElementById("monthlyPayment").innerHTML = monthlyPayment.toFixed(2); +// document.getElementById("monthlyRate").innerHTML = (monthlyRate * 100).toFixed(2); +// amortization.forEach(month => console.log(month)); +// }); + +document.getElementById('calcBtn').addEventListener('click', function () { + var principal = document.getElementById("principal").value; + var years = document.getElementById("years").value; + var rate = document.getElementById("rate").value; + var mortgage = new _mortgage2.default(principal, years, rate); + document.getElementById("monthlyPayment").innerHTML = mortgage.monthlyPayment.toFixed(2); + document.getElementById("monthlyRate").innerHTML = (rate / 12).toFixed(2); + var html = ""; + mortgage.amortization.forEach(function (year, index) { + return html += '\n \n ' + (index + 1) + '\n ' + Math.round(year.principalY) + '\n \n
\n
\n
\n
\n
\n
\n \n ' + Math.round(year.interestY) + '\n ' + Math.round(year.balance) + '\n \n '; + }); + document.getElementById("amortization").innerHTML = html; +}); + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"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; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Mortgage = function () { + function Mortgage(principal, years, rate) { + _classCallCheck(this, Mortgage); + + this.principal = principal; + this.years = years; + this.rate = rate; + } + + _createClass(Mortgage, [{ + key: "monthlyPayment", + get: function get() { + var monthlyRate = this.rate / 100 / 12; + return this.principal * monthlyRate / (1 - Math.pow(1 / (1 + monthlyRate), this.years * 12)); + } + }, { + key: "amortization", + get: function get() { + var monthlyPayment = this.monthlyPayment; + var monthlyRate = this.rate / 100 / 12; + var balance = this.principal; + var amortization = []; + for (var y = 0; y < this.years; y++) { + var interestY = 0; + var principalY = 0; + for (var m = 0; m < 12; m++) { + var interestM = balance * monthlyRate; + var principalM = monthlyPayment - interestM; + interestY = interestY + interestM; + principalY = principalY + principalM; + balance = balance - principalM; + } + amortization.push({ principalY: principalY, interestY: interestY, balance: balance }); + } + return amortization; + } + }]); + + return Mortgage; +}(); + +exports.default = Mortgage; + +/***/ }) +/******/ ]); +//# sourceMappingURL=app.bundle.js.map \ No newline at end of file diff --git a/build/app.bundle.js.map b/build/app.bundle.js.map new file mode 100644 index 000000000..e0df2a2b2 --- /dev/null +++ b/build/app.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap 591d5259a671fab47e7d","webpack:///./js/main.js","webpack:///./js/mortgage2.js"],"names":["document","getElementById","addEventListener","principal","value","years","rate","mortgage","innerHTML","monthlyPayment","toFixed","html","amortization","forEach","year","index","Math","round","principalY","interestY","balance","Mortgage","monthlyRate","pow","y","m","interestM","principalM","push"],"mappings":"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","file":"app.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 591d5259a671fab47e7d","import Mortgage from './mortgage2';\n\n// document.getElementById('calcBtn').addEventListener('click', () => {\n// let principal = document.getElementById(\"principal\").value;\n// let years = document.getElementById(\"years\").value;\n// let rate = document.getElementById(\"rate\").value;\n// let {monthlyPayment, monthlyRate, amortization} = \n// mortgage.calculateAmortization(principal, years, rate);\n// document.getElementById(\"monthlyPayment\").innerHTML = monthlyPayment.toFixed(2);\n// document.getElementById(\"monthlyRate\").innerHTML = (monthlyRate * 100).toFixed(2);\n// amortization.forEach(month => console.log(month));\n// });\n\ndocument.getElementById('calcBtn').addEventListener('click', () => {\n let principal = document.getElementById(\"principal\").value;\n let years = document.getElementById(\"years\").value;\n let rate = document.getElementById(\"rate\").value;\n let mortgage = new Mortgage(principal, years, rate);\n document.getElementById(\"monthlyPayment\").innerHTML = mortgage.monthlyPayment.toFixed(2);\n document.getElementById(\"monthlyRate\").innerHTML = (rate / 12).toFixed(2);\n let html = \"\";\n mortgage.amortization.forEach((year, index) => html += `\n \n ${index + 1}\n ${Math.round(year.principalY)}\n \n
\n
\n
\n
\n
\n
\n \n ${Math.round(year.interestY)}\n ${Math.round(year.balance)}\n \n `);\n document.getElementById(\"amortization\").innerHTML = html;\n});\n\n\n// WEBPACK FOOTER //\n// ./js/main.js","export default class Mortgage {\n \n constructor(principal, years, rate) {\n this.principal = principal;\n this.years = years;\n this.rate = rate;\n }\n \n get monthlyPayment() {\n let monthlyRate = this.rate / 100 / 12;\n return this.principal * monthlyRate / (1 - (Math.pow(1/(1 + monthlyRate),\n this.years * 12)));\n }\n \n get amortization() {\n let monthlyPayment = this.monthlyPayment;\n let monthlyRate = this.rate / 100 / 12;\n let balance = this.principal;\n let amortization = [];\n for (let y=0; y { +// let principal = document.getElementById("principal").value; +// let years = document.getElementById("years").value; +// let rate = document.getElementById("rate").value; +// let {monthlyPayment, monthlyRate, amortization} = +// mortgage.calculateAmortization(principal, years, rate); +// document.getElementById("monthlyPayment").innerHTML = monthlyPayment.toFixed(2); +// document.getElementById("monthlyRate").innerHTML = (monthlyRate * 100).toFixed(2); +// amortization.forEach(month => console.log(month)); +// }); + +document.getElementById('calcBtn').addEventListener('click', function () { + var principal = document.getElementById("principal").value; + var years = document.getElementById("years").value; + var rate = document.getElementById("rate").value; + var mortgage = new _mortgage2.default(principal, years, rate); + document.getElementById("monthlyPayment").innerHTML = mortgage.monthlyPayment.toFixed(2); + document.getElementById("monthlyRate").innerHTML = (rate / 12).toFixed(2); + var html = ""; + mortgage.amortization.forEach(function (year, index) { + return html += '\n \n ' + (index + 1) + '\n ' + Math.round(year.principalY) + '\n \n
\n
\n
\n
\n
\n
\n \n ' + Math.round(year.interestY) + '\n ' + Math.round(year.balance) + '\n \n '; + }); + document.getElementById("amortization").innerHTML = html; +}); + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"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; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Mortgage = function () { + function Mortgage(principal, years, rate) { + _classCallCheck(this, Mortgage); + + this.principal = principal; + this.years = years; + this.rate = rate; + } + + _createClass(Mortgage, [{ + key: "monthlyPayment", + get: function get() { + var monthlyRate = this.rate / 100 / 12; + return this.principal * monthlyRate / (1 - Math.pow(1 / (1 + monthlyRate), this.years * 12)); + } + }, { + key: "amortization", + get: function get() { + var monthlyPayment = this.monthlyPayment; + var monthlyRate = this.rate / 100 / 12; + var balance = this.principal; + var amortization = []; + for (var y = 0; y < this.years; y++) { + var interestY = 0; + var principalY = 0; + for (var m = 0; m < 12; m++) { + var interestM = balance * monthlyRate; + var principalM = monthlyPayment - interestM; + interestY = interestY + interestM; + principalY = principalY + principalM; + balance = balance - principalM; + } + amortization.push({ principalY: principalY, interestY: interestY, balance: balance }); + } + return amortization; + } + }]); + + return Mortgage; +}(); + +exports.default = Mortgage; + +/***/ }) +/******/ ]); +//# sourceMappingURL=main.bundle.js.map \ No newline at end of file diff --git a/build/main.bundle.js.map b/build/main.bundle.js.map new file mode 100644 index 000000000..b1d5e6f42 --- /dev/null +++ b/build/main.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap 3dddea03186306cab27b","webpack:///./js/main.js","webpack:///./js/mortgage2.js"],"names":["document","getElementById","addEventListener","principal","value","years","rate","mortgage","innerHTML","monthlyPayment","toFixed","html","amortization","forEach","year","index","Math","round","principalY","interestY","balance","Mortgage","monthlyRate","pow","y","m","interestM","principalM","push"],"mappings":"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","file":"main.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 3dddea03186306cab27b","import Mortgage from './mortgage2';\n\n// document.getElementById('calcBtn').addEventListener('click', () => {\n// let principal = document.getElementById(\"principal\").value;\n// let years = document.getElementById(\"years\").value;\n// let rate = document.getElementById(\"rate\").value;\n// let {monthlyPayment, monthlyRate, amortization} = \n// mortgage.calculateAmortization(principal, years, rate);\n// document.getElementById(\"monthlyPayment\").innerHTML = monthlyPayment.toFixed(2);\n// document.getElementById(\"monthlyRate\").innerHTML = (monthlyRate * 100).toFixed(2);\n// amortization.forEach(month => console.log(month));\n// });\n\ndocument.getElementById('calcBtn').addEventListener('click', () => {\n let principal = document.getElementById(\"principal\").value;\n let years = document.getElementById(\"years\").value;\n let rate = document.getElementById(\"rate\").value;\n let mortgage = new Mortgage(principal, years, rate);\n document.getElementById(\"monthlyPayment\").innerHTML = mortgage.monthlyPayment.toFixed(2);\n document.getElementById(\"monthlyRate\").innerHTML = (rate / 12).toFixed(2);\n let html = \"\";\n mortgage.amortization.forEach((year, index) => html += `\n \n ${index + 1}\n ${Math.round(year.principalY)}\n \n
\n
\n
\n
\n
\n
\n \n ${Math.round(year.interestY)}\n ${Math.round(year.balance)}\n \n `);\n document.getElementById(\"amortization\").innerHTML = html;\n});\n\n\n// WEBPACK FOOTER //\n// ./js/main.js","export default class Mortgage {\n \n constructor(principal, years, rate) {\n this.principal = principal;\n this.years = years;\n this.rate = rate;\n }\n \n get monthlyPayment() {\n let monthlyRate = this.rate / 100 / 12;\n return this.principal * monthlyRate / (1 - (Math.pow(1/(1 + monthlyRate),\n this.years * 12)));\n }\n \n get amortization() {\n let monthlyPayment = this.monthlyPayment;\n let monthlyRate = this.rate / 100 / 12;\n let balance = this.principal;\n let amortization = [];\n for (let y=0; y' + rate.years + '' + rate.rate + '%'; + }); + document.getElementById("rates").innerHTML = html; +}).catch(function (e) { + return console.log(e); +}); + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var rates = [{ + "name": "30 years fixed", + "rate": "13", + "years": "30" +}, { + "name": "20 years fixed", + "rate": "2.8", + "years": "20" +}]; + +var findAll = exports.findAll = function findAll() { + return new Promise(function (resolve, reject) { + if (rates) { + resolve(rates); + } else { + reject("No rates"); + } + }); +}; + +/***/ }) +/******/ ]); +//# sourceMappingURL=ratefinder.bundle.js.map \ No newline at end of file diff --git a/build/ratefinder.bundle.js.map b/build/ratefinder.bundle.js.map new file mode 100644 index 000000000..b2418a7d4 --- /dev/null +++ b/build/ratefinder.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap 591d5259a671fab47e7d","webpack:///./js/ratefinder.js","webpack:///./js/rate-service-mock.js"],"names":["service","findAll","then","html","rates","forEach","rate","name","years","document","getElementById","innerHTML","catch","console","log","e","Promise","resolve","reject"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;AC7DA;;IAAYA,O;;;;AAEZA,QAAQC,OAAR,GACKC,IADL,CACU,iBAAS;AACX,QAAIC,OAAO,EAAX;AACAC,UAAMC,OAAN,CAAc;AAAA,eAAQF,qBAAmBG,KAAKC,IAAxB,iBAAwCD,KAAKE,KAA7C,iBAA8DF,KAAKA,IAAnE,gBAAR;AAAA,KAAd;AACAG,aAASC,cAAT,CAAwB,OAAxB,EAAiCC,SAAjC,GAA6CR,IAA7C;AACH,CALL,EAMKS,KANL,CAMW;AAAA,WAAKC,QAAQC,GAAR,CAAYC,CAAZ,CAAL;AAAA,CANX,E;;;;;;;;;;;;ACFA,IAAIX,QAAQ,CACR;AACI,YAAQ,gBADZ;AAEI,YAAQ,IAFZ;AAGI,aAAS;AAHb,CADQ,EAMR;AACI,YAAQ,gBADZ;AAEI,YAAQ,KAFZ;AAGI,aAAS;AAHb,CANQ,CAAZ;;AAaO,IAAIH,4BAAU,SAAVA,OAAU;AAAA,WAAM,IAAIe,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACxD,YAAId,KAAJ,EAAW;AACPa,oBAAQb,KAAR;AACH,SAFD,MAEO;AACHc,mBAAO,UAAP;AACH;AACJ,KAN0B,CAAN;AAAA,CAAd,C","file":"ratefinder.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 591d5259a671fab47e7d","import * as service from './rate-service-mock';\n \nservice.findAll()\n .then(rates => {\n let html = '';\n rates.forEach(rate => html += `${rate.name}${rate.years}${rate.rate}%`);\n document.getElementById(\"rates\").innerHTML = html;\n })\n .catch(e => console.log(e));\n\n\n// WEBPACK FOOTER //\n// ./js/ratefinder.js","let rates = [\n {\n \"name\": \"30 years fixed\",\n \"rate\": \"13\",\n \"years\": \"30\"\n },\n {\n \"name\": \"20 years fixed\",\n \"rate\": \"2.8\",\n \"years\": \"20\"\n }\n];\n\nexport let findAll = () => new Promise((resolve, reject) => {\n if (rates) {\n resolve(rates);\n } else {\n reject(\"No rates\");\n }\n});\n\n\n// WEBPACK FOOTER //\n// ./js/rate-service-mock.js"],"sourceRoot":""} \ No newline at end of file diff --git a/index.html b/index.html index 0364f0343..cdd27a983 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,11 @@

Mortgage Calculator

Monthly Payment:

+

Monthly Rate:

+ + +
- + \ No newline at end of file diff --git a/js/main.js b/js/main.js index 6565a8969..81a092726 100644 --- a/js/main.js +++ b/js/main.js @@ -1,15 +1,41 @@ -var calculateMonthlyPayment = function (principal, years, rate) { - if (rate) { - var monthlyRate = rate / 100 / 12; - } - var monthlyPayment = principal * monthlyRate / (1 - (Math.pow(1 / (1 + monthlyRate), years * 12))); - return monthlyPayment; -}; +import Mortgage from './mortgage2'; -document.getElementById('calcBtn').addEventListener('click', function () { - var principal = document.getElementById("principal").value; - var years = document.getElementById("years").value; - var rate = document.getElementById("rate").value; - var monthlyPayment = calculateMonthlyPayment(principal, years, rate); - document.getElementById("monthlyPayment").innerHTML = monthlyPayment.toFixed(2); +// document.getElementById('calcBtn').addEventListener('click', () => { +// let principal = document.getElementById("principal").value; +// let years = document.getElementById("years").value; +// let rate = document.getElementById("rate").value; +// let {monthlyPayment, monthlyRate, amortization} = +// mortgage.calculateAmortization(principal, years, rate); +// document.getElementById("monthlyPayment").innerHTML = monthlyPayment.toFixed(2); +// document.getElementById("monthlyRate").innerHTML = (monthlyRate * 100).toFixed(2); +// amortization.forEach(month => console.log(month)); +// }); + +document.getElementById('calcBtn').addEventListener('click', () => { + let principal = document.getElementById("principal").value; + let years = document.getElementById("years").value; + let rate = document.getElementById("rate").value; + let mortgage = new Mortgage(principal, years, rate); + document.getElementById("monthlyPayment").innerHTML = mortgage.monthlyPayment.toFixed(2); + document.getElementById("monthlyRate").innerHTML = (rate / 12).toFixed(2); + let html = ""; + mortgage.amortization.forEach((year, index) => html += ` + + ${index + 1} + ${Math.round(year.principalY)} + +
+
+
+
+
+
+ + ${Math.round(year.interestY)} + ${Math.round(year.balance)} + + `); + document.getElementById("amortization").innerHTML = html; }); \ No newline at end of file diff --git a/js/mortgage.js b/js/mortgage.js new file mode 100644 index 000000000..6ff7bd5dc --- /dev/null +++ b/js/mortgage.js @@ -0,0 +1,28 @@ +export let calculateMonthlyPayment = (principal, years, rate) => { + let monthlyRate = 0; + if (rate) { + monthlyRate = rate / 100 / 12; + } + let monthlyPayment = principal * monthlyRate / + (1 - (Math.pow(1/(1 + monthlyRate), years * 12))); + return {principal, years, rate, monthlyPayment, monthlyRate}; +}; + +export let calculateAmortization = (principal, years, rate) => { + let {monthlyRate, monthlyPayment} = calculateMonthlyPayment(principal, years, rate); + let balance = principal; + let amortization = []; + for (let y=0; y new Promise((resolve, reject) => { + if (rates) { + resolve(rates); + } else { + reject("No rates"); + } +}); \ No newline at end of file diff --git a/js/ratefinder.js b/js/ratefinder.js new file mode 100644 index 000000000..ca5272497 --- /dev/null +++ b/js/ratefinder.js @@ -0,0 +1,9 @@ +import * as service from './rate-service-mock'; + +service.findAll() + .then(rates => { + let html = ''; + rates.forEach(rate => html += `${rate.name}${rate.years}${rate.rate}%`); + document.getElementById("rates").innerHTML = html; + }) + .catch(e => console.log(e)); \ No newline at end of file diff --git a/node_modules/.bin/acorn b/node_modules/.bin/acorn new file mode 120000 index 000000000..cf7676038 --- /dev/null +++ b/node_modules/.bin/acorn @@ -0,0 +1 @@ +../acorn/bin/acorn \ No newline at end of file diff --git a/node_modules/.bin/babel b/node_modules/.bin/babel new file mode 120000 index 000000000..ab35a98a4 --- /dev/null +++ b/node_modules/.bin/babel @@ -0,0 +1 @@ +../babel-cli/bin/babel.js \ No newline at end of file diff --git a/node_modules/.bin/babel-doctor b/node_modules/.bin/babel-doctor new file mode 120000 index 000000000..9112dd7ab --- /dev/null +++ b/node_modules/.bin/babel-doctor @@ -0,0 +1 @@ +../babel-cli/bin/babel-doctor.js \ No newline at end of file diff --git a/node_modules/.bin/babel-external-helpers b/node_modules/.bin/babel-external-helpers new file mode 120000 index 000000000..919117cc9 --- /dev/null +++ b/node_modules/.bin/babel-external-helpers @@ -0,0 +1 @@ +../babel-cli/bin/babel-external-helpers.js \ No newline at end of file diff --git a/node_modules/.bin/babel-node b/node_modules/.bin/babel-node new file mode 120000 index 000000000..489c4fc39 --- /dev/null +++ b/node_modules/.bin/babel-node @@ -0,0 +1 @@ +../babel-cli/bin/babel-node.js \ No newline at end of file diff --git a/node_modules/.bin/babylon b/node_modules/.bin/babylon new file mode 120000 index 000000000..c2adc01b2 --- /dev/null +++ b/node_modules/.bin/babylon @@ -0,0 +1 @@ +../babylon/bin/babylon.js \ No newline at end of file diff --git a/node_modules/.bin/ecstatic b/node_modules/.bin/ecstatic new file mode 120000 index 000000000..5a8a58af4 --- /dev/null +++ b/node_modules/.bin/ecstatic @@ -0,0 +1 @@ +../ecstatic/lib/ecstatic.js \ No newline at end of file diff --git a/node_modules/.bin/errno b/node_modules/.bin/errno new file mode 120000 index 000000000..5a98e539c --- /dev/null +++ b/node_modules/.bin/errno @@ -0,0 +1 @@ +../errno/cli.js \ No newline at end of file diff --git a/node_modules/.bin/he b/node_modules/.bin/he new file mode 120000 index 000000000..2a8eb5e0c --- /dev/null +++ b/node_modules/.bin/he @@ -0,0 +1 @@ +../he/bin/he \ No newline at end of file diff --git a/node_modules/.bin/hs b/node_modules/.bin/hs new file mode 120000 index 000000000..cb3b6668b --- /dev/null +++ b/node_modules/.bin/hs @@ -0,0 +1 @@ +../http-server/bin/http-server \ No newline at end of file diff --git a/node_modules/.bin/http-server b/node_modules/.bin/http-server new file mode 120000 index 000000000..cb3b6668b --- /dev/null +++ b/node_modules/.bin/http-server @@ -0,0 +1 @@ +../http-server/bin/http-server \ No newline at end of file diff --git a/node_modules/.bin/jsesc b/node_modules/.bin/jsesc new file mode 120000 index 000000000..7237604c3 --- /dev/null +++ b/node_modules/.bin/jsesc @@ -0,0 +1 @@ +../jsesc/bin/jsesc \ No newline at end of file diff --git a/node_modules/.bin/json5 b/node_modules/.bin/json5 new file mode 120000 index 000000000..217f37981 --- /dev/null +++ b/node_modules/.bin/json5 @@ -0,0 +1 @@ +../json5/lib/cli.js \ No newline at end of file diff --git a/node_modules/.bin/loose-envify b/node_modules/.bin/loose-envify new file mode 120000 index 000000000..ed9009c5a --- /dev/null +++ b/node_modules/.bin/loose-envify @@ -0,0 +1 @@ +../loose-envify/cli.js \ No newline at end of file diff --git a/node_modules/.bin/miller-rabin b/node_modules/.bin/miller-rabin new file mode 120000 index 000000000..c175fe9f9 --- /dev/null +++ b/node_modules/.bin/miller-rabin @@ -0,0 +1 @@ +../miller-rabin/bin/miller-rabin \ No newline at end of file diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime new file mode 120000 index 000000000..fbb7ee0ee --- /dev/null +++ b/node_modules/.bin/mime @@ -0,0 +1 @@ +../mime/cli.js \ No newline at end of file diff --git a/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp new file mode 120000 index 000000000..017896ceb --- /dev/null +++ b/node_modules/.bin/mkdirp @@ -0,0 +1 @@ +../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/node_modules/.bin/opener b/node_modules/.bin/opener new file mode 120000 index 000000000..120b591ba --- /dev/null +++ b/node_modules/.bin/opener @@ -0,0 +1 @@ +../opener/opener.js \ No newline at end of file diff --git a/node_modules/.bin/regjsparser b/node_modules/.bin/regjsparser new file mode 120000 index 000000000..91cec777d --- /dev/null +++ b/node_modules/.bin/regjsparser @@ -0,0 +1 @@ +../regjsparser/bin/parser \ No newline at end of file diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 120000 index 000000000..317eb293d --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver \ No newline at end of file diff --git a/node_modules/.bin/sha.js b/node_modules/.bin/sha.js new file mode 120000 index 000000000..3c761051a --- /dev/null +++ b/node_modules/.bin/sha.js @@ -0,0 +1 @@ +../sha.js/bin.js \ No newline at end of file diff --git a/node_modules/.bin/uglifyjs b/node_modules/.bin/uglifyjs new file mode 120000 index 000000000..fef3468b6 --- /dev/null +++ b/node_modules/.bin/uglifyjs @@ -0,0 +1 @@ +../uglify-js/bin/uglifyjs \ No newline at end of file diff --git a/node_modules/.bin/user-home b/node_modules/.bin/user-home new file mode 120000 index 000000000..d72d76bb4 --- /dev/null +++ b/node_modules/.bin/user-home @@ -0,0 +1 @@ +../user-home/cli.js \ No newline at end of file diff --git a/node_modules/.bin/webpack b/node_modules/.bin/webpack new file mode 120000 index 000000000..d462c1d15 --- /dev/null +++ b/node_modules/.bin/webpack @@ -0,0 +1 @@ +../webpack/bin/webpack.js \ No newline at end of file diff --git a/node_modules/.bin/which b/node_modules/.bin/which new file mode 120000 index 000000000..f62471c85 --- /dev/null +++ b/node_modules/.bin/which @@ -0,0 +1 @@ +../which/bin/which \ No newline at end of file diff --git a/node_modules/acorn-dynamic-import/CHANGELOG.md b/node_modules/acorn-dynamic-import/CHANGELOG.md new file mode 100644 index 000000000..52a4e2630 --- /dev/null +++ b/node_modules/acorn-dynamic-import/CHANGELOG.md @@ -0,0 +1,19 @@ +# 2.0.2 + +- Fixing parsing of `yield import()`. + +# 2.0.1 + +- Removing unnecessary `in-publish` dependency. + +# 2.0.0 + +- Updating acorn version to >= 4. + +# 1.0.1 + +- Fixes for publishing the module. + +# 1.0.0 + +- Initial release of plugin. diff --git a/node_modules/acorn-dynamic-import/LICENSE b/node_modules/acorn-dynamic-import/LICENSE new file mode 100755 index 000000000..25c6dc8be --- /dev/null +++ b/node_modules/acorn-dynamic-import/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Jordan Gensler + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/acorn-dynamic-import/README.md b/node_modules/acorn-dynamic-import/README.md new file mode 100755 index 000000000..8fcd583f7 --- /dev/null +++ b/node_modules/acorn-dynamic-import/README.md @@ -0,0 +1,33 @@ +# Dynamic import support in acorn + +This is plugin for [Acorn](http://marijnhaverbeke.nl/acorn/) - a tiny, fast JavaScript parser, written completely in JavaScript. + +For more information, check out the [proposal repo](https://github.com/tc39/proposal-dynamic-import). + +## Usage + +You can use this module directly in order to get Acorn instance with plugin installed: + +```js +import acorn from 'acorn-dynamic-import'; +// or... +const acorn = require('acorn-dynamic-import').default; +``` + +Or you can use `inject.js` for injecting plugin into your own version of Acorn like this: + +```js +const acorn = require('acorn-dynamic-import/lib/inject').default(require('./custom-acorn')); +``` + +Then, use the `plugins` option whenever you need to support dynamicImport while parsing: + +```js +const ast = acorn.parse(code, { + plugins: { dynamicImport: true } +}); +``` + +## License + +This plugin is issued under the [MIT license](./LICENSE). diff --git a/node_modules/acorn-dynamic-import/lib/index.js b/node_modules/acorn-dynamic-import/lib/index.js new file mode 100644 index 000000000..b6087debf --- /dev/null +++ b/node_modules/acorn-dynamic-import/lib/index.js @@ -0,0 +1,17 @@ +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _acorn = require('acorn'); + +var acorn = _interopRequireWildcard(_acorn); + +var _inject = require('./inject'); + +var _inject2 = _interopRequireDefault(_inject); + +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['default'] = (0, _inject2['default'])(acorn); \ No newline at end of file diff --git a/node_modules/acorn-dynamic-import/lib/inject.js b/node_modules/acorn-dynamic-import/lib/inject.js new file mode 100644 index 000000000..7b3832b70 --- /dev/null +++ b/node_modules/acorn-dynamic-import/lib/inject.js @@ -0,0 +1,70 @@ +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports['default'] = injectDynamicImport; +/* eslint-disable no-underscore-dangle */ + +function injectDynamicImport(acorn) { + var tt = acorn.tokTypes; + + // NOTE: This allows `yield import()` to parse correctly. + tt._import.startsExpr = true; + + function parseDynamicImport() { + var node = this.startNode(); + this.next(); + if (this.type !== tt.parenL) { + this.unexpected(); + } + return this.finishNode(node, 'Import'); + } + + function peekNext() { + return this.input[this.pos]; + } + + // eslint-disable-next-line no-param-reassign + acorn.plugins.dynamicImport = function () { + function dynamicImportPlugin(instance) { + instance.extend('parseStatement', function (nextMethod) { + return function () { + function parseStatement() { + var node = this.startNode(); + if (this.type === tt._import) { + var nextToken = peekNext.call(this); + if (nextToken === tt.parenL.label) { + var expr = this.parseExpression(); + return this.parseExpressionStatement(node, expr); + } + } + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return nextMethod.apply(this, args); + } + + return parseStatement; + }(); + }); + + instance.extend('parseExprAtom', function (nextMethod) { + return function () { + function parseExprAtom(refDestructuringErrors) { + if (this.type === tt._import) { + return parseDynamicImport.call(this); + } + return nextMethod.call(this, refDestructuringErrors); + } + + return parseExprAtom; + }(); + }); + } + + return dynamicImportPlugin; + }(); + + return acorn; +} \ No newline at end of file diff --git a/node_modules/acorn-dynamic-import/node_modules/.bin/acorn b/node_modules/acorn-dynamic-import/node_modules/.bin/acorn new file mode 120000 index 000000000..cf7676038 --- /dev/null +++ b/node_modules/acorn-dynamic-import/node_modules/.bin/acorn @@ -0,0 +1 @@ +../acorn/bin/acorn \ No newline at end of file diff --git a/node_modules/acorn-dynamic-import/node_modules/acorn/.npmignore b/node_modules/acorn-dynamic-import/node_modules/acorn/.npmignore new file mode 100644 index 000000000..eb3644b3a --- /dev/null +++ b/node_modules/acorn-dynamic-import/node_modules/acorn/.npmignore @@ -0,0 +1,10 @@ +/.tern-port +/test +/local +/rollup +/bin/generate-identifier-regex.js +/bin/update_authors.sh +.editorconfig +.gitattributes +.tern-project +.travis.yml diff --git a/node_modules/acorn-dynamic-import/node_modules/acorn/AUTHORS b/node_modules/acorn-dynamic-import/node_modules/acorn/AUTHORS new file mode 100644 index 000000000..ab64891bf --- /dev/null +++ b/node_modules/acorn-dynamic-import/node_modules/acorn/AUTHORS @@ -0,0 +1,62 @@ +List of Acorn contributors. Updated before every release. + +Adrian Rakovsky +Alistair Braidwood +Amila Welihinda +Andres Suarez +Angelo +Aparajita Fishman +Arian Stolwijk +Artem Govorov +Brandon Mills +Charles Hughes +Conrad Irwin +Daniel Tschinder +David Bonnet +Domenico Matteo +Forbes Lindesay +Gilad Peleg +impinball +Ingvar Stepanyan +Jackson Ray Hamilton +Jesse McCarthy +Jiaxing Wang +Joel Kemp +Johannes Herr +Jordan Klassen +Jürg Lehni +Kai Cataldo +keeyipchan +Keheliya Gallaba +Kevin Irish +Kevin Kwok +krator +Marijn Haverbeke +Martin Carlberg +Mat Garcia +Mathias Bynens +Mathieu 'p01' Henri +Matthew Bastien +Max Schaefer +Max Zerzouri +Mihai Bazon +Mike Rennie +naoh +Nicholas C. Zakas +Nick Fitzgerald +Olivier Thomann +Oskar Schöldström +Paul Harper +Peter Rust +PlNG +Prayag Verma +ReadmeCritic +r-e-d +Richard Gibson +Rich Harris +Sebastian McKenzie +Simen Bekkhus +Timothy Gu +Toru Nagashima +Wexpo Lyu +zsjforcn diff --git a/node_modules/acorn-dynamic-import/node_modules/acorn/CHANGELOG.md b/node_modules/acorn-dynamic-import/node_modules/acorn/CHANGELOG.md new file mode 100644 index 000000000..f6d1fa8b3 --- /dev/null +++ b/node_modules/acorn-dynamic-import/node_modules/acorn/CHANGELOG.md @@ -0,0 +1,286 @@ +## 4.0.11 (2017-02-07) + +### Bug fixes + +Allow all forms of member expressions to be parenthesized as lvalue. + +## 4.0.10 (2017-02-07) + +### Bug fixes + +Don't expect semicolons after default-exported functions or classes, +even when they are expressions. + +Check for use of `'use strict'` directives in non-simple parameter +functions, even when already in strict mode. + +## 4.0.9 (2017-02-06) + +### Bug fixes + +Fix incorrect error raised for parenthesized simple assignment +targets, so that `(x) = 1` parses again. + +## 4.0.8 (2017-02-03) + +### Bug fixes + +Solve spurious parenthesized pattern errors by temporarily erring on +the side of accepting programs that our delayed errors don't handle +correctly yet. + +## 4.0.7 (2017-02-02) + +### Bug fixes + +Accept invalidly rejected code like `(x).y = 2` again. + +Don't raise an error when a function _inside_ strict code has a +non-simple parameter list. + +## 4.0.6 (2017-02-02) + +### Bug fixes + +Fix exponential behavior (manifesting itself as a complete hang for +even relatively small source files) introduced by the new 'use strict' +check. + +## 4.0.5 (2017-02-02) + +### Bug fixes + +Disallow parenthesized pattern expressions. + +Allow keywords as export names. + +Don't allow the `async` keyword to be parenthesized. + +Properly raise an error when a keyword contains a character escape. + +Allow `"use strict"` to appear after other string literal expressions. + +Disallow labeled declarations. + +## 4.0.4 (2016-12-19) + +### Bug fixes + +Fix issue with loading acorn_loose.js with an AMD loader. + +Fix crash when `export` was followed by a keyword that can't be +exported. + +## 4.0.3 (2016-08-16) + +### Bug fixes + +Allow regular function declarations inside single-statement `if` +branches in loose mode. Forbid them entirely in strict mode. + +Properly parse properties named `async` in ES2017 mode. + +Fix bug where reserved words were broken in ES2017 mode. + +## 4.0.2 (2016-08-11) + +### Bug fixes + +Don't ignore period or 'e' characters after octal numbers. + +Fix broken parsing for call expressions in default parameter values +of arrow functions. + +## 4.0.1 (2016-08-08) + +### Bug fixes + +Fix false positives in duplicated export name errors. + +## 4.0.0 (2016-08-07) + +### Breaking changes + +The default `ecmaVersion` option value is now 7. + +A number of internal method signatures changed, so plugins might need +to be updated. + +### Bug fixes + +The parser now raises errors on duplicated export names. + +`arguments` and `eval` can now be used in shorthand properties. + +Duplicate parameter names in non-simple argument lists now always +produce an error. + +### New features + +The `ecmaVersion` option now also accepts year-style version numbers +(2015, etc). + +Support for `async`/`await` syntax when `ecmaVersion` is >= 8. + +Support for trailing commas in call expressions when `ecmaVersion` +is >= 8. + +## 3.3.0 (2016-07-25) + +### Bug fixes + +Fix bug in tokenizing of regexp operator after a function declaration. + +Fix parser crash when parsing an array pattern with a hole. + +### New features + +Implement check against complex argument lists in functions that +enable strict mode in ES7. + +## 3.2.0 (2016-06-07) + +### Bug fixes + +Improve handling of lack of unicode regexp support in host +environment. + +Properly reject shorthand properties whose name is a keyword. + +Don't crash when the loose parser is called without options object. + +### New features + +Visitors created with `visit.make` now have their base as _prototype_, +rather than copying properties into a fresh object. + +Make it possible to use `visit.ancestor` with a walk state. + +## 3.1.0 (2016-04-18) + +### Bug fixes + +Fix issue where the loose parser created invalid TemplateElement nodes +for unclosed template literals. + +Properly tokenize the division operator directly after a function +expression. + +Allow trailing comma in destructuring arrays. + +### New features + +The walker now allows defining handlers for `CatchClause` nodes. + +## 3.0.4 (2016-02-25) + +### Fixes + +Allow update expressions as left-hand-side of the ES7 exponential +operator. + +## 3.0.2 (2016-02-10) + +### Fixes + +Fix bug that accidentally made `undefined` a reserved word when +parsing ES7. + +## 3.0.0 (2016-02-10) + +### Breaking changes + +The default value of the `ecmaVersion` option is now 6 (used to be 5). + +Support for comprehension syntax (which was dropped from the draft +spec) has been removed. + +### Fixes + +`let` and `yield` are now “contextual keywords”, meaning you can +mostly use them as identifiers in ES5 non-strict code. + +A parenthesized class or function expression after `export default` is +now parsed correctly. + +### New features + +When `ecmaVersion` is set to 7, Acorn will parse the exponentiation +operator (`**`). + +The identifier character ranges are now based on Unicode 8.0.0. + +Plugins can now override the `raiseRecoverable` method to override the +way non-critical errors are handled. + +## 2.7.0 (2016-01-04) + +### Fixes + +Stop allowing rest parameters in setters. + +Make sure the loose parser always attaches a `local` property to +`ImportNamespaceSpecifier` nodes. + +Disallow `y` rexexp flag in ES5. + +Disallow `\00` and `\000` escapes in strict mode. + +Raise an error when an import name is a reserved word. + +## 2.6.4 (2015-11-12) + +### Fixes + +Fix crash in loose parser when parsing invalid object pattern. + +### New features + +Support plugins in the loose parser. + +## 2.6.2 (2015-11-10) + +### Fixes + +Don't crash when no options object is passed. + +## 2.6.0 (2015-11-09) + +### Fixes + +Add `await` as a reserved word in module sources. + +Disallow `yield` in a parameter default value for a generator. + +Forbid using a comma after a rest pattern in an array destructuring. + +### New features + +Support parsing stdin in command-line tool. + +## 2.5.2 (2015-10-27) + +### Fixes + +Fix bug where the walker walked an exported `let` statement as an +expression. + +## 2.5.0 (2015-10-27) + +### Fixes + +Fix tokenizer support in the command-line tool. + +In the loose parser, don't allow non-string-literals as import +sources. + +Stop allowing `new.target` outside of functions. + +Remove legacy `guard` and `guardedHandler` properties from try nodes. + +Stop allowing multiple `__proto__` properties on an object literal in +strict mode. + +Don't allow rest parameters to be non-identifier patterns. + +Check for duplicate paramter names in arrow functions. diff --git a/node_modules/acorn-dynamic-import/node_modules/acorn/LICENSE b/node_modules/acorn-dynamic-import/node_modules/acorn/LICENSE new file mode 100644 index 000000000..a35ebf44f --- /dev/null +++ b/node_modules/acorn-dynamic-import/node_modules/acorn/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2012-2016 by various contributors (see AUTHORS) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/acorn-dynamic-import/node_modules/acorn/README.md b/node_modules/acorn-dynamic-import/node_modules/acorn/README.md new file mode 100644 index 000000000..b7efe2341 --- /dev/null +++ b/node_modules/acorn-dynamic-import/node_modules/acorn/README.md @@ -0,0 +1,409 @@ +# 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) +[![CDNJS](https://img.shields.io/cdnjs/v/acorn.svg)](https://cdnjs.com/libraries/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, 6 (2015), 7 (2016), or 8 (2017). This influences support for strict + mode, the set of reserved words, and support for new syntax features. + Default is 7. + + **NOTE**: Only 'stage 4' (finalized) ECMAScript features are being + implemented by Acorn. + +- **sourceType**: Indicate the mode the code should be parsed in. Can be + either `"script"` or `"module"`. This influences global strict mode + and parsing of `import` and `export` declarations. + +- **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 (regardless of the `location` option) 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 the callbacks as a third 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|--ecma7`: 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) + } +}) +``` + +### Existing plugins + + - [`acorn-jsx`](https://github.com/RReverser/acorn-jsx): Parse [Facebook JSX syntax extensions](https://github.com/facebook/jsx) + - [`acorn-es7-plugin`](https://github.com/MatAtBread/acorn-es7-plugin/): Parse [async/await syntax proposal](https://github.com/tc39/ecmascript-asyncawait) + - [`acorn-object-spread`](https://github.com/UXtemple/acorn-object-spread): Parse [object spread syntax proposal](https://github.com/sebmarkbage/ecmascript-rest-spread) + - [`acorn-es7`](https://www.npmjs.com/package/acorn-es7): Parse [decorator syntax proposal](https://github.com/wycats/javascript-decorators) + - [`acorn-objj`](https://www.npmjs.com/package/acorn-objj): [Objective-J](http://www.cappuccino-project.org/learn/objective-j.html) language parser built as Acorn plugin diff --git a/node_modules/acorn-dynamic-import/node_modules/acorn/bin/acorn b/node_modules/acorn-dynamic-import/node_modules/acorn/bin/acorn new file mode 100755 index 000000000..78ebd4f0e --- /dev/null +++ b/node_modules/acorn-dynamic-import/node_modules/acorn/bin/acorn @@ -0,0 +1,67 @@ +#!/usr/bin/env node +'use strict'; + +var path = require('path'); +var fs = require('fs'); +var acorn = require('../dist/acorn.js'); + +var infile; +var forceFile; +var silent = false; +var compact = false; +var tokenize = false; +var options = {} + +function help(status) { + var print = (status == 0) ? console.log : console.error + print("usage: " + path.basename(process.argv[1]) + " [--ecma3|--ecma5|--ecma6|--ecma7|...|--ecma2015|--ecma2016|...]") + 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 == "--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 { + var match = arg.match(/^--ecma(\d+)$/) + if (match) + options.ecmaVersion = +match[1] + else + help(1) + } +} + +function run(code) { + var result + 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 + 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(fs.readFileSync(infile, "utf8")) +} else { + var code = "" + process.stdin.resume() + process.stdin.on("data", function (chunk) { return code += chunk; }) + process.stdin.on("end", function () { return run(code); }) +} \ No newline at end of file diff --git a/node_modules/acorn-dynamic-import/node_modules/acorn/dist/.keep b/node_modules/acorn-dynamic-import/node_modules/acorn/dist/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/acorn-dynamic-import/node_modules/acorn/dist/acorn.es.js b/node_modules/acorn-dynamic-import/node_modules/acorn/dist/acorn.es.js new file mode 100644 index 000000000..2b34af034 --- /dev/null +++ b/node_modules/acorn-dynamic-import/node_modules/acorn/dist/acorn.es.js @@ -0,0 +1,3401 @@ +// Reserved word lists for various dialects of the language + +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" +} + +// 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 + " const class extends export import 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, 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) +} + +// ## 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). +// +// The `startsExpr` property is used to check if the token ends a +// `yield` expression. It is set on all token types that either can +// directly start an expression (like a quotation mark) or can +// continue an expression (like the body of a string). +// +// `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, conf) { + if ( conf === void 0 ) conf = {}; + + this.label = label + this.keyword = conf.keyword + this.beforeExpr = !!conf.beforeExpr + this.startsExpr = !!conf.startsExpr + 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}; +// Map keyword names to token types. + +var keywordTypes = {} + +// Succinct definitions of keyword token types +function kw(name, options) { + if ( options === void 0 ) options = {}; + + options.keyword = name + return keywordTypes[name] = new TokenType(name, options) +} + +var tt = { + 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}), + braceR: new TokenType("}"), + parenL: new TokenType("(", {beforeExpr: true, startsExpr: true}), + parenR: new TokenType(")"), + comma: new TokenType(",", beforeExpr), + semi: new TokenType(";", beforeExpr), + colon: 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}), + + // 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), + starstar: new TokenType("**", {beforeExpr: true}), + + // Keyword token types. + _break: kw("break"), + _case: kw("case", beforeExpr), + _catch: kw("catch"), + _continue: kw("continue"), + _debugger: kw("debugger"), + _default: kw("default", beforeExpr), + _do: kw("do", {isLoop: true, beforeExpr: true}), + _else: kw("else", beforeExpr), + _finally: kw("finally"), + _for: kw("for", {isLoop: true}), + _function: kw("function", startsExpr), + _if: kw("if"), + _return: kw("return", beforeExpr), + _switch: kw("switch"), + _throw: kw("throw", beforeExpr), + _try: kw("try"), + _var: kw("var"), + _const: kw("const"), + _while: kw("while", {isLoop: true}), + _with: kw("with"), + _new: kw("new", {beforeExpr: true, startsExpr: true}), + _this: kw("this", startsExpr), + _super: kw("super", startsExpr), + _class: kw("class"), + _extends: kw("extends", beforeExpr), + _export: kw("export"), + _import: kw("import"), + _null: kw("null", startsExpr), + _true: kw("true", startsExpr), + _false: kw("false", startsExpr), + _in: kw("in", {beforeExpr: true, binop: 7}), + _instanceof: kw("instanceof", {beforeExpr: true, binop: 7}), + _typeof: kw("typeof", {beforeExpr: true, prefix: true, startsExpr: true}), + _void: kw("void", {beforeExpr: true, prefix: true, startsExpr: true}), + _delete: 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]/ + +var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g + +function isArray(obj) { + return Object.prototype.toString.call(obj) === "[object Array]" +} + +// Checks if an object has a property. + +function has(obj, propName) { + return Object.prototype.hasOwnProperty.call(obj, propName) +} + +// These are used when `options.locations` is on, for the +// `startLoc` and `endLoc` properties. + +var Position = function Position(line, col) { + this.line = line + this.column = col +}; + +Position.prototype.offset = function offset (n) { + return new Position(this.line, this.column + n) +}; + +var SourceLocation = function SourceLocation(p, start, end) { + 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. + +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) + } + } +} + +// 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, 5, 6 (2015), 7 (2016), or 8 (2017). This influences support + // for strict mode, the set of reserved words, and support for + // new syntax features. The default is 7. + ecmaVersion: 7, + // `sourceType` indicates the mode the code should be parsed in. + // Can be either `"script"` or `"module"`. This influences global + // strict mode and parsing of `import` and `export` declarations. + 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: {} +} + +// Interpret and default an options object + +function getOptions(opts) { + var options = {} + + for (var opt in defaultOptions) + options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt] + + if (options.ecmaVersion >= 2015) + options.ecmaVersion -= 2009 + + if (options.allowReserved == null) + options.allowReserved = options.ecmaVersion < 5 + + if (isArray(options.onToken)) { + var tokens = options.onToken + options.onToken = function (token) { return tokens.push(token); } + } + if (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 SourceLocation(this, startLoc, endLoc) + if (options.ranges) + comment.range = [start, end] + array.push(comment) + } +} + +// Registered plugins +var plugins = {} + +function keywordRegexp(words) { + return new RegExp("^(" + words.replace(/ /g, "|") + ")$") +} + +var Parser = function Parser(options, input, startPos) { + this.options = options = getOptions(options) + this.sourceFile = options.sourceFile + this.keywords = keywordRegexp(keywords[options.ecmaVersion >= 6 ? 6 : 5]) + var reserved = "" + if (!options.allowReserved) { + for (var v = options.ecmaVersion;; v--) + if (reserved = reservedWords[v]) break + if (options.sourceType == "module") reserved += " await" + } + this.reservedWords = keywordRegexp(reserved) + var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict + this.reservedWordsStrict = keywordRegexp(reservedStrict) + this.reservedWordsStrictBind = keywordRegexp(reservedStrict + " " + 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 = this.input.lastIndexOf("\n", startPos - 1) + 1 + this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length + } else { + this.pos = this.lineStart = 0 + this.curLine = 1 + } + + // Properties of the current token: + // Its type + this.type = tt.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.inModule = options.sourceType === "module" + this.strict = this.inModule || this.strictDirective(this.pos) + + // Used to signify the start of a potential arrow function + this.potentialArrowAt = -1 + + // Flags to track whether we are in a function, a generator, an async function. + this.inFunction = this.inGenerator = this.inAsync = false + // Positions to delayed-check that yield/await does not exist in default parameters. + this.yieldPos = this.awaitPos = 0 + // 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) { + var this$1 = this; + + for (var name in pluginConfigs) { + var plugin = plugins[name] + if (!plugin) throw new Error("Plugin '" + name + "' not found") + plugin(this$1, pluginConfigs[name]) + } +}; + +Parser.prototype.parse = function parse () { + var node = this.options.program || this.startNode() + this.nextToken() + return this.parseTopLevel(node) +}; + +var pp = Parser.prototype + +// ## Parser utilities + +var literal = /^(?:'((?:[^\']|\.)*)'|"((?:[^\"]|\.)*)"|;)/ +pp.strictDirective = function(start) { + var this$1 = this; + + for (;;) { + skipWhiteSpace.lastIndex = start + start += skipWhiteSpace.exec(this$1.input)[0].length + var match = literal.exec(this$1.input.slice(start)) + if (!match) return false + if ((match[1] || match[2]) == "use strict") return true + start += match[0].length + } +} + +// 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 === tt.name && this.value === name +} + +// Consumes contextual keyword if possible. + +pp.eatContextual = function(name) { + return this.value === name && this.eat(tt.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 === tt.eof || + this.type === tt.braceR || + 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(tt.semi) && !this.insertSemicolon()) this.unexpected() +} + +pp.afterTrailingComma = function(tokType, notNext) { + if (this.type == tokType) { + if (this.options.onTrailingComma) + this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc) + if (!notNext) + 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") +} + +var DestructuringErrors = function DestructuringErrors() { + this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = -1 +}; + +pp.checkPatternErrors = function(refDestructuringErrors, isAssign) { + if (!refDestructuringErrors) return + if (refDestructuringErrors.trailingComma > -1) + this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element") + var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind + if (parens > -1) this.raiseRecoverable(parens, "Parenthesized pattern") +} + +pp.checkExpressionErrors = function(refDestructuringErrors, andThrow) { + var pos = refDestructuringErrors ? refDestructuringErrors.shorthandAssign : -1 + if (!andThrow) return pos >= 0 + if (pos > -1) this.raise(pos, "Shorthand property assignments are valid only in destructuring patterns") +} + +pp.checkYieldAwaitInDefaultParams = function() { + if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos)) + this.raise(this.yieldPos, "Yield expression cannot be a default value") + if (this.awaitPos) + this.raise(this.awaitPos, "Await expression cannot be a default value") +} + +pp.isSimpleAssignTarget = function(expr) { + if (expr.type === "ParenthesizedExpression") + return this.isSimpleAssignTarget(expr.expression) + return expr.type === "Identifier" || expr.type === "MemberExpression" +} + +var pp$1 = 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$1.parseTopLevel = function(node) { + var this$1 = this; + + var exports = {} + if (!node.body) node.body = [] + while (this.type !== tt.eof) { + var stmt = this$1.parseStatement(true, true, exports) + node.body.push(stmt) + } + this.next() + if (this.options.ecmaVersion >= 6) { + node.sourceType = this.options.sourceType + } + return this.finishNode(node, "Program") +} + +var loopLabel = {kind: "loop"}; +var switchLabel = {kind: "switch"}; +pp$1.isLet = function() { + if (this.type !== tt.name || this.options.ecmaVersion < 6 || this.value != "let") return false + skipWhiteSpace.lastIndex = this.pos + var skip = skipWhiteSpace.exec(this.input) + var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next) + if (nextCh === 91 || nextCh == 123) return true // '{' and '[' + if (isIdentifierStart(nextCh, true)) { + for (var pos = next + 1; isIdentifierChar(this.input.charCodeAt(pos), true); ++pos) {} + var ident = this.input.slice(next, pos) + if (!this.isKeyword(ident)) return true + } + return false +} + +// check 'async [no LineTerminator here] function' +// - 'async /*foo*/ function' is OK. +// - 'async /*\n*/ function' is invalid. +pp$1.isAsyncFunction = function() { + if (this.type !== tt.name || this.options.ecmaVersion < 8 || this.value != "async") + return false + + skipWhiteSpace.lastIndex = this.pos + var skip = skipWhiteSpace.exec(this.input) + var next = this.pos + skip[0].length + return !lineBreak.test(this.input.slice(this.pos, next)) && + this.input.slice(next, next + 8) === "function" && + (next + 8 == this.input.length || !isIdentifierChar(this.input.charAt(next + 8))) +} + +// 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$1.parseStatement = function(declaration, topLevel, exports) { + var starttype = this.type, node = this.startNode(), kind + + if (this.isLet()) { + starttype = tt._var + kind = "let" + } + + // 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 tt._break: case tt._continue: return this.parseBreakContinueStatement(node, starttype.keyword) + case tt._debugger: return this.parseDebuggerStatement(node) + case tt._do: return this.parseDoStatement(node) + case tt._for: return this.parseForStatement(node) + case tt._function: + if (!declaration && this.options.ecmaVersion >= 6) this.unexpected() + return this.parseFunctionStatement(node, false) + case tt._class: + if (!declaration) this.unexpected() + return this.parseClass(node, true) + case tt._if: return this.parseIfStatement(node) + case tt._return: return this.parseReturnStatement(node) + case tt._switch: return this.parseSwitchStatement(node) + case tt._throw: return this.parseThrowStatement(node) + case tt._try: return this.parseTryStatement(node) + case tt._const: case tt._var: + kind = kind || this.value + if (!declaration && kind != "var") this.unexpected() + return this.parseVarStatement(node, kind) + case tt._while: return this.parseWhileStatement(node) + case tt._with: return this.parseWithStatement(node) + case tt.braceL: return this.parseBlock() + case tt.semi: return this.parseEmptyStatement(node) + case tt._export: + case tt._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 === tt._import ? this.parseImport(node) : this.parseExport(node, exports) + + // 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: + if (this.isAsyncFunction() && declaration) { + this.next() + return this.parseFunctionStatement(node, true) + } + + var maybeName = this.value, expr = this.parseExpression() + if (starttype === tt.name && expr.type === "Identifier" && this.eat(tt.colon)) + return this.parseLabeledStatement(node, maybeName, expr) + else return this.parseExpressionStatement(node, expr) + } +} + +pp$1.parseBreakContinueStatement = function(node, keyword) { + var this$1 = this; + + var isBreak = keyword == "break" + this.next() + if (this.eat(tt.semi) || this.insertSemicolon()) node.label = null + else if (this.type !== tt.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$1.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$1.parseDebuggerStatement = function(node) { + this.next() + this.semicolon() + return this.finishNode(node, "DebuggerStatement") +} + +pp$1.parseDoStatement = function(node) { + this.next() + this.labels.push(loopLabel) + node.body = this.parseStatement(false) + this.labels.pop() + this.expect(tt._while) + node.test = this.parseParenExpression() + if (this.options.ecmaVersion >= 6) + this.eat(tt.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$1.parseForStatement = function(node) { + this.next() + this.labels.push(loopLabel) + this.expect(tt.parenL) + if (this.type === tt.semi) return this.parseFor(node, null) + var isLet = this.isLet() + if (this.type === tt._var || this.type === tt._const || isLet) { + var init$1 = this.startNode(), kind = isLet ? "let" : this.value + this.next() + this.parseVar(init$1, true, kind) + this.finishNode(init$1, "VariableDeclaration") + if ((this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1 && + !(kind !== "var" && init$1.declarations[0].init)) + return this.parseForIn(node, init$1) + return this.parseFor(node, init$1) + } + var refDestructuringErrors = new DestructuringErrors + var init = this.parseExpression(true, refDestructuringErrors) + if (this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) { + this.toAssignable(init) + this.checkLVal(init) + this.checkPatternErrors(refDestructuringErrors, true) + return this.parseForIn(node, init) + } else { + this.checkExpressionErrors(refDestructuringErrors, true) + } + return this.parseFor(node, init) +} + +pp$1.parseFunctionStatement = function(node, isAsync) { + this.next() + return this.parseFunction(node, true, false, isAsync) +} + +pp$1.isFunction = function() { + return this.type === tt._function || this.isAsyncFunction() +} + +pp$1.parseIfStatement = function(node) { + this.next() + node.test = this.parseParenExpression() + // allow function declarations in branches, but only in non-strict mode + node.consequent = this.parseStatement(!this.strict && this.isFunction()) + node.alternate = this.eat(tt._else) ? this.parseStatement(!this.strict && this.isFunction()) : null + return this.finishNode(node, "IfStatement") +} + +pp$1.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(tt.semi) || this.insertSemicolon()) node.argument = null + else { node.argument = this.parseExpression(); this.semicolon() } + return this.finishNode(node, "ReturnStatement") +} + +pp$1.parseSwitchStatement = function(node) { + var this$1 = this; + + this.next() + node.discriminant = this.parseParenExpression() + node.cases = [] + this.expect(tt.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 != tt.braceR;) { + if (this$1.type === tt._case || this$1.type === tt._default) { + var isCase = this$1.type === tt._case + if (cur) this$1.finishNode(cur, "SwitchCase") + node.cases.push(cur = this$1.startNode()) + cur.consequent = [] + this$1.next() + if (isCase) { + cur.test = this$1.parseExpression() + } else { + if (sawDefault) this$1.raiseRecoverable(this$1.lastTokStart, "Multiple default clauses") + sawDefault = true + cur.test = null + } + this$1.expect(tt.colon) + } else { + if (!cur) this$1.unexpected() + cur.consequent.push(this$1.parseStatement(true)) + } + } + if (cur) this.finishNode(cur, "SwitchCase") + this.next() // Closing brace + this.labels.pop() + return this.finishNode(node, "SwitchStatement") +} + +pp$1.parseThrowStatement = function(node) { + this.next() + if (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$1.parseTryStatement = function(node) { + this.next() + node.block = this.parseBlock() + node.handler = null + if (this.type === tt._catch) { + var clause = this.startNode() + this.next() + this.expect(tt.parenL) + clause.param = this.parseBindingAtom() + this.checkLVal(clause.param, true) + this.expect(tt.parenR) + clause.body = this.parseBlock() + node.handler = this.finishNode(clause, "CatchClause") + } + node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null + if (!node.handler && !node.finalizer) + this.raise(node.start, "Missing catch or finally clause") + return this.finishNode(node, "TryStatement") +} + +pp$1.parseVarStatement = function(node, kind) { + this.next() + this.parseVar(node, false, kind) + this.semicolon() + return this.finishNode(node, "VariableDeclaration") +} + +pp$1.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$1.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$1.parseEmptyStatement = function(node) { + this.next() + return this.finishNode(node, "EmptyStatement") +} + +pp$1.parseLabeledStatement = function(node, maybeName, expr) { + var this$1 = this; + + for (var i = 0; i < this.labels.length; ++i) + if (this$1.labels[i].name === maybeName) this$1.raise(expr.start, "Label '" + maybeName + "' is already declared") + var kind = this.type.isLoop ? "loop" : this.type === tt._switch ? "switch" : null + for (var i$1 = this.labels.length - 1; i$1 >= 0; i$1--) { + var label = this$1.labels[i$1] + if (label.statementStart == node.start) { + label.statementStart = this$1.start + label.kind = kind + } else break + } + this.labels.push({name: maybeName, kind: kind, statementStart: this.start}) + node.body = this.parseStatement(true) + if (node.body.type == "ClassDeclaration" || + node.body.type == "VariableDeclaration" && (this.strict || node.body.kind != "var") || + node.body.type == "FunctionDeclaration" && (this.strict || node.body.generator)) + this.raiseRecoverable(node.body.start, "Invalid labeled declaration") + this.labels.pop() + node.label = expr + return this.finishNode(node, "LabeledStatement") +} + +pp$1.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$1.parseBlock = function() { + var this$1 = this; + + var node = this.startNode() + node.body = [] + this.expect(tt.braceL) + while (!this.eat(tt.braceR)) { + var stmt = this$1.parseStatement(true) + node.body.push(stmt) + } + 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$1.parseFor = function(node, init) { + node.init = init + this.expect(tt.semi) + node.test = this.type === tt.semi ? null : this.parseExpression() + this.expect(tt.semi) + node.update = this.type === tt.parenR ? null : this.parseExpression() + this.expect(tt.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$1.parseForIn = function(node, init) { + var type = this.type === tt._in ? "ForInStatement" : "ForOfStatement" + this.next() + node.left = init + node.right = this.parseExpression() + this.expect(tt.parenR) + node.body = this.parseStatement(false) + this.labels.pop() + return this.finishNode(node, type) +} + +// Parse a list of variable declarations. + +pp$1.parseVar = function(node, isFor, kind) { + var this$1 = this; + + node.declarations = [] + node.kind = kind + for (;;) { + var decl = this$1.startNode() + this$1.parseVarId(decl) + if (this$1.eat(tt.eq)) { + decl.init = this$1.parseMaybeAssign(isFor) + } else if (kind === "const" && !(this$1.type === tt._in || (this$1.options.ecmaVersion >= 6 && this$1.isContextual("of")))) { + this$1.unexpected() + } else if (decl.id.type != "Identifier" && !(isFor && (this$1.type === tt._in || this$1.isContextual("of")))) { + this$1.raise(this$1.lastTokEnd, "Complex binding patterns require an initialization value") + } else { + decl.init = null + } + node.declarations.push(this$1.finishNode(decl, "VariableDeclarator")) + if (!this$1.eat(tt.comma)) break + } + return node +} + +pp$1.parseVarId = function(decl) { + decl.id = this.parseBindingAtom() + this.checkLVal(decl.id, true) +} + +// Parse a function declaration or literal (depending on the +// `isStatement` parameter). + +pp$1.parseFunction = function(node, isStatement, allowExpressionBody, isAsync) { + this.initFunction(node) + if (this.options.ecmaVersion >= 6 && !isAsync) + node.generator = this.eat(tt.star) + if (this.options.ecmaVersion >= 8) + node.async = !!isAsync + + if (isStatement == null) + isStatement = this.type == tt.name + if (isStatement) + node.id = this.parseIdent() + + var oldInGen = this.inGenerator, oldInAsync = this.inAsync, + oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldInFunc = this.inFunction + this.inGenerator = node.generator + this.inAsync = node.async + this.yieldPos = 0 + this.awaitPos = 0 + this.inFunction = true + + if (!isStatement && this.type === tt.name) + node.id = this.parseIdent() + this.parseFunctionParams(node) + this.parseFunctionBody(node, allowExpressionBody) + + this.inGenerator = oldInGen + this.inAsync = oldInAsync + this.yieldPos = oldYieldPos + this.awaitPos = oldAwaitPos + this.inFunction = oldInFunc + return this.finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression") +} + +pp$1.parseFunctionParams = function(node) { + this.expect(tt.parenL) + node.params = this.parseBindingList(tt.parenR, false, this.options.ecmaVersion >= 8, true) + this.checkYieldAwaitInDefaultParams() +} + +// Parse a class declaration or literal (depending on the +// `isStatement` parameter). + +pp$1.parseClass = function(node, isStatement) { + var this$1 = this; + + this.next() + if (isStatement == null) isStatement = this.type === tt.name + this.parseClassId(node, isStatement) + this.parseClassSuper(node) + var classBody = this.startNode() + var hadConstructor = false + classBody.body = [] + this.expect(tt.braceL) + while (!this.eat(tt.braceR)) { + if (this$1.eat(tt.semi)) continue + var method = this$1.startNode() + var isGenerator = this$1.eat(tt.star) + var isAsync = false + var isMaybeStatic = this$1.type === tt.name && this$1.value === "static" + this$1.parsePropertyName(method) + method.static = isMaybeStatic && this$1.type !== tt.parenL + if (method.static) { + if (isGenerator) this$1.unexpected() + isGenerator = this$1.eat(tt.star) + this$1.parsePropertyName(method) + } + if (this$1.options.ecmaVersion >= 8 && !isGenerator && !method.computed && + method.key.type === "Identifier" && method.key.name === "async" && this$1.type !== tt.parenL && + !this$1.canInsertSemicolon()) { + isAsync = true + this$1.parsePropertyName(method) + } + method.kind = "method" + var isGetSet = false + if (!method.computed) { + var key = method.key; + if (!isGenerator && !isAsync && key.type === "Identifier" && this$1.type !== tt.parenL && (key.name === "get" || key.name === "set")) { + isGetSet = true + method.kind = key.name + key = this$1.parsePropertyName(method) + } + if (!method.static && (key.type === "Identifier" && key.name === "constructor" || + key.type === "Literal" && key.value === "constructor")) { + if (hadConstructor) this$1.raise(key.start, "Duplicate constructor in the same class") + if (isGetSet) this$1.raise(key.start, "Constructor can't have get/set modifier") + if (isGenerator) this$1.raise(key.start, "Constructor can't be a generator") + if (isAsync) this$1.raise(key.start, "Constructor can't be an async method") + method.kind = "constructor" + hadConstructor = true + } + } + this$1.parseClassMethod(classBody, method, isGenerator, isAsync) + 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$1.raiseRecoverable(start, "getter should have no params") + else + this$1.raiseRecoverable(start, "setter should have exactly one param") + } else { + if (method.kind === "set" && method.value.params[0].type === "RestElement") + this$1.raiseRecoverable(method.value.params[0].start, "Setter cannot use rest params") + } + } + } + node.body = this.finishNode(classBody, "ClassBody") + return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression") +} + +pp$1.parseClassMethod = function(classBody, method, isGenerator, isAsync) { + method.value = this.parseMethod(isGenerator, isAsync) + classBody.body.push(this.finishNode(method, "MethodDefinition")) +} + +pp$1.parseClassId = function(node, isStatement) { + node.id = this.type === tt.name ? this.parseIdent() : isStatement ? this.unexpected() : null +} + +pp$1.parseClassSuper = function(node) { + node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null +} + +// Parses module export declaration. + +pp$1.parseExport = function(node, exports) { + var this$1 = this; + + this.next() + // export * from '...' + if (this.eat(tt.star)) { + this.expectContextual("from") + node.source = this.type === tt.string ? this.parseExprAtom() : this.unexpected() + this.semicolon() + return this.finishNode(node, "ExportAllDeclaration") + } + if (this.eat(tt._default)) { // export default ... + this.checkExport(exports, "default", this.lastTokStart) + var isAsync + if (this.type === tt._function || (isAsync = this.isAsyncFunction())) { + var fNode = this.startNode() + this.next() + if (isAsync) this.next() + node.declaration = this.parseFunction(fNode, null, false, isAsync) + } else if (this.type === tt._class) { + var cNode = this.startNode() + node.declaration = this.parseClass(cNode, null) + } else { + node.declaration = this.parseMaybeAssign() + this.semicolon() + } + return this.finishNode(node, "ExportDefaultDeclaration") + } + // export var|const|let|function|class ... + if (this.shouldParseExportStatement()) { + node.declaration = this.parseStatement(true) + if (node.declaration.type === "VariableDeclaration") + this.checkVariableExport(exports, node.declaration.declarations) + else + this.checkExport(exports, node.declaration.id.name, node.declaration.id.start) + node.specifiers = [] + node.source = null + } else { // export { x, y as z } [from '...'] + node.declaration = null + node.specifiers = this.parseExportSpecifiers(exports) + if (this.eatContextual("from")) { + node.source = this.type === tt.string ? this.parseExprAtom() : this.unexpected() + } else { + // check for keywords used as local names + for (var i = 0; i < node.specifiers.length; i++) { + if (this$1.keywords.test(node.specifiers[i].local.name) || this$1.reservedWords.test(node.specifiers[i].local.name)) { + this$1.unexpected(node.specifiers[i].local.start) + } + } + + node.source = null + } + this.semicolon() + } + return this.finishNode(node, "ExportNamedDeclaration") +} + +pp$1.checkExport = function(exports, name, pos) { + if (!exports) return + if (Object.prototype.hasOwnProperty.call(exports, name)) + this.raiseRecoverable(pos, "Duplicate export '" + name + "'") + exports[name] = true +} + +pp$1.checkPatternExport = function(exports, pat) { + var this$1 = this; + + var type = pat.type + if (type == "Identifier") + this.checkExport(exports, pat.name, pat.start) + else if (type == "ObjectPattern") + for (var i = 0; i < pat.properties.length; ++i) + this$1.checkPatternExport(exports, pat.properties[i].value) + else if (type == "ArrayPattern") + for (var i$1 = 0; i$1 < pat.elements.length; ++i$1) { + var elt = pat.elements[i$1] + if (elt) this$1.checkPatternExport(exports, elt) + } + else if (type == "AssignmentPattern") + this.checkPatternExport(exports, pat.left) + else if (type == "ParenthesizedExpression") + this.checkPatternExport(exports, pat.expression) +} + +pp$1.checkVariableExport = function(exports, decls) { + var this$1 = this; + + if (!exports) return + for (var i = 0; i < decls.length; i++) + this$1.checkPatternExport(exports, decls[i].id) +} + +pp$1.shouldParseExportStatement = function() { + return this.type.keyword === "var" + || this.type.keyword === "const" + || this.type.keyword === "class" + || this.type.keyword === "function" + || this.isLet() + || this.isAsyncFunction() +} + +// Parses a comma-separated list of module exports. + +pp$1.parseExportSpecifiers = function(exports) { + var this$1 = this; + + var nodes = [], first = true + // export { x, y as z } [from '...'] + this.expect(tt.braceL) + while (!this.eat(tt.braceR)) { + if (!first) { + this$1.expect(tt.comma) + if (this$1.afterTrailingComma(tt.braceR)) break + } else first = false + + var node = this$1.startNode() + node.local = this$1.parseIdent(true) + node.exported = this$1.eatContextual("as") ? this$1.parseIdent(true) : node.local + this$1.checkExport(exports, node.exported.name, node.exported.start) + nodes.push(this$1.finishNode(node, "ExportSpecifier")) + } + return nodes +} + +// Parses import declaration. + +pp$1.parseImport = function(node) { + this.next() + // import '...' + if (this.type === tt.string) { + node.specifiers = empty + node.source = this.parseExprAtom() + } else { + node.specifiers = this.parseImportSpecifiers() + this.expectContextual("from") + node.source = this.type === tt.string ? this.parseExprAtom() : this.unexpected() + } + this.semicolon() + return this.finishNode(node, "ImportDeclaration") +} + +// Parses a comma-separated list of module imports. + +pp$1.parseImportSpecifiers = function() { + var this$1 = this; + + var nodes = [], first = true + if (this.type === tt.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(tt.comma)) return nodes + } + if (this.type === tt.star) { + var node$1 = this.startNode() + this.next() + this.expectContextual("as") + node$1.local = this.parseIdent() + this.checkLVal(node$1.local, true) + nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier")) + return nodes + } + this.expect(tt.braceL) + while (!this.eat(tt.braceR)) { + if (!first) { + this$1.expect(tt.comma) + if (this$1.afterTrailingComma(tt.braceR)) break + } else first = false + + var node$2 = this$1.startNode() + node$2.imported = this$1.parseIdent(true) + if (this$1.eatContextual("as")) { + node$2.local = this$1.parseIdent() + } else { + node$2.local = node$2.imported + if (this$1.isKeyword(node$2.local.name)) this$1.unexpected(node$2.local.start) + if (this$1.reservedWordsStrict.test(node$2.local.name)) this$1.raiseRecoverable(node$2.local.start, "The keyword '" + node$2.local.name + "' is reserved") + } + this$1.checkLVal(node$2.local, true) + nodes.push(this$1.finishNode(node$2, "ImportSpecifier")) + } + return nodes +} + +var pp$2 = Parser.prototype + +// Convert existing expression atom to assignable pattern +// if possible. + +pp$2.toAssignable = function(node, isBinding) { + var this$1 = this; + + if (this.options.ecmaVersion >= 6 && node) { + switch (node.type) { + case "Identifier": + if (this.inAsync && node.name === "await") + this.raise(node.start, "Can not use 'await' as identifier inside an async function") + break + + 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$1.raise(prop.key.start, "Object pattern can't contain getter or setter") + this$1.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 + this.toAssignable(node.left, isBinding) + // falls through to AssignmentPattern + } else { + this.raise(node.left.end, "Only '=' operator can be used for specifying default value.") + break + } + + case "AssignmentPattern": + 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$2.toAssignableList = function(exprList, isBinding) { + var this$1 = this; + + 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 && 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$1.toAssignable(elt, isBinding) + } + return exprList +} + +// Parses spread element. + +pp$2.parseSpread = function(refDestructuringErrors) { + var node = this.startNode() + this.next() + node.argument = this.parseMaybeAssign(false, refDestructuringErrors) + return this.finishNode(node, "SpreadElement") +} + +pp$2.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 === tt.name ? this.parseIdent() : this.unexpected() + else node.argument = this.type === tt.name || this.type === tt.bracketL ? this.parseBindingAtom() : this.unexpected() + + return this.finishNode(node, "RestElement") +} + +// Parses lvalue (assignable) atom. + +pp$2.parseBindingAtom = function() { + if (this.options.ecmaVersion < 6) return this.parseIdent() + switch (this.type) { + case tt.name: + return this.parseIdent() + + case tt.bracketL: + var node = this.startNode() + this.next() + node.elements = this.parseBindingList(tt.bracketR, true, true) + return this.finishNode(node, "ArrayPattern") + + case tt.braceL: + return this.parseObj(true) + + default: + this.unexpected() + } +} + +pp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowNonIdent) { + var this$1 = this; + + var elts = [], first = true + while (!this.eat(close)) { + if (first) first = false + else this$1.expect(tt.comma) + if (allowEmpty && this$1.type === tt.comma) { + elts.push(null) + } else if (allowTrailingComma && this$1.afterTrailingComma(close)) { + break + } else if (this$1.type === tt.ellipsis) { + var rest = this$1.parseRest(allowNonIdent) + this$1.parseBindingListItem(rest) + elts.push(rest) + if (this$1.type === tt.comma) this$1.raise(this$1.start, "Comma is not permitted after the rest element") + this$1.expect(close) + break + } else { + var elem = this$1.parseMaybeDefault(this$1.start, this$1.startLoc) + this$1.parseBindingListItem(elem) + elts.push(elem) + } + } + return elts +} + +pp$2.parseBindingListItem = function(param) { + return param +} + +// Parses assignment pattern around given atom if possible. + +pp$2.parseMaybeDefault = function(startPos, startLoc, left) { + left = left || this.parseBindingAtom() + if (this.options.ecmaVersion < 6 || !this.eat(tt.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$2.checkLVal = function(expr, isBinding, checkClashes) { + var this$1 = this; + + switch (expr.type) { + case "Identifier": + if (this.strict && this.reservedWordsStrictBind.test(expr.name)) + this.raiseRecoverable(expr.start, (isBinding ? "Binding " : "Assigning to ") + expr.name + " in strict mode") + if (checkClashes) { + if (has(checkClashes, expr.name)) + this.raiseRecoverable(expr.start, "Argument name clash") + checkClashes[expr.name] = true + } + break + + case "MemberExpression": + if (isBinding) this.raiseRecoverable(expr.start, (isBinding ? "Binding" : "Assigning to") + " member expression") + break + + case "ObjectPattern": + for (var i = 0; i < expr.properties.length; i++) + this$1.checkLVal(expr.properties[i].value, isBinding, checkClashes) + break + + case "ArrayPattern": + for (var i$1 = 0; i$1 < expr.elements.length; i$1++) { + var elem = expr.elements[i$1] + if (elem) this$1.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") + } +} + +// A recursive descent parser operates by defining functions for all +// syntactic elements, and recursively calling those, each function +// advancing the input stream and returning an AST node. Precedence +// of constructs (for example, the fact that `!x[1]` means `!(x[1])` +// instead of `(!x)[1]` is handled by the fact that the parser +// function that parses unary prefix operators is called first, and +// in turn calls the function that parses `[]` subscripts — that +// way, it'll receive the node for `x[1]` already parsed, and wraps +// *that* in the unary operator node. +// +// Acorn uses an [operator precedence parser][opp] to handle binary +// operator precedence, because it is much more compact than using +// the technique outlined above, which uses different, nesting +// functions to specify precedence, for all of the ten binary +// precedence levels that JavaScript defines. +// +// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser + +var pp$3 = Parser.prototype + +// Check if property name clashes with already added. +// Object/class getters and setters are not allowed to clash — +// either with each other or with an init property — and in +// strict mode, init properties are also not allowed to be repeated. + +pp$3.checkPropClash = function(prop, propHash) { + if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand)) + return + var key = prop.key; + var name + 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.raiseRecoverable(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.raiseRecoverable(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$3.parseExpression = function(noIn, refDestructuringErrors) { + var this$1 = this; + + var startPos = this.start, startLoc = this.startLoc + var expr = this.parseMaybeAssign(noIn, refDestructuringErrors) + if (this.type === tt.comma) { + var node = this.startNodeAt(startPos, startLoc) + node.expressions = [expr] + while (this.eat(tt.comma)) node.expressions.push(this$1.parseMaybeAssign(noIn, refDestructuringErrors)) + return this.finishNode(node, "SequenceExpression") + } + return expr +} + +// Parse an assignment expression. This includes applications of +// operators like `+=`. + +pp$3.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) { + if (this.inGenerator && this.isContextual("yield")) return this.parseYield() + + var ownDestructuringErrors = false, oldParenAssign = -1 + if (refDestructuringErrors) { + oldParenAssign = refDestructuringErrors.parenthesizedAssign + refDestructuringErrors.parenthesizedAssign = -1 + } else { + refDestructuringErrors = new DestructuringErrors + ownDestructuringErrors = true + } + + var startPos = this.start, startLoc = this.startLoc + if (this.type == tt.parenL || this.type == tt.name) + this.potentialArrowAt = this.start + var left = this.parseMaybeConditional(noIn, refDestructuringErrors) + if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc) + if (this.type.isAssign) { + this.checkPatternErrors(refDestructuringErrors, true) + if (!ownDestructuringErrors) DestructuringErrors.call(refDestructuringErrors) + var node = this.startNodeAt(startPos, startLoc) + node.operator = this.value + node.left = this.type === tt.eq ? this.toAssignable(left) : left + refDestructuringErrors.shorthandAssign = -1 // reset because shorthand default was used correctly + this.checkLVal(left) + this.next() + node.right = this.parseMaybeAssign(noIn) + return this.finishNode(node, "AssignmentExpression") + } else { + if (ownDestructuringErrors) this.checkExpressionErrors(refDestructuringErrors, true) + } + if (oldParenAssign > -1) refDestructuringErrors.parenthesizedAssign = oldParenAssign + return left +} + +// Parse a ternary conditional (`?:`) operator. + +pp$3.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(tt.question)) { + var node = this.startNodeAt(startPos, startLoc) + node.test = expr + node.consequent = this.parseMaybeAssign() + this.expect(tt.colon) + node.alternate = this.parseMaybeAssign(noIn) + return this.finishNode(node, "ConditionalExpression") + } + return expr +} + +// Start the precedence parser. + +pp$3.parseExprOps = function(noIn, refDestructuringErrors) { + var startPos = this.start, startLoc = this.startLoc + var expr = this.parseMaybeUnary(refDestructuringErrors, false) + 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$3.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, noIn) { + var prec = this.type.binop + if (prec != null && (!noIn || this.type !== tt._in)) { + if (prec > minPrec) { + var logical = this.type === tt.logicalOR || this.type === tt.logicalAND + var op = this.value + this.next() + var startPos = this.start, startLoc = this.startLoc + var right = this.parseExprOp(this.parseMaybeUnary(null, false), startPos, startLoc, prec, noIn) + var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical) + return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn) + } + } + return left +} + +pp$3.buildBinary = function(startPos, startLoc, left, right, op, logical) { + var node = this.startNodeAt(startPos, startLoc) + node.left = left + node.operator = op + node.right = right + return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression") +} + +// Parse unary operators, both prefix and postfix. + +pp$3.parseMaybeUnary = function(refDestructuringErrors, sawUnary) { + var this$1 = this; + + var startPos = this.start, startLoc = this.startLoc, expr + if (this.inAsync && this.isContextual("await")) { + expr = this.parseAwait(refDestructuringErrors) + sawUnary = true + } else if (this.type.prefix) { + var node = this.startNode(), update = this.type === tt.incDec + node.operator = this.value + node.prefix = true + this.next() + node.argument = this.parseMaybeUnary(null, true) + this.checkExpressionErrors(refDestructuringErrors, true) + if (update) this.checkLVal(node.argument) + else if (this.strict && node.operator === "delete" && + node.argument.type === "Identifier") + this.raiseRecoverable(node.start, "Deleting local variable in strict mode") + else sawUnary = true + expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression") + } else { + expr = this.parseExprSubscripts(refDestructuringErrors) + if (this.checkExpressionErrors(refDestructuringErrors)) return expr + while (this.type.postfix && !this.canInsertSemicolon()) { + var node$1 = this$1.startNodeAt(startPos, startLoc) + node$1.operator = this$1.value + node$1.prefix = false + node$1.argument = expr + this$1.checkLVal(expr) + this$1.next() + expr = this$1.finishNode(node$1, "UpdateExpression") + } + } + + if (!sawUnary && this.eat(tt.starstar)) + return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false), "**", false) + else + return expr +} + +// Parse call, dot, and `[]`-subscript expressions. + +pp$3.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 + var result = this.parseSubscripts(expr, startPos, startLoc) + if (refDestructuringErrors && result.type === "MemberExpression") { + if (refDestructuringErrors.parenthesizedAssign >= result.start) refDestructuringErrors.parenthesizedAssign = -1 + if (refDestructuringErrors.parenthesizedBind >= result.start) refDestructuringErrors.parenthesizedBind = -1 + } + return result +} + +pp$3.parseSubscripts = function(base, startPos, startLoc, noCalls) { + var this$1 = this; + + var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" && + this.lastTokEnd == base.end && !this.canInsertSemicolon() + for (var computed;;) { + if ((computed = this$1.eat(tt.bracketL)) || this$1.eat(tt.dot)) { + var node = this$1.startNodeAt(startPos, startLoc) + node.object = base + node.property = computed ? this$1.parseExpression() : this$1.parseIdent(true) + node.computed = !!computed + if (computed) this$1.expect(tt.bracketR) + base = this$1.finishNode(node, "MemberExpression") + } else if (!noCalls && this$1.eat(tt.parenL)) { + var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this$1.yieldPos, oldAwaitPos = this$1.awaitPos + this$1.yieldPos = 0 + this$1.awaitPos = 0 + var exprList = this$1.parseExprList(tt.parenR, this$1.options.ecmaVersion >= 8, false, refDestructuringErrors) + if (maybeAsyncArrow && !this$1.canInsertSemicolon() && this$1.eat(tt.arrow)) { + this$1.checkPatternErrors(refDestructuringErrors, false) + this$1.checkYieldAwaitInDefaultParams() + this$1.yieldPos = oldYieldPos + this$1.awaitPos = oldAwaitPos + return this$1.parseArrowExpression(this$1.startNodeAt(startPos, startLoc), exprList, true) + } + this$1.checkExpressionErrors(refDestructuringErrors, true) + this$1.yieldPos = oldYieldPos || this$1.yieldPos + this$1.awaitPos = oldAwaitPos || this$1.awaitPos + var node$1 = this$1.startNodeAt(startPos, startLoc) + node$1.callee = base + node$1.arguments = exprList + base = this$1.finishNode(node$1, "CallExpression") + } else if (this$1.type === tt.backQuote) { + var node$2 = this$1.startNodeAt(startPos, startLoc) + node$2.tag = base + node$2.quasi = this$1.parseTemplate() + base = this$1.finishNode(node$2, "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$3.parseExprAtom = function(refDestructuringErrors) { + var node, canBeArrow = this.potentialArrowAt == this.start + switch (this.type) { + case tt._super: + if (!this.inFunction) + this.raise(this.start, "'super' outside of function or class") + + case tt._this: + var type = this.type === tt._this ? "ThisExpression" : "Super" + node = this.startNode() + this.next() + return this.finishNode(node, type) + + case tt.name: + var startPos = this.start, startLoc = this.startLoc + var id = this.parseIdent(this.type !== tt.name) + if (this.options.ecmaVersion >= 8 && id.name === "async" && !this.canInsertSemicolon() && this.eat(tt._function)) + return this.parseFunction(this.startNodeAt(startPos, startLoc), false, false, true) + if (canBeArrow && !this.canInsertSemicolon()) { + if (this.eat(tt.arrow)) + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false) + if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === tt.name) { + id = this.parseIdent() + if (this.canInsertSemicolon() || !this.eat(tt.arrow)) + this.unexpected() + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true) + } + } + return id + + case tt.regexp: + var value = this.value + node = this.parseLiteral(value.value) + node.regex = {pattern: value.pattern, flags: value.flags} + return node + + case tt.num: case tt.string: + return this.parseLiteral(this.value) + + case tt._null: case tt._true: case tt._false: + node = this.startNode() + node.value = this.type === tt._null ? null : this.type === tt._true + node.raw = this.type.keyword + this.next() + return this.finishNode(node, "Literal") + + case tt.parenL: + var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow) + if (refDestructuringErrors) { + if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr)) + refDestructuringErrors.parenthesizedAssign = start + if (refDestructuringErrors.parenthesizedBind < 0) + refDestructuringErrors.parenthesizedBind = start + } + return expr + + case tt.bracketL: + node = this.startNode() + this.next() + node.elements = this.parseExprList(tt.bracketR, true, true, refDestructuringErrors) + return this.finishNode(node, "ArrayExpression") + + case tt.braceL: + return this.parseObj(false, refDestructuringErrors) + + case tt._function: + node = this.startNode() + this.next() + return this.parseFunction(node, false) + + case tt._class: + return this.parseClass(this.startNode(), false) + + case tt._new: + return this.parseNew() + + case tt.backQuote: + return this.parseTemplate() + + default: + this.unexpected() + } +} + +pp$3.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$3.parseParenExpression = function() { + this.expect(tt.parenL) + var val = this.parseExpression() + this.expect(tt.parenR) + return val +} + +pp$3.parseParenAndDistinguishExpression = function(canBeArrow) { + var this$1 = this; + + var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8 + if (this.options.ecmaVersion >= 6) { + this.next() + + var innerStartPos = this.start, innerStartLoc = this.startLoc + var exprList = [], first = true, lastIsComma = false + var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart, innerParenStart + this.yieldPos = 0 + this.awaitPos = 0 + while (this.type !== tt.parenR) { + first ? first = false : this$1.expect(tt.comma) + if (allowTrailingComma && this$1.afterTrailingComma(tt.parenR, true)) { + lastIsComma = true + break + } else if (this$1.type === tt.ellipsis) { + spreadStart = this$1.start + exprList.push(this$1.parseParenItem(this$1.parseRest())) + if (this$1.type === tt.comma) this$1.raise(this$1.start, "Comma is not permitted after the rest element") + break + } else { + if (this$1.type === tt.parenL && !innerParenStart) { + innerParenStart = this$1.start + } + exprList.push(this$1.parseMaybeAssign(false, refDestructuringErrors, this$1.parseParenItem)) + } + } + var innerEndPos = this.start, innerEndLoc = this.startLoc + this.expect(tt.parenR) + + if (canBeArrow && !this.canInsertSemicolon() && this.eat(tt.arrow)) { + this.checkPatternErrors(refDestructuringErrors, false) + this.checkYieldAwaitInDefaultParams() + if (innerParenStart) this.unexpected(innerParenStart) + this.yieldPos = oldYieldPos + this.awaitPos = oldAwaitPos + return this.parseParenArrowList(startPos, startLoc, exprList) + } + + if (!exprList.length || lastIsComma) this.unexpected(this.lastTokStart) + if (spreadStart) this.unexpected(spreadStart) + this.checkExpressionErrors(refDestructuringErrors, true) + this.yieldPos = oldYieldPos || this.yieldPos + this.awaitPos = oldAwaitPos || this.awaitPos + + 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$3.parseParenItem = function(item) { + return item +} + +pp$3.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$1 = [] + +pp$3.parseNew = function() { + var node = this.startNode() + var meta = this.parseIdent(true) + if (this.options.ecmaVersion >= 6 && this.eat(tt.dot)) { + node.meta = meta + node.property = this.parseIdent(true) + if (node.property.name !== "target") + this.raiseRecoverable(node.property.start, "The only valid meta property for new is new.target") + if (!this.inFunction) + this.raiseRecoverable(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(tt.parenL)) node.arguments = this.parseExprList(tt.parenR, this.options.ecmaVersion >= 8, false) + else node.arguments = empty$1 + return this.finishNode(node, "NewExpression") +} + +// Parse template expression. + +pp$3.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 === tt.backQuote + return this.finishNode(elem, "TemplateElement") +} + +pp$3.parseTemplate = function() { + var this$1 = this; + + var node = this.startNode() + this.next() + node.expressions = [] + var curElt = this.parseTemplateElement() + node.quasis = [curElt] + while (!curElt.tail) { + this$1.expect(tt.dollarBraceL) + node.expressions.push(this$1.parseExpression()) + this$1.expect(tt.braceR) + node.quasis.push(curElt = this$1.parseTemplateElement()) + } + this.next() + return this.finishNode(node, "TemplateLiteral") +} + +// Parse an object literal or binding pattern. + +pp$3.parseObj = function(isPattern, refDestructuringErrors) { + var this$1 = this; + + var node = this.startNode(), first = true, propHash = {} + node.properties = [] + this.next() + while (!this.eat(tt.braceR)) { + if (!first) { + this$1.expect(tt.comma) + if (this$1.afterTrailingComma(tt.braceR)) break + } else first = false + + var prop = this$1.startNode(), isGenerator, isAsync, startPos, startLoc + if (this$1.options.ecmaVersion >= 6) { + prop.method = false + prop.shorthand = false + if (isPattern || refDestructuringErrors) { + startPos = this$1.start + startLoc = this$1.startLoc + } + if (!isPattern) + isGenerator = this$1.eat(tt.star) + } + this$1.parsePropertyName(prop) + if (!isPattern && this$1.options.ecmaVersion >= 8 && !isGenerator && !prop.computed && + prop.key.type === "Identifier" && prop.key.name === "async" && this$1.type !== tt.parenL && + this$1.type !== tt.colon && !this$1.canInsertSemicolon()) { + isAsync = true + this$1.parsePropertyName(prop, refDestructuringErrors) + } else { + isAsync = false + } + this$1.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors) + this$1.checkPropClash(prop, propHash) + node.properties.push(this$1.finishNode(prop, "Property")) + } + return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression") +} + +pp$3.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors) { + if ((isGenerator || isAsync) && this.type === tt.colon) + this.unexpected() + + if (this.eat(tt.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 === tt.parenL) { + if (isPattern) this.unexpected() + prop.kind = "init" + prop.method = true + prop.value = this.parseMethod(isGenerator, isAsync) + } else if (this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && + (prop.key.name === "get" || prop.key.name === "set") && + (this.type != tt.comma && this.type != tt.braceR)) { + if (isGenerator || isAsync || 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.raiseRecoverable(start, "getter should have no params") + else + this.raiseRecoverable(start, "setter should have exactly one param") + } else { + if (prop.kind === "set" && prop.value.params[0].type === "RestElement") + this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params") + } + } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") { + if (this.keywords.test(prop.key.name) || + (this.strict ? this.reservedWordsStrict : this.reservedWords).test(prop.key.name) || + (this.inGenerator && prop.key.name == "yield") || + (this.inAsync && prop.key.name == "await")) + this.raiseRecoverable(prop.key.start, "'" + prop.key.name + "' can not be used as shorthand property") + prop.kind = "init" + if (isPattern) { + prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key) + } else if (this.type === tt.eq && refDestructuringErrors) { + if (refDestructuringErrors.shorthandAssign < 0) + refDestructuringErrors.shorthandAssign = this.start + prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key) + } else { + prop.value = prop.key + } + prop.shorthand = true + } else this.unexpected() +} + +pp$3.parsePropertyName = function(prop) { + if (this.options.ecmaVersion >= 6) { + if (this.eat(tt.bracketL)) { + prop.computed = true + prop.key = this.parseMaybeAssign() + this.expect(tt.bracketR) + return prop.key + } else { + prop.computed = false + } + } + return prop.key = this.type === tt.num || this.type === tt.string ? this.parseExprAtom() : this.parseIdent(true) +} + +// Initialize empty function node. + +pp$3.initFunction = function(node) { + node.id = null + if (this.options.ecmaVersion >= 6) { + node.generator = false + node.expression = false + } + if (this.options.ecmaVersion >= 8) + node.async = false +} + +// Parse object or class method. + +pp$3.parseMethod = function(isGenerator, isAsync) { + var node = this.startNode(), oldInGen = this.inGenerator, oldInAsync = this.inAsync, + oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldInFunc = this.inFunction + + this.initFunction(node) + if (this.options.ecmaVersion >= 6) + node.generator = isGenerator + if (this.options.ecmaVersion >= 8) + node.async = !!isAsync + + this.inGenerator = node.generator + this.inAsync = node.async + this.yieldPos = 0 + this.awaitPos = 0 + this.inFunction = true + + this.expect(tt.parenL) + node.params = this.parseBindingList(tt.parenR, false, this.options.ecmaVersion >= 8) + this.checkYieldAwaitInDefaultParams() + this.parseFunctionBody(node, false) + + this.inGenerator = oldInGen + this.inAsync = oldInAsync + this.yieldPos = oldYieldPos + this.awaitPos = oldAwaitPos + this.inFunction = oldInFunc + return this.finishNode(node, "FunctionExpression") +} + +// Parse arrow function expression with given parameters. + +pp$3.parseArrowExpression = function(node, params, isAsync) { + var oldInGen = this.inGenerator, oldInAsync = this.inAsync, + oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldInFunc = this.inFunction + + this.initFunction(node) + if (this.options.ecmaVersion >= 8) + node.async = !!isAsync + + this.inGenerator = false + this.inAsync = node.async + this.yieldPos = 0 + this.awaitPos = 0 + this.inFunction = true + + node.params = this.toAssignableList(params, true) + this.parseFunctionBody(node, true) + + this.inGenerator = oldInGen + this.inAsync = oldInAsync + this.yieldPos = oldYieldPos + this.awaitPos = oldAwaitPos + this.inFunction = oldInFunc + return this.finishNode(node, "ArrowFunctionExpression") +} + +// Parse function body and check parameters. + +pp$3.parseFunctionBody = function(node, isArrowFunction) { + var isExpression = isArrowFunction && this.type !== tt.braceL + var oldStrict = this.strict, useStrict = false + + if (isExpression) { + node.body = this.parseMaybeAssign() + node.expression = true + } else { + var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params) + if (!oldStrict || nonSimple) { + useStrict = this.strictDirective(this.end) + // 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 (useStrict && nonSimple) + this.raiseRecoverable(node.start, "Illegal 'use strict' directive in function with non-simple parameter list") + } + // Start a new scope with regard to labels and the `inFunction` + // flag (restore them to their old value afterwards). + var oldLabels = this.labels + this.labels = [] + if (useStrict) this.strict = true + node.body = this.parseBlock(true) + node.expression = false + this.labels = oldLabels + } + + if (oldStrict || useStrict) { + this.strict = true + if (node.id) + this.checkLVal(node.id, true) + this.checkParams(node) + this.strict = oldStrict + } else if (isArrowFunction || !this.isSimpleParamList(node.params)) { + this.checkParams(node) + } +} + +pp$3.isSimpleParamList = function(params) { + for (var i = 0; i < params.length; i++) + if (params[i].type !== "Identifier") return false + return true +} + +// Checks function params for various disallowed patterns such as using "eval" +// or "arguments" and duplicate parameters. + +pp$3.checkParams = function(node) { + var this$1 = this; + + var nameHash = {} + for (var i = 0; i < node.params.length; i++) this$1.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$3.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) { + var this$1 = this; + + var elts = [], first = true + while (!this.eat(close)) { + if (!first) { + this$1.expect(tt.comma) + if (allowTrailingComma && this$1.afterTrailingComma(close)) break + } else first = false + + var elt + if (allowEmpty && this$1.type === tt.comma) + elt = null + else if (this$1.type === tt.ellipsis) { + elt = this$1.parseSpread(refDestructuringErrors) + if (refDestructuringErrors && this$1.type === tt.comma && refDestructuringErrors.trailingComma < 0) + refDestructuringErrors.trailingComma = this$1.start + } else { + elt = this$1.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$3.parseIdent = function(liberal) { + var node = this.startNode() + if (liberal && this.options.allowReserved == "never") liberal = false + if (this.type === tt.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.raiseRecoverable(this.start, "The keyword '" + this.value + "' is reserved") + if (this.inGenerator && this.value === "yield") + this.raiseRecoverable(this.start, "Can not use 'yield' as identifier inside a generator") + if (this.inAsync && this.value === "await") + this.raiseRecoverable(this.start, "Can not use 'await' as identifier inside an async function") + 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$3.parseYield = function() { + if (!this.yieldPos) this.yieldPos = this.start + + var node = this.startNode() + this.next() + if (this.type == tt.semi || this.canInsertSemicolon() || (this.type != tt.star && !this.type.startsExpr)) { + node.delegate = false + node.argument = null + } else { + node.delegate = this.eat(tt.star) + node.argument = this.parseMaybeAssign() + } + return this.finishNode(node, "YieldExpression") +} + +pp$3.parseAwait = function() { + if (!this.awaitPos) this.awaitPos = this.start + + var node = this.startNode() + this.next() + node.argument = this.parseMaybeUnary(null, true) + return this.finishNode(node, "AwaitExpression") +} + +var pp$4 = 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$4.raise = function(pos, message) { + var loc = 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$4.raiseRecoverable = pp$4.raise + +pp$4.curPosition = function() { + if (this.options.locations) { + return new Position(this.curLine, this.pos - this.lineStart) + } +} + +var Node = function Node(parser, pos, loc) { + this.type = "" + this.start = pos + this.end = 0 + if (parser.options.locations) + this.loc = new 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. + +var pp$5 = Parser.prototype + +pp$5.startNode = function() { + return new Node(this, this.start, this.startLoc) +} + +pp$5.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$5.finishNode = function(node, type) { + return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc) +} + +// Finish node at given position + +pp$5.finishNodeAt = function(node, type, pos, loc) { + return finishNodeAt.call(this, node, type, pos, loc) +} + +// 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) { + this.token = token + this.isExpr = !!isExpr + this.preserveSpace = !!preserveSpace + this.override = override +}; + +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) +} + +var pp$6 = Parser.prototype + +pp$6.initialContext = function() { + return [types.b_stat] +} + +pp$6.braceIsBlock = function(prevType) { + if (prevType === tt.colon) { + var parent = this.curContext() + if (parent === types.b_stat || parent === types.b_expr) + return !parent.isExpr + } + if (prevType === tt._return) + return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) + if (prevType === tt._else || prevType === tt.semi || prevType === tt.eof || prevType === tt.parenR) + return true + if (prevType == tt.braceL) + return this.curContext() === types.b_stat + return !this.exprAllowed +} + +pp$6.updateContext = function(prevType) { + var update, type = this.type + if (type.keyword && prevType == tt.dot) + this.exprAllowed = false + else if (update = type.updateContext) + update.call(this, prevType) + else + this.exprAllowed = type.beforeExpr +} + +// Token-specific context update code + +tt.parenR.updateContext = tt.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 + } +} + +tt.braceL.updateContext = function(prevType) { + this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr) + this.exprAllowed = true +} + +tt.dollarBraceL.updateContext = function() { + this.context.push(types.b_tmpl) + this.exprAllowed = true +} + +tt.parenL.updateContext = function(prevType) { + var statementParens = prevType === tt._if || prevType === tt._for || prevType === tt._with || prevType === tt._while + this.context.push(statementParens ? types.p_stat : types.p_expr) + this.exprAllowed = true +} + +tt.incDec.updateContext = function() { + // tokExprAllowed stays unchanged +} + +tt._function.updateContext = function(prevType) { + if (prevType.beforeExpr && prevType !== tt.semi && prevType !== tt._else && + !((prevType === tt.colon || prevType === tt.braceL) && this.curContext() === types.b_stat)) + this.context.push(types.f_expr) + this.exprAllowed = false +} + +tt.backQuote.updateContext = function() { + if (this.curContext() === types.q_tmpl) + this.context.pop() + else + this.context.push(types.q_tmpl) + this.exprAllowed = false +} + +// 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) { + this.type = p.type + this.value = p.value + this.start = p.start + this.end = p.end + if (p.options.locations) + this.loc = new SourceLocation(p, p.startLoc, p.endLoc) + if (p.options.ranges) + this.range = [p.start, p.end] +}; + +// ## Tokenizer + +var pp$7 = 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$7.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$7.getToken = function() { + this.next() + return new Token(this) +} + +// If we're in an ES6 environment, make parsers iterable +if (typeof Symbol !== "undefined") + pp$7[Symbol.iterator] = function () { + var self = this + return {next: function () { + var token = self.getToken() + return { + done: token.type === tt.eof, + value: token + } + }} + } + +// Toggle strict mode. Re-reads the next number or string to please +// pedantic tests (`"use strict"; 010;` should fail). + +pp$7.curContext = function() { + return this.context[this.context.length - 1] +} + +// Read a single token, updating the parser object's token-related +// properties. + +pp$7.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(tt.eof) + + if (curContext.override) return curContext.override(this) + else this.readToken(this.fullCharCodeAtPos()) +} + +pp$7.readToken = function(code) { + // Identifier or keyword. '\uXXXX' sequences are allowed in + // identifiers, so '\' also dispatches to that. + if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\' */) + return this.readWord() + + return this.getTokenFromCode(code) +} + +pp$7.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$7.skipBlockComment = function() { + var this$1 = this; + + 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) { + lineBreakG.lastIndex = start + var match + while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) { + ++this$1.curLine + this$1.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$7.skipLineComment = function(startSkip) { + var this$1 = this; + + 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$1.pos + ch = this$1.input.charCodeAt(this$1.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$7.skipSpace = function() { + var this$1 = this; + + loop: while (this.pos < this.input.length) { + var ch = this$1.input.charCodeAt(this$1.pos) + switch (ch) { + case 32: case 160: // ' ' + ++this$1.pos + break + case 13: + if (this$1.input.charCodeAt(this$1.pos + 1) === 10) { + ++this$1.pos + } + case 10: case 8232: case 8233: + ++this$1.pos + if (this$1.options.locations) { + ++this$1.curLine + this$1.lineStart = this$1.pos + } + break + case 47: // '/' + switch (this$1.input.charCodeAt(this$1.pos + 1)) { + case 42: // '*' + this$1.skipBlockComment() + break + case 47: + this$1.skipLineComment(2) + break + default: + break loop + } + break + default: + if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) { + ++this$1.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$7.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$7.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(tt.ellipsis) + } else { + ++this.pos + return this.finishToken(tt.dot) + } +} + +pp$7.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(tt.assign, 2) + return this.finishOp(tt.slash, 1) +} + +pp$7.readToken_mult_modulo_exp = function(code) { // '%*' + var next = this.input.charCodeAt(this.pos + 1) + var size = 1 + var tokentype = code === 42 ? tt.star : tt.modulo + + // exponentiation operator ** and **= + if (this.options.ecmaVersion >= 7 && next === 42) { + ++size + tokentype = tt.starstar + next = this.input.charCodeAt(this.pos + 2) + } + + if (next === 61) return this.finishOp(tt.assign, size + 1) + return this.finishOp(tokentype, size) +} + +pp$7.readToken_pipe_amp = function(code) { // '|&' + var next = this.input.charCodeAt(this.pos + 1) + if (next === code) return this.finishOp(code === 124 ? tt.logicalOR : tt.logicalAND, 2) + if (next === 61) return this.finishOp(tt.assign, 2) + return this.finishOp(code === 124 ? tt.bitwiseOR : tt.bitwiseAND, 1) +} + +pp$7.readToken_caret = function() { // '^' + var next = this.input.charCodeAt(this.pos + 1) + if (next === 61) return this.finishOp(tt.assign, 2) + return this.finishOp(tt.bitwiseXOR, 1) +} + +pp$7.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 && + lineBreak.test(this.input.slice(this.lastTokEnd, this.pos))) { + // A `-->` 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$7.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(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() + // `` 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$7.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(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() + // `` 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() + // `` 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) } + return this.finishOp(types.plusMin, 1) +}; + +pp$8.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(types.assign, size + 1) } + return this.finishOp(types.bitShift, size) + } + if (next == 33 && code == 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) == 45 && + this.input.charCodeAt(this.pos + 3) == 45) { + // `` 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) } + return this.finishOp(types.plusMin, 1) +}; + +pp$8.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(types.assign, size + 1) } + return this.finishOp(types.bitShift, size) + } + if (next == 33 && code == 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) == 45 && + this.input.charCodeAt(this.pos + 3) == 45) { + // ` + +### anyTypeAnnotation +```javascript +t.anyTypeAnnotation() +``` + +See also `t.isAnyTypeAnnotation(node, opts)` and `t.assertAnyTypeAnnotation(node, opts)`. + +Aliases: `Flow`, `FlowBaseAnnotation` + + +--- + +### arrayExpression +```javascript +t.arrayExpression(elements) +``` + +See also `t.isArrayExpression(node, opts)` and `t.assertArrayExpression(node, opts)`. + +Aliases: `Expression` + + - `elements`: `Array` (default: `[]`) + +--- + +### arrayPattern +```javascript +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`) + +--- + +### arrayTypeAnnotation +```javascript +t.arrayTypeAnnotation(elementType) +``` + +See also `t.isArrayTypeAnnotation(node, opts)` and `t.assertArrayTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + - `elementType` (required) + +--- + +### arrowFunctionExpression +```javascript +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`) + +--- + +### assignmentExpression +```javascript +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) + +--- + +### assignmentPattern +```javascript +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`) + +--- + +### awaitExpression +```javascript +t.awaitExpression(argument) +``` + +See also `t.isAwaitExpression(node, opts)` and `t.assertAwaitExpression(node, opts)`. + +Aliases: `Expression`, `Terminatorless` + + - `argument`: `Expression` (required) + +--- + +### binaryExpression +```javascript +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) + +--- + +### bindExpression +```javascript +t.bindExpression(object, callee) +``` + +See also `t.isBindExpression(node, opts)` and `t.assertBindExpression(node, opts)`. + +Aliases: `Expression` + + - `object` (required) + - `callee` (required) + +--- + +### blockStatement +```javascript +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: `[]`) + +--- + +### booleanLiteral +```javascript +t.booleanLiteral(value) +``` + +See also `t.isBooleanLiteral(node, opts)` and `t.assertBooleanLiteral(node, opts)`. + +Aliases: `Expression`, `Pureish`, `Literal`, `Immutable` + + - `value`: `boolean` (required) + +--- + +### booleanLiteralTypeAnnotation +```javascript +t.booleanLiteralTypeAnnotation() +``` + +See also `t.isBooleanLiteralTypeAnnotation(node, opts)` and `t.assertBooleanLiteralTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + +--- + +### booleanTypeAnnotation +```javascript +t.booleanTypeAnnotation() +``` + +See also `t.isBooleanTypeAnnotation(node, opts)` and `t.assertBooleanTypeAnnotation(node, opts)`. + +Aliases: `Flow`, `FlowBaseAnnotation` + + +--- + +### breakStatement +```javascript +t.breakStatement(label) +``` + +See also `t.isBreakStatement(node, opts)` and `t.assertBreakStatement(node, opts)`. + +Aliases: `Statement`, `Terminatorless`, `CompletionStatement` + + - `label`: `Identifier` (default: `null`) + +--- + +### callExpression +```javascript +t.callExpression(callee, arguments) +``` + +See also `t.isCallExpression(node, opts)` and `t.assertCallExpression(node, opts)`. + +Aliases: `Expression` + + - `callee`: `Expression` (required) + - `arguments`: `Array` (required) + +--- + +### catchClause +```javascript +t.catchClause(param, body) +``` + +See also `t.isCatchClause(node, opts)` and `t.assertCatchClause(node, opts)`. + +Aliases: `Scopable` + + - `param`: `Identifier` (required) + - `body`: `BlockStatement` (required) + +--- + +### classBody +```javascript +t.classBody(body) +``` + +See also `t.isClassBody(node, opts)` and `t.assertClassBody(node, opts)`. + + - `body`: `Array` (required) + +--- + +### classDeclaration +```javascript +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`) + +--- + +### classExpression +```javascript +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`) + +--- + +### classImplements +```javascript +t.classImplements(id, typeParameters) +``` + +See also `t.isClassImplements(node, opts)` and `t.assertClassImplements(node, opts)`. + +Aliases: `Flow` + + - `id` (required) + - `typeParameters` (required) + +--- + +### classMethod +```javascript +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`) + +--- + +### classProperty +```javascript +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`) + +--- + +### conditionalExpression +```javascript +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) + +--- + +### continueStatement +```javascript +t.continueStatement(label) +``` + +See also `t.isContinueStatement(node, opts)` and `t.assertContinueStatement(node, opts)`. + +Aliases: `Statement`, `Terminatorless`, `CompletionStatement` + + - `label`: `Identifier` (default: `null`) + +--- + +### debuggerStatement +```javascript +t.debuggerStatement() +``` + +See also `t.isDebuggerStatement(node, opts)` and `t.assertDebuggerStatement(node, opts)`. + +Aliases: `Statement` + + +--- + +### declareClass +```javascript +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) + +--- + +### declareExportDeclaration +```javascript +t.declareExportDeclaration(declaration, specifiers, source) +``` + +See also `t.isDeclareExportDeclaration(node, opts)` and `t.assertDeclareExportDeclaration(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `declaration` (required) + - `specifiers` (required) + - `source` (required) + +--- + +### declareFunction +```javascript +t.declareFunction(id) +``` + +See also `t.isDeclareFunction(node, opts)` and `t.assertDeclareFunction(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `id` (required) + +--- + +### declareInterface +```javascript +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) + +--- + +### declareModule +```javascript +t.declareModule(id, body) +``` + +See also `t.isDeclareModule(node, opts)` and `t.assertDeclareModule(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `id` (required) + - `body` (required) + +--- + +### declareModuleExports +```javascript +t.declareModuleExports(typeAnnotation) +``` + +See also `t.isDeclareModuleExports(node, opts)` and `t.assertDeclareModuleExports(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `typeAnnotation` (required) + +--- + +### declareOpaqueType +```javascript +t.declareOpaqueType(id, typeParameters, supertype) +``` + +See also `t.isDeclareOpaqueType(node, opts)` and `t.assertDeclareOpaqueType(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `id` (required) + - `typeParameters` (required) + - `supertype` (required) + +--- + +### declareTypeAlias +```javascript +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) + +--- + +### declareVariable +```javascript +t.declareVariable(id) +``` + +See also `t.isDeclareVariable(node, opts)` and `t.assertDeclareVariable(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `id` (required) + +--- + +### decorator +```javascript +t.decorator(expression) +``` + +See also `t.isDecorator(node, opts)` and `t.assertDecorator(node, opts)`. + + - `expression`: `Expression` (required) + +--- + +### directive +```javascript +t.directive(value) +``` + +See also `t.isDirective(node, opts)` and `t.assertDirective(node, opts)`. + + - `value`: `DirectiveLiteral` (required) + +--- + +### directiveLiteral +```javascript +t.directiveLiteral(value) +``` + +See also `t.isDirectiveLiteral(node, opts)` and `t.assertDirectiveLiteral(node, opts)`. + + - `value`: `string` (required) + +--- + +### doExpression +```javascript +t.doExpression(body) +``` + +See also `t.isDoExpression(node, opts)` and `t.assertDoExpression(node, opts)`. + +Aliases: `Expression` + + - `body`: `BlockStatement` (required) + +--- + +### doWhileStatement +```javascript +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) + +--- + +### emptyStatement +```javascript +t.emptyStatement() +``` + +See also `t.isEmptyStatement(node, opts)` and `t.assertEmptyStatement(node, opts)`. + +Aliases: `Statement` + + +--- + +### emptyTypeAnnotation +```javascript +t.emptyTypeAnnotation() +``` + +See also `t.isEmptyTypeAnnotation(node, opts)` and `t.assertEmptyTypeAnnotation(node, opts)`. + +Aliases: `Flow`, `FlowBaseAnnotation` + + +--- + +### existentialTypeParam +```javascript +t.existentialTypeParam() +``` + +See also `t.isExistentialTypeParam(node, opts)` and `t.assertExistentialTypeParam(node, opts)`. + +Aliases: `Flow` + + +--- + +### exportAllDeclaration +```javascript +t.exportAllDeclaration(source) +``` + +See also `t.isExportAllDeclaration(node, opts)` and `t.assertExportAllDeclaration(node, opts)`. + +Aliases: `Statement`, `Declaration`, `ModuleDeclaration`, `ExportDeclaration` + + - `source`: `StringLiteral` (required) + +--- + +### exportDefaultDeclaration +```javascript +t.exportDefaultDeclaration(declaration) +``` + +See also `t.isExportDefaultDeclaration(node, opts)` and `t.assertExportDefaultDeclaration(node, opts)`. + +Aliases: `Statement`, `Declaration`, `ModuleDeclaration`, `ExportDeclaration` + + - `declaration`: `FunctionDeclaration | ClassDeclaration | Expression` (required) + +--- + +### exportDefaultSpecifier +```javascript +t.exportDefaultSpecifier(exported) +``` + +See also `t.isExportDefaultSpecifier(node, opts)` and `t.assertExportDefaultSpecifier(node, opts)`. + +Aliases: `ModuleSpecifier` + + - `exported`: `Identifier` (required) + +--- + +### exportNamedDeclaration +```javascript +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`) + +--- + +### exportNamespaceSpecifier +```javascript +t.exportNamespaceSpecifier(exported) +``` + +See also `t.isExportNamespaceSpecifier(node, opts)` and `t.assertExportNamespaceSpecifier(node, opts)`. + +Aliases: `ModuleSpecifier` + + - `exported`: `Identifier` (required) + +--- + +### exportSpecifier +```javascript +t.exportSpecifier(local, exported) +``` + +See also `t.isExportSpecifier(node, opts)` and `t.assertExportSpecifier(node, opts)`. + +Aliases: `ModuleSpecifier` + + - `local`: `Identifier` (required) + - `exported`: `Identifier` (required) + +--- + +### expressionStatement +```javascript +t.expressionStatement(expression) +``` + +See also `t.isExpressionStatement(node, opts)` and `t.assertExpressionStatement(node, opts)`. + +Aliases: `Statement`, `ExpressionWrapper` + + - `expression`: `Expression` (required) + +--- + +### file +```javascript +t.file(program, comments, tokens) +``` + +See also `t.isFile(node, opts)` and `t.assertFile(node, opts)`. + + - `program`: `Program` (required) + - `comments` (required) + - `tokens` (required) + +--- + +### forAwaitStatement +```javascript +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) + +--- + +### forInStatement +```javascript +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) + +--- + +### forOfStatement +```javascript +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) + +--- + +### forStatement +```javascript +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) + +--- + +### functionDeclaration +```javascript +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`) + +--- + +### functionExpression +```javascript +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`) + +--- + +### functionTypeAnnotation +```javascript +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) + +--- + +### functionTypeParam +```javascript +t.functionTypeParam(name, typeAnnotation) +``` + +See also `t.isFunctionTypeParam(node, opts)` and `t.assertFunctionTypeParam(node, opts)`. + +Aliases: `Flow` + + - `name` (required) + - `typeAnnotation` (required) + +--- + +### genericTypeAnnotation +```javascript +t.genericTypeAnnotation(id, typeParameters) +``` + +See also `t.isGenericTypeAnnotation(node, opts)` and `t.assertGenericTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + - `id` (required) + - `typeParameters` (required) + +--- + +### identifier +```javascript +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`) + +--- + +### ifStatement +```javascript +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`) + +--- + +### import +```javascript +t.import() +``` + +See also `t.isImport(node, opts)` and `t.assertImport(node, opts)`. + +Aliases: `Expression` + + +--- + +### importDeclaration +```javascript +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) + +--- + +### importDefaultSpecifier +```javascript +t.importDefaultSpecifier(local) +``` + +See also `t.isImportDefaultSpecifier(node, opts)` and `t.assertImportDefaultSpecifier(node, opts)`. + +Aliases: `ModuleSpecifier` + + - `local`: `Identifier` (required) + +--- + +### importNamespaceSpecifier +```javascript +t.importNamespaceSpecifier(local) +``` + +See also `t.isImportNamespaceSpecifier(node, opts)` and `t.assertImportNamespaceSpecifier(node, opts)`. + +Aliases: `ModuleSpecifier` + + - `local`: `Identifier` (required) + +--- + +### importSpecifier +```javascript +t.importSpecifier(local, imported) +``` + +See also `t.isImportSpecifier(node, opts)` and `t.assertImportSpecifier(node, opts)`. + +Aliases: `ModuleSpecifier` + + - `local`: `Identifier` (required) + - `imported`: `Identifier` (required) + - `importKind`: `null | 'type' | 'typeof'` (default: `null`) + +--- + +### interfaceDeclaration +```javascript +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) + +--- + +### interfaceExtends +```javascript +t.interfaceExtends(id, typeParameters) +``` + +See also `t.isInterfaceExtends(node, opts)` and `t.assertInterfaceExtends(node, opts)`. + +Aliases: `Flow` + + - `id` (required) + - `typeParameters` (required) + +--- + +### intersectionTypeAnnotation +```javascript +t.intersectionTypeAnnotation(types) +``` + +See also `t.isIntersectionTypeAnnotation(node, opts)` and `t.assertIntersectionTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + - `types` (required) + +--- + +### jSXAttribute +```javascript +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`) + +--- + +### jSXClosingElement +```javascript +t.jSXClosingElement(name) +``` + +See also `t.isJSXClosingElement(node, opts)` and `t.assertJSXClosingElement(node, opts)`. + +Aliases: `JSX`, `Immutable` + + - `name`: `JSXIdentifier | JSXMemberExpression` (required) + +--- + +### jSXElement +```javascript +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) + +--- + +### jSXEmptyExpression +```javascript +t.jSXEmptyExpression() +``` + +See also `t.isJSXEmptyExpression(node, opts)` and `t.assertJSXEmptyExpression(node, opts)`. + +Aliases: `JSX`, `Expression` + + +--- + +### jSXExpressionContainer +```javascript +t.jSXExpressionContainer(expression) +``` + +See also `t.isJSXExpressionContainer(node, opts)` and `t.assertJSXExpressionContainer(node, opts)`. + +Aliases: `JSX`, `Immutable` + + - `expression`: `Expression` (required) + +--- + +### jSXIdentifier +```javascript +t.jSXIdentifier(name) +``` + +See also `t.isJSXIdentifier(node, opts)` and `t.assertJSXIdentifier(node, opts)`. + +Aliases: `JSX`, `Expression` + + - `name`: `string` (required) + +--- + +### jSXMemberExpression +```javascript +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) + +--- + +### jSXNamespacedName +```javascript +t.jSXNamespacedName(namespace, name) +``` + +See also `t.isJSXNamespacedName(node, opts)` and `t.assertJSXNamespacedName(node, opts)`. + +Aliases: `JSX` + + - `namespace`: `JSXIdentifier` (required) + - `name`: `JSXIdentifier` (required) + +--- + +### jSXOpeningElement +```javascript +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`) + +--- + +### jSXSpreadAttribute +```javascript +t.jSXSpreadAttribute(argument) +``` + +See also `t.isJSXSpreadAttribute(node, opts)` and `t.assertJSXSpreadAttribute(node, opts)`. + +Aliases: `JSX` + + - `argument`: `Expression` (required) + +--- + +### jSXSpreadChild +```javascript +t.jSXSpreadChild(expression) +``` + +See also `t.isJSXSpreadChild(node, opts)` and `t.assertJSXSpreadChild(node, opts)`. + +Aliases: `JSX`, `Immutable` + + - `expression`: `Expression` (required) + +--- + +### jSXText +```javascript +t.jSXText(value) +``` + +See also `t.isJSXText(node, opts)` and `t.assertJSXText(node, opts)`. + +Aliases: `JSX`, `Immutable` + + - `value`: `string` (required) + +--- + +### labeledStatement +```javascript +t.labeledStatement(label, body) +``` + +See also `t.isLabeledStatement(node, opts)` and `t.assertLabeledStatement(node, opts)`. + +Aliases: `Statement` + + - `label`: `Identifier` (required) + - `body`: `Statement` (required) + +--- + +### logicalExpression +```javascript +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) + +--- + +### memberExpression +```javascript +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`) + +--- + +### metaProperty +```javascript +t.metaProperty(meta, property) +``` + +See also `t.isMetaProperty(node, opts)` and `t.assertMetaProperty(node, opts)`. + +Aliases: `Expression` + + - `meta`: `string` (required) + - `property`: `string` (required) + +--- + +### mixedTypeAnnotation +```javascript +t.mixedTypeAnnotation() +``` + +See also `t.isMixedTypeAnnotation(node, opts)` and `t.assertMixedTypeAnnotation(node, opts)`. + +Aliases: `Flow`, `FlowBaseAnnotation` + + +--- + +### newExpression +```javascript +t.newExpression(callee, arguments) +``` + +See also `t.isNewExpression(node, opts)` and `t.assertNewExpression(node, opts)`. + +Aliases: `Expression` + + - `callee`: `Expression` (required) + - `arguments`: `Array` (required) + +--- + +### noop +```javascript +t.noop() +``` + +See also `t.isNoop(node, opts)` and `t.assertNoop(node, opts)`. + + +--- + +### nullLiteral +```javascript +t.nullLiteral() +``` + +See also `t.isNullLiteral(node, opts)` and `t.assertNullLiteral(node, opts)`. + +Aliases: `Expression`, `Pureish`, `Literal`, `Immutable` + + +--- + +### nullLiteralTypeAnnotation +```javascript +t.nullLiteralTypeAnnotation() +``` + +See also `t.isNullLiteralTypeAnnotation(node, opts)` and `t.assertNullLiteralTypeAnnotation(node, opts)`. + +Aliases: `Flow`, `FlowBaseAnnotation` + + +--- + +### nullableTypeAnnotation +```javascript +t.nullableTypeAnnotation(typeAnnotation) +``` + +See also `t.isNullableTypeAnnotation(node, opts)` and `t.assertNullableTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + - `typeAnnotation` (required) + +--- + +### numberTypeAnnotation +```javascript +t.numberTypeAnnotation() +``` + +See also `t.isNumberTypeAnnotation(node, opts)` and `t.assertNumberTypeAnnotation(node, opts)`. + +Aliases: `Flow`, `FlowBaseAnnotation` + + +--- + +### numericLiteral +```javascript +t.numericLiteral(value) +``` + +See also `t.isNumericLiteral(node, opts)` and `t.assertNumericLiteral(node, opts)`. + +Aliases: `Expression`, `Pureish`, `Literal`, `Immutable` + + - `value`: `number` (required) + +--- + +### numericLiteralTypeAnnotation +```javascript +t.numericLiteralTypeAnnotation() +``` + +See also `t.isNumericLiteralTypeAnnotation(node, opts)` and `t.assertNumericLiteralTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + +--- + +### objectExpression +```javascript +t.objectExpression(properties) +``` + +See also `t.isObjectExpression(node, opts)` and `t.assertObjectExpression(node, opts)`. + +Aliases: `Expression` + + - `properties`: `Array` (required) + +--- + +### objectMethod +```javascript +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`) + +--- + +### objectPattern +```javascript +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`) + +--- + +### objectProperty +```javascript +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 | Pattern | RestElement` (required) + - `computed`: `boolean` (default: `false`) + - `shorthand`: `boolean` (default: `false`) + - `decorators`: `Array` (default: `null`) + +--- + +### objectTypeAnnotation +```javascript +t.objectTypeAnnotation(properties, indexers, callProperties) +``` + +See also `t.isObjectTypeAnnotation(node, opts)` and `t.assertObjectTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + - `properties` (required) + - `indexers` (required) + - `callProperties` (required) + +--- + +### objectTypeCallProperty +```javascript +t.objectTypeCallProperty(value) +``` + +See also `t.isObjectTypeCallProperty(node, opts)` and `t.assertObjectTypeCallProperty(node, opts)`. + +Aliases: `Flow`, `UserWhitespacable` + + - `value` (required) + +--- + +### objectTypeIndexer +```javascript +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) + +--- + +### objectTypeProperty +```javascript +t.objectTypeProperty(key, value) +``` + +See also `t.isObjectTypeProperty(node, opts)` and `t.assertObjectTypeProperty(node, opts)`. + +Aliases: `Flow`, `UserWhitespacable` + + - `key` (required) + - `value` (required) + +--- + +### objectTypeSpreadProperty +```javascript +t.objectTypeSpreadProperty(argument) +``` + +See also `t.isObjectTypeSpreadProperty(node, opts)` and `t.assertObjectTypeSpreadProperty(node, opts)`. + +Aliases: `Flow`, `UserWhitespacable` + + - `argument` (required) + +--- + +### opaqueType +```javascript +t.opaqueType(id, typeParameters, impltype, supertype) +``` + +See also `t.isOpaqueType(node, opts)` and `t.assertOpaqueType(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `id` (required) + - `typeParameters` (required) + - `impltype` (required) + - `supertype` (required) + +--- + +### parenthesizedExpression +```javascript +t.parenthesizedExpression(expression) +``` + +See also `t.isParenthesizedExpression(node, opts)` and `t.assertParenthesizedExpression(node, opts)`. + +Aliases: `Expression`, `ExpressionWrapper` + + - `expression`: `Expression` (required) + +--- + +### program +```javascript +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: `[]`) + +--- + +### qualifiedTypeIdentifier +```javascript +t.qualifiedTypeIdentifier(id, qualification) +``` + +See also `t.isQualifiedTypeIdentifier(node, opts)` and `t.assertQualifiedTypeIdentifier(node, opts)`. + +Aliases: `Flow` + + - `id` (required) + - `qualification` (required) + +--- + +### regExpLiteral +```javascript +t.regExpLiteral(pattern, flags) +``` + +See also `t.isRegExpLiteral(node, opts)` and `t.assertRegExpLiteral(node, opts)`. + +Aliases: `Expression`, `Literal` + + - `pattern`: `string` (required) + - `flags`: `string` (default: `''`) + +--- + +### restElement +```javascript +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`) + +--- + +### restProperty +```javascript +t.restProperty(argument) +``` + +See also `t.isRestProperty(node, opts)` and `t.assertRestProperty(node, opts)`. + +Aliases: `UnaryLike` + + - `argument`: `LVal` (required) + +--- + +### returnStatement +```javascript +t.returnStatement(argument) +``` + +See also `t.isReturnStatement(node, opts)` and `t.assertReturnStatement(node, opts)`. + +Aliases: `Statement`, `Terminatorless`, `CompletionStatement` + + - `argument`: `Expression` (default: `null`) + +--- + +### sequenceExpression +```javascript +t.sequenceExpression(expressions) +``` + +See also `t.isSequenceExpression(node, opts)` and `t.assertSequenceExpression(node, opts)`. + +Aliases: `Expression` + + - `expressions`: `Array` (required) + +--- + +### spreadElement +```javascript +t.spreadElement(argument) +``` + +See also `t.isSpreadElement(node, opts)` and `t.assertSpreadElement(node, opts)`. + +Aliases: `UnaryLike` + + - `argument`: `Expression` (required) + +--- + +### spreadProperty +```javascript +t.spreadProperty(argument) +``` + +See also `t.isSpreadProperty(node, opts)` and `t.assertSpreadProperty(node, opts)`. + +Aliases: `UnaryLike` + + - `argument`: `Expression` (required) + +--- + +### stringLiteral +```javascript +t.stringLiteral(value) +``` + +See also `t.isStringLiteral(node, opts)` and `t.assertStringLiteral(node, opts)`. + +Aliases: `Expression`, `Pureish`, `Literal`, `Immutable` + + - `value`: `string` (required) + +--- + +### stringLiteralTypeAnnotation +```javascript +t.stringLiteralTypeAnnotation() +``` + +See also `t.isStringLiteralTypeAnnotation(node, opts)` and `t.assertStringLiteralTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + +--- + +### stringTypeAnnotation +```javascript +t.stringTypeAnnotation() +``` + +See also `t.isStringTypeAnnotation(node, opts)` and `t.assertStringTypeAnnotation(node, opts)`. + +Aliases: `Flow`, `FlowBaseAnnotation` + + +--- + +### super +```javascript +t.super() +``` + +See also `t.isSuper(node, opts)` and `t.assertSuper(node, opts)`. + +Aliases: `Expression` + + +--- + +### switchCase +```javascript +t.switchCase(test, consequent) +``` + +See also `t.isSwitchCase(node, opts)` and `t.assertSwitchCase(node, opts)`. + + - `test`: `Expression` (default: `null`) + - `consequent`: `Array` (required) + +--- + +### switchStatement +```javascript +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) + +--- + +### taggedTemplateExpression +```javascript +t.taggedTemplateExpression(tag, quasi) +``` + +See also `t.isTaggedTemplateExpression(node, opts)` and `t.assertTaggedTemplateExpression(node, opts)`. + +Aliases: `Expression` + + - `tag`: `Expression` (required) + - `quasi`: `TemplateLiteral` (required) + +--- + +### templateElement +```javascript +t.templateElement(value, tail) +``` + +See also `t.isTemplateElement(node, opts)` and `t.assertTemplateElement(node, opts)`. + + - `value` (required) + - `tail`: `boolean` (default: `false`) + +--- + +### templateLiteral +```javascript +t.templateLiteral(quasis, expressions) +``` + +See also `t.isTemplateLiteral(node, opts)` and `t.assertTemplateLiteral(node, opts)`. + +Aliases: `Expression`, `Literal` + + - `quasis`: `Array` (required) + - `expressions`: `Array` (required) + +--- + +### thisExpression +```javascript +t.thisExpression() +``` + +See also `t.isThisExpression(node, opts)` and `t.assertThisExpression(node, opts)`. + +Aliases: `Expression` + + +--- + +### thisTypeAnnotation +```javascript +t.thisTypeAnnotation() +``` + +See also `t.isThisTypeAnnotation(node, opts)` and `t.assertThisTypeAnnotation(node, opts)`. + +Aliases: `Flow`, `FlowBaseAnnotation` + + +--- + +### throwStatement +```javascript +t.throwStatement(argument) +``` + +See also `t.isThrowStatement(node, opts)` and `t.assertThrowStatement(node, opts)`. + +Aliases: `Statement`, `Terminatorless`, `CompletionStatement` + + - `argument`: `Expression` (required) + +--- + +### tryStatement +```javascript +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`) + +--- + +### tupleTypeAnnotation +```javascript +t.tupleTypeAnnotation(types) +``` + +See also `t.isTupleTypeAnnotation(node, opts)` and `t.assertTupleTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + - `types` (required) + +--- + +### typeAlias +```javascript +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) + +--- + +### typeAnnotation +```javascript +t.typeAnnotation(typeAnnotation) +``` + +See also `t.isTypeAnnotation(node, opts)` and `t.assertTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + - `typeAnnotation` (required) + +--- + +### typeCastExpression +```javascript +t.typeCastExpression(expression, typeAnnotation) +``` + +See also `t.isTypeCastExpression(node, opts)` and `t.assertTypeCastExpression(node, opts)`. + +Aliases: `Flow`, `ExpressionWrapper`, `Expression` + + - `expression` (required) + - `typeAnnotation` (required) + +--- + +### typeParameter +```javascript +t.typeParameter(bound) +``` + +See also `t.isTypeParameter(node, opts)` and `t.assertTypeParameter(node, opts)`. + +Aliases: `Flow` + + - `bound` (required) + +--- + +### typeParameterDeclaration +```javascript +t.typeParameterDeclaration(params) +``` + +See also `t.isTypeParameterDeclaration(node, opts)` and `t.assertTypeParameterDeclaration(node, opts)`. + +Aliases: `Flow` + + - `params` (required) + +--- + +### typeParameterInstantiation +```javascript +t.typeParameterInstantiation(params) +``` + +See also `t.isTypeParameterInstantiation(node, opts)` and `t.assertTypeParameterInstantiation(node, opts)`. + +Aliases: `Flow` + + - `params` (required) + +--- + +### typeofTypeAnnotation +```javascript +t.typeofTypeAnnotation(argument) +``` + +See also `t.isTypeofTypeAnnotation(node, opts)` and `t.assertTypeofTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + - `argument` (required) + +--- + +### unaryExpression +```javascript +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`) + +--- + +### unionTypeAnnotation +```javascript +t.unionTypeAnnotation(types) +``` + +See also `t.isUnionTypeAnnotation(node, opts)` and `t.assertUnionTypeAnnotation(node, opts)`. + +Aliases: `Flow` + + - `types` (required) + +--- + +### updateExpression +```javascript +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`) + +--- + +### variableDeclaration +```javascript +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) + +--- + +### variableDeclarator +```javascript +t.variableDeclarator(id, init) +``` + +See also `t.isVariableDeclarator(node, opts)` and `t.assertVariableDeclarator(node, opts)`. + + - `id`: `LVal` (required) + - `init`: `Expression` (default: `null`) + +--- + +### voidTypeAnnotation +```javascript +t.voidTypeAnnotation() +``` + +See also `t.isVoidTypeAnnotation(node, opts)` and `t.assertVoidTypeAnnotation(node, opts)`. + +Aliases: `Flow`, `FlowBaseAnnotation` + + +--- + +### whileStatement +```javascript +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) + +--- + +### withStatement +```javascript +t.withStatement(object, body) +``` + +See also `t.isWithStatement(node, opts)` and `t.assertWithStatement(node, opts)`. + +Aliases: `Statement` + + - `object` (required) + - `body`: `BlockStatement | Statement` (required) + +--- + +### yieldExpression +```javascript +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/node_modules/babel-types/lib/constants.js b/node_modules/babel-types/lib/constants.js new file mode 100644 index 000000000..ba15090b9 --- /dev/null +++ b/node_modules/babel-types/lib/constants.js @@ -0,0 +1,38 @@ +"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/node_modules/babel-types/lib/converters.js b/node_modules/babel-types/lib/converters.js new file mode 100644 index 000000000..bd0a3c674 --- /dev/null +++ b/node_modules/babel-types/lib/converters.js @@ -0,0 +1,350 @@ +"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 _isRegExp = require("lodash/isRegExp"); + +var _isRegExp2 = _interopRequireDefault(_isRegExp); + +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 gatherSequenceExpressions(nodes, scope, declars) { + var exprs = []; + var ensureLastUndefined = true; + + 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; + + ensureLastUndefined = false; + + 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; + + 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; + } else if (t.isIfStatement(node)) { + var consequent = node.consequent ? gatherSequenceExpressions([node.consequent], scope, declars) : scope.buildUndefinedNode(); + var alternate = node.alternate ? gatherSequenceExpressions([node.alternate], scope, declars) : scope.buildUndefinedNode(); + if (!consequent || !alternate) return; + + exprs.push(t.conditionalExpression(node.test, consequent, alternate)); + } else if (t.isBlockStatement(node)) { + var body = gatherSequenceExpressions(node.body, scope, declars); + if (!body) return; + + exprs.push(body); + } else if (t.isEmptyStatement(node)) { + ensureLastUndefined = true; + } else { + return; + } + } + + if (ensureLastUndefined) { + exprs.push(scope.buildUndefinedNode()); + } + + if (exprs.length === 1) { + return exprs[0]; + } else { + return t.sequenceExpression(exprs); + } +} + +function toSequenceExpression(nodes, scope) { + if (!nodes || !nodes.length) return; + + var declars = []; + var result = gatherSequenceExpressions(nodes, scope, declars); + if (!result) return; + + for (var _iterator3 = declars, _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 declar = _ref3; + + scope.push(declar); + } + + return result; +} + +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 (typeof value === "string") { + return t.stringLiteral(value); + } + + if (typeof value === "number") { + 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/node_modules/babel-types/lib/definitions/core.js b/node_modules/babel-types/lib/definitions/core.js new file mode 100644 index 000000000..413faf8a5 --- /dev/null +++ b/node_modules/babel-types/lib/definitions/core.js @@ -0,0 +1,701 @@ +"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", "Pattern", "RestElement") + }, + 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/node_modules/babel-types/lib/definitions/es2015.js b/node_modules/babel-types/lib/definitions/es2015.js new file mode 100644 index 000000000..5f57b44d9 --- /dev/null +++ b/node_modules/babel-types/lib/definitions/es2015.js @@ -0,0 +1,354 @@ +"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)("Identifier", "Pattern", "RestElement"))) + }, + 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") + }, + importKind: { + validate: (0, _index.assertOneOf)(null, "type", "typeof") + } + } +}); + +(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/node_modules/babel-types/lib/definitions/experimental.js b/node_modules/babel-types/lib/definitions/experimental.js new file mode 100644 index 000000000..d65d60968 --- /dev/null +++ b/node_modules/babel-types/lib/definitions/experimental.js @@ -0,0 +1,103 @@ +"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)("Import", { + aliases: ["Expression"] +}); + +(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/node_modules/babel-types/lib/definitions/flow.js b/node_modules/babel-types/lib/definitions/flow.js new file mode 100644 index 000000000..89c6302c0 --- /dev/null +++ b/node_modules/babel-types/lib/definitions/flow.js @@ -0,0 +1,285 @@ +"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)("DeclareOpaqueType", { + visitor: ["id", "typeParameters", "supertype"], + aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], + fields: {} +}); + +(0, _index2.default)("DeclareVariable", { + visitor: ["id"], + aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], + fields: {} +}); + +(0, _index2.default)("DeclareExportDeclaration", { + visitor: ["declaration", "specifiers", "source"], + 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)("OpaqueType", { + visitor: ["id", "typeParameters", "impltype", "supertype"], + 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)("ObjectTypeSpreadProperty", { + visitor: ["argument"], + 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/node_modules/babel-types/lib/definitions/index.js b/node_modules/babel-types/lib/definitions/index.js new file mode 100644 index 000000000..d5121144e --- /dev/null +++ b/node_modules/babel-types/lib/definitions/index.js @@ -0,0 +1,249 @@ +"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/node_modules/babel-types/lib/definitions/init.js b/node_modules/babel-types/lib/definitions/init.js new file mode 100644 index 000000000..a3334fedb --- /dev/null +++ b/node_modules/babel-types/lib/definitions/init.js @@ -0,0 +1,15 @@ +"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/node_modules/babel-types/lib/definitions/jsx.js b/node_modules/babel-types/lib/definitions/jsx.js new file mode 100644 index 000000000..1c0c0665a --- /dev/null +++ b/node_modules/babel-types/lib/definitions/jsx.js @@ -0,0 +1,147 @@ +"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", "JSXSpreadChild", "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)("JSXSpreadChild", { + 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/node_modules/babel-types/lib/definitions/misc.js b/node_modules/babel-types/lib/definitions/misc.js new file mode 100644 index 000000000..f982b9a81 --- /dev/null +++ b/node_modules/babel-types/lib/definitions/misc.js @@ -0,0 +1,21 @@ +"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/node_modules/babel-types/lib/flow.js b/node_modules/babel-types/lib/flow.js new file mode 100644 index 000000000..28579157d --- /dev/null +++ b/node_modules/babel-types/lib/flow.js @@ -0,0 +1,108 @@ +"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/node_modules/babel-types/lib/index.js b/node_modules/babel-types/lib/index.js new file mode 100644 index 000000000..4c0070300 --- /dev/null +++ b/node_modules/babel-types/lib/index.js @@ -0,0 +1,835 @@ +"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 _clone = require("lodash/clone"); + +var _clone2 = _interopRequireDefault(_clone); + +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, _keys2.default)(t.ALIAS_KEYS).forEach(function (type) { + t.ALIAS_KEYS[type].forEach(function (alias) { + var types = t.FLIPPED_ALIAS_KEYS[alias] = t.FLIPPED_ALIAS_KEYS[alias] || []; + types.push(type); + }); +}); + +(0, _keys2.default)(t.FLIPPED_ALIAS_KEYS).forEach(function (type) { + t[type.toUpperCase() + "_TYPES"] = t.FLIPPED_ALIAS_KEYS[type]; + 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, _keys2.default)(t.BUILDER_KEYS).forEach(function (type) { + var keys = t.BUILDER_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) { + if (!node) return 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) { + if (!node) return 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)([].concat(child[key], parent[key]).filter(Boolean)); + } +} + +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/node_modules/babel-types/lib/react.js b/node_modules/babel-types/lib/react.js new file mode 100644 index 000000000..923ee1232 --- /dev/null +++ b/node_modules/babel-types/lib/react.js @@ -0,0 +1,80 @@ +"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/node_modules/babel-types/lib/retrievers.js b/node_modules/babel-types/lib/retrievers.js new file mode 100644 index 000000000..ae7987f4a --- /dev/null +++ b/node_modules/babel-types/lib/retrievers.js @@ -0,0 +1,116 @@ +"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(id.declaration)) { + search.push(id.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"], + OpaqueType: ["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/node_modules/babel-types/lib/validators.js b/node_modules/babel-types/lib/validators.js new file mode 100644 index 000000000..ec30e55bd --- /dev/null +++ b/node_modules/babel-types/lib/validators.js @@ -0,0 +1,265 @@ +"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 if (name === "await") { + 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/node_modules/babel-types/package-lock.json b/node_modules/babel-types/package-lock.json new file mode 100644 index 000000000..49fefe9b9 --- /dev/null +++ b/node_modules/babel-types/package-lock.json @@ -0,0 +1,29 @@ +{ + "name": "babel-types", + "version": "6.25.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + } + } +} diff --git a/node_modules/babel-types/package.json b/node_modules/babel-types/package.json new file mode 100644 index 000000000..2f8fcd2fb --- /dev/null +++ b/node_modules/babel-types/package.json @@ -0,0 +1,54 @@ +{ + "_from": "babel-types@^6.26.0", + "_id": "babel-types@6.26.0", + "_inBundle": false, + "_integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "_location": "/babel-types", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "babel-types@^6.26.0", + "name": "babel-types", + "escapedName": "babel-types", + "rawSpec": "^6.26.0", + "saveSpec": null, + "fetchSpec": "^6.26.0" + }, + "_requiredBy": [ + "/babel-core", + "/babel-generator", + "/babel-template", + "/babel-traverse" + ], + "_resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "_shasum": "a3b073f94ab49eb6fa55cd65227a334380632497", + "_spec": "babel-types@^6.26.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-core", + "author": { + "name": "Sebastian McKenzie", + "email": "sebmck@gmail.com" + }, + "bundleDependencies": false, + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "deprecated": false, + "description": "Babel Types is a Lodash-esque utility library for AST nodes", + "devDependencies": { + "babel-generator": "^6.26.0", + "babylon": "^6.18.0" + }, + "homepage": "https://babeljs.io/", + "license": "MIT", + "main": "lib/index.js", + "name": "babel-types", + "repository": { + "type": "git", + "url": "https://github.com/babel/babel/tree/master/packages/babel-types" + }, + "version": "6.26.0" +} diff --git a/node_modules/babylon/CHANGELOG.md b/node_modules/babylon/CHANGELOG.md new file mode 100644 index 000000000..f5f1794c4 --- /dev/null +++ b/node_modules/babylon/CHANGELOG.md @@ -0,0 +1,979 @@ +# 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.17.4 (2017-06-18) + + * Fix comment attachment for call expressions (#575) (aardito2) + * Correctly put typeParameters on FunctionExpression (#585) (Daniel Tschinder) + +## 6.17.3 (2017-06-09) + + * Fix location info on FunctionTypeParam nodes (#565) (#571) (Michal Srb) + * Fix stmt value being the raw value (#557) (#558) (Daniel Tschinder) + +## 6.17.2 (2017-05-31) + + * Fixed disappearing comments following a trailing comma on the last property of an object literal or the last argument of a call expression (#478) (aardito2) + * Fix #437: only prohibit 'export type from "module" ' when flow is enabled (#438) (Kevin Gibbons) + * Fix handling of anonymous parameters in `flowParseObjectTypeMethodish`. (#526) (Max Schaefer) + * Convert argument of SpreadElement correctly to assignable (#518) (Daniel Tschinder) + +## 6.17.1 (2017-05-10) + + * Fix typo in flow spread operator error (Brian Ng) + * Fixed invalid number literal parsing ([#473](https://github.com/babel/babylon/pull/473)) (Alex Kuzmenko) + * Fix number parser ([#433](https://github.com/babel/babylon/pull/433)) (Alex Kuzmenko) + * Ensure non pattern shorthand props are checked for reserved words ([#479](https://github.com/babel/babylon/pull/479)) (Brian Ng) + * Remove jsx context when parsing arrow functions ([#475](https://github.com/babel/babylon/pull/475)) (Brian Ng) + * Allow super in class properties ([#499](https://github.com/babel/babylon/pull/499)) (Brian Ng) + * Allow flow class field to be named constructor ([#510](https://github.com/babel/babylon/pull/510)) (Brian Ng) + +## 6.17.0 (2017-04-20) + + * Cherry-pick #418 to 6.x ([#476](https://github.com/babel/babylon/pull/476)) (Sebastian McKenzie) + * Add support for invalid escapes in tagged templates ([#274](https://github.com/babel/babylon/pull/274)) (Kevin Gibbons) + * Throw error if new.target is used outside of a function ([#402](https://github.com/babel/babylon/pull/402)) (Brian Ng) + * Fix parsing of class properties ([#351](https://github.com/babel/babylon/pull/351)) (Kevin Gibbons) + * Fix parsing yield with dynamicImport ([#383](https://github.com/babel/babylon/pull/383)) (Brian Ng) + * Ensure consistent start args for parseParenItem ([#386](https://github.com/babel/babylon/pull/386)) (Brian Ng) + +## 6.16.0 (2017-02-23) + +### :rocket: New Feature + +***ESTree*** compatibility as plugin ([#277](https://github.com/babel/babylon/pull/277)) (Daniel Tschinder) + +We finally introduce a new compatibility layer for ESTree. To put babylon into ESTree-compatible mode the new plugin `estree` can be enabled. In this mode the parser will output an AST that is compliant to the specs of [ESTree](https://github.com/estree/estree/) + +We highly recommend everyone who uses babylon outside of babel to use this plugin. This will make it much easier for users to switch between different ESTree-compatible parsers. We so far tested several projects with different parsers and exchanged their parser to babylon and in nearly all cases it worked out of the box. Some other estree-compatible parsers include `acorn`, `esprima`, `espree`, `flow-parser`, etc. + +To enable `estree` mode simply add the plugin in the config: +```json +{ + "plugins": [ "estree" ] +} +``` + +If you want to migrate your project from non-ESTree mode to ESTree, have a look at our [Readme](https://github.com/babel/babylon/#output), where all deviations are mentioned. + +Add a parseExpression public method ([#213](https://github.com/babel/babylon/pull/213)) (jeromew) + +Babylon exports a new function to parse a single expression + +```js +import { parseExpression } from 'babylon'; + +const ast = parseExpression('x || y && z', options); +``` + +The returned AST will only consist of the expression. The options are the same as for `parse()` + +Add startLine option ([#346](https://github.com/babel/babylon/pull/346)) (Raphael Mu) + +A new option was added to babylon allowing to change the intial linenumber for the first line which is usually `1`. +Changing this for example to `100` will make line `1` of the input source to be marked as line `100`, line `2` as `101`, line `3` as `102`, ... + +Function predicate declaration ([#103](https://github.com/babel/babylon/pull/103)) (Panagiotis Vekris) + +Added support for function predicates which flow introduced in version 0.33.0 + +```js +declare function is_number(x: mixed): boolean %checks(typeof x === "number"); +``` + +Allow imports in declare module ([#315](https://github.com/babel/babylon/pull/315)) (Daniel Tschinder) + +Added support for imports within module declarations which flow introduced in version 0.37.0 + +```js +declare module "C" { + import type { DT } from "D"; + declare export type CT = { D: DT }; +} +``` + +### :eyeglasses: Spec Compliancy + +Forbid semicolons after decorators in classes ([#352](https://github.com/babel/babylon/pull/352)) (Kevin Gibbons) + +This example now correctly throws an error when there is a semicolon after the decorator: + +```js +class A { +@a; +foo(){} +} +``` + +Keywords are not allowed as local specifier ([#307](https://github.com/babel/babylon/pull/307)) (Daniel Tschinder) + +Using keywords in imports is not allowed anymore: + +```js +import { default } from "foo"; +import { a as debugger } from "foo"; +``` + +Do not allow overwritting of primitive types ([#314](https://github.com/babel/babylon/pull/314)) (Daniel Tschinder) + +In flow it is now forbidden to overwrite the primitve types `"any"`, `"mixed"`, `"empty"`, `"bool"`, `"boolean"`, `"number"`, `"string"`, `"void"` and `"null"` with your own type declaration. + +Disallow import type { type a } from … ([#305](https://github.com/babel/babylon/pull/305)) (Daniel Tschinder) + +The following code now correctly throws an error + +```js +import type { type a } from "foo"; +``` + +Don't parse class properties without initializers when classProperties is disabled and Flow is enabled ([#300](https://github.com/babel/babylon/pull/300)) (Andrew Levine) + +Ensure that you enable the `classProperties` plugin in order to enable correct parsing of class properties. Prior to this version it was possible to parse them by enabling the `flow` plugin but this was not intended the behaviour. + +If you enable the flow plugin you can only define the type of the class properties, but not initialize them. + +Fix export default async function to be FunctionDeclaration ([#324](https://github.com/babel/babylon/pull/324)) (Daniel Tschinder) + +Parsing the following code now returns a `FunctionDeclaration` AST node instead of `FunctionExpression`. + +```js +export default async function bar() {}; +``` + +### :nail_care: Polish + +Improve error message on attempt to destructure named import ([#288](https://github.com/babel/babylon/pull/288)) (Brian Ng) + +### :bug: Bug Fix + +Fix negative number literal typeannotations ([#366](https://github.com/babel/babylon/pull/366)) (Daniel Tschinder) + +Ensure takeDecorators is called on exported class ([#358](https://github.com/babel/babylon/pull/358)) (Brian Ng) + +ESTree: correctly change literals in all cases ([#368](https://github.com/babel/babylon/pull/368)) (Daniel Tschinder) + +Correctly convert RestProperty to Assignable ([#339](https://github.com/babel/babylon/pull/339)) (Daniel Tschinder) + +Fix #321 by allowing question marks in type params ([#338](https://github.com/babel/babylon/pull/338)) (Daniel Tschinder) + +Fix #336 by correctly setting arrow-param ([#337](https://github.com/babel/babylon/pull/337)) (Daniel Tschinder) + +Fix parse error when destructuring `set` with default value ([#317](https://github.com/babel/babylon/pull/317)) (Brian Ng) + +Fix ObjectTypeCallProperty static ([#298](https://github.com/babel/babylon/pull/298)) (Dan Harper) + + +### :house: Internal + +Fix generator-method-with-computed-name spec ([#360](https://github.com/babel/babylon/pull/360)) (Alex Rattray) + +Fix flow type-parameter-declaration test with unintended semantic ([#361](https://github.com/babel/babylon/pull/361)) (Alex Rattray) + +Cleanup and splitup parser functions ([#295](https://github.com/babel/babylon/pull/295)) (Daniel Tschinder) + +chore(package): update flow-bin to version 0.38.0 ([#313](https://github.com/babel/babylon/pull/313)) (greenkeeper[bot]) + +Call inner function instead of 1:1 copy to plugin ([#294](https://github.com/babel/babylon/pull/294)) (Daniel Tschinder) + +Update eslint-config-babel to the latest version 🚀 ([#299](https://github.com/babel/babylon/pull/299)) (greenkeeper[bot]) + +Update eslint-config-babel to the latest version 🚀 ([#293](https://github.com/babel/babylon/pull/293)) (greenkeeper[bot]) + +devDeps: remove eslint-plugin-babel ([#292](https://github.com/babel/babylon/pull/292)) (Kai Cataldo) + +Correct indent eslint rule config ([#276](https://github.com/babel/babylon/pull/276)) (Daniel Tschinder) + +Fail tests that have expected.json and throws-option ([#285](https://github.com/babel/babylon/pull/285)) (Daniel Tschinder) + +### :memo: Documentation + +Update contributing with more test info [skip ci] ([#355](https://github.com/babel/babylon/pull/355)) (Brian Ng) + +Update API documentation ([#330](https://github.com/babel/babylon/pull/330)) (Timothy Gu) + +Added keywords to package.json ([#323](https://github.com/babel/babylon/pull/323)) (Dmytro) + +AST spec: fix casing of `RegExpLiteral` ([#318](https://github.com/babel/babylon/pull/318)) (Mathias Bynens) + +## 6.15.0 (2017-01-10) + +### :eyeglasses: Spec Compliancy + +Add support for Flow shorthand import type ([#267](https://github.com/babel/babylon/pull/267)) (Jeff Morrison) + +This change implements flows new shorthand import syntax +and where previously you had to write this code: + +```js +import {someValue} from "blah"; +import type {someType} from "blah"; +import typeof {someOtherValue} from "blah"; +``` + +you can now write it like this: + +```js +import { + someValue, + type someType, + typeof someOtherValue, +} from "blah"; +``` + +For more information look at [this](https://github.com/facebook/flow/pull/2890) pull request. + +flow: allow leading pipes in all positions ([#256](https://github.com/babel/babylon/pull/256)) (Vladimir Kurchatkin) + +This change now allows a leading pipe everywhere types can be used: +```js +var f = (x): | 1 | 2 => 1; +``` + +Throw error when exporting non-declaration ([#241](https://github.com/babel/babylon/pull/241)) (Kai Cataldo) + +Previously babylon parsed the following exports, although they are not valid: +```js +export typeof foo; +export new Foo(); +export function() {}; +export for (;;); +export while(foo); +``` + +### :bug: Bug Fix + +Don't set inType flag when parsing property names ([#266](https://github.com/babel/babylon/pull/266)) (Vladimir Kurchatkin) + +This fixes parsing of this case: + +```js +const map = { + [age <= 17] : 'Too young' +}; +``` + +Fix source location for JSXEmptyExpression nodes (fixes #248) ([#249](https://github.com/babel/babylon/pull/249)) (James Long) + +The following case produced an invalid AST +```js +
{/* foo */}
+``` + +Use fromCodePoint to convert high value unicode entities ([#243](https://github.com/babel/babylon/pull/243)) (Ryan Duffy) + +When high value unicode entities (e.g. 💩) were used in the input source code they are now correctly encoded in the resulting AST. + +Rename folder to avoid Windows-illegal characters ([#281](https://github.com/babel/babylon/pull/281)) (Ryan Plant) + +Allow this.state.clone() when parsing decorators ([#262](https://github.com/babel/babylon/pull/262)) (Alex Rattray) + +### :house: Internal + +User external-helpers ([#254](https://github.com/babel/babylon/pull/254)) (Daniel Tschinder) + +Add watch script for dev ([#234](https://github.com/babel/babylon/pull/234)) (Kai Cataldo) + +Freeze current plugins list for "*" option, and remove from README.md ([#245](https://github.com/babel/babylon/pull/245)) (Andrew Levine) + +Prepare tests for multiple fixture runners. ([#240](https://github.com/babel/babylon/pull/240)) (Daniel Tschinder) + +Add some test coverage for decorators stage-0 plugin ([#250](https://github.com/babel/babylon/pull/250)) (Andrew Levine) + +Refactor tokenizer types file ([#263](https://github.com/babel/babylon/pull/263)) (Sven SAULEAU) + +Update eslint-config-babel to the latest version 🚀 ([#273](https://github.com/babel/babylon/pull/273)) (greenkeeper[bot]) + +chore(package): update rollup to version 0.41.0 ([#272](https://github.com/babel/babylon/pull/272)) (greenkeeper[bot]) + +chore(package): update flow-bin to version 0.37.0 ([#255](https://github.com/babel/babylon/pull/255)) (greenkeeper[bot]) + +## 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/node_modules/babylon/LICENSE b/node_modules/babylon/LICENSE new file mode 100644 index 000000000..d4c7fc583 --- /dev/null +++ b/node_modules/babylon/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2012-2014 by various contributors (see AUTHORS) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/babylon/README.md b/node_modules/babylon/README.md new file mode 100644 index 000000000..ad2a8fd87 --- /dev/null +++ b/node_modules/babylon/README.md @@ -0,0 +1,134 @@ +

+ 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])` + +### `babylon.parseExpression(code, [options])` + +`parse()` parses the provided `code` as an entire ECMAScript program, while +`parseExpression()` tries to parse a single Expression with performance in +mind. When in doubt, use `.parse()`. + +### 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. + +- **startLine**: By default, the first line of code parsed is treated as line 1. You can provide a line number to alternatively start with. Useful for integration with other source tools. + +- **plugins**: Array containing the plugins that you want to enable. + +- **strictMode**: TODO + +### Output + +Babylon generates AST according to [Babel AST format][]. +It is based on [ESTree spec][] with the following deviations: + +> There is now an `estree` plugin which reverts these 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 + + - `estree` + - `jsx` + - `flow` + - `doExpressions` + - `objectRestSpread` + - `decorators` (Based on an outdated version of the Decorators proposal. Will be removed in a future version of `Babylon`) + - `classProperties` + - `exportExtensions` + - `asyncGenerators` + - `functionBind` + - `functionSent` + - `dynamicImport` + - `templateInvalidEscapes` diff --git a/node_modules/babylon/bin/babylon.js b/node_modules/babylon/bin/babylon.js new file mode 100755 index 000000000..449ddfed0 --- /dev/null +++ b/node_modules/babylon/bin/babylon.js @@ -0,0 +1,16 @@ +#!/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/node_modules/babylon/bin/generate-identifier-regex.js b/node_modules/babylon/bin/generate-identifier-regex.js new file mode 100644 index 000000000..9b0ae7d6b --- /dev/null +++ b/node_modules/babylon/bin/generate-identifier-regex.js @@ -0,0 +1,62 @@ +"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/node_modules/babylon/lib/index.js b/node_modules/babylon/lib/index.js new file mode 100644 index 000000000..a914ac591 --- /dev/null +++ b/node_modules/babylon/lib/index.js @@ -0,0 +1,7318 @@ +'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 = 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`. +// eslint-disable-next-line comma-spacing +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]; +// eslint-disable-next-line comma-spacing +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, + // Line from which to start counting source. Useful for + // integration with other tools. + startLine: 1, + // 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; +} + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + + + + + + + + + + + +var inherits = function (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; +}; + + + + + + + + + + + +var possibleConstructorReturn = function (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; +}; + +// ## 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 beforeExpr = true; +var startsExpr = true; +var isLoop = true; +var isAssign = true; +var prefix = true; +var postfix = true; + +var TokenType = function TokenType(label) { + var conf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(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; +}; + +var KeywordTokenType = function (_TokenType) { + inherits(KeywordTokenType, _TokenType); + + function KeywordTokenType(name) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, KeywordTokenType); + + options.keyword = name; + + return possibleConstructorReturn(this, _TokenType.call(this, name, options)); + } + + return KeywordTokenType; +}(TokenType); + +var BinopTokenType = function (_TokenType2) { + inherits(BinopTokenType, _TokenType2); + + function BinopTokenType(name, prec) { + classCallCheck(this, BinopTokenType); + return possibleConstructorReturn(this, _TokenType2.call(this, name, { beforeExpr: beforeExpr, binop: prec })); + } + + return BinopTokenType; +}(TokenType); + +var types = { + num: new TokenType("num", { startsExpr: startsExpr }), + regexp: new TokenType("regexp", { startsExpr: startsExpr }), + string: new TokenType("string", { startsExpr: startsExpr }), + name: new TokenType("name", { startsExpr: startsExpr }), + eof: new TokenType("eof"), + + // Punctuation token types. + bracketL: new TokenType("[", { beforeExpr: beforeExpr, startsExpr: startsExpr }), + bracketR: new TokenType("]"), + braceL: new TokenType("{", { beforeExpr: beforeExpr, startsExpr: startsExpr }), + braceBarL: new TokenType("{|", { beforeExpr: beforeExpr, startsExpr: startsExpr }), + braceR: new TokenType("}"), + braceBarR: new TokenType("|}"), + parenL: new TokenType("(", { beforeExpr: beforeExpr, startsExpr: startsExpr }), + parenR: new TokenType(")"), + comma: new TokenType(",", { beforeExpr: beforeExpr }), + semi: new TokenType(";", { beforeExpr: beforeExpr }), + colon: new TokenType(":", { beforeExpr: beforeExpr }), + doubleColon: new TokenType("::", { beforeExpr: beforeExpr }), + dot: new TokenType("."), + question: new TokenType("?", { beforeExpr: beforeExpr }), + arrow: new TokenType("=>", { beforeExpr: beforeExpr }), + template: new TokenType("template"), + ellipsis: new TokenType("...", { beforeExpr: beforeExpr }), + backQuote: new TokenType("`", { startsExpr: startsExpr }), + dollarBraceL: new TokenType("${", { beforeExpr: beforeExpr, startsExpr: startsExpr }), + 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: beforeExpr, isAssign: isAssign }), + assign: new TokenType("_=", { beforeExpr: beforeExpr, isAssign: isAssign }), + incDec: new TokenType("++/--", { prefix: prefix, postfix: postfix, startsExpr: startsExpr }), + prefix: new TokenType("prefix", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }), + logicalOR: new BinopTokenType("||", 1), + logicalAND: new BinopTokenType("&&", 2), + bitwiseOR: new BinopTokenType("|", 3), + bitwiseXOR: new BinopTokenType("^", 4), + bitwiseAND: new BinopTokenType("&", 5), + equality: new BinopTokenType("==/!=", 6), + relational: new BinopTokenType("", 7), + bitShift: new BinopTokenType("<>", 8), + plusMin: new TokenType("+/-", { beforeExpr: beforeExpr, binop: 9, prefix: prefix, startsExpr: startsExpr }), + modulo: new BinopTokenType("%", 10), + star: new BinopTokenType("*", 10), + slash: new BinopTokenType("/", 10), + exponent: new TokenType("**", { beforeExpr: beforeExpr, binop: 11, rightAssociative: true }) +}; + +var keywords = { + "break": new KeywordTokenType("break"), + "case": new KeywordTokenType("case", { beforeExpr: beforeExpr }), + "catch": new KeywordTokenType("catch"), + "continue": new KeywordTokenType("continue"), + "debugger": new KeywordTokenType("debugger"), + "default": new KeywordTokenType("default", { beforeExpr: beforeExpr }), + "do": new KeywordTokenType("do", { isLoop: isLoop, beforeExpr: beforeExpr }), + "else": new KeywordTokenType("else", { beforeExpr: beforeExpr }), + "finally": new KeywordTokenType("finally"), + "for": new KeywordTokenType("for", { isLoop: isLoop }), + "function": new KeywordTokenType("function", { startsExpr: startsExpr }), + "if": new KeywordTokenType("if"), + "return": new KeywordTokenType("return", { beforeExpr: beforeExpr }), + "switch": new KeywordTokenType("switch"), + "throw": new KeywordTokenType("throw", { beforeExpr: beforeExpr }), + "try": new KeywordTokenType("try"), + "var": new KeywordTokenType("var"), + "let": new KeywordTokenType("let"), + "const": new KeywordTokenType("const"), + "while": new KeywordTokenType("while", { isLoop: isLoop }), + "with": new KeywordTokenType("with"), + "new": new KeywordTokenType("new", { beforeExpr: beforeExpr, startsExpr: startsExpr }), + "this": new KeywordTokenType("this", { startsExpr: startsExpr }), + "super": new KeywordTokenType("super", { startsExpr: startsExpr }), + "class": new KeywordTokenType("class"), + "extends": new KeywordTokenType("extends", { beforeExpr: beforeExpr }), + "export": new KeywordTokenType("export"), + "import": new KeywordTokenType("import", { startsExpr: startsExpr }), + "yield": new KeywordTokenType("yield", { beforeExpr: beforeExpr, startsExpr: startsExpr }), + "null": new KeywordTokenType("null", { startsExpr: startsExpr }), + "true": new KeywordTokenType("true", { startsExpr: startsExpr }), + "false": new KeywordTokenType("false", { startsExpr: startsExpr }), + "in": new KeywordTokenType("in", { beforeExpr: beforeExpr, binop: 7 }), + "instanceof": new KeywordTokenType("instanceof", { beforeExpr: beforeExpr, binop: 7 }), + "typeof": new KeywordTokenType("typeof", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }), + "void": new KeywordTokenType("void", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }), + "delete": new KeywordTokenType("delete", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }) +}; + +// Map keyword names to token types. +Object.keys(keywords).forEach(function (name) { + types["_" + name] = keywords[name]; +}); + +// 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]/; + +// 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(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; +}; + +// These are used when `options.locations` is on, for the +// `startLoc` and `endLoc` properties. + +var Position = function Position(line, col) { + classCallCheck(this, Position); + + this.line = line; + this.column = col; +}; + +var SourceLocation = function SourceLocation(start, end) { + classCallCheck(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); + } + } +} + +var State = function () { + function State() { + classCallCheck(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.inPropertyName = this.inType = this.inClassProperty = this.noAnonFunctionType = false; + + this.labels = []; + + this.decorators = []; + + this.tokens = []; + + this.comments = []; + + this.trailingComments = []; + this.leadingComments = []; + this.commentStack = []; + + this.pos = this.lineStart = 0; + this.curLine = options.startLine; + + 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.invalidTemplateEscapePosition = 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; +}(); + +// 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(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(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$$1(word) { + return isKeyword(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; + var 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(); + // ` + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + +

MIT License

+ +
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ + diff --git a/node_modules/domain-browser/README.md b/node_modules/domain-browser/README.md new file mode 100644 index 000000000..43502effc --- /dev/null +++ b/node_modules/domain-browser/README.md @@ -0,0 +1,111 @@ + + +

domain-browser

+ + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
+Slack community badge +Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + + + + + + +Node's domain module for the web browser. This is merely an evented try...catch with the same API as node, nothing more. + + + + + + +

Install

+ +

NPM

    +
  • Install: npm install --save domain-browser
  • +
  • Use: require('domain-browser')
+ +

Browserify

    +
  • Install: npm install --save domain-browser
  • +
  • Use: require('domain-browser')
  • +
  • CDN URL: //wzrd.in/bundle/domain-browser@1.1.7
+ +

Ender

    +
  • Install: ender add domain-browser
  • +
  • Use: require('domain-browser')
+ + + + + + +

History

+ +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

Backers

+ +

Maintainers

+ +These amazing people are maintaining this project: + + + +

Sponsors

+ +No sponsors yet! Will you be the first? + +Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + +

Contributors

+ +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/domain-browser/index.js b/node_modules/domain-browser/index.js new file mode 100644 index 000000000..f6cd7f7d7 --- /dev/null +++ b/node_modules/domain-browser/index.js @@ -0,0 +1,69 @@ +// This file should be ES5 compatible +/* eslint prefer-spread:0, no-var:0, prefer-reflect:0, no-magic-numbers:0 */ +'use strict' +module.exports = (function () { + // Import Events + var events = require('events') + + // Export Domain + var domain = {} + domain.createDomain = domain.create = function () { + var d = new events.EventEmitter() + + function emitError (e) { + d.emit('error', e) + } + + d.add = function (emitter) { + emitter.on('error', emitError) + } + d.remove = function (emitter) { + emitter.removeListener('error', emitError) + } + d.bind = function (fn) { + return function () { + var args = Array.prototype.slice.call(arguments) + try { + fn.apply(null, args) + } + catch (err) { + emitError(err) + } + } + } + d.intercept = function (fn) { + return function (err) { + if ( err ) { + emitError(err) + } + else { + var args = Array.prototype.slice.call(arguments, 1) + try { + fn.apply(null, args) + } + catch (err) { + emitError(err) + } + } + } + } + d.run = function (fn) { + try { + fn() + } + catch (err) { + emitError(err) + } + return this + } + d.dispose = function () { + this.removeAllListeners() + return this + } + d.enter = d.exit = function () { + return this + } + return d + } + return domain +}).call(this) diff --git a/node_modules/domain-browser/package.json b/node_modules/domain-browser/package.json new file mode 100644 index 000000000..74f79add9 --- /dev/null +++ b/node_modules/domain-browser/package.json @@ -0,0 +1,149 @@ +{ + "_from": "domain-browser@^1.1.1", + "_id": "domain-browser@1.1.7", + "_inBundle": false, + "_integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "_location": "/domain-browser", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "domain-browser@^1.1.1", + "name": "domain-browser", + "escapedName": "domain-browser", + "rawSpec": "^1.1.1", + "saveSpec": null, + "fetchSpec": "^1.1.1" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "_shasum": "867aa4b093faa05f1de08c06f4d7b21fdf8698bc", + "_spec": "domain-browser@^1.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "2013+ Bevry Pty Ltd", + "email": "us@bevry.me", + "url": "http://bevry.me" + }, + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "slackin", + "patreon", + "gratipay", + "flattr", + "paypal", + "bitcoin", + "wishlist" + ], + "config": { + "patreonUsername": "bevry", + "gratipayUsername": "bevry", + "flattrCode": "344188/balupton-on-Flattr", + "paypalButtonID": "QB8GQPZAH84N6", + "bitcoinURL": "https://bevry.me/bitcoin", + "wishlistURL": "https://bevry.me/wishlist", + "slackinURL": "https://slack.bevry.me" + } + }, + "browsers": true, + "bugs": { + "url": "https://github.com/bevry/domain-browser/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Benjamin Lupton", + "email": "b@lupton.cc", + "url": "http://balupton.com" + }, + { + "name": "Evan Solomon", + "url": "http://evansolomon.me" + }, + { + "name": "James Halliday", + "email": "substack@gmail.com", + "url": "http://substack.net/" + }, + { + "name": "Guy Bedford", + "email": "guybedford@gmail.com", + "url": "twitter.com/guybedford" + }, + { + "name": "Bogdan Chadkin", + "email": "trysound@yandex.ru", + "url": "https://github.com/TrySound" + } + ], + "dependencies": {}, + "deprecated": false, + "description": "Node's domain module for the web browser. This is merely an evented try...catch with the same API as node, nothing more.", + "devDependencies": { + "assert-helpers": "^4.1.0", + "eslint": "^1.10.3", + "joe": "^1.6.0", + "joe-reporter-console": "^1.2.1", + "projectz": "^1.0.8" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + }, + "homepage": "https://github.com/bevry/domain-browser", + "jspm": { + "map": { + "./index.js": { + "node": "@node/domain" + } + } + }, + "keywords": [ + "domain", + "trycatch", + "try", + "catch", + "node-compat", + "ender.js", + "component", + "component.io", + "umd", + "amd", + "require.js", + "browser" + ], + "license": "MIT", + "main": "./index.js", + "maintainers": [ + { + "name": "Benjamin Lupton", + "email": "b@lupton.cc", + "url": "http://balupton.com" + } + ], + "name": "domain-browser", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/bevry/domain-browser.git" + }, + "scripts": { + "clean": "node --harmony nakefile.js clean", + "compile": "node --harmony nakefile.js compile", + "meta": "node --harmony nakefile.js meta", + "prepare": "node --harmony nakefile.js prepare", + "release": "node --harmony nakefile.js release", + "setup": "node --harmony nakefile.js setup", + "test": "node --harmony ./test.js", + "verify": "node --harmony nakefile.js verify", + "watch": "node --harmony nakefile.js watch" + }, + "version": "1.1.7" +} diff --git a/node_modules/domain-browser/test.js b/node_modules/domain-browser/test.js new file mode 100644 index 000000000..70efcfcf5 --- /dev/null +++ b/node_modules/domain-browser/test.js @@ -0,0 +1,100 @@ +/* eslint handle-callback-err:0, no-magic-numbers:0, no-unused-vars:0 */ +'use strict' + +// Import +const events = require('events') +const equal = require('assert-helpers').equal +const joe = require('joe') +const domain = require('./') + +// ===================================== +// Tests + +joe.describe('domain-browser', function (describe, it) { + it('should work on throws', function (done) { + const d = domain.create() + d.on('error', function (err) { + equal(err && err.message, 'a thrown error', 'error message') + done() + }) + d.run(function () { + throw new Error('a thrown error') + }) + }) + + it('should be able to add emitters', function (done) { + const d = domain.create() + const emitter = new events.EventEmitter() + + d.add(emitter) + d.on('error', function (err) { + equal(err && err.message, 'an emitted error', 'error message') + done() + }) + + emitter.emit('error', new Error('an emitted error')) + }) + + it('should be able to remove emitters', function (done) { + const emitter = new events.EventEmitter() + const d = domain.create() + let domainGotError = false + + d.add(emitter) + d.on('error', function (err) { + domainGotError = true + }) + + emitter.on('error', function (err) { + equal(err && err.message, 'This error should not go to the domain', 'error message') + + // Make sure nothing race condition-y is happening + setTimeout(function () { + equal(domainGotError, false, 'no domain error') + done() + }, 0) + }) + + d.remove(emitter) + emitter.emit('error', new Error('This error should not go to the domain')) + }) + + it('bind should work', function (done) { + const d = domain.create() + d.on('error', function (err) { + equal(err && err.message, 'a thrown error', 'error message') + done() + }) + d.bind(function (err, a, b) { + equal(err && err.message, 'a passed error', 'error message') + equal(a, 2, 'value of a') + equal(b, 3, 'value of b') + throw new Error('a thrown error') + })(new Error('a passed error'), 2, 3) + }) + + it('intercept should work', function (done) { + const d = domain.create() + let count = 0 + d.on('error', function (err) { + if ( count === 0 ) { + equal(err && err.message, 'a thrown error', 'error message') + } + else if ( count === 1 ) { + equal(err && err.message, 'a passed error', 'error message') + done() + } + count++ + }) + + d.intercept(function (a, b) { + equal(a, 2, 'value of a') + equal(b, 3, 'value of b') + throw new Error('a thrown error') + })(null, 2, 3) + + d.intercept(function (a, b) { + throw new Error('should never reach here') + })(new Error('a passed error'), 2, 3) + }) +}) diff --git a/node_modules/ecstatic/.npmignore b/node_modules/ecstatic/.npmignore new file mode 100644 index 000000000..7cf3427e4 --- /dev/null +++ b/node_modules/ecstatic/.npmignore @@ -0,0 +1,19 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +node_modules +npm-debug.log + +# Unicode filenames cause jenkins to barf when cleaning up workspaces +# See: https://github.com/jfhbrook/node-ecstatic/issues/128 +test diff --git a/node_modules/ecstatic/.nyc_output/0e436f3bc14dc8ccedf3644f11d21bb2.json b/node_modules/ecstatic/.nyc_output/0e436f3bc14dc8ccedf3644f11d21bb2.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/0e436f3bc14dc8ccedf3644f11d21bb2.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/1089e711f18d2cef72071d9d94b2113a.json b/node_modules/ecstatic/.nyc_output/1089e711f18d2cef72071d9d94b2113a.json new file mode 100644 index 000000000..1b99cfbcb --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/1089e711f18d2cef72071d9d94b2113a.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":2,"12":0,"13":0,"14":2,"15":2,"16":2,"17":2,"18":2,"19":2,"20":2,"21":2,"22":2,"23":2,"24":2,"25":2,"26":2,"27":2,"28":2,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":2,"36":4,"37":4,"38":4,"39":4,"40":0,"41":4,"42":4,"43":4,"44":2,"45":4,"46":0,"47":4,"48":0,"49":4,"50":0,"51":4,"52":0,"53":4,"54":4,"55":0,"56":0,"57":0,"58":0,"59":0,"60":4,"61":0,"62":4,"63":2,"64":0,"65":0,"66":2,"67":0,"68":0,"69":0,"70":2,"71":2,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":2,"80":4,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":4,"90":2,"91":2,"92":2,"93":2,"94":2,"95":2,"96":2,"97":0,"98":0,"99":2,"100":2,"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":2,"119":2,"120":2,"121":2,"122":2,"123":0,"124":0,"125":0,"126":0,"127":2,"128":2,"129":0,"130":2,"131":2,"132":2,"133":2,"134":0,"135":2,"136":2,"137":2,"138":0,"139":2,"140":0,"141":2,"142":2,"143":2,"144":2,"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":1,"160":1,"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":4,"180":4,"181":8,"182":8,"183":0,"184":8,"185":1,"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},"f":{"0":2,"1":4,"2":0,"3":4,"4":4,"5":0,"6":0,"7":0,"8":2,"9":0,"10":0,"11":0,"12":2,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":4,"20":8,"21":0,"22":0},"b":{"0":[0,2],"1":[2,0],"2":[2,2],"3":[0,2],"4":[0,0],"5":[0,0],"6":[2,2],"7":[0,4],"8":[4,0],"9":[0,4],"10":[0,4],"11":[4,2,0],"12":[0,4],"13":[4,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,4],"20":[2,2],"21":[0,2],"22":[2,0],"23":[0,2],"24":[0,0],"25":[2,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,4],"30":[4,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[2,0],"35":[2,0],"36":[2,0],"37":[0,2],"38":[2,2],"39":[0,2],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,2],"44":[0,0],"45":[0,2],"46":[2,2],"47":[0,2],"48":[0,2],"49":[2,2],"50":[2,0],"51":[2,2],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,8],"65":[8,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":2,"2":2,"3":0,"4":2},"f":{"0":2},"b":{"0":[0,2]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":2,"18":40,"19":2,"20":1,"21":2,"22":0,"23":0,"24":1,"25":2,"26":0,"27":0,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":2},"f":{"0":2,"1":40,"2":2,"3":2,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":1,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[40,1],"1":[1,1],"2":[0,2],"3":[0,2],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[2,1,2]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/246c1d9b9690a1b25a37590e214926eb.json b/node_modules/ecstatic/.nyc_output/246c1d9b9690a1b25a37590e214926eb.json new file mode 100644 index 000000000..110f330b5 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/246c1d9b9690a1b25a37590e214926eb.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":5,"12":0,"13":0,"14":5,"15":5,"16":5,"17":5,"18":5,"19":5,"20":5,"21":5,"22":5,"23":5,"24":5,"25":5,"26":5,"27":5,"28":5,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":5,"36":5,"37":5,"38":5,"39":5,"40":0,"41":5,"42":5,"43":5,"44":5,"45":5,"46":0,"47":5,"48":0,"49":5,"50":0,"51":5,"52":0,"53":5,"54":5,"55":0,"56":0,"57":0,"58":0,"59":0,"60":5,"61":0,"62":5,"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":5,"80":5,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":5,"90":5,"91":5,"92":5,"93":5,"94":5,"95":5,"96":5,"97":0,"98":0,"99":5,"100":5,"101":5,"102":5,"103":5,"104":5,"105":5,"106":5,"107":5,"108":5,"109":2,"110":3,"111":3,"112":0,"113":3,"114":0,"115":3,"116":3,"117":3,"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":1,"160":1,"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":5,"180":5,"181":10,"182":10,"183":0,"184":10,"185":1,"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},"f":{"0":5,"1":5,"2":0,"3":5,"4":5,"5":0,"6":0,"7":0,"8":5,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":5,"20":10,"21":0,"22":0},"b":{"0":[0,5],"1":[5,0],"2":[5,5],"3":[0,5],"4":[0,0],"5":[0,0],"6":[5,0],"7":[0,5],"8":[5,0],"9":[0,5],"10":[0,5],"11":[5,5,0],"12":[0,5],"13":[5,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,5],"20":[0,5],"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,5],"30":[5,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[5,0],"35":[5,0],"36":[5,0],"37":[0,5],"38":[5,5],"39":[5,0],"40":[4,1],"41":[2,3],"42":[5,4,3],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,10],"65":[10,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":2,"26":2,"27":0,"28":2,"29":2,"30":2,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":2,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,2],"7":[2,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":5,"4":5,"5":5,"6":5,"7":5,"8":5,"9":5,"10":5,"11":5,"12":5,"13":5,"14":5,"15":5,"16":5,"17":5,"18":0,"19":5,"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":5},"f":{"0":5,"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},"b":{"0":[0,0],"1":[0,5],"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],"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":[5,0,5]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/28067239ca9b9a420d75718dc60e9794.json b/node_modules/ecstatic/.nyc_output/28067239ca9b9a420d75718dc60e9794.json new file mode 100644 index 000000000..ea28ad214 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/28067239ca9b9a420d75718dc60e9794.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":6,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":2,"56":1,"57":1,"58":0,"59":1,"60":1,"61":0,"62":1,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":1,"72":1,"73":0,"74":1,"75":1,"76":0,"77":0,"78":0,"79":0,"80":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":7,"182":7,"183":0,"184":7,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":3,"2":6,"3":3,"4":3,"5":1,"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":3,"20":7,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[2,1],"13":[3,2,0],"14":[1,1],"15":[0,1],"16":[1,0],"17":[0,0],"18":[1,0],"19":[0,1],"20":[1,0],"21":[0,1],"22":[1,0],"23":[0,1],"24":[0,0],"25":[1,0],"26":[0,1],"27":[1,0],"28":[0,0],"29":[0,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[1,0],"67":[0,1],"68":[1,0],"69":[1,1,1],"70":[1,1,1],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":1,"47":1,"48":1,"49":1,"50":21,"51":21,"52":21,"53":8,"54":21,"55":21,"56":21,"57":21,"58":1,"59":7,"60":1,"61":29,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":21,"9":7,"10":29,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[0,1],"6":[0,0],"7":[0,0],"8":[21,21],"9":[8,13],"10":[0,8],"11":[8,13],"12":[8,13],"13":[3,10],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":21,"2":0,"3":21,"4":21,"5":21,"6":63},"f":{"0":21,"1":63},"b":{"0":[0,21],"1":[21,21],"2":[8,13]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":21,"2":8,"3":13,"4":13,"5":13,"6":13,"7":6,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":0,"16":7},"f":{"0":21},"b":{"0":[8,13],"1":[21,21],"2":[0,13],"3":[6,7],"4":[13,13],"5":[0,7]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":21,"11":21,"12":0,"13":21,"14":8,"15":13,"16":21,"17":1},"f":{"0":1,"1":21,"2":21},"b":{"0":[0,1],"1":[0,21],"2":[8,13],"3":[1,20]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[1,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":24,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":8,"83":0,"84":0,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":24,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":8,"15":1,"16":1,"17":1},"b":{"0":[24,13],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[0,8],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/370f05d87a90d99a9391d2c4707dabe7.json b/node_modules/ecstatic/.nyc_output/370f05d87a90d99a9391d2c4707dabe7.json new file mode 100644 index 000000000..08bbaa29e --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/370f05d87a90d99a9391d2c4707dabe7.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":1,"42":1,"43":1,"44":1,"45":1,"46":0,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":1,"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":1,"80":1,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":1,"180":1,"181":2,"182":2,"183":0,"184":2,"185":1,"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},"f":{"0":1,"1":1,"2":0,"3":1,"4":1,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":1,"20":2,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[1,0],"4":[1,0],"5":[0,0],"6":[1,0],"7":[0,1],"8":[1,0],"9":[0,1],"10":[0,1],"11":[1,1,0],"12":[0,1],"13":[1,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,1],"20":[0,1],"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,1],"30":[1,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,2],"65":[2,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":36,"19":1,"20":1,"21":2,"22":0,"23":0,"24":1,"25":2,"26":0,"27":0,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":2,"83":1,"84":1,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":36,"2":2,"3":2,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":2,"15":3,"16":4,"17":3},"b":{"0":[36,1],"1":[1,0],"2":[0,2],"3":[0,2],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[1,1],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/3d0091927809edba2172020b3e0eb278.json b/node_modules/ecstatic/.nyc_output/3d0091927809edba2172020b3e0eb278.json new file mode 100644 index 000000000..4c06e6cc2 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/3d0091927809edba2172020b3e0eb278.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":1,"42":1,"43":1,"44":1,"45":1,"46":2,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":1,"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":1,"80":1,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":1,"180":1,"181":2,"182":2,"183":0,"184":2,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":1,"2":2,"3":1,"4":1,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":1,"20":2,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[1,0],"4":[1,0],"5":[0,0],"6":[1,0],"7":[0,1],"8":[1,0],"9":[0,1],"10":[0,1],"11":[1,1,0],"12":[0,1],"13":[1,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,1],"20":[0,1],"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,1],"30":[1,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,2],"65":[2,0],"66":[1,0],"67":[0,1],"68":[1,0],"69":[1,0,0],"70":[1,1,0],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":17,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":17,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1},"b":{"0":[17,14],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[1,0],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/43ba11797e49f169b6e0ed203795ffc0.json b/node_modules/ecstatic/.nyc_output/43ba11797e49f169b6e0ed203795ffc0.json new file mode 100644 index 000000000..29f3efc2a --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/43ba11797e49f169b6e0ed203795ffc0.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":2,"37":2,"38":2,"39":2,"40":0,"41":2,"42":2,"43":2,"44":2,"45":2,"46":0,"47":2,"48":0,"49":2,"50":0,"51":2,"52":0,"53":2,"54":2,"55":0,"56":0,"57":0,"58":0,"59":0,"60":2,"61":0,"62":2,"63":2,"64":0,"65":0,"66":2,"67":1,"68":1,"69":1,"70":1,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":1,"78":1,"79":0,"80":2,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":2,"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":1,"160":1,"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":2,"180":2,"181":7,"182":7,"183":0,"184":7,"185":1,"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},"f":{"0":1,"1":2,"2":0,"3":2,"4":2,"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":2,"20":7,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[2,0],"7":[0,2],"8":[2,0],"9":[0,2],"10":[0,2],"11":[2,2,0],"12":[0,2],"13":[2,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,2],"20":[2,0],"21":[0,2],"22":[2,2],"23":[1,1],"24":[0,1],"25":[0,1],"26":[0,0],"27":[0,0],"28":[1,0],"29":[0,2],"30":[2,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":0,"43":1,"44":1,"45":0,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":0,"60":1,"61":0,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[1,0],"6":[0,1],"7":[0,0],"8":[1,1],"9":[1,0],"10":[0,1],"11":[1,0],"12":[1,0],"13":[0,0],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":1,"2":0,"3":1,"4":1,"5":1,"6":3},"f":{"0":1,"1":3},"b":{"0":[0,1],"1":[1,1],"2":[1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":1},"b":{"0":[1,0],"1":[1,1],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0},"f":{"0":1,"1":0,"2":0},"b":{"0":[1,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":40,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":40,"2":1,"3":1,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[40,2],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/440e615b5769bc16d3a797b07369937b.json b/node_modules/ecstatic/.nyc_output/440e615b5769bc16d3a797b07369937b.json new file mode 100644 index 000000000..e7cac4ee5 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/440e615b5769bc16d3a797b07369937b.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":4,"18":4,"19":4,"20":4,"21":4,"22":4,"23":4,"24":4,"25":4,"26":4,"27":4,"28":4,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":4,"36":6,"37":6,"38":6,"39":6,"40":0,"41":6,"42":6,"43":6,"44":6,"45":6,"46":0,"47":6,"48":0,"49":6,"50":0,"51":6,"52":0,"53":6,"54":6,"55":0,"56":0,"57":0,"58":0,"59":0,"60":6,"61":0,"62":6,"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":6,"80":6,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":6,"90":6,"91":6,"92":6,"93":6,"94":6,"95":6,"96":6,"97":0,"98":0,"99":6,"100":6,"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":6,"119":6,"120":6,"121":6,"122":6,"123":4,"124":4,"125":2,"126":4,"127":2,"128":6,"129":0,"130":6,"131":6,"132":6,"133":6,"134":0,"135":6,"136":6,"137":6,"138":0,"139":6,"140":0,"141":6,"142":6,"143":6,"144":6,"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":1,"160":1,"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":6,"180":6,"181":12,"182":12,"183":0,"184":12,"185":1,"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},"f":{"0":4,"1":6,"2":0,"3":6,"4":6,"5":0,"6":0,"7":0,"8":6,"9":0,"10":0,"11":0,"12":6,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":6,"20":12,"21":0,"22":0},"b":{"0":[4,0],"1":[4,0],"2":[4,4],"3":[0,4],"4":[0,0],"5":[0,0],"6":[6,0],"7":[0,6],"8":[6,0],"9":[0,6],"10":[0,6],"11":[6,6,0],"12":[0,6],"13":[6,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,6],"20":[0,6],"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,6],"30":[6,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[6,0],"35":[6,0],"36":[6,0],"37":[0,6],"38":[6,6],"39":[0,6],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[4,2],"44":[2,2],"45":[0,6],"46":[6,6],"47":[0,6],"48":[0,6],"49":[6,6],"50":[6,0],"51":[6,6],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,12],"65":[12,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":6,"2":6,"3":0,"4":6},"f":{"0":6},"b":{"0":[0,6]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":4,"4":4,"5":4,"6":4,"7":4,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":4,"18":168,"19":4,"20":4,"21":8,"22":0,"23":0,"24":4,"25":8,"26":0,"27":0,"28":4,"29":8,"30":0,"31":0,"32":4,"33":12,"34":0,"35":0,"36":4,"37":8,"38":0,"39":0,"40":4,"41":0,"42":4,"43":4,"44":1,"45":3,"46":1,"47":2,"48":2,"49":4,"50":0,"51":4,"52":8,"53":0,"54":0,"55":4,"56":8,"57":0,"58":0,"59":0,"60":4,"61":12,"62":12,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":4,"74":12,"75":0,"76":0,"77":4,"78":12,"79":0,"80":0,"81":4,"82":32,"83":0,"84":0,"85":4,"86":12,"87":0,"88":0,"89":4,"90":16,"91":0,"92":0,"93":4,"94":12,"95":0,"96":0,"97":4},"f":{"0":4,"1":168,"2":8,"3":8,"4":8,"5":12,"6":8,"7":8,"8":8,"9":12,"10":0,"11":0,"12":12,"13":12,"14":32,"15":12,"16":16,"17":12},"b":{"0":[168,0],"1":[4,0],"2":[0,8],"3":[0,8],"4":[0,8],"5":[0,12],"6":[0,8],"7":[0,4],"8":[4,0],"9":[4,0],"10":[4,4],"11":[1,3],"12":[1,2],"13":[2,0],"14":[0,4],"15":[4,0],"16":[0,8],"17":[0,8],"18":[8,0],"19":[12,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,12],"25":[0,12],"26":[0,32],"27":[0,12],"28":[0,16],"29":[0,12],"30":[0,0],"31":[4,4,4]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/45d156bbbe05e26013a2478828a2300f.json b/node_modules/ecstatic/.nyc_output/45d156bbbe05e26013a2478828a2300f.json new file mode 100644 index 000000000..917584cee --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/45d156bbbe05e26013a2478828a2300f.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":6,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":2,"56":1,"57":1,"58":0,"59":1,"60":1,"61":0,"62":1,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":1,"72":1,"73":0,"74":1,"75":1,"76":0,"77":0,"78":0,"79":0,"80":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":7,"182":7,"183":0,"184":7,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":3,"2":6,"3":3,"4":3,"5":1,"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":3,"20":7,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[2,1],"13":[3,2,0],"14":[1,1],"15":[0,1],"16":[1,0],"17":[0,0],"18":[1,0],"19":[0,1],"20":[1,0],"21":[0,1],"22":[1,0],"23":[0,1],"24":[0,0],"25":[1,0],"26":[0,1],"27":[1,0],"28":[0,0],"29":[0,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[1,0],"67":[0,1],"68":[1,1],"69":[1,1,1],"70":[1,1,1],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":1,"47":1,"48":1,"49":1,"50":21,"51":21,"52":21,"53":8,"54":21,"55":21,"56":21,"57":21,"58":1,"59":7,"60":1,"61":29,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":21,"9":7,"10":29,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[0,1],"6":[0,0],"7":[0,0],"8":[21,21],"9":[8,13],"10":[0,8],"11":[8,13],"12":[8,13],"13":[3,10],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":21,"2":0,"3":21,"4":21,"5":21,"6":63},"f":{"0":21,"1":63},"b":{"0":[0,21],"1":[21,21],"2":[8,13]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":21,"2":8,"3":13,"4":13,"5":13,"6":13,"7":6,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":0,"16":7},"f":{"0":21},"b":{"0":[8,13],"1":[21,21],"2":[0,13],"3":[6,7],"4":[13,13],"5":[0,7]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":21,"11":21,"12":0,"13":21,"14":8,"15":13,"16":21,"17":1},"f":{"0":1,"1":21,"2":21},"b":{"0":[0,1],"1":[0,21],"2":[8,13],"3":[1,20]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[1,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":24,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":8,"83":0,"84":0,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":24,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":8,"15":1,"16":1,"17":1},"b":{"0":[24,13],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[0,8],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/47f92d828cfbd2b8e98f91d65290178c.json b/node_modules/ecstatic/.nyc_output/47f92d828cfbd2b8e98f91d65290178c.json new file mode 100644 index 000000000..1a5e7afdc --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/47f92d828cfbd2b8e98f91d65290178c.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":0,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":0,"56":0,"57":0,"58":0,"59":0,"60":3,"61":0,"62":3,"63":2,"64":0,"65":0,"66":2,"67":1,"68":1,"69":1,"70":1,"71":1,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":1,"80":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":3,"180":3,"181":7,"182":7,"183":0,"184":7,"185":1,"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},"f":{"0":1,"1":3,"2":0,"3":3,"4":3,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":3,"20":7,"21":0,"22":0},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,2,0],"12":[0,3],"13":[3,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,3],"20":[2,1],"21":[0,2],"22":[2,0],"23":[1,1],"24":[0,1],"25":[1,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,3],"30":[3,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":0,"19":1,"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":1},"f":{"0":1,"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},"b":{"0":[0,0],"1":[0,1],"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],"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":[1,0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/49eb33cd8cebe3f4ac8c85d10406aa0d.json b/node_modules/ecstatic/.nyc_output/49eb33cd8cebe3f4ac8c85d10406aa0d.json new file mode 100644 index 000000000..7e0c8cc35 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/49eb33cd8cebe3f4ac8c85d10406aa0d.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":41,"37":41,"38":41,"39":41,"40":0,"41":41,"42":41,"43":41,"44":41,"45":41,"46":0,"47":41,"48":0,"49":41,"50":0,"51":41,"52":0,"53":37,"54":37,"55":9,"56":0,"57":9,"58":5,"59":4,"60":28,"61":0,"62":28,"63":9,"64":0,"65":0,"66":9,"67":5,"68":5,"69":5,"70":4,"71":4,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":19,"80":41,"81":10,"82":10,"83":5,"84":5,"85":4,"86":4,"87":1,"88":5,"89":31,"90":23,"91":23,"92":23,"93":23,"94":23,"95":23,"96":23,"97":4,"98":4,"99":23,"100":23,"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":23,"119":23,"120":23,"121":23,"122":23,"123":0,"124":0,"125":0,"126":0,"127":23,"128":23,"129":0,"130":23,"131":23,"132":23,"133":23,"134":0,"135":23,"136":23,"137":23,"138":0,"139":23,"140":0,"141":23,"142":23,"143":23,"144":23,"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":1,"160":1,"161":5,"162":5,"163":5,"164":5,"165":4,"166":5,"167":0,"168":0,"169":0,"170":0,"171":5,"172":5,"173":0,"174":5,"175":5,"176":41,"177":41,"178":10,"179":41,"180":41,"181":138,"182":138,"183":0,"184":138,"185":1,"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},"f":{"0":1,"1":41,"2":0,"3":37,"4":37,"5":0,"6":10,"7":5,"8":23,"9":0,"10":0,"11":0,"12":23,"13":5,"14":4,"15":0,"16":5,"17":41,"18":10,"19":41,"20":138,"21":0,"22":0},"b":{"0":[1,0],"1":[0,1],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[41,0],"7":[0,41],"8":[41,0],"9":[0,41],"10":[0,41],"11":[41,28,0],"12":[9,28],"13":[37,9,0],"14":[0,9],"15":[5,4],"16":[9,5],"17":[2,3],"18":[4,0],"19":[0,28],"20":[9,19],"21":[0,9],"22":[9,0],"23":[5,4],"24":[2,3],"25":[4,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[10,31],"30":[41,41],"31":[5,5],"32":[10,5],"33":[4,1],"34":[23,0],"35":[23,0],"36":[23,0],"37":[4,19],"38":[23,23],"39":[0,23],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,23],"44":[0,0],"45":[0,23],"46":[23,19],"47":[0,23],"48":[0,23],"49":[23,23],"50":[23,0],"51":[23,23],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,5],"62":[5,4],"63":[41,41,10],"64":[0,138],"65":[138,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":23,"2":23,"3":0,"4":23},"f":{"0":23},"b":{"0":[0,23]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":39,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":1,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":39,"2":1,"3":1,"4":2,"5":3,"6":2,"7":1,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[39,3],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[1,0],"8":[1,1],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/4b420cf944a9102eadb9161a78cbe6d4.json b/node_modules/ecstatic/.nyc_output/4b420cf944a9102eadb9161a78cbe6d4.json new file mode 100644 index 000000000..259ce40d6 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/4b420cf944a9102eadb9161a78cbe6d4.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":0,"40":1,"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":1,"160":1,"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":1,"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},"f":{"0":1,"1":1,"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},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"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],"12":[0,0],"13":[0,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,0],"65":[0,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":1},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[1,0],"10":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":41,"19":1,"20":1,"21":2,"22":0,"23":0,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":41,"2":2,"3":1,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[41,1],"1":[1,0],"2":[0,2],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/4d3a90c70f7e04637f342841413f105d.json b/node_modules/ecstatic/.nyc_output/4d3a90c70f7e04637f342841413f105d.json new file mode 100644 index 000000000..421be1179 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/4d3a90c70f7e04637f342841413f105d.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":41,"37":41,"38":41,"39":41,"40":0,"41":41,"42":41,"43":41,"44":41,"45":41,"46":0,"47":41,"48":0,"49":41,"50":0,"51":41,"52":0,"53":37,"54":37,"55":9,"56":0,"57":9,"58":5,"59":4,"60":28,"61":0,"62":28,"63":9,"64":0,"65":0,"66":9,"67":5,"68":5,"69":5,"70":4,"71":4,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":19,"80":41,"81":10,"82":10,"83":5,"84":5,"85":4,"86":4,"87":1,"88":5,"89":31,"90":23,"91":23,"92":23,"93":23,"94":23,"95":23,"96":23,"97":4,"98":4,"99":23,"100":23,"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":23,"119":23,"120":23,"121":23,"122":23,"123":0,"124":0,"125":0,"126":0,"127":23,"128":23,"129":0,"130":23,"131":23,"132":23,"133":23,"134":0,"135":23,"136":23,"137":23,"138":0,"139":23,"140":0,"141":23,"142":23,"143":23,"144":23,"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":1,"160":1,"161":5,"162":5,"163":5,"164":5,"165":4,"166":5,"167":0,"168":0,"169":0,"170":0,"171":5,"172":5,"173":0,"174":5,"175":5,"176":41,"177":41,"178":10,"179":41,"180":41,"181":138,"182":138,"183":0,"184":138,"185":1,"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},"f":{"0":1,"1":41,"2":0,"3":37,"4":37,"5":0,"6":10,"7":5,"8":23,"9":0,"10":0,"11":0,"12":23,"13":5,"14":4,"15":0,"16":5,"17":41,"18":10,"19":41,"20":138,"21":0,"22":0},"b":{"0":[1,0],"1":[0,1],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[41,0],"7":[0,41],"8":[41,0],"9":[0,41],"10":[0,41],"11":[41,28,0],"12":[9,28],"13":[37,9,0],"14":[0,9],"15":[5,4],"16":[9,5],"17":[2,3],"18":[4,0],"19":[0,28],"20":[9,19],"21":[0,9],"22":[9,0],"23":[5,4],"24":[2,3],"25":[4,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[10,31],"30":[41,41],"31":[5,5],"32":[10,5],"33":[4,1],"34":[23,0],"35":[23,0],"36":[23,0],"37":[4,19],"38":[23,23],"39":[0,23],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,23],"44":[0,0],"45":[0,23],"46":[23,19],"47":[0,23],"48":[0,23],"49":[23,23],"50":[23,0],"51":[23,23],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,5],"62":[5,4],"63":[41,41,10],"64":[0,138],"65":[138,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":23,"2":23,"3":0,"4":23},"f":{"0":23},"b":{"0":[0,23]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":39,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":39,"2":1,"3":1,"4":2,"5":3,"6":2,"7":1,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[39,3],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/4e4208b377ac94a853b58ea95cf76678.json b/node_modules/ecstatic/.nyc_output/4e4208b377ac94a853b58ea95cf76678.json new file mode 100644 index 000000000..1a172ed24 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/4e4208b377ac94a853b58ea95cf76678.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":6,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":2,"56":1,"57":1,"58":0,"59":1,"60":1,"61":0,"62":1,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":1,"72":1,"73":0,"74":1,"75":1,"76":0,"77":0,"78":0,"79":0,"80":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":7,"182":7,"183":0,"184":7,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":3,"2":6,"3":3,"4":3,"5":1,"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":3,"20":7,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[2,1],"13":[3,2,0],"14":[1,1],"15":[0,1],"16":[1,0],"17":[0,0],"18":[1,0],"19":[0,1],"20":[1,0],"21":[0,1],"22":[1,0],"23":[0,1],"24":[0,0],"25":[1,0],"26":[0,1],"27":[1,0],"28":[0,0],"29":[0,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[1,0],"67":[0,1],"68":[1,0],"69":[1,1,1],"70":[1,1,0],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":1,"47":1,"48":1,"49":1,"50":21,"51":21,"52":21,"53":8,"54":21,"55":21,"56":21,"57":21,"58":1,"59":7,"60":1,"61":29,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":21,"9":7,"10":29,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[0,1],"6":[0,0],"7":[0,0],"8":[21,21],"9":[8,13],"10":[0,8],"11":[8,13],"12":[8,13],"13":[3,10],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":21,"2":0,"3":21,"4":21,"5":21,"6":63},"f":{"0":21,"1":63},"b":{"0":[0,21],"1":[21,21],"2":[8,13]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":21,"2":8,"3":13,"4":13,"5":13,"6":13,"7":6,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":0,"16":7},"f":{"0":21},"b":{"0":[8,13],"1":[21,21],"2":[0,13],"3":[6,7],"4":[13,13],"5":[0,7]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":21,"11":21,"12":0,"13":21,"14":8,"15":13,"16":21,"17":1},"f":{"0":1,"1":21,"2":21},"b":{"0":[0,1],"1":[0,21],"2":[8,13],"3":[1,20]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[1,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":24,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":8,"83":0,"84":0,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":24,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":8,"15":1,"16":1,"17":1},"b":{"0":[24,13],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[0,8],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/72781a4abb14bb9fa12ab44adc03ae95.json b/node_modules/ecstatic/.nyc_output/72781a4abb14bb9fa12ab44adc03ae95.json new file mode 100644 index 000000000..cf1365ac6 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/72781a4abb14bb9fa12ab44adc03ae95.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":2,"37":2,"38":2,"39":2,"40":0,"41":2,"42":2,"43":2,"44":2,"45":2,"46":0,"47":2,"48":0,"49":2,"50":0,"51":2,"52":0,"53":2,"54":2,"55":0,"56":0,"57":0,"58":0,"59":0,"60":2,"61":0,"62":2,"63":2,"64":0,"65":0,"66":2,"67":1,"68":1,"69":1,"70":1,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":1,"78":1,"79":0,"80":2,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":2,"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":1,"160":1,"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":2,"180":2,"181":7,"182":7,"183":0,"184":7,"185":1,"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},"f":{"0":1,"1":2,"2":0,"3":2,"4":2,"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":2,"20":7,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[2,0],"7":[0,2],"8":[2,0],"9":[0,2],"10":[0,2],"11":[2,2,0],"12":[0,2],"13":[2,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,2],"20":[2,0],"21":[0,2],"22":[2,2],"23":[1,1],"24":[0,1],"25":[0,1],"26":[0,0],"27":[0,0],"28":[1,0],"29":[0,2],"30":[2,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":0,"43":1,"44":1,"45":0,"46":1,"47":1,"48":1,"49":1,"50":2,"51":2,"52":2,"53":1,"54":2,"55":2,"56":2,"57":2,"58":1,"59":0,"60":1,"61":0,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":1,"7":1,"8":2,"9":0,"10":0,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[1,0],"6":[0,1],"7":[0,0],"8":[2,2],"9":[1,1],"10":[0,1],"11":[1,1],"12":[1,1],"13":[1,0],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":2,"2":0,"3":2,"4":2,"5":2,"6":6},"f":{"0":2,"1":6},"b":{"0":[0,2],"1":[2,2],"2":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":2,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"f":{"0":2},"b":{"0":[1,1],"1":[2,2],"2":[0,1],"3":[1,0],"4":[1,1],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":1,"11":1,"12":0,"13":1,"14":0,"15":1,"16":1,"17":1},"f":{"0":1,"1":1,"2":1},"b":{"0":[0,1],"1":[0,1],"2":[0,1],"3":[1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":40,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":40,"2":1,"3":1,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[40,2],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/7dca6987350b11397f7b183230cd8ed3.json b/node_modules/ecstatic/.nyc_output/7dca6987350b11397f7b183230cd8ed3.json new file mode 100644 index 000000000..a2945e5f1 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/7dca6987350b11397f7b183230cd8ed3.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":6,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":2,"56":1,"57":1,"58":0,"59":1,"60":1,"61":0,"62":1,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":1,"72":1,"73":0,"74":1,"75":1,"76":0,"77":0,"78":0,"79":0,"80":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":7,"182":7,"183":0,"184":7,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":3,"2":6,"3":3,"4":3,"5":1,"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":3,"20":7,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[2,1],"13":[3,2,0],"14":[1,1],"15":[0,1],"16":[1,0],"17":[0,0],"18":[1,0],"19":[0,1],"20":[1,0],"21":[0,1],"22":[1,0],"23":[0,1],"24":[0,0],"25":[1,0],"26":[0,1],"27":[1,0],"28":[0,0],"29":[0,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[1,0],"67":[1,0],"68":[1,1],"69":[0,0,0],"70":[1,1,1],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":1,"47":1,"48":1,"49":1,"50":21,"51":21,"52":21,"53":8,"54":21,"55":21,"56":21,"57":21,"58":1,"59":7,"60":1,"61":31,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":21,"9":7,"10":31,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[0,1],"6":[0,0],"7":[0,0],"8":[21,21],"9":[8,13],"10":[0,8],"11":[8,13],"12":[8,13],"13":[3,10],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":21,"2":0,"3":21,"4":21,"5":21,"6":63},"f":{"0":21,"1":63},"b":{"0":[0,21],"1":[21,21],"2":[8,13]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":21,"2":8,"3":13,"4":13,"5":13,"6":13,"7":6,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":0,"16":7},"f":{"0":21},"b":{"0":[8,13],"1":[21,21],"2":[0,13],"3":[6,7],"4":[13,13],"5":[0,7]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":21,"11":21,"12":0,"13":21,"14":8,"15":13,"16":21,"17":1},"f":{"0":1,"1":21,"2":21},"b":{"0":[0,1],"1":[0,21],"2":[8,13],"3":[1,20]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[1,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":24,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":8,"83":0,"84":0,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":24,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":8,"15":1,"16":1,"17":1},"b":{"0":[24,13],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[0,8],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/8194b7c452bb548b092aced3e5cb504d.json b/node_modules/ecstatic/.nyc_output/8194b7c452bb548b092aced3e5cb504d.json new file mode 100644 index 000000000..d672a479c --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/8194b7c452bb548b092aced3e5cb504d.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":5,"37":5,"38":5,"39":5,"40":0,"41":5,"42":5,"43":5,"44":5,"45":5,"46":0,"47":5,"48":0,"49":5,"50":0,"51":5,"52":0,"53":5,"54":5,"55":4,"56":1,"57":3,"58":2,"59":1,"60":1,"61":0,"62":1,"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":1,"80":5,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":5,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":5,"177":5,"178":0,"179":5,"180":5,"181":15,"182":15,"183":0,"184":15,"185":1,"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},"f":{"0":1,"1":5,"2":0,"3":5,"4":5,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":5,"18":0,"19":5,"20":15,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[5,0],"7":[0,5],"8":[5,0],"9":[0,5],"10":[0,5],"11":[5,2,0],"12":[4,1],"13":[5,4,0],"14":[1,3],"15":[2,1],"16":[3,2],"17":[0,2],"18":[0,1],"19":[0,1],"20":[0,1],"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,5],"30":[5,5],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[5,5,0],"64":[0,15],"65":[15,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":0,"21":1,"22":1,"23":1,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,1],"5":[1,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":39,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":39,"2":1,"3":1,"4":2,"5":3,"6":2,"7":1,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[39,3],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/85d3709905e273444b70ec852b4995af.json b/node_modules/ecstatic/.nyc_output/85d3709905e273444b70ec852b4995af.json new file mode 100644 index 000000000..9810fa92f --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/85d3709905e273444b70ec852b4995af.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":4,"18":4,"19":4,"20":4,"21":4,"22":4,"23":4,"24":4,"25":4,"26":4,"27":0,"28":4,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":4,"36":12,"37":12,"38":12,"39":12,"40":0,"41":12,"42":12,"43":12,"44":12,"45":12,"46":21,"47":12,"48":0,"49":12,"50":0,"51":12,"52":0,"53":12,"54":12,"55":0,"56":0,"57":0,"58":0,"59":0,"60":12,"61":0,"62":12,"63":8,"64":0,"65":0,"66":8,"67":4,"68":4,"69":4,"70":4,"71":4,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":4,"80":12,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":12,"90":4,"91":4,"92":4,"93":4,"94":4,"95":4,"96":4,"97":0,"98":0,"99":4,"100":4,"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":4,"119":4,"120":4,"121":4,"122":4,"123":0,"124":0,"125":0,"126":0,"127":4,"128":4,"129":0,"130":4,"131":4,"132":4,"133":4,"134":0,"135":4,"136":4,"137":4,"138":0,"139":4,"140":0,"141":4,"142":4,"143":4,"144":4,"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":1,"160":1,"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":12,"180":12,"181":28,"182":28,"183":0,"184":28,"185":1,"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},"f":{"0":4,"1":12,"2":21,"3":12,"4":12,"5":0,"6":0,"7":0,"8":4,"9":0,"10":0,"11":0,"12":4,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":12,"20":28,"21":0,"22":0},"b":{"0":[4,0],"1":[0,4],"2":[4,4],"3":[0,4],"4":[0,0],"5":[0,0],"6":[12,0],"7":[0,12],"8":[12,0],"9":[0,12],"10":[0,12],"11":[12,8,0],"12":[0,12],"13":[12,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,12],"20":[8,4],"21":[0,8],"22":[8,0],"23":[4,4],"24":[0,4],"25":[4,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,12],"30":[12,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[4,0],"35":[4,0],"36":[4,0],"37":[0,4],"38":[4,4],"39":[0,4],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,4],"44":[0,0],"45":[0,4],"46":[4,4],"47":[0,4],"48":[0,4],"49":[4,4],"50":[4,0],"51":[4,4],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,28],"65":[28,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":4,"2":4,"3":0,"4":4},"f":{"0":4},"b":{"0":[0,4]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":4,"4":4,"5":4,"6":4,"7":4,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":4,"18":164,"19":4,"20":4,"21":4,"22":4,"23":4,"24":4,"25":8,"26":0,"27":0,"28":4,"29":8,"30":0,"31":0,"32":4,"33":12,"34":0,"35":0,"36":4,"37":8,"38":0,"39":0,"40":4,"41":4,"42":4,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":4,"50":0,"51":4,"52":8,"53":0,"54":0,"55":4,"56":8,"57":0,"58":0,"59":0,"60":4,"61":12,"62":8,"63":4,"64":2,"65":2,"66":1,"67":2,"68":1,"69":5,"70":5,"71":0,"72":5,"73":4,"74":12,"75":0,"76":0,"77":4,"78":12,"79":0,"80":0,"81":4,"82":32,"83":0,"84":0,"85":4,"86":12,"87":0,"88":0,"89":4,"90":16,"91":0,"92":0,"93":4,"94":12,"95":0,"96":0,"97":4},"f":{"0":4,"1":164,"2":4,"3":8,"4":8,"5":12,"6":8,"7":8,"8":8,"9":12,"10":2,"11":5,"12":12,"13":12,"14":32,"15":12,"16":16,"17":12},"b":{"0":[164,8],"1":[4,0],"2":[4,0],"3":[0,8],"4":[0,8],"5":[0,12],"6":[0,8],"7":[4,0],"8":[4,4],"9":[0,4],"10":[4,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,4],"15":[4,0],"16":[0,8],"17":[0,8],"18":[8,0],"19":[8,4],"20":[2,2],"21":[1,1],"22":[2,2],"23":[0,5],"24":[0,12],"25":[0,12],"26":[0,32],"27":[0,12],"28":[0,16],"29":[0,12],"30":[0,0],"31":[4,4,4]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/86f120f0940c97d5a9b83c119e07fd1b.json b/node_modules/ecstatic/.nyc_output/86f120f0940c97d5a9b83c119e07fd1b.json new file mode 100644 index 000000000..fca143688 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/86f120f0940c97d5a9b83c119e07fd1b.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":6,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":2,"56":1,"57":1,"58":0,"59":1,"60":1,"61":0,"62":1,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":1,"72":1,"73":0,"74":1,"75":1,"76":0,"77":0,"78":0,"79":0,"80":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":7,"182":7,"183":0,"184":7,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":3,"2":6,"3":3,"4":3,"5":1,"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":3,"20":7,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[2,1],"13":[3,2,0],"14":[1,1],"15":[0,1],"16":[1,0],"17":[0,0],"18":[1,0],"19":[0,1],"20":[1,0],"21":[0,1],"22":[1,0],"23":[0,1],"24":[0,0],"25":[1,0],"26":[0,1],"27":[1,0],"28":[0,0],"29":[0,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[1,0],"67":[0,1],"68":[1,0],"69":[1,1,1],"70":[1,1,1],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":1,"47":1,"48":1,"49":1,"50":21,"51":21,"52":21,"53":8,"54":21,"55":21,"56":21,"57":21,"58":1,"59":7,"60":1,"61":30,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":21,"9":7,"10":30,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[0,1],"6":[0,0],"7":[0,0],"8":[21,21],"9":[8,13],"10":[0,8],"11":[8,13],"12":[8,13],"13":[3,10],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":21,"2":0,"3":21,"4":21,"5":21,"6":63},"f":{"0":21,"1":63},"b":{"0":[0,21],"1":[21,21],"2":[8,13]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":21,"2":8,"3":13,"4":13,"5":13,"6":13,"7":6,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":0,"16":7},"f":{"0":21},"b":{"0":[8,13],"1":[21,21],"2":[0,13],"3":[6,7],"4":[13,13],"5":[0,7]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":21,"11":21,"12":0,"13":21,"14":8,"15":13,"16":21,"17":1},"f":{"0":1,"1":21,"2":21},"b":{"0":[0,1],"1":[0,21],"2":[8,13],"3":[1,20]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[1,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":24,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":8,"83":0,"84":0,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":24,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":8,"15":1,"16":1,"17":1},"b":{"0":[24,13],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[0,8],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/90450770f19a6254f215aa67f3fd17ba.json b/node_modules/ecstatic/.nyc_output/90450770f19a6254f215aa67f3fd17ba.json new file mode 100644 index 000000000..73ed6544d --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/90450770f19a6254f215aa67f3fd17ba.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":6,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":2,"56":1,"57":1,"58":0,"59":1,"60":1,"61":0,"62":1,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":1,"72":1,"73":0,"74":1,"75":1,"76":0,"77":0,"78":0,"79":0,"80":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":7,"182":7,"183":0,"184":7,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":3,"2":6,"3":3,"4":3,"5":1,"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":3,"20":7,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[2,1],"13":[3,2,0],"14":[1,1],"15":[0,1],"16":[1,0],"17":[0,0],"18":[1,0],"19":[0,1],"20":[1,0],"21":[0,1],"22":[1,0],"23":[0,1],"24":[0,0],"25":[1,0],"26":[0,1],"27":[1,0],"28":[0,0],"29":[0,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[1,0],"67":[0,1],"68":[1,0],"69":[1,0,0],"70":[1,1,0],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":1,"47":1,"48":1,"49":1,"50":21,"51":21,"52":21,"53":8,"54":21,"55":21,"56":21,"57":21,"58":1,"59":7,"60":1,"61":30,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":21,"9":7,"10":30,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[0,1],"6":[0,0],"7":[0,0],"8":[21,21],"9":[8,13],"10":[0,8],"11":[8,13],"12":[8,13],"13":[3,10],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":21,"2":0,"3":21,"4":21,"5":21,"6":63},"f":{"0":21,"1":63},"b":{"0":[0,21],"1":[21,21],"2":[8,13]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":21,"2":8,"3":13,"4":13,"5":13,"6":13,"7":6,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":0,"16":7},"f":{"0":21},"b":{"0":[8,13],"1":[21,21],"2":[0,13],"3":[6,7],"4":[13,13],"5":[0,7]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":21,"11":21,"12":0,"13":21,"14":8,"15":13,"16":21,"17":1},"f":{"0":1,"1":21,"2":21},"b":{"0":[0,1],"1":[0,21],"2":[8,13],"3":[1,20]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[1,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":24,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":8,"83":0,"84":0,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":24,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":8,"15":1,"16":1,"17":1},"b":{"0":[24,13],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[0,8],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/90ba340dcd6d2d939145d1d5dd4f00b3.json b/node_modules/ecstatic/.nyc_output/90ba340dcd6d2d939145d1d5dd4f00b3.json new file mode 100644 index 000000000..dd4ddbf8b --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/90ba340dcd6d2d939145d1d5dd4f00b3.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":0,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":1,"42":1,"43":1,"44":1,"45":1,"46":0,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":1,"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":1,"80":1,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":1,"180":1,"181":2,"182":2,"183":0,"184":2,"185":1,"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},"f":{"0":1,"1":1,"2":0,"3":1,"4":1,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":1,"20":2,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[1,0],"4":[0,1],"5":[1,0],"6":[1,0],"7":[0,1],"8":[1,0],"9":[0,1],"10":[0,1],"11":[1,1,0],"12":[0,1],"13":[1,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,1],"20":[0,1],"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,1],"30":[1,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,2],"65":[2,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":35,"19":1,"20":1,"21":2,"22":0,"23":0,"24":1,"25":2,"26":0,"27":0,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":1,"83":1,"84":1,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":35,"2":2,"3":2,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":1,"15":3,"16":4,"17":3},"b":{"0":[35,1],"1":[1,0],"2":[0,2],"3":[0,2],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[1,0],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/95b26ca55299b8f0e6578dba3580cdd8.json b/node_modules/ecstatic/.nyc_output/95b26ca55299b8f0e6578dba3580cdd8.json new file mode 100644 index 000000000..9afcdb0fe --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/95b26ca55299b8f0e6578dba3580cdd8.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":4,"18":4,"19":4,"20":4,"21":4,"22":4,"23":4,"24":4,"25":4,"26":4,"27":4,"28":4,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":4,"36":10,"37":10,"38":10,"39":10,"40":0,"41":10,"42":10,"43":10,"44":10,"45":10,"46":0,"47":10,"48":0,"49":10,"50":0,"51":10,"52":0,"53":10,"54":10,"55":0,"56":0,"57":0,"58":0,"59":0,"60":10,"61":0,"62":10,"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":10,"80":10,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":10,"90":10,"91":10,"92":10,"93":10,"94":10,"95":10,"96":10,"97":0,"98":0,"99":10,"100":10,"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":10,"119":10,"120":10,"121":10,"122":10,"123":0,"124":0,"125":0,"126":0,"127":10,"128":10,"129":5,"130":5,"131":5,"132":5,"133":5,"134":0,"135":5,"136":5,"137":5,"138":0,"139":10,"140":0,"141":10,"142":10,"143":10,"144":4,"145":6,"146":6,"147":6,"148":0,"149":6,"150":0,"151":6,"152":0,"153":6,"154":4,"155":0,"156":4,"157":1,"158":5,"159":1,"160":1,"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":10,"177":10,"178":0,"179":10,"180":10,"181":30,"182":30,"183":0,"184":30,"185":1,"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},"f":{"0":4,"1":10,"2":0,"3":10,"4":10,"5":0,"6":0,"7":0,"8":10,"9":0,"10":0,"11":0,"12":10,"13":0,"14":0,"15":0,"16":0,"17":10,"18":0,"19":10,"20":30,"21":0,"22":0},"b":{"0":[4,0],"1":[4,0],"2":[4,4],"3":[0,4],"4":[0,0],"5":[0,0],"6":[10,0],"7":[0,10],"8":[10,0],"9":[0,10],"10":[0,10],"11":[10,10,0],"12":[0,10],"13":[10,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,10],"20":[0,10],"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,10],"30":[10,10],"31":[0,0],"32":[0,0],"33":[0,0],"34":[10,0],"35":[10,0],"36":[10,0],"37":[0,10],"38":[10,10],"39":[0,10],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,10],"44":[0,0],"45":[5,5],"46":[5,5],"47":[0,5],"48":[0,10],"49":[10,10],"50":[4,6],"51":[10,4],"52":[6,0],"53":[0,6],"54":[0,6],"55":[4,2],"56":[0,4],"57":[4,2,1,0],"58":[1,3],"59":[4,2,1],"60":[0,0],"61":[0,0],"62":[0,0],"63":[10,10,0],"64":[0,30],"65":[30,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":10,"2":10,"3":2,"4":10},"f":{"0":10},"b":{"0":[2,8]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":5,"3":5,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":5,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":4,"4":4,"5":4,"6":4,"7":4,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":4,"18":156,"19":4,"20":4,"21":4,"22":4,"23":4,"24":4,"25":4,"26":4,"27":4,"28":4,"29":8,"30":0,"31":0,"32":4,"33":12,"34":0,"35":0,"36":4,"37":8,"38":0,"39":0,"40":4,"41":0,"42":4,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":4,"50":4,"51":4,"52":8,"53":0,"54":0,"55":4,"56":8,"57":0,"58":0,"59":0,"60":4,"61":12,"62":12,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":4,"74":12,"75":0,"76":0,"77":4,"78":12,"79":0,"80":0,"81":4,"82":32,"83":0,"84":0,"85":4,"86":10,"87":1,"88":1,"89":4,"90":14,"91":1,"92":1,"93":4,"94":12,"95":0,"96":0,"97":4},"f":{"0":4,"1":156,"2":4,"3":4,"4":8,"5":12,"6":8,"7":8,"8":8,"9":12,"10":0,"11":0,"12":12,"13":12,"14":32,"15":10,"16":14,"17":12},"b":{"0":[156,10],"1":[4,0],"2":[4,0],"3":[4,0],"4":[0,8],"5":[0,12],"6":[0,8],"7":[0,4],"8":[4,0],"9":[0,4],"10":[4,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[4,0],"15":[4,4],"16":[0,8],"17":[0,8],"18":[8,0],"19":[12,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,12],"25":[0,12],"26":[0,32],"27":[1,9],"28":[1,13],"29":[0,12],"30":[0,0],"31":[4,4,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/a2f2985a4ea3dffac854649c4653dd80.json b/node_modules/ecstatic/.nyc_output/a2f2985a4ea3dffac854649c4653dd80.json new file mode 100644 index 000000000..ed7bfc2a4 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/a2f2985a4ea3dffac854649c4653dd80.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":1,"42":1,"43":1,"44":1,"45":1,"46":0,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":1,"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":1,"80":1,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":0,"145":1,"146":1,"147":1,"148":0,"149":1,"150":1,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":1,"160":1,"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":1,"180":1,"181":2,"182":2,"183":0,"184":2,"185":1,"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},"f":{"0":1,"1":1,"2":0,"3":1,"4":1,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":1,"20":2,"21":0,"22":0},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[1,0],"7":[0,1],"8":[1,0],"9":[0,1],"10":[0,1],"11":[1,1,0],"12":[0,1],"13":[1,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,1],"20":[0,1],"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,1],"30":[1,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[0,1],"51":[1,0],"52":[1,0],"53":[1,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,2],"65":[2,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":0,"19":1,"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":1},"f":{"0":1,"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},"b":{"0":[0,0],"1":[0,1],"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],"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":[1,0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/a708dc3afadc5f62acbddbac4ebe3b22.json b/node_modules/ecstatic/.nyc_output/a708dc3afadc5f62acbddbac4ebe3b22.json new file mode 100644 index 000000000..2b5b0a8eb --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/a708dc3afadc5f62acbddbac4ebe3b22.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":2,"37":2,"38":2,"39":2,"40":0,"41":2,"42":2,"43":2,"44":2,"45":2,"46":0,"47":2,"48":0,"49":2,"50":0,"51":2,"52":0,"53":2,"54":2,"55":0,"56":0,"57":0,"58":0,"59":0,"60":2,"61":0,"62":2,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":1,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":1,"80":2,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":2,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":2,"180":2,"181":4,"182":4,"183":0,"184":4,"185":1,"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},"f":{"0":1,"1":2,"2":0,"3":2,"4":2,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":2,"20":4,"21":0,"22":0},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[2,0],"7":[0,2],"8":[2,0],"9":[0,2],"10":[0,2],"11":[2,1,0],"12":[0,2],"13":[2,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,2],"20":[1,1],"21":[0,1],"22":[1,0],"23":[0,1],"24":[0,0],"25":[1,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,2],"30":[2,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,4],"65":[4,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":0,"19":1,"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":1},"f":{"0":1,"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},"b":{"0":[0,0],"1":[0,1],"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],"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":[1,0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/a860bba1a65f01c6497ea05b245f3478.json b/node_modules/ecstatic/.nyc_output/a860bba1a65f01c6497ea05b245f3478.json new file mode 100644 index 000000000..78921c3ec --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/a860bba1a65f01c6497ea05b245f3478.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":0,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":1,"42":1,"43":1,"44":1,"45":1,"46":2,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":1,"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":1,"80":1,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":1,"180":1,"181":2,"182":2,"183":0,"184":2,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":1,"2":2,"3":1,"4":1,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":1,"20":2,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[1,0],"4":[0,1],"5":[1,0],"6":[1,0],"7":[0,1],"8":[1,0],"9":[0,1],"10":[0,1],"11":[1,1,0],"12":[0,1],"13":[1,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,1],"20":[0,1],"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,1],"30":[1,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,2],"65":[2,0],"66":[1,0],"67":[0,1],"68":[1,0],"69":[1,0,0],"70":[1,1,0],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":17,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":17,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1},"b":{"0":[17,14],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[1,0],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/aa457714b2f466ea5ef63eab9399b3ed.json b/node_modules/ecstatic/.nyc_output/aa457714b2f466ea5ef63eab9399b3ed.json new file mode 100644 index 000000000..a524d0ee6 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/aa457714b2f466ea5ef63eab9399b3ed.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":0,"40":1,"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":1,"160":1,"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":1,"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},"f":{"0":1,"1":1,"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},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"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],"12":[0,0],"13":[0,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,0],"65":[0,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":1},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[1,0],"10":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":0,"19":1,"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":1},"f":{"0":1,"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},"b":{"0":[0,0],"1":[0,1],"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],"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":[1,0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/ac19822dc89661f902371db3d0a0c5e3.json b/node_modules/ecstatic/.nyc_output/ac19822dc89661f902371db3d0a0c5e3.json new file mode 100644 index 000000000..e3d712c18 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/ac19822dc89661f902371db3d0a0c5e3.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":6,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":2,"56":1,"57":1,"58":0,"59":1,"60":1,"61":0,"62":1,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":1,"72":1,"73":0,"74":1,"75":1,"76":0,"77":0,"78":0,"79":0,"80":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":7,"182":7,"183":0,"184":7,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":3,"2":6,"3":3,"4":3,"5":1,"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":3,"20":7,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[2,1],"13":[3,2,0],"14":[1,1],"15":[0,1],"16":[1,0],"17":[0,0],"18":[1,0],"19":[0,1],"20":[1,0],"21":[0,1],"22":[1,0],"23":[0,1],"24":[0,0],"25":[1,0],"26":[0,1],"27":[1,0],"28":[0,0],"29":[0,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[1,0],"67":[1,0],"68":[1,1],"69":[0,0,0],"70":[1,1,1],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":1,"47":1,"48":1,"49":1,"50":21,"51":21,"52":21,"53":8,"54":21,"55":21,"56":21,"57":21,"58":1,"59":7,"60":1,"61":29,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":21,"9":7,"10":29,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[0,1],"6":[0,0],"7":[0,0],"8":[21,21],"9":[8,13],"10":[0,8],"11":[8,13],"12":[8,13],"13":[3,10],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":21,"2":0,"3":21,"4":21,"5":21,"6":63},"f":{"0":21,"1":63},"b":{"0":[0,21],"1":[21,21],"2":[8,13]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":21,"2":8,"3":13,"4":13,"5":13,"6":13,"7":6,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":0,"16":7},"f":{"0":21},"b":{"0":[8,13],"1":[21,21],"2":[0,13],"3":[6,7],"4":[13,13],"5":[0,7]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":21,"11":21,"12":0,"13":21,"14":8,"15":13,"16":21,"17":1},"f":{"0":1,"1":21,"2":21},"b":{"0":[0,1],"1":[0,21],"2":[8,13],"3":[1,20]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[1,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":24,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":8,"83":0,"84":0,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":24,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":8,"15":1,"16":1,"17":1},"b":{"0":[24,13],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[0,8],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/b5225977cfe01259785efd49292dac24.json b/node_modules/ecstatic/.nyc_output/b5225977cfe01259785efd49292dac24.json new file mode 100644 index 000000000..fa7b040c8 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/b5225977cfe01259785efd49292dac24.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":1,"42":1,"43":1,"44":1,"45":1,"46":0,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":1,"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":1,"80":1,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":1,"180":1,"181":2,"182":2,"183":0,"184":2,"185":1,"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},"f":{"0":1,"1":1,"2":0,"3":1,"4":1,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":1,"20":2,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[1,0],"7":[0,1],"8":[1,0],"9":[0,1],"10":[0,1],"11":[1,1,0],"12":[0,1],"13":[1,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,1],"20":[0,1],"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,1],"30":[1,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,2],"65":[2,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":40,"19":1,"20":1,"21":2,"22":0,"23":0,"24":1,"25":2,"26":0,"27":0,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":1,"79":1,"80":1,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":40,"2":2,"3":2,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":3,"13":1,"14":8,"15":3,"16":4,"17":3},"b":{"0":[40,1],"1":[1,0],"2":[0,2],"3":[0,2],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[1,0],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/b82f09ad43968671cbe2e66ae7eec462.json b/node_modules/ecstatic/.nyc_output/b82f09ad43968671cbe2e66ae7eec462.json new file mode 100644 index 000000000..ef2b8f03e --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/b82f09ad43968671cbe2e66ae7eec462.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":1,"42":1,"43":1,"44":1,"45":1,"46":0,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":1,"63":1,"64":1,"65":1,"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":1,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":1,"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":1,"160":1,"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":1,"180":1,"181":2,"182":2,"183":0,"184":2,"185":1,"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},"f":{"0":1,"1":1,"2":0,"3":1,"4":1,"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":1,"20":2,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[1,0],"7":[0,1],"8":[1,0],"9":[0,1],"10":[0,1],"11":[1,1,0],"12":[0,1],"13":[1,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,1],"20":[1,0],"21":[1,0],"22":[1,1],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,1],"30":[1,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,2],"65":[2,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":0,"21":1,"22":1,"23":1,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,1],"5":[1,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":40,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":40,"2":1,"3":1,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[40,2],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/b99369b1a3b1c739915c627032b30676.json b/node_modules/ecstatic/.nyc_output/b99369b1a3b1c739915c627032b30676.json new file mode 100644 index 000000000..b3d5971bb --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/b99369b1a3b1c739915c627032b30676.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":2,"37":2,"38":2,"39":2,"40":0,"41":2,"42":2,"43":2,"44":2,"45":2,"46":0,"47":2,"48":0,"49":2,"50":0,"51":2,"52":0,"53":2,"54":2,"55":0,"56":0,"57":0,"58":0,"59":0,"60":2,"61":0,"62":2,"63":2,"64":0,"65":0,"66":2,"67":1,"68":1,"69":1,"70":1,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":1,"78":1,"79":0,"80":2,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":2,"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":1,"160":1,"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":2,"180":2,"181":7,"182":7,"183":0,"184":7,"185":1,"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},"f":{"0":1,"1":2,"2":0,"3":2,"4":2,"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":2,"20":7,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[2,0],"7":[0,2],"8":[2,0],"9":[0,2],"10":[0,2],"11":[2,2,0],"12":[0,2],"13":[2,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,2],"20":[2,0],"21":[0,2],"22":[2,2],"23":[1,1],"24":[0,1],"25":[0,1],"26":[0,0],"27":[0,0],"28":[1,0],"29":[0,2],"30":[2,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":0,"43":1,"44":1,"45":0,"46":1,"47":1,"48":1,"49":1,"50":3,"51":3,"52":3,"53":1,"54":3,"55":3,"56":3,"57":3,"58":1,"59":0,"60":1,"61":1,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":1,"7":1,"8":3,"9":0,"10":1,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[1,0],"6":[0,1],"7":[0,0],"8":[3,3],"9":[1,2],"10":[0,1],"11":[1,2],"12":[1,2],"13":[2,0],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":3,"2":0,"3":3,"4":3,"5":3,"6":9},"f":{"0":3,"1":9},"b":{"0":[0,3],"1":[3,3],"2":[1,2]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":3,"2":1,"3":2,"4":2,"5":2,"6":2,"7":2,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"f":{"0":3},"b":{"0":[1,2],"1":[3,3],"2":[0,2],"3":[2,0],"4":[2,2],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":2,"11":2,"12":0,"13":2,"14":0,"15":2,"16":2,"17":1},"f":{"0":1,"1":2,"2":2},"b":{"0":[0,1],"1":[0,2],"2":[0,2],"3":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":40,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":40,"2":1,"3":1,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[40,2],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/ba58ee6f0559fcdd43eb68812779a128.json b/node_modules/ecstatic/.nyc_output/ba58ee6f0559fcdd43eb68812779a128.json new file mode 100644 index 000000000..ea28ad214 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/ba58ee6f0559fcdd43eb68812779a128.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":6,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":2,"56":1,"57":1,"58":0,"59":1,"60":1,"61":0,"62":1,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":1,"72":1,"73":0,"74":1,"75":1,"76":0,"77":0,"78":0,"79":0,"80":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":7,"182":7,"183":0,"184":7,"185":1,"186":1,"187":1,"188":1,"189":15,"190":1,"191":1,"192":1,"193":1,"194":0,"195":0,"196":0,"197":0,"198":1,"199":1},"f":{"0":1,"1":3,"2":6,"3":3,"4":3,"5":1,"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":3,"20":7,"21":15,"22":1},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[2,1],"13":[3,2,0],"14":[1,1],"15":[0,1],"16":[1,0],"17":[0,0],"18":[1,0],"19":[0,1],"20":[1,0],"21":[0,1],"22":[1,0],"23":[0,1],"24":[0,0],"25":[1,0],"26":[0,1],"27":[1,0],"28":[0,0],"29":[0,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,7],"65":[7,0],"66":[1,0],"67":[0,1],"68":[1,0],"69":[1,1,1],"70":[1,1,1],"71":[0,1],"72":[1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":1,"47":1,"48":1,"49":1,"50":21,"51":21,"52":21,"53":8,"54":21,"55":21,"56":21,"57":21,"58":1,"59":7,"60":1,"61":29,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":21,"9":7,"10":29,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[0,1],"6":[0,0],"7":[0,0],"8":[21,21],"9":[8,13],"10":[0,8],"11":[8,13],"12":[8,13],"13":[3,10],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":21,"2":0,"3":21,"4":21,"5":21,"6":63},"f":{"0":21,"1":63},"b":{"0":[0,21],"1":[21,21],"2":[8,13]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":21,"2":8,"3":13,"4":13,"5":13,"6":13,"7":6,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":0,"16":7},"f":{"0":21},"b":{"0":[8,13],"1":[21,21],"2":[0,13],"3":[6,7],"4":[13,13],"5":[0,7]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":21,"11":21,"12":0,"13":21,"14":8,"15":13,"16":21,"17":1},"f":{"0":1,"1":21,"2":21},"b":{"0":[0,1],"1":[0,21],"2":[8,13],"3":[1,20]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[1,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":24,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":2,"58":2,"59":2,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":8,"83":0,"84":0,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"f":{"0":1,"1":24,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":3,"10":0,"11":0,"12":1,"13":1,"14":8,"15":1,"16":1,"17":1},"b":{"0":[24,13],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[1,0],"6":[1,0],"7":[1,0],"8":[1,1],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[2,0],"18":[2,2],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[1,0],"25":[1,0],"26":[0,8],"27":[1,0],"28":[1,0],"29":[1,0],"30":[1,0],"31":[1,1,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/bc92c2aaf165b06a2777c3c88f434a9d.json b/node_modules/ecstatic/.nyc_output/bc92c2aaf165b06a2777c3c88f434a9d.json new file mode 100644 index 000000000..7ee2e004b --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/bc92c2aaf165b06a2777c3c88f434a9d.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":1,"42":1,"43":1,"44":1,"45":1,"46":0,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":1,"63":1,"64":0,"65":0,"66":1,"67":0,"68":0,"69":0,"70":1,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":1,"78":1,"79":0,"80":1,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":1,"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":1,"160":1,"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":1,"180":1,"181":3,"182":3,"183":0,"184":3,"185":1,"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},"f":{"0":1,"1":1,"2":0,"3":1,"4":1,"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":1,"20":3,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[1,0],"7":[0,1],"8":[1,0],"9":[0,1],"10":[0,1],"11":[1,1,0],"12":[0,1],"13":[1,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,1],"20":[1,0],"21":[0,1],"22":[1,1],"23":[0,1],"24":[0,0],"25":[0,1],"26":[0,0],"27":[0,0],"28":[1,0],"29":[0,1],"30":[1,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,3],"65":[3,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":1,"29":1,"30":0,"31":1,"32":0,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":1,"47":1,"48":1,"49":1,"50":20,"51":20,"52":20,"53":10,"54":20,"55":20,"56":20,"57":20,"58":1,"59":9,"60":1,"61":10,"62":1,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"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},"f":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":1,"6":0,"7":1,"8":20,"9":9,"10":10,"11":0,"12":0},"b":{"0":[0,1],"1":[0,0],"2":[0,1],"3":[0,0],"4":[0,1],"5":[0,1],"6":[0,0],"7":[0,0],"8":[20,20],"9":[10,10],"10":[10,0],"11":[10,10],"12":[10,10],"13":[6,4],"14":[1,0],"15":[1,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":20,"2":0,"3":20,"4":20,"5":20,"6":60},"f":{"0":20,"1":60},"b":{"0":[0,20],"1":[20,20],"2":[10,10]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"1":20,"2":10,"3":10,"4":10,"5":10,"6":10,"7":10,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"f":{"0":20},"b":{"0":[10,10],"1":[20,20],"2":[0,10],"3":[10,0],"4":[10,10],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":0,"9":1,"10":20,"11":20,"12":0,"13":20,"14":10,"15":10,"16":20,"17":1},"f":{"0":1,"1":20,"2":20},"b":{"0":[0,1],"1":[0,20],"2":[10,10],"3":[1,19]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":40,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":1,"52":2,"53":0,"54":0,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":40,"2":1,"3":1,"4":2,"5":3,"6":2,"7":2,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[40,2],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[0,1],"10":[1,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,1],"15":[1,0],"16":[0,2],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/c5599d16a8ee1389aae7c068c591c2a5.json b/node_modules/ecstatic/.nyc_output/c5599d16a8ee1389aae7c068c591c2a5.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/c5599d16a8ee1389aae7c068c591c2a5.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/c5cd7f005408251e64df50ca2012ff6e.json b/node_modules/ecstatic/.nyc_output/c5cd7f005408251e64df50ca2012ff6e.json new file mode 100644 index 000000000..92b9c5462 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/c5cd7f005408251e64df50ca2012ff6e.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":2,"18":2,"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":2,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":1,"42":1,"43":1,"44":1,"45":1,"46":0,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":1,"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":1,"80":1,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":1,"180":1,"181":2,"182":2,"183":0,"184":2,"185":1,"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},"f":{"0":2,"1":1,"2":0,"3":1,"4":1,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":1,"20":2,"21":0,"22":0},"b":{"0":[2,0],"1":[2,0],"2":[2,2],"3":[2,0],"4":[2,0],"5":[0,0],"6":[1,0],"7":[0,1],"8":[1,0],"9":[0,1],"10":[0,1],"11":[1,1,0],"12":[0,1],"13":[1,0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,1],"20":[0,1],"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,1],"30":[1,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,2],"65":[2,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"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},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":2,"18":78,"19":2,"20":2,"21":4,"22":0,"23":0,"24":2,"25":4,"26":0,"27":0,"28":2,"29":4,"30":0,"31":0,"32":2,"33":6,"34":0,"35":0,"36":2,"37":4,"38":0,"39":0,"40":2,"41":0,"42":2,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":2,"50":0,"51":2,"52":4,"53":0,"54":0,"55":2,"56":4,"57":0,"58":0,"59":0,"60":2,"61":6,"62":6,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":2,"74":6,"75":0,"76":0,"77":2,"78":6,"79":0,"80":0,"81":2,"82":10,"83":2,"84":2,"85":2,"86":6,"87":0,"88":0,"89":2,"90":8,"91":0,"92":0,"93":2,"94":6,"95":0,"96":0,"97":2},"f":{"0":2,"1":78,"2":4,"3":4,"4":4,"5":6,"6":4,"7":4,"8":4,"9":6,"10":0,"11":0,"12":6,"13":6,"14":10,"15":6,"16":8,"17":6},"b":{"0":[78,2],"1":[2,0],"2":[0,4],"3":[0,4],"4":[0,4],"5":[0,6],"6":[0,4],"7":[0,2],"8":[2,0],"9":[0,2],"10":[2,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,2],"15":[2,0],"16":[0,4],"17":[0,4],"18":[4,0],"19":[6,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,6],"25":[0,6],"26":[2,8],"27":[0,6],"28":[0,8],"29":[0,6],"30":[0,0],"31":[2,2,2]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/cc0c6b1e00994792240a528b9bac4eeb.json b/node_modules/ecstatic/.nyc_output/cc0c6b1e00994792240a528b9bac4eeb.json new file mode 100644 index 000000000..824aadb97 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/cc0c6b1e00994792240a528b9bac4eeb.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":0,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":3,"56":1,"57":2,"58":1,"59":1,"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":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":11,"182":11,"183":0,"184":11,"185":1,"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},"f":{"0":1,"1":3,"2":0,"3":3,"4":3,"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":3,"20":11,"21":0,"22":0},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[3,0],"13":[3,3,0],"14":[1,2],"15":[1,1],"16":[2,1],"17":[0,1],"18":[1,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,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,11],"65":[11,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":0,"21":1,"22":1,"23":1,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,1],"5":[1,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":0,"19":1,"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":1},"f":{"0":1,"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},"b":{"0":[0,0],"1":[0,1],"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],"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":[1,0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/d83cb5b33e0221913dd5ce977de3cdc2.json b/node_modules/ecstatic/.nyc_output/d83cb5b33e0221913dd5ce977de3cdc2.json new file mode 100644 index 000000000..95386e59e --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/d83cb5b33e0221913dd5ce977de3cdc2.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":3,"37":3,"38":3,"39":3,"40":0,"41":3,"42":3,"43":3,"44":3,"45":3,"46":0,"47":3,"48":0,"49":3,"50":0,"51":3,"52":0,"53":3,"54":3,"55":3,"56":1,"57":2,"58":1,"59":1,"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":3,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":3,"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":1,"160":1,"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":3,"180":3,"181":9,"182":9,"183":0,"184":9,"185":1,"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},"f":{"0":1,"1":3,"2":0,"3":3,"4":3,"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":3,"20":9,"21":0,"22":0},"b":{"0":[0,1],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[3,0],"7":[0,3],"8":[3,0],"9":[0,3],"10":[0,3],"11":[3,1,0],"12":[3,0],"13":[3,3,2],"14":[1,2],"15":[1,1],"16":[2,1],"17":[0,1],"18":[1,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,3],"30":[3,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,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[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,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0,0],"64":[0,9],"65":[9,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":0,"21":1,"22":1,"23":1,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[0,1],"5":[1,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":0,"19":1,"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":1},"f":{"0":1,"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},"b":{"0":[0,0],"1":[0,1],"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],"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":[1,0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/de480016f80f842ede70e908d8d2914c.json b/node_modules/ecstatic/.nyc_output/de480016f80f842ede70e908d8d2914c.json new file mode 100644 index 000000000..1d73e57f5 --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/de480016f80f842ede70e908d8d2914c.json @@ -0,0 +1 @@ +{"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic.js","statementMap":{"0":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"1":{"start":{"line":4,"column":9},"end":{"line":4,"column":22}},"2":{"start":{"line":5,"column":10},"end":{"line":5,"column":24}},"3":{"start":{"line":6,"column":11},"end":{"line":6,"column":26}},"4":{"start":{"line":7,"column":14},"end":{"line":7,"column":33}},"5":{"start":{"line":8,"column":14},"end":{"line":8,"column":44}},"6":{"start":{"line":9,"column":14},"end":{"line":11,"column":13}},"7":{"start":{"line":12,"column":13},"end":{"line":12,"column":50}},"8":{"start":{"line":13,"column":19},"end":{"line":13,"column":45}},"9":{"start":{"line":14,"column":17},"end":{"line":14,"column":43}},"10":{"start":{"line":16,"column":15},"end":{"line":337,"column":1}},"11":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"12":{"start":{"line":18,"column":4},"end":{"line":18,"column":18}},"13":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"14":{"start":{"line":22,"column":13},"end":{"line":22,"column":46}},"15":{"start":{"line":23,"column":13},"end":{"line":23,"column":32}},"16":{"start":{"line":24,"column":14},"end":{"line":24,"column":24}},"17":{"start":{"line":25,"column":18},"end":{"line":25,"column":32}},"18":{"start":{"line":26,"column":16},"end":{"line":26,"column":28}},"19":{"start":{"line":27,"column":19},"end":{"line":27,"column":34}},"20":{"start":{"line":28,"column":20},"end":{"line":28,"column":36}},"21":{"start":{"line":29,"column":16},"end":{"line":29,"column":28}},"22":{"start":{"line":30,"column":21},"end":{"line":30,"column":38}},"23":{"start":{"line":31,"column":18},"end":{"line":31,"column":32}},"24":{"start":{"line":32,"column":28},"end":{"line":32,"column":52}},"25":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"26":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"27":{"start":{"line":35,"column":44},"end":{"line":35,"column":87}},"28":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"29":{"start":{"line":39,"column":4},"end":{"line":42,"column":18}},"30":{"start":{"line":41,"column":6},"end":{"line":41,"column":50}},"31":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"32":{"start":{"line":44,"column":6},"end":{"line":44,"column":32}},"33":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"34":{"start":{"line":47,"column":6},"end":{"line":47,"column":34}},"35":{"start":{"line":52,"column":2},"end":{"line":336,"column":4}},"36":{"start":{"line":71,"column":17},"end":{"line":71,"column":35}},"37":{"start":{"line":72,"column":4},"end":{"line":78,"column":5}},"38":{"start":{"line":73,"column":6},"end":{"line":73,"column":34}},"39":{"start":{"line":74,"column":21},"end":{"line":74,"column":52}},"40":{"start":{"line":77,"column":6},"end":{"line":77,"column":52}},"41":{"start":{"line":80,"column":15},"end":{"line":87,"column":9}},"42":{"start":{"line":88,"column":18},"end":{"line":88,"column":30}},"43":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"44":{"start":{"line":92,"column":6},"end":{"line":92,"column":51}},"45":{"start":{"line":94,"column":4},"end":{"line":96,"column":6}},"46":{"start":{"line":95,"column":6},"end":{"line":95,"column":38}},"47":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"48":{"start":{"line":99,"column":6},"end":{"line":99,"column":23}},"49":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"50":{"start":{"line":105,"column":6},"end":{"line":105,"column":36}},"51":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"52":{"start":{"line":109,"column":6},"end":{"line":109,"column":36}},"53":{"start":{"line":113,"column":6},"end":{"line":179,"column":9}},"54":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"55":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"56":{"start":{"line":118,"column":12},"end":{"line":118,"column":35}},"57":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"58":{"start":{"line":123,"column":12},"end":{"line":126,"column":26}},"59":{"start":{"line":130,"column":12},"end":{"line":134,"column":26}},"60":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"61":{"start":{"line":138,"column":10},"end":{"line":138,"column":49}},"62":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"63":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"64":{"start":{"line":142,"column":12},"end":{"line":142,"column":35}},"65":{"start":{"line":143,"column":12},"end":{"line":143,"column":19}},"66":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"67":{"start":{"line":148,"column":12},"end":{"line":148,"column":33}},"68":{"start":{"line":149,"column":12},"end":{"line":151,"column":14}},"69":{"start":{"line":152,"column":12},"end":{"line":152,"column":29}},"70":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"71":{"start":{"line":156,"column":12},"end":{"line":168,"column":15}},"72":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"73":{"start":{"line":161,"column":16},"end":{"line":161,"column":62}},"74":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"75":{"start":{"line":164,"column":16},"end":{"line":164,"column":53}},"76":{"start":{"line":167,"column":14},"end":{"line":167,"column":44}},"77":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"78":{"start":{"line":172,"column":12},"end":{"line":172,"column":49}},"79":{"start":{"line":177,"column":10},"end":{"line":177,"column":22}},"80":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"81":{"start":{"line":184,"column":6},"end":{"line":197,"column":9}},"82":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"83":{"start":{"line":186,"column":10},"end":{"line":193,"column":13}},"84":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"85":{"start":{"line":188,"column":14},"end":{"line":188,"column":29}},"86":{"start":{"line":189,"column":14},"end":{"line":189,"column":33}},"87":{"start":{"line":191,"column":14},"end":{"line":191,"column":25}},"88":{"start":{"line":195,"column":10},"end":{"line":195,"column":21}},"89":{"start":{"line":199,"column":6},"end":{"line":199,"column":17}},"90":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"91":{"start":{"line":206,"column":24},"end":{"line":206,"column":54}},"92":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"93":{"start":{"line":210,"column":8},"end":{"line":210,"column":61}},"94":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"95":{"start":{"line":212,"column":10},"end":{"line":212,"column":48}},"96":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"97":{"start":{"line":217,"column":8},"end":{"line":217,"column":50}},"98":{"start":{"line":220,"column":8},"end":{"line":220,"column":75}},"99":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"100":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"101":{"start":{"line":225,"column":20},"end":{"line":225,"column":29}},"102":{"start":{"line":226,"column":20},"end":{"line":226,"column":58}},"103":{"start":{"line":227,"column":27},"end":{"line":227,"column":35}},"104":{"start":{"line":228,"column":25},"end":{"line":228,"column":33}},"105":{"start":{"line":229,"column":20},"end":{"line":229,"column":46}},"106":{"start":{"line":230,"column":18},"end":{"line":230,"column":84}},"107":{"start":{"line":231,"column":24},"end":{"line":231,"column":37}},"108":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"109":{"start":{"line":233,"column":10},"end":{"line":233,"column":42}},"110":{"start":{"line":235,"column":22},"end":{"line":235,"column":73}},"111":{"start":{"line":236,"column":8},"end":{"line":238,"column":11}},"112":{"start":{"line":237,"column":10},"end":{"line":237,"column":51}},"113":{"start":{"line":239,"column":8},"end":{"line":241,"column":11}},"114":{"start":{"line":240,"column":11},"end":{"line":240,"column":29}},"115":{"start":{"line":242,"column":8},"end":{"line":247,"column":11}},"116":{"start":{"line":248,"column":8},"end":{"line":248,"column":26}},"117":{"start":{"line":249,"column":8},"end":{"line":249,"column":15}},"118":{"start":{"line":253,"column":25},"end":{"line":253,"column":61}},"119":{"start":{"line":254,"column":17},"end":{"line":254,"column":46}},"120":{"start":{"line":255,"column":6},"end":{"line":255,"column":51}},"121":{"start":{"line":256,"column":6},"end":{"line":256,"column":34}},"122":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"123":{"start":{"line":259,"column":35},"end":{"line":259,"column":50}},"124":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"125":{"start":{"line":261,"column":10},"end":{"line":261,"column":67}},"126":{"start":{"line":263,"column":8},"end":{"line":263,"column":61}},"127":{"start":{"line":265,"column":8},"end":{"line":265,"column":46}},"128":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"129":{"start":{"line":270,"column":8},"end":{"line":270,"column":38}},"130":{"start":{"line":273,"column":6},"end":{"line":273,"column":49}},"131":{"start":{"line":274,"column":6},"end":{"line":274,"column":49}},"132":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"133":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"134":{"start":{"line":282,"column":8},"end":{"line":282,"column":25}},"135":{"start":{"line":285,"column":19},"end":{"line":285,"column":44}},"136":{"start":{"line":287,"column":6},"end":{"line":287,"column":23}},"137":{"start":{"line":288,"column":6},"end":{"line":290,"column":9}},"138":{"start":{"line":289,"column":8},"end":{"line":289,"column":49}},"139":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"140":{"start":{"line":295,"column":8},"end":{"line":295,"column":21}},"141":{"start":{"line":298,"column":32},"end":{"line":298,"column":64}},"142":{"start":{"line":299,"column":23},"end":{"line":299,"column":51}},"143":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"144":{"start":{"line":303,"column":8},"end":{"line":303,"column":21}},"145":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"146":{"start":{"line":309,"column":8},"end":{"line":312,"column":36}},"147":{"start":{"line":310,"column":35},"end":{"line":310,"column":76}},"148":{"start":{"line":312,"column":22},"end":{"line":312,"column":34}},"149":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"150":{"start":{"line":315,"column":10},"end":{"line":315,"column":23}},"151":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"152":{"start":{"line":319,"column":10},"end":{"line":319,"column":23}},"153":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"154":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"155":{"start":{"line":328,"column":10},"end":{"line":328,"column":23}},"156":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"157":{"start":{"line":330,"column":10},"end":{"line":330,"column":23}},"158":{"start":{"line":334,"column":6},"end":{"line":334,"column":18}},"159":{"start":{"line":339,"column":0},"end":{"line":339,"column":27}},"160":{"start":{"line":340,"column":0},"end":{"line":340,"column":27}},"161":{"start":{"line":343,"column":15},"end":{"line":343,"column":65}},"162":{"start":{"line":344,"column":15},"end":{"line":344,"column":25}},"163":{"start":{"line":345,"column":22},"end":{"line":345,"column":27}},"164":{"start":{"line":347,"column":2},"end":{"line":349,"column":5}},"165":{"start":{"line":348,"column":4},"end":{"line":348,"column":47}},"166":{"start":{"line":351,"column":2},"end":{"line":358,"column":5}},"167":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"168":{"start":{"line":353,"column":6},"end":{"line":353,"column":16}},"169":{"start":{"line":356,"column":4},"end":{"line":356,"column":25}},"170":{"start":{"line":357,"column":4},"end":{"line":357,"column":14}},"171":{"start":{"line":360,"column":2},"end":{"line":367,"column":5}},"172":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"173":{"start":{"line":362,"column":6},"end":{"line":362,"column":13}},"174":{"start":{"line":365,"column":4},"end":{"line":365,"column":25}},"175":{"start":{"line":366,"column":4},"end":{"line":366,"column":50}},"176":{"start":{"line":372,"column":16},"end":{"line":372,"column":27}},"177":{"start":{"line":374,"column":2},"end":{"line":380,"column":5}},"178":{"start":{"line":378,"column":8},"end":{"line":378,"column":69}},"179":{"start":{"line":385,"column":15},"end":{"line":385,"column":53}},"180":{"start":{"line":387,"column":2},"end":{"line":395,"column":15}},"181":{"start":{"line":388,"column":4},"end":{"line":388,"column":38}},"182":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"183":{"start":{"line":391,"column":6},"end":{"line":391,"column":57}},"184":{"start":{"line":394,"column":4},"end":{"line":394,"column":17}},"185":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"186":{"start":{"line":399,"column":17},"end":{"line":399,"column":52}},"187":{"start":{"line":400,"column":13},"end":{"line":400,"column":28}},"188":{"start":{"line":401,"column":13},"end":{"line":407,"column":8}},"189":{"start":{"line":405,"column":10},"end":{"line":405,"column":51}},"190":{"start":{"line":408,"column":16},"end":{"line":408,"column":46}},"191":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"192":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"193":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"194":{"start":{"line":413,"column":12},"end":{"line":413,"column":25}},"195":{"start":{"line":414,"column":4},"end":{"line":414,"column":53}},"196":{"start":{"line":415,"column":4},"end":{"line":415,"column":51}},"197":{"start":{"line":416,"column":4},"end":{"line":416,"column":11}},"198":{"start":{"line":419,"column":2},"end":{"line":422,"column":7}},"199":{"start":{"line":421,"column":6},"end":{"line":421,"column":76}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":32},"end":{"line":16,"column":33}},"loc":{"start":{"line":16,"column":56},"end":{"line":337,"column":1}},"line":16},"1":{"name":"middleware","decl":{"start":{"line":52,"column":18},"end":{"line":52,"column":28}},"loc":{"start":{"line":52,"column":46},"end":{"line":336,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":94,"column":33},"end":{"line":94,"column":34}},"loc":{"start":{"line":94,"column":48},"end":{"line":96,"column":5}},"line":94},"3":{"name":"statFile","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":21}},"loc":{"start":{"line":112,"column":24},"end":{"line":180,"column":5}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":113,"column":20},"end":{"line":113,"column":21}},"loc":{"start":{"line":113,"column":41},"end":{"line":179,"column":7}},"line":113},"5":{"name":"(anonymous_5)","decl":{"start":{"line":159,"column":20},"end":{"line":159,"column":21}},"loc":{"start":{"line":159,"column":35},"end":{"line":168,"column":13}},"line":159},"6":{"name":"(anonymous_6)","decl":{"start":{"line":184,"column":23},"end":{"line":184,"column":24}},"loc":{"start":{"line":184,"column":44},"end":{"line":197,"column":7}},"line":184},"7":{"name":"(anonymous_7)","decl":{"start":{"line":186,"column":31},"end":{"line":186,"column":32}},"loc":{"start":{"line":186,"column":54},"end":{"line":193,"column":11}},"line":186},"8":{"name":"serve","decl":{"start":{"line":202,"column":13},"end":{"line":202,"column":18}},"loc":{"start":{"line":202,"column":25},"end":{"line":291,"column":5}},"line":202},"9":{"name":"(anonymous_9)","decl":{"start":{"line":236,"column":28},"end":{"line":236,"column":29}},"loc":{"start":{"line":236,"column":43},"end":{"line":238,"column":9}},"line":236},"10":{"name":"(anonymous_10)","decl":{"start":{"line":239,"column":24},"end":{"line":239,"column":25}},"loc":{"start":{"line":239,"column":36},"end":{"line":241,"column":9}},"line":239},"11":{"name":"(anonymous_11)","decl":{"start":{"line":288,"column":25},"end":{"line":288,"column":26}},"loc":{"start":{"line":288,"column":40},"end":{"line":290,"column":7}},"line":288},"12":{"name":"shouldReturn304","decl":{"start":{"line":293,"column":13},"end":{"line":293,"column":28}},"loc":{"start":{"line":293,"column":66},"end":{"line":335,"column":5}},"line":293},"13":{"name":"hasGzipId12","decl":{"start":{"line":342,"column":9},"end":{"line":342,"column":20}},"loc":{"start":{"line":342,"column":34},"end":{"line":368,"column":1}},"line":342},"14":{"name":"(anonymous_14)","decl":{"start":{"line":347,"column":20},"end":{"line":347,"column":21}},"loc":{"start":{"line":347,"column":37},"end":{"line":349,"column":3}},"line":347},"15":{"name":"(anonymous_15)","decl":{"start":{"line":351,"column":21},"end":{"line":351,"column":22}},"loc":{"start":{"line":351,"column":36},"end":{"line":358,"column":3}},"line":351},"16":{"name":"(anonymous_16)","decl":{"start":{"line":360,"column":21},"end":{"line":360,"column":22}},"loc":{"start":{"line":360,"column":33},"end":{"line":367,"column":3}},"line":360},"17":{"name":"shouldCompress","decl":{"start":{"line":371,"column":9},"end":{"line":371,"column":23}},"loc":{"start":{"line":371,"column":29},"end":{"line":381,"column":1}},"line":371},"18":{"name":"(anonymous_18)","decl":{"start":{"line":377,"column":12},"end":{"line":377,"column":13}},"loc":{"start":{"line":377,"column":26},"end":{"line":379,"column":7}},"line":377},"19":{"name":"decodePathname","decl":{"start":{"line":384,"column":9},"end":{"line":384,"column":23}},"loc":{"start":{"line":384,"column":34},"end":{"line":396,"column":1}},"line":384},"20":{"name":"(anonymous_20)","decl":{"start":{"line":387,"column":20},"end":{"line":387,"column":21}},"loc":{"start":{"line":387,"column":37},"end":{"line":395,"column":3}},"line":387},"21":{"name":"(anonymous_21)","decl":{"start":{"line":404,"column":46},"end":{"line":404,"column":47}},"loc":{"start":{"line":404,"column":61},"end":{"line":406,"column":9}},"line":404},"22":{"name":"(anonymous_22)","decl":{"start":{"line":420,"column":18},"end":{"line":420,"column":19}},"loc":{"start":{"line":420,"column":30},"end":{"line":422,"column":5}},"line":420}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":20,"column":3}},{"start":{"line":17,"column":2},"end":{"line":20,"column":3}}],"line":17},"1":{"loc":{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":35,"column":87}},{"start":{"line":35,"column":2},"end":{"line":35,"column":87}}],"line":35},"2":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":16}},{"start":{"line":35,"column":20},"end":{"line":35,"column":42}}],"line":35},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":49,"column":3}},{"start":{"line":38,"column":2},"end":{"line":49,"column":3}}],"line":38},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},{"start":{"line":43,"column":4},"end":{"line":48,"column":5}}],"line":43},"5":{"loc":{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":9},"end":{"line":48,"column":5}},{"start":{"line":46,"column":9},"end":{"line":48,"column":5}}],"line":46},"6":{"loc":{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":93,"column":5}},{"start":{"line":90,"column":4},"end":{"line":93,"column":5}}],"line":90},"7":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}],"line":98},"8":{"loc":{"start":{"line":98,"column":8},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},{"start":{"line":98,"column":36},"end":{"line":98,"column":55}}],"line":98},"9":{"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":106,"column":5}},{"start":{"line":104,"column":4},"end":{"line":106,"column":5}}],"line":104},"10":{"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}}],"line":108},"11":{"loc":{"start":{"line":108,"column":8},"end":{"line":108,"column":70}},"type":"binary-expr","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":18}},{"start":{"line":108,"column":23},"end":{"line":108,"column":43}},{"start":{"line":108,"column":47},"end":{"line":108,"column":68}}],"line":108},"12":{"loc":{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":178,"column":9}},{"start":{"line":114,"column":8},"end":{"line":178,"column":9}}],"line":114},"13":{"loc":{"start":{"line":114,"column":12},"end":{"line":114,"column":68}},"type":"binary-expr","locations":[{"start":{"line":114,"column":12},"end":{"line":114,"column":15}},{"start":{"line":114,"column":20},"end":{"line":114,"column":41}},{"start":{"line":114,"column":45},"end":{"line":114,"column":67}}],"line":114},"14":{"loc":{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":135,"column":11}},{"start":{"line":115,"column":10},"end":{"line":135,"column":11}}],"line":115},"15":{"loc":{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":15},"end":{"line":135,"column":11}},{"start":{"line":120,"column":15},"end":{"line":135,"column":11}}],"line":120},"16":{"loc":{"start":{"line":120,"column":19},"end":{"line":120,"column":70}},"type":"binary-expr","locations":[{"start":{"line":120,"column":19},"end":{"line":120,"column":56}},{"start":{"line":120,"column":60},"end":{"line":120,"column":70}}],"line":120},"17":{"loc":{"start":{"line":124,"column":57},"end":{"line":124,"column":93}},"type":"cond-expr","locations":[{"start":{"line":124,"column":75},"end":{"line":124,"column":88}},{"start":{"line":124,"column":91},"end":{"line":124,"column":93}}],"line":124},"18":{"loc":{"start":{"line":131,"column":20},"end":{"line":131,"column":91}},"type":"cond-expr","locations":[{"start":{"line":131,"column":35},"end":{"line":131,"column":80}},{"start":{"line":131,"column":84},"end":{"line":131,"column":91}}],"line":131},"19":{"loc":{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":13},"end":{"line":178,"column":9}},{"start":{"line":137,"column":13},"end":{"line":178,"column":9}}],"line":137},"20":{"loc":{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":13},"end":{"line":178,"column":9}},{"start":{"line":140,"column":13},"end":{"line":178,"column":9}}],"line":140},"21":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"22":{"loc":{"start":{"line":141,"column":14},"end":{"line":141,"column":41}},"type":"binary-expr","locations":[{"start":{"line":141,"column":14},"end":{"line":141,"column":24}},{"start":{"line":141,"column":28},"end":{"line":141,"column":41}}],"line":141},"23":{"loc":{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},"type":"if","locations":[{"start":{"line":147,"column":10},"end":{"line":153,"column":11}},{"start":{"line":147,"column":10},"end":{"line":153,"column":11}}],"line":147},"24":{"loc":{"start":{"line":150,"column":15},"end":{"line":150,"column":52}},"type":"cond-expr","locations":[{"start":{"line":150,"column":30},"end":{"line":150,"column":48}},{"start":{"line":150,"column":50},"end":{"line":150,"column":52}}],"line":150},"25":{"loc":{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":169,"column":11}},{"start":{"line":155,"column":10},"end":{"line":169,"column":11}}],"line":155},"26":{"loc":{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},"type":"if","locations":[{"start":{"line":160,"column":14},"end":{"line":162,"column":15}},{"start":{"line":160,"column":14},"end":{"line":162,"column":15}}],"line":160},"27":{"loc":{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},"type":"if","locations":[{"start":{"line":163,"column":14},"end":{"line":165,"column":15}},{"start":{"line":163,"column":14},"end":{"line":165,"column":15}}],"line":163},"28":{"loc":{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},"type":"if","locations":[{"start":{"line":171,"column":10},"end":{"line":173,"column":11}},{"start":{"line":171,"column":10},"end":{"line":173,"column":11}}],"line":171},"29":{"loc":{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":4},"end":{"line":200,"column":5}},{"start":{"line":183,"column":4},"end":{"line":200,"column":5}}],"line":183},"30":{"loc":{"start":{"line":183,"column":8},"end":{"line":183,"column":40}},"type":"binary-expr","locations":[{"start":{"line":183,"column":8},"end":{"line":183,"column":17}},{"start":{"line":183,"column":21},"end":{"line":183,"column":40}}],"line":183},"31":{"loc":{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},"type":"if","locations":[{"start":{"line":185,"column":8},"end":{"line":196,"column":9}},{"start":{"line":185,"column":8},"end":{"line":196,"column":9}}],"line":185},"32":{"loc":{"start":{"line":185,"column":12},"end":{"line":185,"column":33}},"type":"binary-expr","locations":[{"start":{"line":185,"column":12},"end":{"line":185,"column":16}},{"start":{"line":185,"column":20},"end":{"line":185,"column":33}}],"line":185},"33":{"loc":{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},"type":"if","locations":[{"start":{"line":187,"column":12},"end":{"line":192,"column":13}},{"start":{"line":187,"column":12},"end":{"line":192,"column":13}}],"line":187},"34":{"loc":{"start":{"line":205,"column":24},"end":{"line":205,"column":70}},"type":"binary-expr","locations":[{"start":{"line":205,"column":24},"end":{"line":205,"column":40}},{"start":{"line":205,"column":44},"end":{"line":205,"column":70}}],"line":205},"35":{"loc":{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":214,"column":7}},{"start":{"line":209,"column":6},"end":{"line":214,"column":7}}],"line":209},"36":{"loc":{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},"type":"if","locations":[{"start":{"line":211,"column":8},"end":{"line":213,"column":9}},{"start":{"line":211,"column":8},"end":{"line":213,"column":9}}],"line":211},"37":{"loc":{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},"type":"if","locations":[{"start":{"line":216,"column":6},"end":{"line":221,"column":7}},{"start":{"line":216,"column":6},"end":{"line":221,"column":7}}],"line":216},"38":{"loc":{"start":{"line":223,"column":19},"end":{"line":223,"column":54}},"type":"binary-expr","locations":[{"start":{"line":223,"column":19},"end":{"line":223,"column":30}},{"start":{"line":223,"column":34},"end":{"line":223,"column":54}}],"line":223},"39":{"loc":{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":250,"column":7}},{"start":{"line":224,"column":6},"end":{"line":250,"column":7}}],"line":224},"40":{"loc":{"start":{"line":230,"column":36},"end":{"line":230,"column":83}},"type":"cond-expr","locations":[{"start":{"line":230,"column":49},"end":{"line":230,"column":73}},{"start":{"line":230,"column":76},"end":{"line":230,"column":83}}],"line":230},"41":{"loc":{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":234,"column":9}},{"start":{"line":232,"column":8},"end":{"line":234,"column":9}}],"line":232},"42":{"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":53}},"type":"binary-expr","locations":[{"start":{"line":232,"column":12},"end":{"line":232,"column":23}},{"start":{"line":232,"column":27},"end":{"line":232,"column":39}},{"start":{"line":232,"column":43},"end":{"line":232,"column":53}}],"line":232},"43":{"loc":{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},"type":"if","locations":[{"start":{"line":258,"column":6},"end":{"line":266,"column":7}},{"start":{"line":258,"column":6},"end":{"line":266,"column":7}}],"line":258},"44":{"loc":{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},"type":"if","locations":[{"start":{"line":260,"column":8},"end":{"line":262,"column":9}},{"start":{"line":260,"column":8},"end":{"line":262,"column":9}}],"line":260},"45":{"loc":{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},"type":"if","locations":[{"start":{"line":269,"column":6},"end":{"line":271,"column":7}},{"start":{"line":269,"column":6},"end":{"line":271,"column":7}}],"line":269},"46":{"loc":{"start":{"line":279,"column":23},"end":{"line":279,"column":44}},"type":"binary-expr","locations":[{"start":{"line":279,"column":23},"end":{"line":279,"column":37}},{"start":{"line":279,"column":41},"end":{"line":279,"column":44}}],"line":279},"47":{"loc":{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},"type":"if","locations":[{"start":{"line":281,"column":6},"end":{"line":283,"column":7}},{"start":{"line":281,"column":6},"end":{"line":283,"column":7}}],"line":281},"48":{"loc":{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":294,"column":6},"end":{"line":296,"column":7}},{"start":{"line":294,"column":6},"end":{"line":296,"column":7}}],"line":294},"49":{"loc":{"start":{"line":294,"column":10},"end":{"line":294,"column":30}},"type":"binary-expr","locations":[{"start":{"line":294,"column":10},"end":{"line":294,"column":14}},{"start":{"line":294,"column":18},"end":{"line":294,"column":30}}],"line":294},"50":{"loc":{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":6},"end":{"line":304,"column":7}},{"start":{"line":301,"column":6},"end":{"line":304,"column":7}}],"line":301},"51":{"loc":{"start":{"line":301,"column":10},"end":{"line":301,"column":45}},"type":"binary-expr","locations":[{"start":{"line":301,"column":10},"end":{"line":301,"column":30}},{"start":{"line":301,"column":34},"end":{"line":301,"column":45}}],"line":301},"52":{"loc":{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":321,"column":7}},{"start":{"line":306,"column":6},"end":{"line":321,"column":7}}],"line":306},"53":{"loc":{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":316,"column":9}},{"start":{"line":314,"column":8},"end":{"line":316,"column":9}}],"line":314},"54":{"loc":{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":320,"column":9}},{"start":{"line":318,"column":8},"end":{"line":320,"column":9}}],"line":318},"55":{"loc":{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},"type":"if","locations":[{"start":{"line":323,"column":6},"end":{"line":332,"column":7}},{"start":{"line":323,"column":6},"end":{"line":332,"column":7}}],"line":323},"56":{"loc":{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":331,"column":9}},{"start":{"line":326,"column":8},"end":{"line":331,"column":9}}],"line":326},"57":{"loc":{"start":{"line":326,"column":12},"end":{"line":327,"column":85}},"type":"binary-expr","locations":[{"start":{"line":326,"column":12},"end":{"line":326,"column":28}},{"start":{"line":326,"column":32},"end":{"line":326,"column":57}},{"start":{"line":327,"column":13},"end":{"line":327,"column":47}},{"start":{"line":327,"column":51},"end":{"line":327,"column":85}}],"line":326},"58":{"loc":{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":15},"end":{"line":331,"column":9}},{"start":{"line":329,"column":15},"end":{"line":331,"column":9}}],"line":329},"59":{"loc":{"start":{"line":329,"column":19},"end":{"line":329,"column":101}},"type":"binary-expr","locations":[{"start":{"line":329,"column":19},"end":{"line":329,"column":36}},{"start":{"line":329,"column":41},"end":{"line":329,"column":66}},{"start":{"line":329,"column":70},"end":{"line":329,"column":100}}],"line":329},"60":{"loc":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"type":"if","locations":[{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},{"start":{"line":352,"column":4},"end":{"line":354,"column":5}}],"line":352},"61":{"loc":{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},"type":"if","locations":[{"start":{"line":361,"column":4},"end":{"line":363,"column":5}},{"start":{"line":361,"column":4},"end":{"line":363,"column":5}}],"line":361},"62":{"loc":{"start":{"line":366,"column":13},"end":{"line":366,"column":48}},"type":"binary-expr","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":28}},{"start":{"line":366,"column":32},"end":{"line":366,"column":48}}],"line":366},"63":{"loc":{"start":{"line":374,"column":9},"end":{"line":379,"column":8}},"type":"binary-expr","locations":[{"start":{"line":374,"column":9},"end":{"line":374,"column":16}},{"start":{"line":374,"column":20},"end":{"line":374,"column":46}},{"start":{"line":375,"column":4},"end":{"line":379,"column":8}}],"line":374},"64":{"loc":{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},"type":"if","locations":[{"start":{"line":390,"column":4},"end":{"line":392,"column":5}},{"start":{"line":390,"column":4},"end":{"line":392,"column":5}}],"line":390},"65":{"loc":{"start":{"line":390,"column":8},"end":{"line":390,"column":56}},"type":"binary-expr","locations":[{"start":{"line":390,"column":8},"end":{"line":390,"column":36}},{"start":{"line":390,"column":40},"end":{"line":390,"column":56}}],"line":390},"66":{"loc":{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},"type":"if","locations":[{"start":{"line":398,"column":0},"end":{"line":423,"column":1}},{"start":{"line":398,"column":0},"end":{"line":423,"column":1}}],"line":398},"67":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":87}},"type":"cond-expr","locations":[{"start":{"line":409,"column":50},"end":{"line":409,"column":57}},{"start":{"line":409,"column":60},"end":{"line":409,"column":87}}],"line":409},"68":{"loc":{"start":{"line":409,"column":13},"end":{"line":409,"column":47}},"type":"binary-expr","locations":[{"start":{"line":409,"column":13},"end":{"line":409,"column":27}},{"start":{"line":409,"column":31},"end":{"line":409,"column":47}}],"line":409},"69":{"loc":{"start":{"line":409,"column":60},"end":{"line":409,"column":87}},"type":"binary-expr","locations":[{"start":{"line":409,"column":60},"end":{"line":409,"column":69}},{"start":{"line":409,"column":73},"end":{"line":409,"column":79}},{"start":{"line":409,"column":83},"end":{"line":409,"column":87}}],"line":409},"70":{"loc":{"start":{"line":410,"column":12},"end":{"line":410,"column":51}},"type":"binary-expr","locations":[{"start":{"line":410,"column":12},"end":{"line":410,"column":21}},{"start":{"line":410,"column":25},"end":{"line":410,"column":34}},{"start":{"line":410,"column":38},"end":{"line":410,"column":51}}],"line":410},"71":{"loc":{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},"type":"if","locations":[{"start":{"line":412,"column":2},"end":{"line":417,"column":3}},{"start":{"line":412,"column":2},"end":{"line":417,"column":3}}],"line":412},"72":{"loc":{"start":{"line":412,"column":6},"end":{"line":412,"column":25}},"type":"binary-expr","locations":[{"start":{"line":412,"column":6},"end":{"line":412,"column":15}},{"start":{"line":412,"column":19},"end":{"line":412,"column":25}}],"line":412}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":5,"37":5,"38":5,"39":5,"40":0,"41":5,"42":5,"43":5,"44":5,"45":5,"46":0,"47":5,"48":0,"49":5,"50":0,"51":5,"52":0,"53":5,"54":5,"55":4,"56":1,"57":3,"58":2,"59":1,"60":1,"61":0,"62":1,"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":1,"80":5,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":5,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":0,"98":0,"99":1,"100":1,"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":1,"119":1,"120":1,"121":1,"122":1,"123":0,"124":0,"125":0,"126":0,"127":1,"128":1,"129":0,"130":1,"131":1,"132":1,"133":1,"134":0,"135":1,"136":1,"137":1,"138":0,"139":1,"140":0,"141":1,"142":1,"143":1,"144":1,"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":1,"160":1,"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":5,"177":5,"178":0,"179":5,"180":5,"181":15,"182":15,"183":0,"184":15,"185":1,"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},"f":{"0":1,"1":5,"2":0,"3":5,"4":5,"5":0,"6":0,"7":0,"8":1,"9":0,"10":0,"11":0,"12":1,"13":0,"14":0,"15":0,"16":0,"17":5,"18":0,"19":5,"20":15,"21":0,"22":0},"b":{"0":[1,0],"1":[1,0],"2":[1,1],"3":[0,1],"4":[0,0],"5":[0,0],"6":[5,0],"7":[0,5],"8":[5,0],"9":[0,5],"10":[0,5],"11":[5,2,0],"12":[4,1],"13":[5,4,0],"14":[1,3],"15":[2,1],"16":[3,2],"17":[0,2],"18":[0,1],"19":[0,1],"20":[0,1],"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,5],"30":[5,5],"31":[0,0],"32":[0,0],"33":[0,0],"34":[1,0],"35":[1,0],"36":[1,0],"37":[0,1],"38":[1,1],"39":[0,1],"40":[0,0],"41":[0,0],"42":[0,0,0],"43":[0,1],"44":[0,0],"45":[0,1],"46":[1,1],"47":[0,1],"48":[0,1],"49":[1,1],"50":[1,0],"51":[1,1],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0,0],"58":[0,0],"59":[0,0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[5,5,0],"64":[0,15],"65":[15,0],"66":[0,1],"67":[0,0],"68":[0,0],"69":[0,0,0],"70":[0,0,0],"71":[0,0],"72":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da58a258795511e0c2a8e17bf417f10e458cdb0b","contentHash":"c70fc522cd95c76d03fdf4ccb08657f0_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/index.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":21},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":10},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":20},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":19},"end":{"line":5,"column":46}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":39}},"6":{"start":{"line":7,"column":9},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":11},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":10},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":13},"end":{"line":12,"column":42}},"12":{"start":{"line":14,"column":0},"end":{"line":149,"column":2}},"13":{"start":{"line":16,"column":14},"end":{"line":16,"column":24}},"14":{"start":{"line":17,"column":13},"end":{"line":17,"column":36}},"15":{"start":{"line":18,"column":16},"end":{"line":18,"column":28}},"16":{"start":{"line":19,"column":22},"end":{"line":19,"column":40}},"17":{"start":{"line":20,"column":20},"end":{"line":20,"column":36}},"18":{"start":{"line":21,"column":21},"end":{"line":21,"column":38}},"19":{"start":{"line":22,"column":11},"end":{"line":22,"column":18}},"20":{"start":{"line":23,"column":18},"end":{"line":23,"column":32}},"21":{"start":{"line":25,"column":2},"end":{"line":148,"column":4}},"22":{"start":{"line":28,"column":17},"end":{"line":28,"column":35}},"23":{"start":{"line":29,"column":19},"end":{"line":29,"column":54}},"24":{"start":{"line":30,"column":14},"end":{"line":37,"column":9}},"25":{"start":{"line":39,"column":4},"end":{"line":147,"column":7}},"26":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"27":{"start":{"line":41,"column":8},"end":{"line":41,"column":77}},"28":{"start":{"line":45,"column":6},"end":{"line":146,"column":9}},"29":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"30":{"start":{"line":47,"column":10},"end":{"line":47,"column":79}},"31":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"32":{"start":{"line":52,"column":10},"end":{"line":54,"column":13}},"33":{"start":{"line":53,"column":12},"end":{"line":53,"column":47}},"34":{"start":{"line":57,"column":8},"end":{"line":57,"column":51}},"35":{"start":{"line":58,"column":8},"end":{"line":58,"column":53}},"36":{"start":{"line":59,"column":8},"end":{"line":59,"column":77}},"37":{"start":{"line":60,"column":8},"end":{"line":60,"column":46}},"38":{"start":{"line":62,"column":8},"end":{"line":82,"column":11}},"39":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"40":{"start":{"line":73,"column":12},"end":{"line":79,"column":15}},"41":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"42":{"start":{"line":75,"column":16},"end":{"line":75,"column":85}},"43":{"start":{"line":77,"column":14},"end":{"line":77,"column":40}},"44":{"start":{"line":78,"column":14},"end":{"line":78,"column":43}},"45":{"start":{"line":81,"column":10},"end":{"line":81,"column":39}},"46":{"start":{"line":87,"column":21},"end":{"line":98,"column":29}},"47":{"start":{"line":100,"column":10},"end":{"line":100,"column":28}},"48":{"start":{"line":102,"column":23},"end":{"line":102,"column":28}},"49":{"start":{"line":103,"column":25},"end":{"line":126,"column":11}},"50":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"51":{"start":{"line":106,"column":23},"end":{"line":106,"column":93}},"52":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"53":{"start":{"line":110,"column":14},"end":{"line":110,"column":73}},"54":{"start":{"line":113,"column":30},"end":{"line":113,"column":68}},"55":{"start":{"line":115,"column":22},"end":{"line":115,"column":46}},"56":{"start":{"line":117,"column":28},"end":{"line":117,"column":96}},"57":{"start":{"line":120,"column":12},"end":{"line":125,"column":24}},"58":{"start":{"line":128,"column":10},"end":{"line":128,"column":114}},"59":{"start":{"line":128,"column":38},"end":{"line":128,"column":92}},"60":{"start":{"line":129,"column":10},"end":{"line":129,"column":109}},"61":{"start":{"line":129,"column":39},"end":{"line":129,"column":87}},"62":{"start":{"line":130,"column":10},"end":{"line":130,"column":117}},"63":{"start":{"line":130,"column":41},"end":{"line":130,"column":95}},"64":{"start":{"line":132,"column":10},"end":{"line":132,"column":31}},"65":{"start":{"line":133,"column":10},"end":{"line":139,"column":11}},"66":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"67":{"start":{"line":142,"column":12},"end":{"line":142,"column":64}},"68":{"start":{"line":143,"column":12},"end":{"line":143,"column":26}},"69":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"70":{"start":{"line":157,"column":6},"end":{"line":157,"column":16}},"71":{"start":{"line":160,"column":21},"end":{"line":160,"column":23}},"72":{"start":{"line":161,"column":16},"end":{"line":161,"column":25}},"73":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"74":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"75":{"start":{"line":165,"column":6},"end":{"line":165,"column":25}},"76":{"start":{"line":168,"column":16},"end":{"line":168,"column":51}},"77":{"start":{"line":169,"column":12},"end":{"line":169,"column":14}},"78":{"start":{"line":170,"column":4},"end":{"line":173,"column":33}},"79":{"start":{"line":171,"column":8},"end":{"line":171,"column":27}},"80":{"start":{"line":172,"column":8},"end":{"line":172,"column":12}},"81":{"start":{"line":175,"column":12},"end":{"line":175,"column":28}},"82":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"83":{"start":{"line":176,"column":18},"end":{"line":176,"column":27}},"84":{"start":{"line":178,"column":4},"end":{"line":178,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":17},"end":{"line":14,"column":18}},"loc":{"start":{"line":14,"column":39},"end":{"line":149,"column":1}},"line":14},"1":{"name":"middleware","decl":{"start":{"line":25,"column":18},"end":{"line":25,"column":28}},"loc":{"start":{"line":25,"column":46},"end":{"line":148,"column":3}},"line":25},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":17},"end":{"line":39,"column":18}},"loc":{"start":{"line":39,"column":38},"end":{"line":147,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":22},"end":{"line":45,"column":23}},"loc":{"start":{"line":45,"column":44},"end":{"line":146,"column":7}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},"loc":{"start":{"line":52,"column":49},"end":{"line":54,"column":11}},"line":52},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":30},"end":{"line":62,"column":31}},"loc":{"start":{"line":62,"column":62},"end":{"line":82,"column":9}},"line":62},"6":{"name":"(anonymous_6)","decl":{"start":{"line":73,"column":49},"end":{"line":73,"column":50}},"loc":{"start":{"line":73,"column":67},"end":{"line":79,"column":13}},"line":73},"7":{"name":"render","decl":{"start":{"line":84,"column":17},"end":{"line":84,"column":23}},"loc":{"start":{"line":84,"column":46},"end":{"line":145,"column":9}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":25},"end":{"line":103,"column":26}},"loc":{"start":{"line":103,"column":44},"end":{"line":126,"column":11}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":128,"column":20},"end":{"line":128,"column":21}},"loc":{"start":{"line":128,"column":36},"end":{"line":128,"column":94}},"line":128},"10":{"name":"(anonymous_10)","decl":{"start":{"line":129,"column":21},"end":{"line":129,"column":22}},"loc":{"start":{"line":129,"column":37},"end":{"line":129,"column":89}},"line":129},"11":{"name":"(anonymous_11)","decl":{"start":{"line":130,"column":23},"end":{"line":130,"column":24}},"loc":{"start":{"line":130,"column":39},"end":{"line":130,"column":97}},"line":130},"12":{"name":"sizeToString","decl":{"start":{"line":155,"column":9},"end":{"line":155,"column":21}},"loc":{"start":{"line":155,"column":47},"end":{"line":179,"column":1}},"line":155}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":42,"column":7}},{"start":{"line":40,"column":6},"end":{"line":42,"column":7}}],"line":40},"1":{"loc":{"start":{"line":41,"column":15},"end":{"line":41,"column":76}},"type":"cond-expr","locations":[{"start":{"line":41,"column":29},"end":{"line":41,"column":67}},{"start":{"line":41,"column":70},"end":{"line":41,"column":76}}],"line":41},"2":{"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}}],"line":46},"3":{"loc":{"start":{"line":47,"column":17},"end":{"line":47,"column":78}},"type":"cond-expr","locations":[{"start":{"line":47,"column":31},"end":{"line":47,"column":69}},{"start":{"line":47,"column":72},"end":{"line":47,"column":78}}],"line":47},"4":{"loc":{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":55,"column":9}},{"start":{"line":51,"column":8},"end":{"line":55,"column":9}}],"line":51},"5":{"loc":{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":72,"column":10},"end":{"line":80,"column":11}},{"start":{"line":72,"column":10},"end":{"line":80,"column":11}}],"line":72},"6":{"loc":{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},"type":"if","locations":[{"start":{"line":74,"column":14},"end":{"line":76,"column":15}},{"start":{"line":74,"column":14},"end":{"line":76,"column":15}}],"line":74},"7":{"loc":{"start":{"line":75,"column":23},"end":{"line":75,"column":84}},"type":"cond-expr","locations":[{"start":{"line":75,"column":37},"end":{"line":75,"column":75}},{"start":{"line":75,"column":78},"end":{"line":75,"column":84}}],"line":75},"8":{"loc":{"start":{"line":105,"column":24},"end":{"line":105,"column":68}},"type":"binary-expr","locations":[{"start":{"line":105,"column":24},"end":{"line":105,"column":43}},{"start":{"line":105,"column":47},"end":{"line":105,"column":68}}],"line":105},"9":{"loc":{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},"type":"if","locations":[{"start":{"line":109,"column":12},"end":{"line":111,"column":13}},{"start":{"line":109,"column":12},"end":{"line":111,"column":13}}],"line":109},"10":{"loc":{"start":{"line":110,"column":38},"end":{"line":110,"column":71}},"type":"cond-expr","locations":[{"start":{"line":110,"column":55},"end":{"line":110,"column":68}},{"start":{"line":110,"column":69},"end":{"line":110,"column":71}}],"line":110},"11":{"loc":{"start":{"line":113,"column":52},"end":{"line":113,"column":67}},"type":"cond-expr","locations":[{"start":{"line":113,"column":61},"end":{"line":113,"column":64}},{"start":{"line":113,"column":65},"end":{"line":113,"column":67}}],"line":113},"12":{"loc":{"start":{"line":117,"column":39},"end":{"line":117,"column":95}},"type":"cond-expr","locations":[{"start":{"line":117,"column":47},"end":{"line":117,"column":55}},{"start":{"line":117,"column":59},"end":{"line":117,"column":94}}],"line":117},"13":{"loc":{"start":{"line":117,"column":59},"end":{"line":117,"column":94}},"type":"cond-expr","locations":[{"start":{"line":117,"column":81},"end":{"line":117,"column":84}},{"start":{"line":117,"column":87},"end":{"line":117,"column":94}}],"line":117},"14":{"loc":{"start":{"line":137,"column":22},"end":{"line":137,"column":44}},"type":"binary-expr","locations":[{"start":{"line":137,"column":22},"end":{"line":137,"column":38}},{"start":{"line":137,"column":42},"end":{"line":137,"column":44}}],"line":137},"15":{"loc":{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},"type":"if","locations":[{"start":{"line":141,"column":10},"end":{"line":144,"column":11}},{"start":{"line":141,"column":10},"end":{"line":144,"column":11}}],"line":141},"16":{"loc":{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":156,"column":4},"end":{"line":158,"column":5}},{"start":{"line":156,"column":4},"end":{"line":158,"column":5}}],"line":156},"17":{"loc":{"start":{"line":156,"column":8},"end":{"line":156,"column":46}},"type":"binary-expr","locations":[{"start":{"line":156,"column":8},"end":{"line":156,"column":24}},{"start":{"line":156,"column":28},"end":{"line":156,"column":46}}],"line":156},"18":{"loc":{"start":{"line":162,"column":20},"end":{"line":162,"column":36}},"type":"cond-expr","locations":[{"start":{"line":162,"column":25},"end":{"line":162,"column":29}},{"start":{"line":162,"column":32},"end":{"line":162,"column":36}}],"line":162},"19":{"loc":{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},"type":"if","locations":[{"start":{"line":164,"column":4},"end":{"line":166,"column":5}},{"start":{"line":164,"column":4},"end":{"line":166,"column":5}}],"line":164},"20":{"loc":{"start":{"line":164,"column":8},"end":{"line":164,"column":43}},"type":"binary-expr","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":22}},{"start":{"line":164,"column":26},"end":{"line":164,"column":43}}],"line":164},"21":{"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":27}},{"start":{"line":176,"column":4},"end":{"line":176,"column":27}}],"line":176}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"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},"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},"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],"19":[0,0],"20":[0,0],"21":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"355a3020e2e9fc319f4a6880de50c59f5599a445","contentHash":"88a2be1043affe668a2d27e409f647ec_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/styles.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":12},"end":{"line":2,"column":35}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":26}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":17}},"4":{"start":{"line":7,"column":10},"end":{"line":7,"column":87}},"5":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"6":{"start":{"line":9,"column":0},"end":{"line":9,"column":66}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"8":{"start":{"line":12,"column":0},"end":{"line":17,"column":3}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":34}},"10":{"start":{"line":14,"column":2},"end":{"line":14,"column":88}},"11":{"start":{"line":15,"column":2},"end":{"line":15,"column":76}},"12":{"start":{"line":16,"column":2},"end":{"line":16,"column":17}},"13":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"14":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":27},"end":{"line":12,"column":28}},"loc":{"start":{"line":12,"column":41},"end":{"line":17,"column":1}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":63,"10":63,"11":63,"12":63,"13":1,"14":1},"f":{"0":63},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"df485024c76f0f4c5d151bd80cbf8612d28ac2ce","contentHash":"6e4c44c313664bd64af2e7dc9a080615_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/perms-to-string.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":22,"column":2}},"1":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"3":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"4":{"start":{"line":8,"column":13},"end":{"line":8,"column":34}},"5":{"start":{"line":10,"column":2},"end":{"line":21,"column":14}},"6":{"start":{"line":11,"column":4},"end":{"line":20,"column":23}}},"fnMap":{"0":{"name":"permsToString","decl":{"start":{"line":1,"column":26},"end":{"line":1,"column":39}},"loc":{"start":{"line":1,"column":46},"end":{"line":22,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":44},"end":{"line":10,"column":45}},"loc":{"start":{"line":10,"column":57},"end":{"line":21,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3},"1":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":37}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":23}},{"start":{"line":3,"column":27},"end":{"line":3,"column":37}}],"line":3},"2":{"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":42}},"type":"cond-expr","locations":[{"start":{"line":7,"column":33},"end":{"line":7,"column":36}},{"start":{"line":7,"column":39},"end":{"line":7,"column":42}}],"line":7}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ea25ddf6e4ceceb08a7b44b6bab6998bf3a7f90a","contentHash":"63ac0d0cdd4a285b8f0914f7a64a7347_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/size-to-string.js","statementMap":{"0":{"start":{"line":5,"column":0},"end":{"line":29,"column":2}},"1":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"2":{"start":{"line":7,"column":4},"end":{"line":7,"column":14}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"4":{"start":{"line":11,"column":14},"end":{"line":11,"column":23}},"5":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"6":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":23}},"8":{"start":{"line":18,"column":14},"end":{"line":18,"column":49}},"9":{"start":{"line":19,"column":10},"end":{"line":19,"column":12}},"10":{"start":{"line":20,"column":2},"end":{"line":23,"column":31}},"11":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"12":{"start":{"line":22,"column":6},"end":{"line":22,"column":10}},"13":{"start":{"line":25,"column":10},"end":{"line":25,"column":26}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"15":{"start":{"line":26,"column":16},"end":{"line":26,"column":25}},"16":{"start":{"line":28,"column":2},"end":{"line":28,"column":22}}},"fnMap":{"0":{"name":"sizeToString","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":38}},"loc":{"start":{"line":5,"column":64},"end":{"line":29,"column":1}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":8,"column":3}},{"start":{"line":6,"column":2},"end":{"line":8,"column":3}}],"line":6},"1":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":44}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":22}},{"start":{"line":6,"column":26},"end":{"line":6,"column":44}}],"line":6},"2":{"loc":{"start":{"line":12,"column":18},"end":{"line":12,"column":34}},"type":"cond-expr","locations":[{"start":{"line":12,"column":23},"end":{"line":12,"column":27}},{"start":{"line":12,"column":30},"end":{"line":12,"column":34}}],"line":12},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"4":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":41}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":20}},{"start":{"line":14,"column":24},"end":{"line":14,"column":41}}],"line":14},"5":{"loc":{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":26,"column":25}},{"start":{"line":26,"column":2},"end":{"line":26,"column":25}}],"line":26}},"s":{"0":1,"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},"f":{"0":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"a57c88092f0067a3ebc4a790487fdf23c9cdafa1","contentHash":"8c4942f5698a7fbff663a326c49a85dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/show-dir/sort-files.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":2,"column":11},"end":{"line":2,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":34,"column":2}},"3":{"start":{"line":8,"column":16},"end":{"line":8,"column":28}},"4":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},"5":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":16}},"7":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"8":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"9":{"start":{"line":17,"column":2},"end":{"line":33,"column":5}},"10":{"start":{"line":18,"column":4},"end":{"line":32,"column":7}},"11":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"12":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"13":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":29}},"15":{"start":{"line":26,"column":8},"end":{"line":26,"column":30}},"16":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}}},"fnMap":{"0":{"name":"sortByIsDirectory","decl":{"start":{"line":4,"column":26},"end":{"line":4,"column":43}},"loc":{"start":{"line":4,"column":60},"end":{"line":34,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":17}},"loc":{"start":{"line":17,"column":32},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":34},"end":{"line":18,"column":35}},"loc":{"start":{"line":18,"column":52},"end":{"line":32,"column":5}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},{"start":{"line":13,"column":2},"end":{"line":15,"column":3}}],"line":13},"1":{"loc":{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":19,"column":6},"end":{"line":27,"column":7}},{"start":{"line":19,"column":6},"end":{"line":27,"column":7}}],"line":19},"2":{"loc":{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},"type":"if","locations":[{"start":{"line":22,"column":11},"end":{"line":27,"column":7}},{"start":{"line":22,"column":11},"end":{"line":27,"column":7}}],"line":22},"3":{"loc":{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":31,"column":7}},{"start":{"line":29,"column":6},"end":{"line":31,"column":7}}],"line":29}},"s":{"0":1,"1":1,"2":1,"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},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ca863f1f9fbbcfb0d0da2de8407be337a0948ce0","contentHash":"5ed5dce651303d45dd090423a7925f0a_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/etag.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":84}},"2":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"3":{"start":{"line":4,"column":4},"end":{"line":4,"column":23}},"4":{"start":{"line":6,"column":2},"end":{"line":6,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":43},"end":{"line":7,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},{"start":{"line":3,"column":2},"end":{"line":5,"column":3}}],"line":3}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"36e7e0ec6717f929801e5ca1d7230a08162f666e","contentHash":"93c4879f982331774828666ac2666afb_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/status-handlers.js","statementMap":{"0":{"start":{"line":1,"column":9},"end":{"line":1,"column":22}},"1":{"start":{"line":4,"column":0},"end":{"line":7,"column":2}},"2":{"start":{"line":5,"column":2},"end":{"line":5,"column":23}},"3":{"start":{"line":6,"column":2},"end":{"line":6,"column":12}},"4":{"start":{"line":10,"column":0},"end":{"line":21,"column":2}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":11}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":50}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":31}},"11":{"start":{"line":24,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":23}},"13":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":11}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":64}},"16":{"start":{"line":31,"column":4},"end":{"line":31,"column":14}},"17":{"start":{"line":36,"column":0},"end":{"line":47,"column":2}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":23}},"19":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"20":{"start":{"line":39,"column":4},"end":{"line":39,"column":11}},"21":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"22":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"23":{"start":{"line":44,"column":6},"end":{"line":44,"column":36}},"24":{"start":{"line":49,"column":0},"end":{"line":60,"column":2}},"25":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"26":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"27":{"start":{"line":52,"column":4},"end":{"line":52,"column":11}},"28":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"29":{"start":{"line":56,"column":6},"end":{"line":56,"column":50}},"30":{"start":{"line":57,"column":6},"end":{"line":57,"column":49}},"31":{"start":{"line":63,"column":0},"end":{"line":82,"column":2}},"32":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":45}},"34":{"start":{"line":66,"column":14},"end":{"line":66,"column":76}},"35":{"start":{"line":67,"column":13},"end":{"line":80,"column":21}},"36":{"start":{"line":81,"column":2},"end":{"line":81,"column":16}},"37":{"start":{"line":85,"column":0},"end":{"line":104,"column":2}},"38":{"start":{"line":86,"column":2},"end":{"line":86,"column":23}},"39":{"start":{"line":87,"column":2},"end":{"line":87,"column":45}},"40":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"41":{"start":{"line":89,"column":13},"end":{"line":102,"column":21}},"42":{"start":{"line":103,"column":2},"end":{"line":103,"column":16}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":38},"end":{"line":7,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":17},"end":{"line":10,"column":18}},"loc":{"start":{"line":10,"column":38},"end":{"line":21,"column":1}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"loc":{"start":{"line":24,"column":44},"end":{"line":33,"column":1}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":17},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":38},"end":{"line":47,"column":1}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":49,"column":17},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":38},"end":{"line":60,"column":1}},"line":49},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":44},"end":{"line":82,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":85,"column":17},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":44},"end":{"line":104,"column":1}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":20,"column":3}},{"start":{"line":12,"column":2},"end":{"line":20,"column":3}}],"line":12},"1":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16},"2":{"loc":{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":26,"column":2},"end":{"line":32,"column":3}},{"start":{"line":26,"column":2},"end":{"line":32,"column":3}}],"line":26},"3":{"loc":{"start":{"line":30,"column":27},"end":{"line":30,"column":62}},"type":"binary-expr","locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":32}},{"start":{"line":30,"column":36},"end":{"line":30,"column":46}},{"start":{"line":30,"column":51},"end":{"line":30,"column":62}}],"line":30},"4":{"loc":{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":46,"column":3}},{"start":{"line":38,"column":2},"end":{"line":46,"column":3}}],"line":38},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":45,"column":5}},{"start":{"line":42,"column":4},"end":{"line":45,"column":5}}],"line":42},"6":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":3}},{"start":{"line":51,"column":2},"end":{"line":59,"column":3}}],"line":51},"7":{"loc":{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":58,"column":5}},{"start":{"line":55,"column":4},"end":{"line":58,"column":5}}],"line":55},"8":{"loc":{"start":{"line":66,"column":21},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":21},"end":{"line":66,"column":37}},{"start":{"line":66,"column":41},"end":{"line":66,"column":51}},{"start":{"line":66,"column":55},"end":{"line":66,"column":75}}],"line":66},"9":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":76}},"type":"cond-expr","locations":[{"start":{"line":88,"column":35},"end":{"line":88,"column":53}},{"start":{"line":88,"column":56},"end":{"line":88,"column":76}}],"line":88},"10":{"loc":{"start":{"line":88,"column":14},"end":{"line":88,"column":32}},"type":"binary-expr","locations":[{"start":{"line":88,"column":14},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":32}}],"line":88}},"s":{"0":1,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":0,"22":0,"23":0,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0],"4":[1,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"63f8e0d10354d5d2156d3d152ef8ca6ed694f916","contentHash":"2af3dffa2ef2c2bf9310b6ba6e85c0dd_11.0.2"},"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js":{"path":"/Users/josh/dev/jfhbrook/ecstatic/lib/ecstatic/opts.js","statementMap":{"0":{"start":{"line":3,"column":15},"end":{"line":3,"column":41}},"1":{"start":{"line":4,"column":14},"end":{"line":4,"column":39}},"2":{"start":{"line":6,"column":0},"end":{"line":180,"column":2}},"3":{"start":{"line":7,"column":18},"end":{"line":7,"column":36}},"4":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}},"5":{"start":{"line":9,"column":21},"end":{"line":9,"column":42}},"6":{"start":{"line":10,"column":22},"end":{"line":10,"column":44}},"7":{"start":{"line":11,"column":11},"end":{"line":11,"column":22}},"8":{"start":{"line":12,"column":14},"end":{"line":12,"column":28}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":26}},"10":{"start":{"line":14,"column":19},"end":{"line":14,"column":38}},"11":{"start":{"line":15,"column":20},"end":{"line":15,"column":40}},"12":{"start":{"line":16,"column":16},"end":{"line":16,"column":18}},"13":{"start":{"line":17,"column":21},"end":{"line":17,"column":42}},"14":{"start":{"line":18,"column":20},"end":{"line":18,"column":40}},"15":{"start":{"line":20,"column":18},"end":{"line":20,"column":36}},"16":{"start":{"line":21,"column":20},"end":{"line":21,"column":40}},"17":{"start":{"line":22,"column":28},"end":{"line":22,"column":56}},"18":{"start":{"line":25,"column":4},"end":{"line":25,"column":62}},"19":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"20":{"start":{"line":29,"column":4},"end":{"line":34,"column":7}},"21":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"22":{"start":{"line":31,"column":8},"end":{"line":31,"column":28}},"23":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"24":{"start":{"line":36,"column":4},"end":{"line":41,"column":7}},"25":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"26":{"start":{"line":38,"column":8},"end":{"line":38,"column":26}},"27":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"28":{"start":{"line":43,"column":4},"end":{"line":48,"column":7}},"29":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"30":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"31":{"start":{"line":46,"column":8},"end":{"line":46,"column":20}},"32":{"start":{"line":50,"column":4},"end":{"line":55,"column":7}},"33":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"34":{"start":{"line":52,"column":8},"end":{"line":52,"column":32}},"35":{"start":{"line":53,"column":8},"end":{"line":53,"column":20}},"36":{"start":{"line":57,"column":4},"end":{"line":62,"column":7}},"37":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"38":{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},"39":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"40":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"41":{"start":{"line":65,"column":6},"end":{"line":65,"column":35}},"42":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"43":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"44":{"start":{"line":70,"column":8},"end":{"line":70,"column":27}},"45":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"46":{"start":{"line":73,"column":8},"end":{"line":73,"column":40}},"47":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":76,"column":26}},"49":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"50":{"start":{"line":81,"column":6},"end":{"line":81,"column":23}},"51":{"start":{"line":84,"column":4},"end":{"line":89,"column":7}},"52":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":30}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":20}},"55":{"start":{"line":91,"column":4},"end":{"line":97,"column":7}},"56":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"57":{"start":{"line":93,"column":8},"end":{"line":93,"column":35}},"58":{"start":{"line":94,"column":8},"end":{"line":94,"column":53}},"59":{"start":{"line":95,"column":8},"end":{"line":95,"column":145}},"60":{"start":{"line":99,"column":4},"end":{"line":116,"column":7}},"61":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"62":{"start":{"line":100,"column":26},"end":{"line":100,"column":33}},"63":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":35}},"65":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"66":{"start":{"line":105,"column":8},"end":{"line":107,"column":11}},"67":{"start":{"line":106,"column":10},"end":{"line":106,"column":38}},"68":{"start":{"line":109,"column":11},"end":{"line":109,"column":30}},"69":{"start":{"line":112,"column":16},"end":{"line":112,"column":46}},"70":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"71":{"start":{"line":113,"column":16},"end":{"line":113,"column":35}},"72":{"start":{"line":114,"column":13},"end":{"line":114,"column":33}},"73":{"start":{"line":118,"column":4},"end":{"line":123,"column":7}},"74":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"75":{"start":{"line":120,"column":8},"end":{"line":120,"column":31}},"76":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"77":{"start":{"line":125,"column":4},"end":{"line":130,"column":7}},"78":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"79":{"start":{"line":127,"column":8},"end":{"line":127,"column":30}},"80":{"start":{"line":128,"column":8},"end":{"line":128,"column":20}},"81":{"start":{"line":132,"column":4},"end":{"line":137,"column":7}},"82":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"83":{"start":{"line":134,"column":8},"end":{"line":134,"column":28}},"84":{"start":{"line":135,"column":8},"end":{"line":135,"column":20}},"85":{"start":{"line":139,"column":4},"end":{"line":144,"column":7}},"86":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"87":{"start":{"line":141,"column":8},"end":{"line":141,"column":28}},"88":{"start":{"line":142,"column":8},"end":{"line":142,"column":20}},"89":{"start":{"line":146,"column":4},"end":{"line":151,"column":7}},"90":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"91":{"start":{"line":148,"column":8},"end":{"line":148,"column":30}},"92":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"93":{"start":{"line":153,"column":4},"end":{"line":158,"column":7}},"94":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"95":{"start":{"line":155,"column":8},"end":{"line":155,"column":61}},"96":{"start":{"line":156,"column":8},"end":{"line":156,"column":20}},"97":{"start":{"line":161,"column":2},"end":{"line":179,"column":4}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":18}},"loc":{"start":{"line":6,"column":33},"end":{"line":180,"column":1}},"line":6},"1":{"name":"isDeclared","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":21}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":27},"end":{"line":29,"column":28}},"loc":{"start":{"line":29,"column":40},"end":{"line":34,"column":5}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":25},"end":{"line":36,"column":26}},"loc":{"start":{"line":36,"column":38},"end":{"line":41,"column":5}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":30},"end":{"line":43,"column":31}},"loc":{"start":{"line":43,"column":43},"end":{"line":48,"column":5}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":31},"end":{"line":50,"column":32}},"loc":{"start":{"line":50,"column":44},"end":{"line":55,"column":5}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":20},"end":{"line":57,"column":21}},"loc":{"start":{"line":57,"column":33},"end":{"line":62,"column":5}},"line":57},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":29},"end":{"line":84,"column":30}},"loc":{"start":{"line":84,"column":42},"end":{"line":89,"column":5}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":5}},"line":91},"9":{"name":"(anonymous_9)","decl":{"start":{"line":99,"column":28},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":41},"end":{"line":116,"column":5}},"line":99},"10":{"name":"(anonymous_10)","decl":{"start":{"line":105,"column":37},"end":{"line":105,"column":38}},"loc":{"start":{"line":105,"column":52},"end":{"line":107,"column":9}},"line":105},"11":{"name":"setHeader","decl":{"start":{"line":111,"column":15},"end":{"line":111,"column":24}},"loc":{"start":{"line":111,"column":31},"end":{"line":115,"column":7}},"line":111},"12":{"name":"(anonymous_12)","decl":{"start":{"line":118,"column":30},"end":{"line":118,"column":31}},"loc":{"start":{"line":118,"column":43},"end":{"line":123,"column":5}},"line":118},"13":{"name":"(anonymous_13)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":42},"end":{"line":130,"column":5}},"line":125},"14":{"name":"(anonymous_14)","decl":{"start":{"line":132,"column":26},"end":{"line":132,"column":27}},"loc":{"start":{"line":132,"column":39},"end":{"line":137,"column":5}},"line":132},"15":{"name":"(anonymous_15)","decl":{"start":{"line":139,"column":27},"end":{"line":139,"column":28}},"loc":{"start":{"line":139,"column":40},"end":{"line":144,"column":5}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":146,"column":29},"end":{"line":146,"column":30}},"loc":{"start":{"line":146,"column":42},"end":{"line":151,"column":5}},"line":146},"17":{"name":"(anonymous_17)","decl":{"start":{"line":153,"column":37},"end":{"line":153,"column":38}},"loc":{"start":{"line":153,"column":50},"end":{"line":158,"column":5}},"line":153}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":11},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":11},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":159,"column":3}},{"start":{"line":28,"column":2},"end":{"line":159,"column":3}}],"line":28},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":33,"column":7}},{"start":{"line":30,"column":6},"end":{"line":33,"column":7}}],"line":30},"3":{"loc":{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":40,"column":7}},{"start":{"line":37,"column":6},"end":{"line":40,"column":7}}],"line":37},"4":{"loc":{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":47,"column":7}},{"start":{"line":44,"column":6},"end":{"line":47,"column":7}}],"line":44},"5":{"loc":{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":54,"column":7}},{"start":{"line":51,"column":6},"end":{"line":54,"column":7}}],"line":51},"6":{"loc":{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":58,"column":6},"end":{"line":61,"column":7}},{"start":{"line":58,"column":6},"end":{"line":61,"column":7}}],"line":58},"7":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"8":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":62}},"type":"binary-expr","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":23}},{"start":{"line":64,"column":27},"end":{"line":64,"column":62}}],"line":64},"9":{"loc":{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":78,"column":5}},{"start":{"line":68,"column":4},"end":{"line":78,"column":5}}],"line":68},"10":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":64}},"type":"binary-expr","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":41}},{"start":{"line":68,"column":45},"end":{"line":68,"column":64}}],"line":68},"11":{"loc":{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":77,"column":7}},{"start":{"line":69,"column":6},"end":{"line":77,"column":7}}],"line":69},"12":{"loc":{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":72,"column":11},"end":{"line":77,"column":7}},{"start":{"line":72,"column":11},"end":{"line":77,"column":7}}],"line":72},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":77,"column":7}},{"start":{"line":75,"column":11},"end":{"line":77,"column":7}}],"line":75},"14":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":5}},{"start":{"line":80,"column":4},"end":{"line":82,"column":5}}],"line":80},"15":{"loc":{"start":{"line":80,"column":8},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":8},"end":{"line":80,"column":40}},{"start":{"line":80,"column":44},"end":{"line":80,"column":62}}],"line":80},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":88,"column":7}},{"start":{"line":85,"column":6},"end":{"line":88,"column":7}}],"line":85},"17":{"loc":{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":6},"end":{"line":96,"column":7}},{"start":{"line":92,"column":6},"end":{"line":96,"column":7}}],"line":92},"18":{"loc":{"start":{"line":92,"column":10},"end":{"line":92,"column":28}},"type":"binary-expr","locations":[{"start":{"line":92,"column":10},"end":{"line":92,"column":23}},{"start":{"line":92,"column":27},"end":{"line":92,"column":28}}],"line":92},"19":{"loc":{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":33}},{"start":{"line":100,"column":6},"end":{"line":100,"column":33}}],"line":100},"20":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":101,"column":6},"end":{"line":109,"column":30}},{"start":{"line":101,"column":6},"end":{"line":109,"column":30}}],"line":101},"21":{"loc":{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},"type":"if","locations":[{"start":{"line":104,"column":11},"end":{"line":109,"column":30}},{"start":{"line":104,"column":11},"end":{"line":109,"column":30}}],"line":104},"22":{"loc":{"start":{"line":104,"column":15},"end":{"line":104,"column":53}},"type":"binary-expr","locations":[{"start":{"line":104,"column":15},"end":{"line":104,"column":22}},{"start":{"line":104,"column":26},"end":{"line":104,"column":53}}],"line":104},"23":{"loc":{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":114,"column":33}},{"start":{"line":113,"column":8},"end":{"line":114,"column":33}}],"line":113},"24":{"loc":{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":122,"column":7}},{"start":{"line":119,"column":6},"end":{"line":122,"column":7}}],"line":119},"25":{"loc":{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":129,"column":7}},{"start":{"line":126,"column":6},"end":{"line":129,"column":7}}],"line":126},"26":{"loc":{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},"type":"if","locations":[{"start":{"line":133,"column":6},"end":{"line":136,"column":7}},{"start":{"line":133,"column":6},"end":{"line":136,"column":7}}],"line":133},"27":{"loc":{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":143,"column":7}},{"start":{"line":140,"column":6},"end":{"line":143,"column":7}}],"line":140},"28":{"loc":{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":150,"column":7}},{"start":{"line":147,"column":6},"end":{"line":150,"column":7}}],"line":147},"29":{"loc":{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":157,"column":7}},{"start":{"line":154,"column":6},"end":{"line":157,"column":7}}],"line":154},"30":{"loc":{"start":{"line":155,"column":30},"end":{"line":155,"column":60}},"type":"binary-expr","locations":[{"start":{"line":155,"column":30},"end":{"line":155,"column":49}},{"start":{"line":155,"column":53},"end":{"line":155,"column":60}}],"line":155},"31":{"loc":{"start":{"line":169,"column":13},"end":{"line":169,"column":42}},"type":"binary-expr","locations":[{"start":{"line":169,"column":14},"end":{"line":169,"column":18}},{"start":{"line":169,"column":22},"end":{"line":169,"column":34}},{"start":{"line":169,"column":39},"end":{"line":169,"column":42}}],"line":169}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":39,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":2,"30":0,"31":0,"32":1,"33":3,"34":0,"35":0,"36":1,"37":2,"38":0,"39":0,"40":1,"41":0,"42":1,"43":1,"44":1,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"57":0,"58":0,"59":0,"60":1,"61":3,"62":3,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":1,"74":3,"75":0,"76":0,"77":1,"78":3,"79":0,"80":0,"81":1,"82":8,"83":0,"84":0,"85":1,"86":3,"87":0,"88":0,"89":1,"90":4,"91":0,"92":0,"93":1,"94":3,"95":0,"96":0,"97":1},"f":{"0":1,"1":39,"2":1,"3":1,"4":2,"5":3,"6":2,"7":1,"8":2,"9":3,"10":0,"11":0,"12":3,"13":3,"14":8,"15":3,"16":4,"17":3},"b":{"0":[39,3],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,2],"5":[0,3],"6":[0,2],"7":[0,1],"8":[1,0],"9":[1,0],"10":[1,1],"11":[1,0],"12":[0,0],"13":[0,0],"14":[1,0],"15":[1,1],"16":[1,0],"17":[0,2],"18":[2,0],"19":[3,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,3],"25":[0,3],"26":[0,8],"27":[0,3],"28":[0,4],"29":[0,3],"30":[0,0],"31":[1,1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"47b4d8688673d5a837e3c95c8d22d2645453ca55","contentHash":"540a4c5abe5605e10317302006a5c072_11.0.2"}} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/e4bc2f05dd42972945ce4bbe8df848f6.json b/node_modules/ecstatic/.nyc_output/e4bc2f05dd42972945ce4bbe8df848f6.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/e4bc2f05dd42972945ce4bbe8df848f6.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/node_modules/ecstatic/.nyc_output/ef3194cd8a43a90bd63564bd70f59d3c.json b/node_modules/ecstatic/.nyc_output/ef3194cd8a43a90bd63564bd70f59d3c.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/node_modules/ecstatic/.nyc_output/ef3194cd8a43a90bd63564bd70f59d3c.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/node_modules/ecstatic/.travis.yml b/node_modules/ecstatic/.travis.yml new file mode 100644 index 000000000..6a314faf4 --- /dev/null +++ b/node_modules/ecstatic/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +sudo: false +node_js: + - 0.12 + - 4 + - 5 + - 6 diff --git a/node_modules/ecstatic/CHANGELOG.md b/node_modules/ecstatic/CHANGELOG.md new file mode 100644 index 000000000..7fae7e6e6 --- /dev/null +++ b/node_modules/ecstatic/CHANGELOG.md @@ -0,0 +1,111 @@ +2017/06/06 Version 2.2.1 +- Fix version number in CHANGELOG.md + +2017/06/06 Version 2.2.0 +- Will now properly serve gzip files when defaulting the extension +- Will fall back to serving non-gzip files if file with .gz extension is + missing the magic bytes +- Updated he, url-join +- Updated devDependencies +- Added .npmrc +- Added package-lock.json +- Much improved documentation for the cli component + +2016/08/10 Version 2.1.0 +- New, prettier showDir pages with icons! + +2016/08/09 Version 2.0.0 +- No longer strip null bytes from uris before parsing. This avoids a regexp dos + attack. The stripping was to avoid a bug regarding c++ null terminated + strings shenanigans in some versions of node, but it *appears* fixed in LTS + versions of node. +- When both showDir and autoIndex are turned off, do not redirect from /foo to + /foo/. +- Add code coverage reports and codecov.io + +2015/05/10 Version 1.4.1 +- Compare if-modified-since header against server-generated last-modified + header rather than raw mtime + +2015/12/22 Version 1.4.0 +- Add ability to specify custom mimetypes via a JSON blob (on the CLI) +- Started test suite around CLI options parsing +- Workaround for egregious v8 bug around date parsing throwing during + modified-since checks + +2015/11/15 Version 1.3.1 +- Add recent contributors to CONTRIBUTORS.md +- Document showDotFiles in main options example + +2015/11/14 Version 1.3.0 +- opts.showDotFiles allows hiding dot files + +2015/11/03 Version 1.2.0 +- opts.cache supports function argument + +2015/10/03 Version 1.1.3 +- Add CORS=false to defaults + +2015/10/02 Version 1.1.2 +- Properly handle defaults in CLI args + +2015/10/02 Version 1.1.1 +- Properly handle boolean CLI args + +2015/10/01 Version 1.1.0 +- Adds support for responding to OPTIONS headers +- Adds support for setting custom headers +- Adds cors convenience setting + +2015/09/22 Version 1.0.1 +- Use encodeURIComponent when creating links in showdir + +2015/09/14 Version 1.0.0 +- Optional support for weak Etags and weak Etag *comparison*, useful for cases + where one is running ecstatic with gzip behind an nginx proxy (these will + likely be turned ON by default in a following major version) +- As a bin, respects process.env.PORT when binding to a port +- Directory listings encode pathnames, etc +- Default status pages return html instead of text/plain +- Contributors are listed in CONTRIBUTORS.md, referenced by LICENSE.txt + +2015/05/22 Version 0.8.0 +- Add ability to define custom mime-types, inline or with Apache .types file +- Test against express ^4.12.3 and union ^0.4.4 +- Run tests with tap ^1.0.3 +- Fix newline asserts to work with windows +- Add license attribute to package.json +- Elaborate contribution guidelines + +2015/05/09 Version 0.7.6 +- Fix double encoding in directory listings + +2015/05/07 Version 0.7.5 +- Fix HTML reflection vulnerability in certain error handlers + +2015/04/17 Version 0.7.4 +- Fix sort ordering in directory listings + +2015/04/13 Version 0.7.3 +- Close fstream if/when res closes, fixes potential fd leak + +2015/04/05 Version 0.7.2 +- Correctly handle req.statusCode in recursive calls; do not inherit upstream res.statusCode + +2015/03/27 Version 0.7.1 +- Treat ENOTDIR as 404 (same as ENOENT) + +2015/03/18 Version 0.7.0 +- Add support for specifying default content-type (as an alternative to application/octet-stream) +- Use url-join for autoIndex route, fixes windows problems + +2015/03/01 Version 0.6.1 +- Fix handleError fall-through with directory listings + +2015/02/16 Version 0.6.0 +- Fix for pathname decoding in windows +- Fix for hrefs in directory listings +- Add ability to turn off setting of Server header +- Remove extraneous call to res.end (handled by stream pipe) +- Remove tests from npm package due to jenkins bug +- Start a ChangeLog.md diff --git a/node_modules/ecstatic/CONTRIBUTING.md b/node_modules/ecstatic/CONTRIBUTING.md new file mode 100644 index 000000000..8a388e7cb --- /dev/null +++ b/node_modules/ecstatic/CONTRIBUTING.md @@ -0,0 +1,86 @@ +# Contributing Guidelines + +## Code of Conduct + +This is probably way overkill, but this is by far my most active project in +terms of contributions, and somewhere along the way I was convinced that it +was a good idea to have this in place sooner rather than later: + +I want to provide a safe, healthy environment for all contributors/participants +regardless of gender, sexual orientation, disability, race, religion, etc. +As such, I don't tolerate harassment of participants in any form. In particular +this applies to my issues tracker, but also to any other means of communication +associated with this project that might come up. Anyone who violates these +basic rules may be sanctioned/banned/have-their-comments-deleted/etc by my +discretion. + +Glad we cleared that up. + +## Branching + +Before working on your fix/feature/whatever, you should create a new branch to +work on. Do something like: + +```sh +$ git checkout -b 'my-sweet-new-pull-request' +``` + +## Please Please Please Start With A Test + +ecstatic has some pretty gnarly branching/logic underneath. Tests are extremely +important because they (a) prove that your feature/fix works, and (b) avoid +regressions in the future. Even if your patch is problematic enough to not be +merged, a test will still be very helpful for confirming any future fix. + +I won't reject your patch outright if it's missing new tests, but it sure +helps! + +## Code Style + +Ecstatic's code base follows a relatively consistent style. The closer your +patch blends in with the status quo, the better. + +A few PROTIPS off the top of my head: + +1. Variables don't need to all be declared at the top, BUT variable *blocks* +should do the whole one-var, tons-of-commas thing. +2. Look at how spacing is done around conditionals and functions. Do it like +that. +3. `else`'s and similar should be on the line *after* the preceding bracket. + +We can refine this as the need arises. + +## A Few Other Minor Guidelines + +1. Keep your pull requests on-topic. A pull request purporting to tackle A +shouldn't also have commits changing B and C. Feel free to make separate pull +requests. For instance: A pull request should generally only update +dependencies when doing so is required to add the feature or fix the bug. This +feature can, of course, consist of updating dependencies. +2. I prefer maintaining the changelog and package.json version myself. This is +because I try to make a single commit for a tagged release contain all +changelog additions and the version bump, and this breaks down when there are +interstitial commits making updates to either. +3. In case you were wondering about dependencies, you may find this helpful: +[![dependencies status](https://david-dm.org/jfhbrook/node-ecstatic.svg)](https://david-dm.org/jfhbrook/node-ecstatic) +4. Please add yourself to CONTRIBUTORS.md if you haven't done so! Fill in as +much as makes you comfortable. + +## Pull Request + +Make a pull request against master with your new branch. Explain briefly what +the patch does to the code, along with any concerns. + +(If you don't have a description, it's hard for me to put the changes in +context. That makes it more difficult for me to merge!) + +## Keep It Moving + +I don't always notice new PRs, and sometimes I will forget to follow up on +them. If this happens to you, you can bump the PR thread or find me on +IRC or twitter. + +## LAST RULE + +HAVE FUN :v :v + diff --git a/node_modules/ecstatic/CONTRIBUTORS.md b/node_modules/ecstatic/CONTRIBUTORS.md new file mode 100644 index 000000000..a1f3c33fa --- /dev/null +++ b/node_modules/ecstatic/CONTRIBUTORS.md @@ -0,0 +1,62 @@ +General format is: contributor, github handle, email. In some cases, the +contributor field is an organization instead of an actual person---this is for +cases where the work was done on behalf of the organization, ie as part of +their job. In others, no contributor field and/or email is shown---this is +because this list was partially (mostly) reconstructed from github commit +information and the person's real life name and email are unknown. + +Listed in no particular order: + +* Joshua Holbrook @jfhbrook +* Jon Ege Ronnenberg @dotnetCarpenter +* James Halliday @substack +* Jonah Ruiz @jonahoffline +* Jacob Burden @jekrb +* @leesei +* @SirAnthony +* Frank Mecklenburg @yfr +* @curimit +* Dominic Tarr @dominictarr +* Chew Choon Keat @choonkeat +* Lars Kappert @webpro +* Alan Reyes @KuttKatrea +* Colin Fallon @colinf +* Charlie Robbins @indexzero +* Ville Salonen @VilleSalonen +* Tom Steele @tomsteele +* Maciej Małecki @mmalecki +* Chris Bannister @Zariel +* Shinnosuke Watanabe @shinnn +* Adam Brady @SomeoneWeird +* Christian Howe @coderarity +* Arnaud @amelon +* Gilad Peleg @pgilad +* Brad Dunbar @braddunbar +* Google Inc. via Jeremy Banks @jre-g +* @sundippatel +* Arjan van Wijk @ThaNarie +* Mathias Buus @mafintosh +* Farrin Reid @blakmatrix +* Tõnis Tiigi @tonistiigi +* Maksim Lin @maks +* Jan Nicklas @jantimon +* David Cox @losttime +* Bill Ticehurst @billti +* Vincent Voyer @vvo +* @helloyou2012 +* Domenic Denicola @domenic +* Maxim Ivanov @redbaron +* Oliver Joseph Ash @OliverJAsh +* Benjamin Tan @d10 +* D Scott Boyce @scobo +* Zach Bruggerman @remixz +* Mathias Bynens @mathiasbynens +* Chris Lee @clee +* Josh Duff @TehShrike +* Cam Wiegert @camwiegert +* Josh Gillies @joshgillies +* Jesse Tane @jessetane +* Simon Sturmer @sstur +* Drew Harwell @fenwick67 +* Vamsi Krishna Avula @avamsi +* @wood1986 diff --git a/node_modules/ecstatic/LICENSE.txt b/node_modules/ecstatic/LICENSE.txt new file mode 100644 index 000000000..443ea12cc --- /dev/null +++ b/node_modules/ecstatic/LICENSE.txt @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2013-2015 Joshua Holbrook 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/node_modules/ecstatic/README.md b/node_modules/ecstatic/README.md new file mode 100644 index 000000000..0e5fd850f --- /dev/null +++ b/node_modules/ecstatic/README.md @@ -0,0 +1,262 @@ +# Ecstatic [![build status](https://secure.travis-ci.org/jfhbrook/node-ecstatic.png)](http://travis-ci.org/jfhbrook/node-ecstatic) [![codecov.io](https://codecov.io/github/jfhbrook/node-ecstatic/coverage.svg?branch=master)](https://codecov.io/github/jfhbrook/node-ecstatic?branch=master) + +![](http://imgur.com/vhub5.png) + +A simple static file server middleware. Use it with a raw http server, +express/connect or on the CLI! + +# Examples: + +## express 4.x + +``` js +var http = require('http'); +var express = require('express'); +var ecstatic = require('ecstatic'); + +var app = express(); +app.use(ecstatic({ root: __dirname + '/public' })); +http.createServer(app).listen(8080); + +console.log('Listening on :8080'); +``` + +## stock http server + +``` js +var http = require('http'); +var ecstatic = require('ecstatic'); + +http.createServer( + ecstatic({ root: __dirname + '/public' }) +).listen(8080); + +console.log('Listening on :8080'); +``` + +### fall through +To allow fall through to your custom routes: + +```js +ecstatic({ root: __dirname + '/public', handleError: false }) +``` + +## CLI + +```sh +ecstatic ./public --port 8080 +``` + +# Install: + +For using ecstatic as a library, just npm install it into your project: + +```sh +npm install --save ecstatic +``` + +For using ecstatic as a cli tool, either npm install it globally: + +```sh +npm install ecstatic -g +``` + +or install it locally and use npm runscripts to add it to your $PATH, or +reference it directly with `./node_modules/.bin/ecstatic`. + + +# API: + +## ecstatic(opts); +## $ ecstatic [dir?] {options} --port PORT + +In node, pass ecstatic an options hash, and it will return your middleware! + +```js +var opts = { + root : __dirname + '/public', + port : 8000, + baseDir : '/', + cache : 3600, + showDir : true, + showDotfiles : true, + autoIndex : false, + humanReadable : true, + headers : {}, + si : false, + defaultExt : 'html', + gzip : false, + serverHeader : true, + contentType : 'application/octet-stream', + mimeTypes : undefined, + handleOptionsMethod: false + } +``` + +If `opts` is a string, the string is assigned to the root folder and all other +options are set to their defaults. + +When running in CLI mode, all options work as above, passed in +[optimist](https://github.com/substack/node-optimist) style. `port` defaults to +`8000`. If a `dir` or `--root dir` argument is not passed, ecsatic will +serve the current dir. Ecstatic also respects the PORT environment variable. + +### `opts.root` +### `--root {root}` + +`opts.root` is the directory you want to serve up. + +### `opts.port` +### `--port {port}` + +In CLI mode, `opts.port` is the port you want ecstatic to listen to. Defaults +to 8000. This can be overridden with the `--port` flag or with the PORT +environment variable. + +### `opts.baseDir` +### `--baseDir {dir}` + +`opts.baseDir` is `/` by default, but can be changed to allow your static files +to be served off a specific route. For example, if `opts.baseDir === "blog"` +and `opts.root = "./public"`, requests for `localhost:8080/blog/index.html` will +resolve to `./public/index.html`. + +### `opts.cache` +### `--cache {value}` + +Customize cache control with `opts.cache` , if it is a number then it will set max-age in seconds. +Other wise it will pass through directly to cache-control. Time defaults to 3600 s (ie, 1 hour). + +If it is a function, it will be executed on every request, and passed the pathname. Whatever it returns, string or number, will be used as the cache control header like above. + +### `opts.showDir` +### `--no-showDir` + +Turn **off** directory listings with `opts.showDir === false`. Defaults to **true**. + +### `opts.showDotfiles` +### `--no-showDotfiles` + +Exclude dotfiles from directory listings with `opts.showDotfiles === false`. Defaults to **true**. + +### `opts.humanReadable` +### `--no-human-readable` + +If showDir is enabled, add human-readable file sizes. Defaults to **true**. +Aliases are `humanreadable` and `human-readable`. + +### `opts.headers` +### `--H {HeaderA: valA} [--H {HeaderB: valB}]` + +Set headers on every response. `opts.headers` can be an object mapping string +header names to string header values, a colon (:) separated string, or an array +of colon separated strings. + +`opts.H` and `opts.header` are aliased to `opts.headers` so that you can use +`-H` and `--header` options to set headers on the command-line like curl: + +``` sh +$ ecstatic ./public -p 5000 -H 'Access-Control-Allow-Origin: *' +``` + +### `opts.si` +### `--si` + +If showDir and humanReadable are enabled, print file sizes with base 1000 instead +of base 1024. Name is inferred from cli options for `ls`. Aliased to `index`, the +equivalent option in Apache. + +### `opts.autoIndex` +### `--no-autoindex` + +Serve `/path/index.html` when `/path/` is requested. +Turn **off** autoIndexing with `opts.autoIndex === false`. Defaults to **true**. + +### `opts.defaultExt` +### `--defaultExt {ext}` + +Turn on default file extensions with `opts.defaultExt`. If `opts.defaultExt` is +true, it will default to `html`. For example if you want a request to `/a-file` +to resolve to `./public/a-file.html`, set this to `true`. If you want +`/a-file` to resolve to `./public/a-file.json` instead, set `opts.defaultExt` to +`json`. + +### `opts.gzip` +### `--gzip` + +Set `opts.gzip === true` in order to turn on "gzip mode," wherein ecstatic will +serve `./public/some-file.js.gz` in place of `./public/some-file.js` when the +gzipped version exists and ecstatic determines that the behavior is appropriate. + +### `opts.serverHeader` +### `--no-server-header` + +Set `opts.serverHeader` to false in order to turn off setting the `Server` header +on all responses served by ecstatic. + +### `opts.contentType` +### `--content-type {type}` + +Set `opts.contentType` in order to change default Content-Type header value. +Defaults to **application/octet-stream**. + +### `opts.mimeTypes` +### `--mime-types {filename}` + +Add new or override one or more mime-types. This affects the HTTP Content-Type header. +Can either be a path to a [`.types`](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) file or an object hash of type(s). + + ecstatic({ mimeType: { 'mime-type': ['file_extension', 'file_extension'] } }) + +### `opts.handleError` + +Turn **off** handleErrors to allow fall-through with `opts.handleError === false`, Defaults to **true**. + +### `opts.weakEtags` +### `--weak-etags` + +Set `opts.weakEtags` to true in order to generate weak etags instead of strong etags. Defaults to **false**. See `opts.weakCompare` as well. + +### `opts.weakCompare` +### `--weak-compare` + +Turn **on** weakCompare to allow the weak comparison function for etag validation. Defaults to **false**. +See https://www.ietf.org/rfc/rfc2616.txt Section 13.3.3 for more details. + +### `opts.handleOptionsMethod` +### `--handle-options-method` + +Set handleOptionsMethod to true in order to respond to 'OPTIONS' calls with any standard/set headers. Defaults to **false**. Useful for hacking up CORS support. + +### `opts.cors` +### `--cors` + +This is a **convenience** setting which turns on `handleOptionsMethod` and sets the headers **Access-Control-Allow-Origin: \*** and **Access-Control-Allow-Headers: Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since**. This *should* be enough to quickly make cross-origin resource sharing work between development APIs. More advanced usage can come either from overriding these headers with the headers argument, or by using the `handleOptionsMethod` flag and then setting headers "manually." Alternately, just do it in your app using separate middlewares/abstractions. + +Defaults to **false**. + +## middleware(req, res, next); + +This works more or less as you'd expect. + +### ecstatic.showDir(folder); + +This returns another middleware which will attempt to show a directory view. Turning on auto-indexing is roughly equivalent to adding this middleware after an ecstatic middleware with autoindexing disabled. + +# Tests: + +Ecstatic has a fairly extensive test suite. You can run it with: + +```sh +$ npm test +``` + +# Contribute: + +Without outside contributions, ecstatic would wither and die! Before +contributing, take a quick look at the contributing guidelines in +[./CONTRIBUTING.md](./CONTRIBUTING.md) . They're relatively painless, I promise. + +# License: + +MIT. See LICENSE.txt. For contributors, see CONTRIBUTORS.md diff --git a/node_modules/ecstatic/coverage/lcov-report/base.css b/node_modules/ecstatic/coverage/lcov-report/base.css new file mode 100644 index 000000000..0c0571dad --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/base.css @@ -0,0 +1,212 @@ +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/node_modules/ecstatic/coverage/lcov-report/index.html b/node_modules/ecstatic/coverage/lcov-report/index.html new file mode 100644 index 000000000..63ea24be4 --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for All files + + + + + + + +
+
+

+ / +

+
+
+ 88.03% + Statements + 331/376 +
+
+ 80.14% + Branches + 234/292 +
+
+ 87.1% + Functions + 54/62 +
+
+ 88.62% + Lines + 327/369 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
lib/
88.13%141/16084.35%124/14783.33%15/1888.05%140/159
lib/ecstatic/
87.96%190/21675.86%110/14588.64%39/4489.05%187/210
+
+
+ + + + + + + diff --git a/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic.js.html b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic.js.html new file mode 100644 index 000000000..533d4452f --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic.js.html @@ -0,0 +1,1223 @@ + + + + Code coverage report for lib/ecstatic.js + + + + + + + +
+
+

+ all files / lib/ ecstatic.js +

+
+
+ 88.13% + Statements + 141/160 +
+
+ 84.35% + Branches + 124/147 +
+
+ 83.33% + Functions + 15/18 +
+
+ 88.05% + Lines + 140/159 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387  +  +35× +  +  +  +  +  +  +  +  +  +  +  +  +35× +50× +26× +26× +  +  +50× +  +  +  +  +  +  +  +  +  +  +  +50× +50× +  +  +50× + +  + +  + + +  + + +  +  +  +  +49× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +163× +163× +163× +161× +  +  + +  +  +161× +  +  +  +  +  +  +  +  +  +161× +  +159× +  +161× +73× +  +  +161× +  +  +  +  +  +161× +  +  +  +161× +  +  +  +35× +159× +159× +44× +  +  +12× +  +32× +  +  +14× +  +  +  +  +  +18× +  +  +  +  +  +115× +  +  +115× +45× + + +  +  +  +44× +18× +18× +  +  +18× +  +  +26× +22× +  +  + +  +  + + +  +  +  +  +  +  + + +  +  +  +  +70× +  +  +  +  +  +161× + + + + +  +  +  +  +  +159× +  +  +35× +  +  +72× +  +  +  +72× +72× +72× +72× +  +  +  +72× + +  +  + +  +  +72× +72× + + + + + + + + + +  + + +  +  + +  +  + +  +  +  +  +  + + +  +  +  +67× +  +67× +67× +  +67× + + + +  + +  +63× +  +  +  +67× + +  +  +62× +62× +  +  +  +  +62× +  +62× +  +  +  +62× +  +62× +62× +  +  +  +  +35× +67× +24× +  +  +43× +  +  +43× +  +36× +  +  + +  +  + + +  + +  + +  +  +  + +  +  +  +  + +  +  + +  +  + + +  +  +  + +  +  +  +  +35× +35× +  +  +35× +84× +  +84× +  +  +  + +  +  +  +  +  +35× +161× +  +161× +455× +  +455× +  +  +  +455× +  +  +  +35× +10× +10× +  +  +  +  +150× +  +  +  +  +  +  +10× +  +  +  +  +  +  +10× +  +10× +  +  + 
#! /usr/bin/env node
+ 
+var path = require('path'),
+    fs = require('fs'),
+    url = require('url'),
+    mime = require('mime'),
+    urlJoin = require('url-join'),
+    showDir = require('./ecstatic/showdir'),
+    version = JSON.parse(
+      fs.readFileSync(__dirname + '/../package.json').toString()
+    ).version,
+    status = require('./ecstatic/status-handlers'),
+    generateEtag = require('./ecstatic/etag'),
+    optsParser = require('./ecstatic/opts');
+ 
+var ecstatic = module.exports = function (dir, options) {
+  if (typeof dir !== 'string') {
+    options = dir;
+    dir = options.root;
+  }
+ 
+  var root = path.join(path.resolve(dir), '/'),
+      opts = optsParser(options),
+      cache = opts.cache,
+      autoIndex = opts.autoIndex,
+      baseDir = opts.baseDir,
+      defaultExt = opts.defaultExt,
+      handleError = opts.handleError,
+      headers = opts.headers,
+      serverHeader = opts.serverHeader,
+      weakEtags = opts.weakEtags,
+      handleOptionsMethod = opts.handleOptionsMethod;
+ 
+  opts.root = dir;
+  if (defaultExt && /^\./.test(defaultExt)) defaultExt = defaultExt.replace(/^\./, '');
+ 
+  // Support hashes and .types files in mimeTypes @since 0.8
+  if (opts.mimeTypes) {
+    try {
+      // You can pass a JSON blob here---useful for CLI use
+      opts.mimeTypes = JSON.parse(opts.mimeTypes);
+    } catch (e) {}
+    if (typeof opts.mimeTypes === 'string') {
+      mime.load(opts.mimeTypes);
+    }
+    else Eif (typeof opts.mimeTypes === 'object') {
+      mime.define(opts.mimeTypes);
+    }
+  }
+ 
+ 
+  return function middleware (req, res, next) {
+ 
+    // Strip any null bytes from the url
+    // This was at one point necessary because of an old bug in url.parse
+    //
+    // See: https://github.com/jfhbrook/node-ecstatic/issues/16#issuecomment-3039914
+    // See: https://github.com/jfhbrook/node-ecstatic/commit/43f7e72a31524f88f47e367c3cc3af710e67c9f4
+    //
+    // But this opens up a regex dos attack vector! D:
+    //
+    // Based on some research (ie asking #node-dev if this is still an issue),
+    // it's *probably* not an issue. :)
+    /*
+    while(req.url.indexOf('%00') !== -1) {
+      req.url = req.url.replace(/\%00/g, '');
+    }
+    */
+ 
+    // Figure out the path for the file from the given url
+    var parsed = url.parse(req.url);
+    try {
+      decodeURIComponent(req.url); // check validity of url
+      var pathname = decodePathname(parsed.pathname);
+    }
+    catch (err) {
+      return status[400](res, next, { error: err });
+    }
+ 
+    var file = path.normalize(
+          path.join(root,
+            path.relative(
+              path.join('/', baseDir),
+              pathname
+            )
+          )
+        ),
+        gzipped = file + '.gz';
+ 
+    if(serverHeader !== false) {
+      // Set common headers.
+      res.setHeader('server', 'ecstatic-'+version);
+    }
+    Object.keys(headers).forEach(function (key) {
+      res.setHeader(key, headers[key])
+    })
+ 
+    Iif (req.method === 'OPTIONS' && handleOptionsMethod) {
+      return res.end();
+    }
+ 
+    // TODO: This check is broken, which causes the 403 on the
+    // expected 404.
+    Iif (file.slice(0, root.length) !== root) {
+      return status[403](res, next);
+    }
+ 
+    Iif (req.method && (req.method !== 'GET' && req.method !== 'HEAD' )) {
+      return status[405](res, next);
+    }
+ 
+    function statFile() {
+      fs.stat(file, function (err, stat) {
+        if (err && (err.code === 'ENOENT' || err.code === 'ENOTDIR')) {
+          if (req.statusCode == 404) {
+            // This means we're already trying ./404.html and can not find it.
+            // So send plain text response with 404 status code
+            status[404](res, next);
+          }
+          else if (!path.extname(parsed.pathname).length && defaultExt) {
+            // If there is no file extension in the path and we have a default
+            // extension try filename and default extension combination before rendering 404.html.
+            middleware({
+              url: parsed.pathname + '.' + defaultExt + ((parsed.search)? parsed.search:'')
+            }, res, next);
+          }
+          else {
+            // Try to serve default ./404.html
+            middleware({
+              url: (handleError ? ('/' + path.join(baseDir, '404.' + defaultExt)) : req.url),
+              statusCode: 404
+            }, res, next);
+          }
+        }
+        else Iif (err) {
+          status[500](res, next, { error: err });
+        }
+        else if (stat.isDirectory()) {
+          if (!autoIndex && !opts.showDir) {
+            status[404](res, next);
+            return;
+          }
+ 
+          // 302 to / if necessary
+          if (!parsed.pathname.match(/\/$/)) {
+            res.statusCode = 302;
+            res.setHeader('location', parsed.pathname + '/' +
+              (parsed.query? ('?' + parsed.query):'')
+            );
+            return res.end();
+          }
+ 
+          if (autoIndex) {
+            return middleware({
+              url: urlJoin(encodeURIComponent(pathname), '/index.' + defaultExt)
+            }, res, function (err) {
+              Iif (err) {
+                return status[500](res, next, { error: err });
+              }
+              Eif (opts.showDir) {
+                return showDir(opts, stat)(req, res);
+              }
+ 
+              return status[403](res, next);
+            });
+          }
+ 
+          Eif (opts.showDir) {
+            return showDir(opts, stat)(req, res);
+          }
+ 
+        }
+        else {
+          serve(stat);
+        }
+      });
+    }
+ 
+    // Look for a gzipped file if this is turned on
+    if (opts.gzip && shouldCompress(req)) {
+      fs.stat(gzipped, function (err, stat) {
+        Eif (!err && stat.isFile()) {
+          file = gzipped;
+          return serve(stat);
+        } else {
+          statFile();
+        }
+      });
+    } else {
+      statFile();
+    }
+ 
+    function serve(stat) {
+      // Do a MIME lookup, fall back to octet-stream and handle gzip
+      // special case.
+      var defaultType = opts.contentType || 'application/octet-stream',
+          contentType = mime.lookup(file, defaultType),
+          charSet;
+ 
+      Eif (contentType) {
+        charSet = mime.charsets.lookup(contentType, 'utf-8');
+        Eif (charSet) {
+          contentType += '; charset=' + charSet;
+        }
+      }
+ 
+      if (path.extname(file) === '.gz') {
+        res.setHeader('Content-Encoding', 'gzip');
+ 
+        // strip gz ending and lookup mime type
+        contentType = mime.lookup(path.basename(file, ".gz"), defaultType);
+      }
+ 
+      var range = (req.headers && req.headers['range']);
+      if (range) {
+        var total = stat.size;
+        var parts = range.replace(/bytes=/, "").split("-");
+        var partialstart = parts[0];
+        var partialend = parts[1];
+        var start = parseInt(partialstart, 10);
+        var end = Math.min(total-1, partialend ? parseInt(partialend, 10) : total-1);
+        var chunksize = (end-start)+1;
+        if (start > end || isNaN(start) || isNaN(end)) {
+          return status['416'](res, next);
+        }
+        var fstream = fs.createReadStream(file, {start: start, end: end});
+        fstream.on('error', function (err) {
+          status['500'](res, next, { error: err });
+        });
+        res.on('close', function () {
+           fstream.destroy();
+        });
+        res.writeHead(206, {
+          'Content-Range': 'bytes ' + start + '-' + end + '/' + total,
+          'Accept-Ranges': 'bytes',
+          'Content-Length': chunksize,
+          'Content-Type': contentType
+        });
+        fstream.pipe(res);
+        return;
+      }
+ 
+      // TODO: Helper for this, with default headers.
+      var lastModified = (new Date(stat.mtime)).toUTCString(),
+          etag = generateEtag(stat, weakEtags);
+      res.setHeader('last-modified', lastModified);
+      res.setHeader('etag', etag);
+ 
+      if (typeof cache === 'function') {
+        var requestSpecificCache = cache(pathname);
+        if (typeof requestSpecificCache === 'number') {
+          requestSpecificCache = 'max-age=' + requestSpecificCache;
+        }
+        res.setHeader('cache-control', requestSpecificCache);
+      } else {
+        res.setHeader('cache-control', cache);
+      }
+ 
+      // Return a 304 if necessary
+      if (shouldReturn304(req, lastModified, etag)) {
+        return status[304](res, next);
+      }
+ 
+      res.setHeader('content-length', stat.size);
+      res.setHeader('content-type', contentType);
+ 
+      // set the response statusCode if we have a request statusCode.
+      // This only can happen if we have a 404 with some kind of 404.html
+      // In all other cases where we have a file we serve the 200
+      res.statusCode = req.statusCode || 200;
+ 
+      Iif (req.method === "HEAD") {
+        return res.end();
+      }
+ 
+      var stream = fs.createReadStream(file);
+ 
+      stream.pipe(res);
+      stream.on('error', function (err) {
+        status['500'](res, next, { error: err });
+      });
+    }
+ 
+    function shouldReturn304(req, serverLastModified, serverEtag) {
+      if (!req || !req.headers) {
+        return false;
+      }
+ 
+      var clientModifiedSince = req.headers['if-modified-since'],
+          clientEtag = req.headers['if-none-match'];
+ 
+      if (!clientModifiedSince && !clientEtag) {
+        // Client did not provide any conditional caching headers
+        return false;
+      }
+ 
+      Eif (clientModifiedSince) {
+        // Catch "illegal access" dates that will crash v8
+        // https://github.com/jfhbrook/node-ecstatic/pull/179
+        try {
+          var clientModifiedDate = new Date(Date.parse(clientModifiedSince));
+        }
+        catch (err) { return false }
+ 
+        Iif (clientModifiedDate.toString() === 'Invalid Date') {
+          return false;
+        }
+        // If the client's copy is older than the server's, don't return 304
+        Iif (clientModifiedDate < new Date(serverLastModified)) {
+          return false;
+        }
+      }
+ 
+      if (clientEtag) {
+        // Do a strong or weak etag comparison based on setting
+        // https://www.ietf.org/rfc/rfc2616.txt Section 13.3.3
+        Iif (opts.weakCompare && clientEtag !== serverEtag
+          && clientEtag !== ('W/' + serverEtag) && ('W/' + clientEtag) !== serverEtag) {
+          return false;
+        } else if (!opts.weakCompare && (clientEtag !== serverEtag || clientEtag.indexOf('W/') === 0)) {
+          return false;
+        }
+      }
+ 
+      return true;
+    }
+  };
+};
+ 
+ecstatic.version = version;
+ecstatic.showDir = showDir;
+ 
+// Check to see if we should try to compress a file with gzip.
+function shouldCompress(req) {
+  var headers = req.headers;
+ 
+  return headers && headers['accept-encoding'] &&
+    headers['accept-encoding']
+      .split(",")
+      .some(function (el) {
+        return ['*','compress', 'gzip', 'deflate'].indexOf(el) != -1;
+      })
+    ;
+}
+ 
+// See: https://github.com/jesusabdullah/node-ecstatic/issues/109
+function decodePathname(pathname) {
+  var pieces = pathname.replace(/\\/g,"/").split('/');
+ 
+  return pieces.map(function (piece) {
+    piece = decodeURIComponent(piece);
+ 
+    Iif (process.platform === 'win32' && /\\/.test(piece)) {
+      throw new Error('Invalid forward slash character');
+    }
+ 
+    return piece;
+  }).join('/');
+}
+ 
+if (!module.parent) {
+  var defaults = require('./ecstatic/defaults.json')
+  var http = require('http'),
+      opts = require('minimist')(process.argv.slice(2), {
+        alias: require('./ecstatic/aliases.json'),
+        default: defaults,
+        boolean: Object.keys(defaults).filter(function (key) {
+          return typeof defaults[key] === 'boolean'
+        })
+      }),
+      envPORT = parseInt(process.env.PORT, 10),
+      port = envPORT > 1024 && envPORT <= 65536 ? envPORT : opts.port || opts.p || 8000,
+      dir = opts.root || opts._[0] || process.cwd();
+ 
+  Iif (opts.help || opts.h) {
+    var u = console.error;
+    u('usage: ecstatic [dir] {options} --port PORT');
+    u('see https://npm.im/ecstatic for more docs');
+    return;
+  }
+ 
+  http.createServer(ecstatic(dir, opts))
+    .listen(port, function () {
+      console.log('ecstatic serving ' + dir + ' at http://0.0.0.0:' + port);
+    });
+}
+ 
+
+
+ + + + + + + diff --git a/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/etag.js.html b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/etag.js.html new file mode 100644 index 000000000..00ed22210 --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/etag.js.html @@ -0,0 +1,86 @@ + + + + Code coverage report for lib/ecstatic/etag.js + + + + + + + +
+
+

+ all files / lib/ecstatic/ etag.js +

+
+
+ 100% + Statements + 5/5 +
+
+ 100% + Branches + 2/2 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 5/5 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +835× +79× +79× + +  +79× +  + 
module.exports = function (stat, weakEtag) {
+  var etag = '"' + [stat.ino, stat.size, JSON.stringify(stat.mtime)].join('-') + '"';
+  if (weakEtag) {
+    etag = 'W/' + etag;
+  }
+  return etag;
+}
+ 
+
+
+ + + + + + + diff --git a/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/index.html b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/index.html new file mode 100644 index 000000000..7dfccb911 --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/index.html @@ -0,0 +1,132 @@ + + + + Code coverage report for lib/ecstatic/ + + + + + + + +
+
+

+ all files lib/ecstatic/ +

+
+
+ 87.96% + Statements + 190/216 +
+
+ 75.86% + Branches + 110/145 +
+
+ 88.64% + Functions + 39/44 +
+
+ 89.05% + Lines + 187/210 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
etag.js
100%5/5100%2/2100%1/1100%5/5
opts.js
98.84%85/8695.38%62/65100%18/18100%84/84
showdir.js
89.29%75/8470.37%38/5488.89%16/1891.25%73/80
status-handlers.js
60.98%25/4133.33%8/2457.14%4/760.98%25/41
+
+
+ + + + + + + diff --git a/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/opts.js.html b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/opts.js.html new file mode 100644 index 000000000..4a7d4df3f --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/opts.js.html @@ -0,0 +1,605 @@ + + + + Code coverage report for lib/ecstatic/opts.js + + + + + + + +
+
+

+ all files / lib/ecstatic/ opts.js +

+
+
+ 98.84% + Statements + 85/86 +
+
+ 95.38% + Branches + 62/65 +
+
+ 100% + Functions + 18/18 +
+
+ 100% + Lines + 84/84 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181  +  +35× +35× +  +35× +50× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +35× +1340× +  +  +50× +38× +49× +27× +27× +  +  +  +38× +52× +24× +24× +  +  +  +38× +66× +10× +10× +  +  +  +38× +94× +10× +10× +  +  +  +38× +66× +10× +10× +  +  +  +38× +16× +  +  +38× +16× +13× +  + + +  + + +  +  +  +38× +18× +  +  +38× +62× +14× +14× +  +  +  +38× +76× +20× +20× +20× +  +  +  +38× +114× + + +  + + + +  +  + +  +35× + + + +  +  +  +38× +92× +11× +11× +  +  +  +38× +92× +11× +11× +  +  +  +38× +271× + + +  +  +  +38× +92× +11× +11× +  +  +  +38× +120× +11× +11× +  +  +  +38× +94× +10× +10× +  +  +  +  +50× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
// This is so you can have options aliasing and defaults in one place.
+ 
+var defaults = require('./defaults.json');
+var aliases = require('./aliases.json')
+ 
+module.exports = function (opts) {
+  var autoIndex = defaults.autoIndex,
+      showDir = defaults.showDir,
+      showDotfiles = defaults.showDotfiles,
+      humanReadable = defaults.humanReadable,
+      si = defaults.si,
+      cache = defaults.cache,
+      gzip = defaults.gzip,
+      defaultExt = defaults.defaultExt,
+      handleError = defaults.handleError,
+      headers = {},
+      serverHeader = defaults.serverHeader,
+      contentType = defaults.contentType,
+      mimeTypes,
+      weakEtags = defaults.weakEtags,
+      weakCompare = defaults.weakCompare,
+      handleOptionsMethod = defaults.handleOptionsMethod;
+ 
+  function isDeclared(k) {
+    return typeof opts[k] !== 'undefined' && opts[k] !== null;
+  }
+ 
+  if (opts) {
+    aliases.autoIndex.some(function (k) {
+      if (isDeclared(k)) {
+        autoIndex = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.showDir.some(function (k) {
+      if (isDeclared(k)) {
+        showDir = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.showDotfiles.some(function (k) {
+      if (isDeclared(k)) {
+        showDotfiles = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.humanReadable.some(function (k) {
+      if (isDeclared(k)) {
+        humanReadable = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.si.some(function (k) {
+      if (isDeclared(k)) {
+        si = opts[k];
+        return true;
+      }
+    });
+ 
+    if (opts.defaultExt && typeof opts.defaultExt === 'string') {
+      defaultExt = opts.defaultExt;
+    }
+ 
+    if (typeof opts.cache !== 'undefined' && opts.cache !== null) {
+      if (typeof opts.cache === 'string') {
+        cache = opts.cache;
+      }
+      else if (typeof opts.cache === 'number') {
+        cache = 'max-age=' + opts.cache;
+      }
+      else Eif (typeof opts.cache === 'function') {
+        cache = opts.cache
+      }
+    }
+ 
+    if (typeof opts.gzip !== 'undefined' && opts.gzip !== null) {
+      gzip = opts.gzip;
+    }
+ 
+    aliases.handleError.some(function (k) {
+      if (isDeclared(k)) {
+        handleError = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.cors.forEach(function(k) {
+      if (isDeclared(k) && k) {
+        handleOptionsMethod = true;
+        headers['Access-Control-Allow-Origin'] = '*';
+        headers['Access-Control-Allow-Headers'] = 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since';
+      }
+    });
+ 
+    aliases.headers.forEach(function (k) {
+      if (!isDeclared(k)) return;
+      if (Array.isArray(opts[k])) {
+        opts[k].forEach(setHeader);
+      }
+      else if (opts[k] && typeof opts[k] === 'object') {
+        Object.keys(opts[k]).forEach(function (key) {
+          headers[key] = opts[k][key];
+        });
+      }
+      else setHeader(opts[k]);
+ 
+      function setHeader (str) {
+        var m = /^(.+?)\s*:\s*(.*)$/.exec(str)
+        Iif (!m) headers[str] = true
+        else headers[m[1]] = m[2]
+      }
+    });
+ 
+    aliases.serverHeader.some(function (k) {
+      if (isDeclared(k)) {
+        serverHeader = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.contentType.some(function (k) {
+      if (isDeclared(k)) {
+        contentType = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.mimeType.some(function (k) {
+      if (isDeclared(k)) {
+        mimeTypes = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.weakEtags.some(function (k) {
+      if (isDeclared(k)) {
+        weakEtags = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.weakCompare.some(function (k) {
+      if (isDeclared(k)) {
+        weakCompare = opts[k];
+        return true;
+      }
+    });
+ 
+    aliases.handleOptionsMethod.some(function (k) {
+      if (isDeclared(k)) {
+        handleOptionsMethod = handleOptionsMethod || opts[k];
+        return true;
+      }
+    });
+  }
+ 
+  return {
+    cache: cache,
+    autoIndex: autoIndex,
+    showDir: showDir,
+    showDotfiles: showDotfiles,
+    humanReadable: humanReadable,
+    si: si,
+    defaultExt: defaultExt,
+    baseDir: (opts && opts.baseDir) || '/',
+    gzip: gzip,
+    handleError: handleError,
+    headers: headers,
+    serverHeader: serverHeader,
+    contentType: contentType,
+    mimeTypes: mimeTypes,
+    weakEtags: weakEtags,
+    weakCompare: weakCompare,
+    handleOptionsMethod: handleOptionsMethod
+  };
+};
+ 
+
+
+ + + + + + + diff --git a/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/showdir.js.html b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/showdir.js.html new file mode 100644 index 000000000..531276c3e --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/showdir.js.html @@ -0,0 +1,737 @@ + + + + Code coverage report for lib/ecstatic/showdir.js + + + + + + + +
+
+

+ all files / lib/ecstatic/ showdir.js +

+
+
+ 89.29% + Statements + 75/84 +
+
+ 70.37% + Branches + 38/54 +
+
+ 88.89% + Functions + 16/18 +
+
+ 91.25% + Lines + 73/80 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +22535× +  +  +  +  +  +  +  +35× +  +12× +  +  +  +  +  +  +  +  +12× +  +  +12× +  +  +  +  +  +  +  +  +  +  +12× +12× +  +  +  +  +12× +12× +  +  +  +  +12× +  +  +  +  +  +12× +12× +12× +12× +  +12× +  +  +  +  +  +  +  +  +  +12× + + +  +  + + +  +  + +  +  +35× +  +  +  +12× +  +  +  +  +12× + +  +  +11× +157× +157× +  +  +157× +57× +  +  +100× +  +  +157× +11× +  +  +  +  +  +35× +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +12× +  +12× +12× +  +160× +160× +  +  +160× +60× +  +  +160× +  +  +160× +  +  +  +  +  +  +49× +192× +12× +  +12× +12× +  +  +  +  +  +  +  +12× +12× +12× +  +  +  +  +  +  +  +35× +  +160× +  +  +  +160× +  +  +160× +480× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +35× +160× +60× +  +  +100× +100× +100× +  +100× +52× +  +  +48× +48× +48× +48× +48× +  +  +48× +48× +  +48× +  + 
var ecstatic = require('../ecstatic'),
+    fs = require('fs'),
+    path = require('path'),
+    he = require('he'),
+    etag = require('./etag'),
+    url = require('url'),
+    status = require('./status-handlers');
+ 
+module.exports = function (opts, stat) {
+  // opts are parsed by opts.js, defaults already applied
+  var cache = opts.cache,
+      root = path.resolve(opts.root),
+      baseDir = opts.baseDir,
+      humanReadable = opts.humanReadable,
+      handleError = opts.handleError,
+      showDotfiles = opts.showDotfiles,
+      si = opts.si,
+      weakEtags = opts.weakEtags;
+ 
+  return function middleware (req, res, next) {
+ 
+    // Figure out the path for the file from the given url
+    var parsed = url.parse(req.url),
+        pathname = decodeURIComponent(parsed.pathname),
+        dir = path.normalize(
+          path.join(root,
+            path.relative(
+              path.join('/', baseDir),
+              pathname
+            )
+          )
+        );
+ 
+    fs.stat(dir, function (err, stat) {
+      Iif (err) {
+        return handleError ? status[500](res, next, { error: err }) : next();
+      }
+ 
+      // files are the listing of dir
+      fs.readdir(dir, function (err, files) {
+        Iif (err) {
+          return handleError ? status[500](res, next, { error: err }) : next();
+        }
+ 
+        // Optionally exclude dotfiles from directory listing.
+        Iif (!showDotfiles) {
+          files = files.filter(function(filename){
+            return filename.slice(0,1) !== '.';
+          });
+        }
+ 
+        res.setHeader('content-type', 'text/html');
+        res.setHeader('etag', etag(stat, weakEtags));
+        res.setHeader('last-modified', (new Date(stat.mtime)).toUTCString());
+        res.setHeader('cache-control', cache);
+ 
+        sortByIsDirectory(files, function (lolwuts, dirs, files) {
+          // It's possible to get stat errors for all sorts of reasons here.
+          // Unfortunately, our two choices are to either bail completely,
+          // or just truck along as though everything's cool. In this case,
+          // I decided to just tack them on as "??!?" items along with dirs
+          // and files.
+          //
+          // Whatever.
+ 
+          // if it makes sense to, add a .. link
+          if (path.resolve(dir, '..').slice(0, root.length) == root) {
+            return fs.stat(path.join(dir, '..'), function (err, s) {
+              Iif (err) {
+                return handleError ? status[500](res, next, { error: err }) : next();
+              }
+              dirs.unshift([ '..', s ]);
+              render(dirs, files, lolwuts);
+            });
+          }
+          render(dirs, files, lolwuts);
+        });
+ 
+        function sortByIsDirectory(paths, cb) {
+          // take the listing file names in `dir`
+          // returns directory and file array, each entry is
+          // of the array a [name, stat] tuple
+          var pending = paths.length,
+              errs = [],
+              dirs = [],
+              files = [];
+ 
+          if (!pending) {
+            return cb(errs, dirs, files);
+          }
+ 
+          paths.forEach(function (file) {
+            fs.stat(path.join(dir, file), function (err, s) {
+              Iif (err) {
+                errs.push([file, err]);
+              }
+              else if (s.isDirectory()) {
+                dirs.push([file, s]);
+              }
+              else {
+                files.push([file, s]);
+              }
+ 
+              if (--pending === 0) {
+                cb(errs, dirs, files);
+              }
+            });
+          });
+        }
+ 
+        function render(dirs, files, lolwuts) {
+          // each entry in the array is a [name, stat] tuple
+ 
+          // TODO: use stylessheets?
+          var html = [
+            '<!doctype html>',
+            '<html>',
+            '  <head>',
+            '    <meta charset="utf-8">',
+            '    <meta name="viewport" content="width=device-width">',
+            '    <title>Index of ' + he.encode(pathname) +'</title>',
+            '  </head>',
+            '  <body>',
+            '<h1>Index of ' + he.encode(pathname) + '</h1>'
+          ].join('\n') + '\n';
+ 
+          html += '<table>';
+ 
+          var failed = false;
+          var writeRow = function (file, i) {
+            // render a row given a [name, stat] tuple
+            var isDir = file[1].isDirectory && file[1].isDirectory();
+            var href = parsed.pathname.replace(/\/$/, '') + '/' + encodeURIComponent(file[0]);
+ 
+            // append trailing slash and query for dir entry
+            if (isDir) {
+              href += '/' + he.encode((parsed.search)? parsed.search:'');
+            }
+ 
+            var displayName = he.encode(file[0]) + ((isDir)? '/':'');
+ 
+            // TODO: use stylessheets?
+            html += '<tr>' +
+              '<td><code>(' + permsToString(file[1]) + ')</code></td>' +
+              '<td style="text-align: right; padding-left: 1em"><code>' + sizeToString(file[1], humanReadable, si) + '</code></td>' +
+              '<td style="padding-left: 1em"><a href="' + href + '">' + displayName + '</a></td>' +
+              '</tr>\n';
+          };
+ 
+          dirs.sort(function (a, b) { return a[0].toString().localeCompare(b[0].toString()); }).forEach(writeRow);
+          files.sort(function (a, b) { return a.toString().localeCompare(b.toString()); }).forEach(writeRow);
+          lolwuts.sort(function (a, b) { return a[0].toString().localeCompare(b[0].toString()); }).forEach(writeRow);
+ 
+          html += '</table>\n';
+          html += '<br><address>Node.js ' +
+            process.version +
+            '/ <a href="https://github.com/jfhbrook/node-ecstatic">ecstatic</a> ' +
+            'server running @ ' +
+            he.encode(req.headers.host || '') + '</address>\n' +
+            '</body></html>'
+          ;
+ 
+          Eif (!failed) {
+            res.writeHead(200, { "Content-Type": "text/html" });
+            res.end(html);
+          }
+        }
+      });
+    });
+  };
+};
+ 
+function permsToString(stat) {
+ 
+  Iif (!stat.isDirectory || !stat.mode) {
+    return '???!!!???';
+  }
+ 
+  var dir = stat.isDirectory() ? 'd' : '-',
+      mode = stat.mode.toString(8);
+ 
+  return dir + mode.slice(-3).split('').map(function (n) {
+    return [
+      '---',
+      '--x',
+      '-w-',
+      '-wx',
+      'r--',
+      'r-x',
+      'rw-',
+      'rwx'
+    ][parseInt(n, 10)];
+  }).join('');
+}
+ 
+// given a file's stat, return the size of it in string
+// humanReadable: (boolean) whether to result is human readable
+// si: (boolean) whether to use si (1k = 1000), otherwise 1k = 1024
+// adopted from http://stackoverflow.com/a/14919494/665507
+function sizeToString(stat, humanReadable, si) {
+    if (stat.isDirectory && stat.isDirectory()) {
+      return '';
+    }
+ 
+    var sizeString = '';
+    var bytes = stat.size;
+    var threshold = si ? 1000 : 1024;
+ 
+    if (!humanReadable || bytes < threshold) {
+      return bytes + 'B';
+    }
+ 
+    var units = [ 'k','M','G','T','P','E','Z','Y' ];
+    var u = -1;
+    do {
+        bytes /= threshold;
+        ++u;
+    } while (bytes >= threshold);
+ 
+    var b = bytes.toFixed(1);
+    Iif (isNaN(b)) b = '??';
+ 
+    return b + units[u];
+}
+ 
+
+
+ + + + + + + diff --git a/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/status-handlers.js.html b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/status-handlers.js.html new file mode 100644 index 000000000..f1a860ade --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/lib/ecstatic/status-handlers.js.html @@ -0,0 +1,377 @@ + + + + Code coverage report for lib/ecstatic/status-handlers.js + + + + + + + +
+
+

+ all files / lib/ecstatic/ status-handlers.js +

+
+
+ 60.98% + Statements + 25/41 +
+
+ 33.33% + Branches + 8/24 +
+
+ 57.14% + Functions + 4/7 +
+
+ 60.98% + Lines + 25/41 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +10535× +  +  +35× + + +  +  +  +35× +  +  +  +  +  +  +  +  +  +  +  +  +  +35× +  +  +  +  +  +  +  +  +  +  +  +35× +13× +13× + +  +  + + + +  +  +  +  +35× + + +  +  +  + + + +  +  +  +  +  +35× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +35× + + + +  +  +  +  +  +  +  +  +  +  +  +  +  +  + +  + 
var he = require('he');
+ 
+// not modified
+exports['304'] = function (res, next) {
+  res.statusCode = 304;
+  res.end();
+};
+ 
+// access denied
+exports['403'] = function (res, next) {
+  res.statusCode = 403;
+  if (typeof next === "function") {
+    next();
+  }
+  else {
+    if (res.writable) {
+      res.setHeader('content-type', 'text/plain');
+      res.end('ACCESS DENIED');
+    }
+  }
+};
+ 
+// disallowed method
+exports['405'] = function (res, next, opts) {
+  res.statusCode = 405;
+  if (typeof next === "function") {
+    next();
+  }
+  else {
+    res.setHeader('allow', (opts && opts.allow) || 'GET, HEAD');
+    res.end();
+  }
+};
+ 
+// not found
+exports['404'] = function (res, next) {
+  res.statusCode = 404;
+  if (typeof next === "function") {
+    next();
+  }
+  else {
+    Eif (res.writable) {
+      res.setHeader('content-type', 'text/plain');
+      res.end('File not found. :(');
+    }
+  }
+};
+ 
+exports['416'] = function (res, next) {
+  res.statusCode = 416;
+  Iif (typeof next === "function") {
+    next();
+  }
+  else {
+    Eif (res.writable) {
+      res.setHeader('content-type', 'text/plain');
+      res.end('Requested range not satisfiable');
+    }
+  }
+};
+ 
+// flagrant error
+exports['500'] = function (res, next, opts) {
+  res.statusCode = 500;
+  res.setHeader('content-type', 'text/html');
+  var error = String(opts.error.stack || opts.error || "No specified error"),
+      html = [
+    '<!doctype html>',
+    '<html>',
+    '  <head>',
+    '    <meta charset="utf-8">',
+    '    <title>500 Internal Server Error</title>',
+    '  </head>',
+    '  <body>',
+    '    <p>',
+    '      ' + he.encode(error),
+    '    </p>',
+    '  </body>',
+    '</html>'
+  ].join('\n') + '\n';
+  res.end(html);
+};
+ 
+// bad request
+exports['400'] = function (res, next, opts) {
+  res.statusCode = 400;
+  res.setHeader('content-type', 'text/html');
+  var error = opts && opts.error ? String(opts.error) : 'Malformed request.',
+      html = [
+    '<!doctype html>',
+    '<html>',
+    '  <head>',
+    '    <meta charset="utf-8">',
+    '    <title>400 Bad Request</title>',
+    '  </head>',
+    '  <body>',
+    '    <p>',
+    '      ' + he.encode(error),
+    '    </p>',
+    '  </body>',
+    '</html>'
+  ].join('\n') + '\n';
+  res.end(html);
+};
+ 
+
+
+ + + + + + + diff --git a/node_modules/ecstatic/coverage/lcov-report/lib/index.html b/node_modules/ecstatic/coverage/lcov-report/lib/index.html new file mode 100644 index 000000000..80556b551 --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/lib/index.html @@ -0,0 +1,93 @@ + + + + Code coverage report for lib/ + + + + + + + +
+
+

+ all files lib/ +

+
+
+ 88.13% + Statements + 141/160 +
+
+ 84.35% + Branches + 124/147 +
+
+ 83.33% + Functions + 15/18 +
+
+ 88.05% + Lines + 140/159 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ecstatic.js
88.13%141/16084.35%124/14783.33%15/1888.05%140/159
+
+
+ + + + + + + diff --git a/node_modules/ecstatic/coverage/lcov-report/prettify.css b/node_modules/ecstatic/coverage/lcov-report/prettify.css new file mode 100644 index 000000000..b317a7cda --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.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/node_modules/ecstatic/coverage/lcov-report/prettify.js b/node_modules/ecstatic/coverage/lcov-report/prettify.js new file mode 100644 index 000000000..ef51e0386 --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov-report/prettify.js @@ -0,0 +1 @@ +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/node_modules/ecstatic/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/ecstatic/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..03f704a609c6fd0dbfdac63466a7d7c958b5cbf3 GIT binary patch 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/node_modules/ecstatic/coverage/lcov.info b/node_modules/ecstatic/coverage/lcov.info new file mode 100644 index 000000000..6c7725975 --- /dev/null +++ b/node_modules/ecstatic/coverage/lcov.info @@ -0,0 +1,830 @@ +TN: +SF:./lib/ecstatic.js +FN:16,(anonymous_1) +FN:52,middleware +FN:94,(anonymous_3) +FN:112,statFile +FN:113,(anonymous_5) +FN:156,(anonymous_6) +FN:181,(anonymous_7) +FN:193,serve +FN:227,(anonymous_9) +FN:230,(anonymous_10) +FN:279,(anonymous_11) +FN:284,shouldReturn304 +FN:334,shouldCompress +FN:340,(anonymous_14) +FN:347,decodePathname +FN:350,(anonymous_16) +FN:367,(anonymous_17) +FN:383,(anonymous_18) +FNF:18 +FNH:15 +FNDA:50,(anonymous_1) +FNDA:163,middleware +FNDA:73,(anonymous_3) +FNDA:159,statFile +FNDA:159,(anonymous_5) +FNDA:8,(anonymous_6) +FNDA:2,(anonymous_7) +FNDA:72,serve +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:0,(anonymous_11) +FNDA:67,shouldReturn304 +FNDA:84,shouldCompress +FNDA:2,(anonymous_14) +FNDA:161,decodePathname +FNDA:455,(anonymous_16) +FNDA:150,(anonymous_17) +FNDA:10,(anonymous_18) +DA:3,35 +DA:16,35 +DA:17,50 +DA:18,26 +DA:19,26 +DA:22,50 +DA:34,50 +DA:35,50 +DA:38,50 +DA:39,6 +DA:41,6 +DA:43,6 +DA:44,4 +DA:46,2 +DA:47,2 +DA:52,49 +DA:71,163 +DA:72,163 +DA:73,163 +DA:74,161 +DA:77,2 +DA:80,161 +DA:90,161 +DA:92,159 +DA:94,161 +DA:95,73 +DA:98,161 +DA:99,0 +DA:104,161 +DA:105,0 +DA:108,161 +DA:109,0 +DA:112,35 +DA:113,159 +DA:114,159 +DA:115,44 +DA:118,12 +DA:120,32 +DA:123,14 +DA:129,18 +DA:135,115 +DA:136,0 +DA:138,115 +DA:139,45 +DA:140,1 +DA:141,1 +DA:145,44 +DA:146,18 +DA:147,18 +DA:150,18 +DA:153,26 +DA:154,22 +DA:157,8 +DA:158,0 +DA:160,8 +DA:161,8 +DA:164,0 +DA:168,4 +DA:169,4 +DA:174,70 +DA:180,161 +DA:181,2 +DA:182,2 +DA:183,2 +DA:184,2 +DA:186,0 +DA:190,159 +DA:193,35 +DA:196,72 +DA:200,72 +DA:201,72 +DA:202,72 +DA:203,72 +DA:207,72 +DA:208,2 +DA:211,2 +DA:214,72 +DA:215,72 +DA:216,5 +DA:217,5 +DA:218,5 +DA:219,5 +DA:220,5 +DA:221,5 +DA:222,5 +DA:223,5 +DA:224,2 +DA:226,3 +DA:227,3 +DA:228,0 +DA:230,3 +DA:231,0 +DA:233,3 +DA:239,3 +DA:240,3 +DA:244,67 +DA:246,67 +DA:247,67 +DA:249,67 +DA:250,4 +DA:251,4 +DA:252,2 +DA:254,4 +DA:256,63 +DA:260,67 +DA:261,5 +DA:264,62 +DA:265,62 +DA:270,62 +DA:272,62 +DA:273,0 +DA:276,62 +DA:278,62 +DA:279,62 +DA:280,0 +DA:284,35 +DA:285,67 +DA:286,24 +DA:289,43 +DA:292,43 +DA:294,36 +DA:297,7 +DA:300,7 +DA:301,7 +DA:303,1 +DA:305,6 +DA:306,0 +DA:309,6 +DA:310,0 +DA:314,6 +DA:317,4 +DA:319,0 +DA:320,4 +DA:321,1 +DA:325,5 +DA:330,35 +DA:331,35 +DA:334,35 +DA:335,84 +DA:337,84 +DA:341,2 +DA:347,35 +DA:348,161 +DA:350,161 +DA:351,455 +DA:353,455 +DA:354,0 +DA:357,455 +DA:361,35 +DA:362,10 +DA:363,10 +DA:368,150 +DA:375,10 +DA:376,0 +DA:377,0 +DA:378,0 +DA:379,0 +DA:382,10 +DA:384,10 +LF:159 +LH:140 +BRDA:17,1,0,26 +BRDA:17,1,1,24 +BRDA:35,2,0,44 +BRDA:35,2,1,6 +BRDA:35,3,0,50 +BRDA:35,3,1,50 +BRDA:38,4,0,6 +BRDA:38,4,1,44 +BRDA:43,5,0,4 +BRDA:43,5,1,2 +BRDA:46,6,0,2 +BRDA:46,6,1,0 +BRDA:90,7,0,159 +BRDA:90,7,1,2 +BRDA:98,8,0,0 +BRDA:98,8,1,161 +BRDA:98,9,0,161 +BRDA:98,9,1,0 +BRDA:104,10,0,0 +BRDA:104,10,1,161 +BRDA:108,11,0,0 +BRDA:108,11,1,161 +BRDA:108,12,0,161 +BRDA:108,12,1,107 +BRDA:108,12,2,0 +BRDA:114,13,0,44 +BRDA:114,13,1,115 +BRDA:114,14,0,159 +BRDA:114,14,1,44 +BRDA:114,14,2,2 +BRDA:115,15,0,12 +BRDA:115,15,1,32 +BRDA:120,16,0,14 +BRDA:120,16,1,18 +BRDA:120,17,0,32 +BRDA:120,17,1,14 +BRDA:124,18,0,4 +BRDA:124,18,1,10 +BRDA:130,19,0,16 +BRDA:130,19,1,2 +BRDA:135,20,0,0 +BRDA:135,20,1,115 +BRDA:138,21,0,45 +BRDA:138,21,1,70 +BRDA:139,22,0,1 +BRDA:139,22,1,44 +BRDA:139,23,0,45 +BRDA:139,23,1,8 +BRDA:145,24,0,18 +BRDA:145,24,1,26 +BRDA:148,25,0,4 +BRDA:148,25,1,14 +BRDA:153,26,0,22 +BRDA:153,26,1,4 +BRDA:157,27,0,0 +BRDA:157,27,1,8 +BRDA:160,28,0,8 +BRDA:160,28,1,0 +BRDA:168,29,0,4 +BRDA:168,29,1,0 +BRDA:180,30,0,2 +BRDA:180,30,1,159 +BRDA:180,31,0,161 +BRDA:180,31,1,84 +BRDA:182,32,0,2 +BRDA:182,32,1,0 +BRDA:182,33,0,2 +BRDA:182,33,1,2 +BRDA:196,34,0,72 +BRDA:196,34,1,0 +BRDA:200,35,0,72 +BRDA:200,35,1,0 +BRDA:202,36,0,72 +BRDA:202,36,1,0 +BRDA:207,37,0,2 +BRDA:207,37,1,70 +BRDA:214,38,0,72 +BRDA:214,38,1,48 +BRDA:215,39,0,5 +BRDA:215,39,1,67 +BRDA:221,40,0,4 +BRDA:221,40,1,1 +BRDA:223,41,0,2 +BRDA:223,41,1,3 +BRDA:223,42,0,5 +BRDA:223,42,1,4 +BRDA:223,42,2,3 +BRDA:249,43,0,4 +BRDA:249,43,1,63 +BRDA:251,44,0,2 +BRDA:251,44,1,2 +BRDA:260,45,0,5 +BRDA:260,45,1,62 +BRDA:270,46,0,62 +BRDA:270,46,1,56 +BRDA:272,47,0,0 +BRDA:272,47,1,62 +BRDA:285,48,0,24 +BRDA:285,48,1,43 +BRDA:285,49,0,67 +BRDA:285,49,1,67 +BRDA:292,50,0,36 +BRDA:292,50,1,7 +BRDA:292,51,0,43 +BRDA:292,51,1,36 +BRDA:297,52,0,7 +BRDA:297,52,1,0 +BRDA:305,53,0,0 +BRDA:305,53,1,6 +BRDA:309,54,0,0 +BRDA:309,54,1,6 +BRDA:314,55,0,4 +BRDA:314,55,1,2 +BRDA:317,56,0,0 +BRDA:317,56,1,4 +BRDA:317,57,0,4 +BRDA:317,57,1,2 +BRDA:317,57,2,1 +BRDA:317,57,3,0 +BRDA:320,58,0,1 +BRDA:320,58,1,3 +BRDA:320,59,0,4 +BRDA:320,59,1,2 +BRDA:320,59,2,1 +BRDA:337,60,0,84 +BRDA:337,60,1,58 +BRDA:337,60,2,2 +BRDA:353,61,0,0 +BRDA:353,61,1,455 +BRDA:353,62,0,455 +BRDA:353,62,1,0 +BRDA:361,63,0,10 +BRDA:361,63,1,25 +BRDA:372,64,0,2 +BRDA:372,64,1,8 +BRDA:372,65,0,10 +BRDA:372,65,1,3 +BRDA:372,66,0,8 +BRDA:372,66,1,5 +BRDA:372,66,2,5 +BRDA:373,67,0,10 +BRDA:373,67,1,10 +BRDA:373,67,2,6 +BRDA:375,68,0,0 +BRDA:375,68,1,10 +BRDA:375,69,0,10 +BRDA:375,69,1,10 +BRF:147 +BRH:124 +end_of_record +TN: +SF:./lib/ecstatic/showdir.js +FN:9,(anonymous_1) +FN:20,middleware +FN:34,(anonymous_3) +FN:40,(anonymous_4) +FN:47,(anonymous_5) +FN:57,(anonymous_6) +FN:68,(anonymous_7) +FN:79,sortByIsDirectory +FN:92,(anonymous_9) +FN:93,(anonymous_10) +FN:111,render +FN:130,(anonymous_12) +FN:150,(anonymous_13) +FN:151,(anonymous_14) +FN:152,(anonymous_15) +FN:173,permsToString +FN:182,(anonymous_17) +FN:200,sizeToString +FNF:18 +FNH:16 +FNDA:12,(anonymous_1) +FNDA:12,middleware +FNDA:12,(anonymous_3) +FNDA:12,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:12,(anonymous_6) +FNDA:3,(anonymous_7) +FNDA:12,sortByIsDirectory +FNDA:157,(anonymous_9) +FNDA:157,(anonymous_10) +FNDA:12,render +FNDA:160,(anonymous_12) +FNDA:49,(anonymous_13) +FNDA:192,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:160,permsToString +FNDA:480,(anonymous_17) +FNDA:160,sizeToString +DA:1,35 +DA:9,35 +DA:11,12 +DA:20,12 +DA:23,12 +DA:34,12 +DA:35,12 +DA:36,0 +DA:40,12 +DA:41,12 +DA:42,0 +DA:46,12 +DA:47,0 +DA:48,0 +DA:52,12 +DA:53,12 +DA:54,12 +DA:55,12 +DA:57,12 +DA:67,12 +DA:68,3 +DA:69,3 +DA:70,0 +DA:72,3 +DA:73,3 +DA:76,9 +DA:79,35 +DA:83,12 +DA:88,12 +DA:89,1 +DA:92,11 +DA:93,157 +DA:94,157 +DA:95,0 +DA:97,157 +DA:98,57 +DA:101,100 +DA:104,157 +DA:105,11 +DA:111,35 +DA:115,12 +DA:127,12 +DA:129,12 +DA:130,12 +DA:132,160 +DA:133,160 +DA:136,160 +DA:137,60 +DA:140,160 +DA:143,160 +DA:150,49 +DA:151,192 +DA:152,12 +DA:154,12 +DA:155,12 +DA:163,12 +DA:164,12 +DA:165,12 +DA:173,35 +DA:175,160 +DA:176,0 +DA:179,160 +DA:182,160 +DA:183,480 +DA:200,35 +DA:201,160 +DA:202,60 +DA:205,100 +DA:206,100 +DA:207,100 +DA:209,100 +DA:210,52 +DA:213,48 +DA:214,48 +DA:215,48 +DA:216,48 +DA:217,48 +DA:220,48 +DA:221,48 +DA:223,48 +LF:80 +LH:73 +BRDA:35,1,0,0 +BRDA:35,1,1,12 +BRDA:36,2,0,0 +BRDA:36,2,1,0 +BRDA:41,3,0,0 +BRDA:41,3,1,12 +BRDA:42,4,0,0 +BRDA:42,4,1,0 +BRDA:46,5,0,0 +BRDA:46,5,1,12 +BRDA:67,6,0,3 +BRDA:67,6,1,9 +BRDA:69,7,0,0 +BRDA:69,7,1,3 +BRDA:70,8,0,0 +BRDA:70,8,1,0 +BRDA:88,9,0,1 +BRDA:88,9,1,11 +BRDA:94,10,0,0 +BRDA:94,10,1,157 +BRDA:97,11,0,57 +BRDA:97,11,1,100 +BRDA:104,12,0,11 +BRDA:104,12,1,146 +BRDA:132,13,0,160 +BRDA:132,13,1,160 +BRDA:136,14,0,60 +BRDA:136,14,1,100 +BRDA:137,15,0,9 +BRDA:137,15,1,51 +BRDA:140,16,0,60 +BRDA:140,16,1,100 +BRDA:159,17,0,12 +BRDA:159,17,1,0 +BRDA:163,18,0,12 +BRDA:163,18,1,0 +BRDA:175,19,0,0 +BRDA:175,19,1,160 +BRDA:175,20,0,160 +BRDA:175,20,1,160 +BRDA:179,21,0,60 +BRDA:179,21,1,100 +BRDA:201,22,0,60 +BRDA:201,22,1,100 +BRDA:201,23,0,160 +BRDA:201,23,1,160 +BRDA:207,24,0,0 +BRDA:207,24,1,100 +BRDA:209,25,0,52 +BRDA:209,25,1,48 +BRDA:209,26,0,100 +BRDA:209,26,1,100 +BRDA:221,27,0,0 +BRDA:221,27,1,48 +BRF:54 +BRH:38 +end_of_record +TN: +SF:./lib/ecstatic/etag.js +FN:1,(anonymous_1) +FNF:1 +FNH:1 +FNDA:79,(anonymous_1) +DA:1,35 +DA:2,79 +DA:3,79 +DA:4,2 +DA:6,79 +LF:5 +LH:5 +BRDA:3,1,0,2 +BRDA:3,1,1,77 +BRF:2 +BRH:2 +end_of_record +TN: +SF:./lib/ecstatic/status-handlers.js +FN:4,(anonymous_1) +FN:10,(anonymous_2) +FN:24,(anonymous_3) +FN:36,(anonymous_4) +FN:49,(anonymous_5) +FN:63,(anonymous_6) +FN:85,(anonymous_7) +FNF:7 +FNH:4 +FNDA:5,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:13,(anonymous_4) +FNDA:2,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:2,(anonymous_7) +DA:1,35 +DA:4,35 +DA:5,5 +DA:6,5 +DA:10,35 +DA:11,0 +DA:12,0 +DA:13,0 +DA:16,0 +DA:17,0 +DA:18,0 +DA:24,35 +DA:25,0 +DA:26,0 +DA:27,0 +DA:30,0 +DA:31,0 +DA:36,35 +DA:37,13 +DA:38,13 +DA:39,9 +DA:42,4 +DA:43,4 +DA:44,4 +DA:49,35 +DA:50,2 +DA:51,2 +DA:52,0 +DA:55,2 +DA:56,2 +DA:57,2 +DA:63,35 +DA:64,0 +DA:65,0 +DA:66,0 +DA:81,0 +DA:85,35 +DA:86,2 +DA:87,2 +DA:88,2 +DA:103,2 +LF:41 +LH:25 +BRDA:12,1,0,0 +BRDA:12,1,1,0 +BRDA:16,2,0,0 +BRDA:16,2,1,0 +BRDA:26,3,0,0 +BRDA:26,3,1,0 +BRDA:30,4,0,0 +BRDA:30,4,1,0 +BRDA:30,4,2,0 +BRDA:38,5,0,9 +BRDA:38,5,1,4 +BRDA:42,6,0,4 +BRDA:42,6,1,0 +BRDA:51,7,0,0 +BRDA:51,7,1,2 +BRDA:55,8,0,2 +BRDA:55,8,1,0 +BRDA:66,9,0,0 +BRDA:66,9,1,0 +BRDA:66,9,2,0 +BRDA:88,10,0,2 +BRDA:88,10,1,0 +BRDA:88,11,0,2 +BRDA:88,11,1,2 +BRF:24 +BRH:8 +end_of_record +TN: +SF:./lib/ecstatic/opts.js +FN:6,(anonymous_1) +FN:24,isDeclared +FN:29,(anonymous_3) +FN:36,(anonymous_4) +FN:43,(anonymous_5) +FN:50,(anonymous_6) +FN:57,(anonymous_7) +FN:84,(anonymous_8) +FN:91,(anonymous_9) +FN:99,(anonymous_10) +FN:105,(anonymous_11) +FN:111,setHeader +FN:118,(anonymous_13) +FN:125,(anonymous_14) +FN:132,(anonymous_15) +FN:139,(anonymous_16) +FN:146,(anonymous_17) +FN:153,(anonymous_18) +FNF:18 +FNH:18 +FNDA:50,(anonymous_1) +FNDA:1340,isDeclared +FNDA:49,(anonymous_3) +FNDA:52,(anonymous_4) +FNDA:66,(anonymous_5) +FNDA:94,(anonymous_6) +FNDA:66,(anonymous_7) +FNDA:62,(anonymous_8) +FNDA:76,(anonymous_9) +FNDA:114,(anonymous_10) +FNDA:2,(anonymous_11) +FNDA:5,setHeader +FNDA:92,(anonymous_13) +FNDA:92,(anonymous_14) +FNDA:271,(anonymous_15) +FNDA:92,(anonymous_16) +FNDA:120,(anonymous_17) +FNDA:94,(anonymous_18) +DA:3,35 +DA:4,35 +DA:6,35 +DA:7,50 +DA:24,35 +DA:25,1340 +DA:28,50 +DA:29,38 +DA:30,49 +DA:31,27 +DA:32,27 +DA:36,38 +DA:37,52 +DA:38,24 +DA:39,24 +DA:43,38 +DA:44,66 +DA:45,10 +DA:46,10 +DA:50,38 +DA:51,94 +DA:52,10 +DA:53,10 +DA:57,38 +DA:58,66 +DA:59,10 +DA:60,10 +DA:64,38 +DA:65,16 +DA:68,38 +DA:69,16 +DA:70,13 +DA:72,3 +DA:73,1 +DA:75,2 +DA:76,2 +DA:80,38 +DA:81,18 +DA:84,38 +DA:85,62 +DA:86,14 +DA:87,14 +DA:91,38 +DA:92,76 +DA:93,20 +DA:94,20 +DA:95,20 +DA:99,38 +DA:100,114 +DA:101,4 +DA:102,2 +DA:104,2 +DA:105,1 +DA:106,2 +DA:109,1 +DA:111,35 +DA:112,5 +DA:113,5 +DA:114,5 +DA:118,38 +DA:119,92 +DA:120,11 +DA:121,11 +DA:125,38 +DA:126,92 +DA:127,11 +DA:128,11 +DA:132,38 +DA:133,271 +DA:134,6 +DA:135,6 +DA:139,38 +DA:140,92 +DA:141,11 +DA:142,11 +DA:146,38 +DA:147,120 +DA:148,11 +DA:149,11 +DA:153,38 +DA:154,94 +DA:155,10 +DA:156,10 +DA:161,50 +LF:84 +LH:84 +BRDA:25,1,0,1340 +BRDA:25,1,1,179 +BRDA:28,2,0,38 +BRDA:28,2,1,12 +BRDA:30,3,0,27 +BRDA:30,3,1,22 +BRDA:37,4,0,24 +BRDA:37,4,1,28 +BRDA:44,5,0,10 +BRDA:44,5,1,56 +BRDA:51,6,0,10 +BRDA:51,6,1,84 +BRDA:58,7,0,10 +BRDA:58,7,1,56 +BRDA:64,8,0,16 +BRDA:64,8,1,22 +BRDA:64,9,0,38 +BRDA:64,9,1,16 +BRDA:68,10,0,16 +BRDA:68,10,1,22 +BRDA:68,11,0,38 +BRDA:68,11,1,16 +BRDA:69,12,0,13 +BRDA:69,12,1,3 +BRDA:72,13,0,1 +BRDA:72,13,1,2 +BRDA:75,14,0,2 +BRDA:75,14,1,0 +BRDA:80,15,0,18 +BRDA:80,15,1,20 +BRDA:80,16,0,38 +BRDA:80,16,1,18 +BRDA:85,17,0,14 +BRDA:85,17,1,48 +BRDA:92,18,0,20 +BRDA:92,18,1,56 +BRDA:92,19,0,76 +BRDA:92,19,1,20 +BRDA:100,20,0,110 +BRDA:100,20,1,4 +BRDA:101,21,0,2 +BRDA:101,21,1,2 +BRDA:104,22,0,1 +BRDA:104,22,1,1 +BRDA:104,23,0,2 +BRDA:104,23,1,2 +BRDA:113,24,0,0 +BRDA:113,24,1,5 +BRDA:119,25,0,11 +BRDA:119,25,1,81 +BRDA:126,26,0,11 +BRDA:126,26,1,81 +BRDA:133,27,0,6 +BRDA:133,27,1,265 +BRDA:140,28,0,11 +BRDA:140,28,1,81 +BRDA:147,29,0,11 +BRDA:147,29,1,109 +BRDA:154,30,0,10 +BRDA:154,30,1,84 +BRDA:155,31,0,10 +BRDA:155,31,1,0 +BRDA:169,32,0,50 +BRDA:169,32,1,38 +BRDA:169,32,2,38 +BRF:65 +BRH:62 +end_of_record diff --git a/node_modules/ecstatic/example/cli.sh b/node_modules/ecstatic/example/cli.sh new file mode 100755 index 000000000..537801c7e --- /dev/null +++ b/node_modules/ecstatic/example/cli.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +../lib/ecstatic.js ./public --port 8080 + diff --git a/node_modules/ecstatic/example/core.js b/node_modules/ecstatic/example/core.js new file mode 100644 index 000000000..a50c667a3 --- /dev/null +++ b/node_modules/ecstatic/example/core.js @@ -0,0 +1,10 @@ +var http = require('http'); +var ecstatic = require('../lib/ecstatic')({ + root: __dirname + '/public', + showDir: true, + autoIndex: true +}); + +http.createServer(ecstatic).listen(8080); + +console.log('Listening on :8080'); diff --git a/node_modules/ecstatic/example/express.js b/node_modules/ecstatic/example/express.js new file mode 100644 index 000000000..1d29c0df5 --- /dev/null +++ b/node_modules/ecstatic/example/express.js @@ -0,0 +1,12 @@ +var express = require('express'); +var ecstatic = require('../lib/ecstatic'); +var http = require('http'); + +var app = express(); +app.use(ecstatic({ + root: __dirname + '/public', + showdir : true +})); +http.createServer(app).listen(8080); + +console.log('Listening on :8080'); diff --git a/node_modules/ecstatic/example/public/beep/index.html b/node_modules/ecstatic/example/public/beep/index.html new file mode 100644 index 000000000..3311713fd --- /dev/null +++ b/node_modules/ecstatic/example/public/beep/index.html @@ -0,0 +1 @@ +boop! diff --git a/node_modules/ecstatic/example/public/hello.txt b/node_modules/ecstatic/example/public/hello.txt new file mode 100644 index 000000000..cd0875583 --- /dev/null +++ b/node_modules/ecstatic/example/public/hello.txt @@ -0,0 +1 @@ +Hello world! diff --git a/node_modules/ecstatic/example/public/subdir/world.txt b/node_modules/ecstatic/example/public/subdir/world.txt new file mode 100644 index 000000000..abe0dc4bb --- /dev/null +++ b/node_modules/ecstatic/example/public/subdir/world.txt @@ -0,0 +1 @@ +hello cruel world! diff --git a/node_modules/ecstatic/example/public/turtle.png b/node_modules/ecstatic/example/public/turtle.png new file mode 100644 index 0000000000000000000000000000000000000000..721a796bb09004970b6de769a74da5a612781cbc GIT binary patch literal 195848 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

?SC_WXB?p4bg^?}=rubedfbpmG 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%0AxEm$vOw8;p)7zqZrU$sQ34|7=gL_p3~ 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 YcA)aNV_QA;BnbHEYny1Ht~o{j549Nmod5s; literal 0 HcmV?d00001 diff --git a/node_modules/ecstatic/example/union.js b/node_modules/ecstatic/example/union.js new file mode 100644 index 000000000..e162ec533 --- /dev/null +++ b/node_modules/ecstatic/example/union.js @@ -0,0 +1,10 @@ +var union = require('union'); +var ecstatic = require('../'); + +union.createServer({ + before: [ + ecstatic(__dirname + '/public') + ] +}).listen(8080); + +console.log('Listening on :8080'); diff --git a/node_modules/ecstatic/lib/ecstatic.js b/node_modules/ecstatic/lib/ecstatic.js new file mode 100755 index 000000000..b0026dd3a --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic.js @@ -0,0 +1,423 @@ +#! /usr/bin/env node + +var path = require('path'), + fs = require('fs'), + url = require('url'), + mime = require('mime'), + urlJoin = require('url-join'), + showDir = require('./ecstatic/show-dir'), + version = JSON.parse( + fs.readFileSync(__dirname + '/../package.json').toString() + ).version, + status = require('./ecstatic/status-handlers'), + generateEtag = require('./ecstatic/etag'), + optsParser = require('./ecstatic/opts'); + +var ecstatic = module.exports = function (dir, options) { + if (typeof dir !== 'string') { + options = dir; + dir = options.root; + } + + var root = path.join(path.resolve(dir), '/'), + opts = optsParser(options), + cache = opts.cache, + autoIndex = opts.autoIndex, + baseDir = opts.baseDir, + defaultExt = opts.defaultExt, + handleError = opts.handleError, + headers = opts.headers, + serverHeader = opts.serverHeader, + weakEtags = opts.weakEtags, + handleOptionsMethod = opts.handleOptionsMethod; + + opts.root = dir; + if (defaultExt && /^\./.test(defaultExt)) defaultExt = defaultExt.replace(/^\./, ''); + + // Support hashes and .types files in mimeTypes @since 0.8 + if (opts.mimeTypes) { + try { + // You can pass a JSON blob here---useful for CLI use + opts.mimeTypes = JSON.parse(opts.mimeTypes); + } catch (e) {} + if (typeof opts.mimeTypes === 'string') { + mime.load(opts.mimeTypes); + } + else if (typeof opts.mimeTypes === 'object') { + mime.define(opts.mimeTypes); + } + } + + + return function middleware (req, res, next) { + + // Strip any null bytes from the url + // This was at one point necessary because of an old bug in url.parse + // + // See: https://github.com/jfhbrook/node-ecstatic/issues/16#issuecomment-3039914 + // See: https://github.com/jfhbrook/node-ecstatic/commit/43f7e72a31524f88f47e367c3cc3af710e67c9f4 + // + // But this opens up a regex dos attack vector! D: + // + // Based on some research (ie asking #node-dev if this is still an issue), + // it's *probably* not an issue. :) + /* + while(req.url.indexOf('%00') !== -1) { + req.url = req.url.replace(/\%00/g, ''); + } + */ + + // Figure out the path for the file from the given url + var parsed = url.parse(req.url); + try { + decodeURIComponent(req.url); // check validity of url + var pathname = decodePathname(parsed.pathname); + } + catch (err) { + return status[400](res, next, { error: err }); + } + + var file = path.normalize( + path.join(root, + path.relative( + path.join('/', baseDir), + pathname + ) + ) + ), + gzipped = file + '.gz'; + + if(serverHeader !== false) { + // Set common headers. + res.setHeader('server', 'ecstatic-'+version); + } + Object.keys(headers).forEach(function (key) { + res.setHeader(key, headers[key]) + }) + + if (req.method === 'OPTIONS' && handleOptionsMethod) { + return res.end(); + } + + // TODO: This check is broken, which causes the 403 on the + // expected 404. + if (file.slice(0, root.length) !== root) { + return status[403](res, next); + } + + if (req.method && (req.method !== 'GET' && req.method !== 'HEAD' )) { + return status[405](res, next); + } + + function statFile() { + fs.stat(file, function (err, stat) { + if (err && (err.code === 'ENOENT' || err.code === 'ENOTDIR')) { + if (req.statusCode == 404) { + // This means we're already trying ./404.html and can not find it. + // So send plain text response with 404 status code + status[404](res, next); + } + else if (!path.extname(parsed.pathname).length && defaultExt) { + // If there is no file extension in the path and we have a default + // extension try filename and default extension combination before rendering 404.html. + middleware({ + url: parsed.pathname + '.' + defaultExt + ((parsed.search) ? parsed.search : ''), + headers: req.headers + }, res, next); + } + else { + // Try to serve default ./404.html + middleware({ + url: (handleError ? ('/' + path.join(baseDir, '404.' + defaultExt)) : req.url), + headers: req.headers, + statusCode: 404 + }, res, next); + } + } + else if (err) { + status[500](res, next, { error: err }); + } + else if (stat.isDirectory()) { + if (!autoIndex && !opts.showDir) { + status[404](res, next); + return; + } + + // 302 to / if necessary + if (!parsed.pathname.match(/\/$/)) { + res.statusCode = 302; + res.setHeader('location', parsed.pathname + '/' + + (parsed.query? ('?' + parsed.query):'') + ); + return res.end(); + } + + if (autoIndex) { + return middleware({ + url: urlJoin(encodeURIComponent(pathname), '/index.' + defaultExt), + headers: req.headers + }, res, function (err) { + if (err) { + return status[500](res, next, { error: err }); + } + if (opts.showDir) { + return showDir(opts, stat)(req, res); + } + + return status[403](res, next); + }); + } + + if (opts.showDir) { + return showDir(opts, stat)(req, res); + } + + } + else { + serve(stat); + } + }); + } + + // Look for a gzipped file if this is turned on + if (opts.gzip && shouldCompress(req)) { + fs.stat(gzipped, function (err, stat) { + if (!err && stat.isFile()) { + hasGzipId12(gzipped, function (err, isGzip) { + if (isGzip) { + file = gzipped; + return serve(stat); + } else { + statFile(); + } + }); + } else { + statFile(); + } + }); + } else { + statFile(); + } + + function serve(stat) { + // Do a MIME lookup, fall back to octet-stream and handle gzip + // special case. + var defaultType = opts.contentType || 'application/octet-stream', + contentType = mime.lookup(file, defaultType), + charSet; + + if (contentType) { + charSet = mime.charsets.lookup(contentType, 'utf-8'); + if (charSet) { + contentType += '; charset=' + charSet; + } + } + + if (file === gzipped) { // is .gz picked up + res.setHeader('Content-Encoding', 'gzip'); + + // strip gz ending and lookup mime type + contentType = mime.lookup(path.basename(file, ".gz"), defaultType); + } + + var range = (req.headers && req.headers['range']); + if (range) { + var total = stat.size; + var parts = range.replace(/bytes=/, "").split("-"); + var partialstart = parts[0]; + var partialend = parts[1]; + var start = parseInt(partialstart, 10); + var end = Math.min(total-1, partialend ? parseInt(partialend, 10) : total-1); + var chunksize = (end-start)+1; + if (start > end || isNaN(start) || isNaN(end)) { + return status['416'](res, next); + } + var fstream = fs.createReadStream(file, {start: start, end: end}); + fstream.on('error', function (err) { + status['500'](res, next, { error: err }); + }); + res.on('close', function () { + fstream.destroy(); + }); + res.writeHead(206, { + 'Content-Range': 'bytes ' + start + '-' + end + '/' + total, + 'Accept-Ranges': 'bytes', + 'Content-Length': chunksize, + 'Content-Type': contentType + }); + fstream.pipe(res); + return; + } + + // TODO: Helper for this, with default headers. + var lastModified = (new Date(stat.mtime)).toUTCString(), + etag = generateEtag(stat, weakEtags); + res.setHeader('last-modified', lastModified); + res.setHeader('etag', etag); + + if (typeof cache === 'function') { + var requestSpecificCache = cache(pathname); + if (typeof requestSpecificCache === 'number') { + requestSpecificCache = 'max-age=' + requestSpecificCache; + } + res.setHeader('cache-control', requestSpecificCache); + } else { + res.setHeader('cache-control', cache); + } + + // Return a 304 if necessary + if (shouldReturn304(req, lastModified, etag)) { + return status[304](res, next); + } + + res.setHeader('content-length', stat.size); + res.setHeader('content-type', contentType); + + // set the response statusCode if we have a request statusCode. + // This only can happen if we have a 404 with some kind of 404.html + // In all other cases where we have a file we serve the 200 + res.statusCode = req.statusCode || 200; + + if (req.method === "HEAD") { + return res.end(); + } + + var stream = fs.createReadStream(file); + + stream.pipe(res); + stream.on('error', function (err) { + status['500'](res, next, { error: err }); + }); + } + + function shouldReturn304(req, serverLastModified, serverEtag) { + if (!req || !req.headers) { + return false; + } + + var clientModifiedSince = req.headers['if-modified-since'], + clientEtag = req.headers['if-none-match']; + + if (!clientModifiedSince && !clientEtag) { + // Client did not provide any conditional caching headers + return false; + } + + if (clientModifiedSince) { + // Catch "illegal access" dates that will crash v8 + // https://github.com/jfhbrook/node-ecstatic/pull/179 + try { + var clientModifiedDate = new Date(Date.parse(clientModifiedSince)); + } + catch (err) { return false } + + if (clientModifiedDate.toString() === 'Invalid Date') { + return false; + } + // If the client's copy is older than the server's, don't return 304 + if (clientModifiedDate < new Date(serverLastModified)) { + return false; + } + } + + if (clientEtag) { + // Do a strong or weak etag comparison based on setting + // https://www.ietf.org/rfc/rfc2616.txt Section 13.3.3 + if (opts.weakCompare && clientEtag !== serverEtag + && clientEtag !== ('W/' + serverEtag) && ('W/' + clientEtag) !== serverEtag) { + return false; + } else if (!opts.weakCompare && (clientEtag !== serverEtag || clientEtag.indexOf('W/') === 0)) { + return false; + } + } + + return true; + } + }; +}; + +ecstatic.version = version; +ecstatic.showDir = showDir; + +function hasGzipId12(gzipped, cb) { + var stream = fs.createReadStream(gzipped, { start: 0, end: 1 }), + buffer = Buffer(''), + hasBeenCalled = false; + + stream.on("data", function (chunk) { + buffer = Buffer.concat([buffer, chunk], 2); + }); + + stream.on("error", function (err) { + if (hasBeenCalled) { + throw err; + } + + hasBeenCalled = true; + cb(error); + }); + + stream.on("close", function () { + if (hasBeenCalled) { + return; + } + + hasBeenCalled = true; + cb(null, buffer[0] == 31 && buffer[1] == 139); + }); +} + +// Check to see if we should try to compress a file with gzip. +function shouldCompress(req) { + var headers = req.headers; + + return headers && headers['accept-encoding'] && + headers['accept-encoding'] + .split(",") + .some(function (el) { + return ['*','compress', 'gzip', 'deflate'].indexOf(el) != -1; + }) + ; +} + +// See: https://github.com/jesusabdullah/node-ecstatic/issues/109 +function decodePathname(pathname) { + var pieces = pathname.replace(/\\/g,"/").split('/'); + + return pieces.map(function (piece) { + piece = decodeURIComponent(piece); + + if (process.platform === 'win32' && /\\/.test(piece)) { + throw new Error('Invalid forward slash character'); + } + + return piece; + }).join('/'); +} + +if (!module.parent) { + var defaults = require('./ecstatic/defaults.json') + var http = require('http'), + opts = require('minimist')(process.argv.slice(2), { + alias: require('./ecstatic/aliases.json'), + default: defaults, + boolean: Object.keys(defaults).filter(function (key) { + return typeof defaults[key] === 'boolean' + }) + }), + envPORT = parseInt(process.env.PORT, 10), + port = envPORT > 1024 && envPORT <= 65536 ? envPORT : opts.port || opts.p || 8000, + dir = opts.root || opts._[0] || process.cwd(); + + if (opts.help || opts.h) { + var u = console.error; + u('usage: ecstatic [dir] {options} --port PORT'); + u('see https://npm.im/ecstatic for more docs'); + return; + } + + http.createServer(ecstatic(dir, opts)) + .listen(port, function () { + console.log('ecstatic serving ' + dir + ' at http://0.0.0.0:' + port); + }); +} diff --git a/node_modules/ecstatic/lib/ecstatic/aliases.json b/node_modules/ecstatic/lib/ecstatic/aliases.json new file mode 100644 index 000000000..0ef56a117 --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/aliases.json @@ -0,0 +1,34 @@ +{ + "autoIndex": [ "autoIndex", "autoindex" ], + "showDir": [ "showDir", "showdir" ], + "showDotfiles": ["showDotfiles", "showdotfiles"], + "humanReadable": [ "humanReadable", "humanreadable", "human-readable" ], + "si": [ "si", "index" ], + "handleError": [ "handleError", "handleerror" ], + "cors": [ "cors", "CORS" ], + "headers": [ "H", "header", "headers" ], + "serverHeader": [ "serverHeader", "serverheader", "server-header" ], + "contentType": [ "contentType", "contenttype", "content-type" ], + "mimeType": [ + "mimetype", + "mimetypes", + "mimeType", + "mimeTypes", + "mime-type", + "mime-types", + "mime-Type", + "mime-Types" + ], + "weakEtags": [ "weakEtags", "weaketags", "weak-etags" ], + "weakCompare": [ + "weakcompare", + "weakCompare", + "weak-compare", + "weak-Compare" + ], + "handleOptionsMethod": [ + "handleOptionsMethod", + "handleoptionsmethod", + "handle-options-method" + ] +} diff --git a/node_modules/ecstatic/lib/ecstatic/defaults.json b/node_modules/ecstatic/lib/ecstatic/defaults.json new file mode 100644 index 000000000..501f31a76 --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/defaults.json @@ -0,0 +1,17 @@ +{ + "autoIndex": true, + "showDir": true, + "showDotfiles": true, + "humanReadable": true, + "si": false, + "cache": "max-age=3600", + "cors": false, + "gzip": false, + "defaultExt": ".html", + "handleError": true, + "serverHeader": true, + "contentType": "application/octet-stream", + "weakEtags": false, + "weakCompare": false, + "handleOptionsMethod": false +} diff --git a/node_modules/ecstatic/lib/ecstatic/etag.js b/node_modules/ecstatic/lib/ecstatic/etag.js new file mode 100644 index 000000000..a64ccb04a --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/etag.js @@ -0,0 +1,7 @@ +module.exports = function (stat, weakEtag) { + var etag = '"' + [stat.ino, stat.size, JSON.stringify(stat.mtime)].join('-') + '"'; + if (weakEtag) { + etag = 'W/' + etag; + } + return etag; +} diff --git a/node_modules/ecstatic/lib/ecstatic/opts.js b/node_modules/ecstatic/lib/ecstatic/opts.js new file mode 100644 index 000000000..ea080a6b0 --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/opts.js @@ -0,0 +1,180 @@ +// This is so you can have options aliasing and defaults in one place. + +var defaults = require('./defaults.json'); +var aliases = require('./aliases.json') + +module.exports = function (opts) { + var autoIndex = defaults.autoIndex, + showDir = defaults.showDir, + showDotfiles = defaults.showDotfiles, + humanReadable = defaults.humanReadable, + si = defaults.si, + cache = defaults.cache, + gzip = defaults.gzip, + defaultExt = defaults.defaultExt, + handleError = defaults.handleError, + headers = {}, + serverHeader = defaults.serverHeader, + contentType = defaults.contentType, + mimeTypes, + weakEtags = defaults.weakEtags, + weakCompare = defaults.weakCompare, + handleOptionsMethod = defaults.handleOptionsMethod; + + function isDeclared(k) { + return typeof opts[k] !== 'undefined' && opts[k] !== null; + } + + if (opts) { + aliases.autoIndex.some(function (k) { + if (isDeclared(k)) { + autoIndex = opts[k]; + return true; + } + }); + + aliases.showDir.some(function (k) { + if (isDeclared(k)) { + showDir = opts[k]; + return true; + } + }); + + aliases.showDotfiles.some(function (k) { + if (isDeclared(k)) { + showDotfiles = opts[k]; + return true; + } + }); + + aliases.humanReadable.some(function (k) { + if (isDeclared(k)) { + humanReadable = opts[k]; + return true; + } + }); + + aliases.si.some(function (k) { + if (isDeclared(k)) { + si = opts[k]; + return true; + } + }); + + if (opts.defaultExt && typeof opts.defaultExt === 'string') { + defaultExt = opts.defaultExt; + } + + if (typeof opts.cache !== 'undefined' && opts.cache !== null) { + if (typeof opts.cache === 'string') { + cache = opts.cache; + } + else if (typeof opts.cache === 'number') { + cache = 'max-age=' + opts.cache; + } + else if (typeof opts.cache === 'function') { + cache = opts.cache + } + } + + if (typeof opts.gzip !== 'undefined' && opts.gzip !== null) { + gzip = opts.gzip; + } + + aliases.handleError.some(function (k) { + if (isDeclared(k)) { + handleError = opts[k]; + return true; + } + }); + + aliases.cors.forEach(function(k) { + if (isDeclared(k) && k) { + handleOptionsMethod = true; + headers['Access-Control-Allow-Origin'] = '*'; + headers['Access-Control-Allow-Headers'] = 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since'; + } + }); + + aliases.headers.forEach(function (k) { + if (!isDeclared(k)) return; + if (Array.isArray(opts[k])) { + opts[k].forEach(setHeader); + } + else if (opts[k] && typeof opts[k] === 'object') { + Object.keys(opts[k]).forEach(function (key) { + headers[key] = opts[k][key]; + }); + } + else setHeader(opts[k]); + + function setHeader (str) { + var m = /^(.+?)\s*:\s*(.*)$/.exec(str) + if (!m) headers[str] = true + else headers[m[1]] = m[2] + } + }); + + aliases.serverHeader.some(function (k) { + if (isDeclared(k)) { + serverHeader = opts[k]; + return true; + } + }); + + aliases.contentType.some(function (k) { + if (isDeclared(k)) { + contentType = opts[k]; + return true; + } + }); + + aliases.mimeType.some(function (k) { + if (isDeclared(k)) { + mimeTypes = opts[k]; + return true; + } + }); + + aliases.weakEtags.some(function (k) { + if (isDeclared(k)) { + weakEtags = opts[k]; + return true; + } + }); + + aliases.weakCompare.some(function (k) { + if (isDeclared(k)) { + weakCompare = opts[k]; + return true; + } + }); + + aliases.handleOptionsMethod.some(function (k) { + if (isDeclared(k)) { + handleOptionsMethod = handleOptionsMethod || opts[k]; + return true; + } + }); + } + + return { + cache: cache, + autoIndex: autoIndex, + showDir: showDir, + showDotfiles: showDotfiles, + humanReadable: humanReadable, + si: si, + defaultExt: defaultExt, + baseDir: (opts && opts.baseDir) || '/', + gzip: gzip, + handleError: handleError, + headers: headers, + serverHeader: serverHeader, + contentType: contentType, + mimeTypes: mimeTypes, + weakEtags: weakEtags, + weakCompare: weakCompare, + handleOptionsMethod: handleOptionsMethod + }; +}; diff --git a/node_modules/ecstatic/lib/ecstatic/show-dir/icons.json b/node_modules/ecstatic/lib/ecstatic/show-dir/icons.json new file mode 100644 index 000000000..9fa76ae21 --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/show-dir/icons.json @@ -0,0 +1,65 @@ +{ + "_blank": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWBJREFUeNqEUj1LxEAQnd1MVA4lyIEWx6UIKEGUExGsbC3tLfwJ/hT/g7VlCnubqxXBwg/Q4hQP/LhKL5nZuBsvuGfW5MGyuzM7jzdvVuR5DgYnZ+f99ai7Vt5t9K9unu4HLweI3qWYxI6PDosdy0fhcntxO44CcOBzPA7mfEyuHwf7ntQk4jcnywOxIlfxOCNYaLVgb6cXbkTdhJXq2SIlNMC0xIqhHczDbi8OVzpLSUa0WebRfmigLHqj1EcPZnwf7gbDIrYVRyEinurj6jTBHyI7pqVrFQqEbt6TEmZ9v1NRAJNC1xTYxIQh/MmRUlmFQE3qWOW1nqB2TWk1/3tgJV0waVvkFIEeZbHq4ElyKzAmEXOx6gnEVJuWBzmkRJBRPYGZBDsVaOlpSgVJE2yVaAe/0kx/3azBRO0VsbMFZE3CDSZKweZfYIVg+DZ6v7h9GDVOwZPw/PoxKu/fAgwALbDAXf7DdQkAAAAASUVORK5CYII=", + "_page": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmhJREFUeNpsUztv01AYPfdhOy/XTZ80VV1VoCqlA2zQqUgwMEErWBALv4GJDfEDmOEHsFTqVCTExAiiSI2QEKJKESVFFBWo04TESRzfy2c7LY/kLtf2d8+555zvM9NaI1ora5svby9OnbUEBxgDlIKiWjXQeLy19/X17sEtcPY2rtHS96/Hu0RvXXLz+cUzM87zShsI29DpHCYt4E6Box4IZzTnbDx7V74GjhOSfwgE0H2638K9h08A3iHGVbjTw7g6YmAyw/BgecHNGGJjvfQhIfmfIFDAXJpjuugi7djIFVI4P0plctgJQ0xnFe5eOO02OwEp2VkhSCnC8WOCdqgwnzFx4/IyppwRVN+XYXsecqZA1pB48ekAnw9/4GZx3L04N/GoTwEjX4cNH5vlPfjtAIYp8cWrQutxrC5Mod3VsXVTMFSqtaE+gl9dhaUxE2tXZiF7nYiiatJ3v5s8R/1yOCNLOuwjkELiTbmC9dJHpIaGASsDkoFQGJQwHWMcHWJYOmUj1OjvQotuytt5nHMLEGkCyx6QU384jwkUAd2sxJbS/QShZtg/8rHzzQOzSaFhxQrA6YgQMQHojCUlgnCAAvKFBoXXaHfArSCZDE0gyWJgFIKmvUFKO4MUNIk2a4+hODtDUVuJ/J732AKS6ZtImdTyAQQB3bZN8l9t75IFh0JMUdVKsohsUPqRgnka0tYgggYpCHkKGTsHI5NOMojB4iTICCepvX53AIEfQta1iUCmoTiBmdEri2RgddKFhuJoqb/af/yw/d3zTNM6UkaOfis62aUgddAbnz+rXuPY+Vnzjt9/CzAAbmLjCrfBiRgAAAAASUVORK5CYII=", + "aac": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNp0Uk1PE0EYftruVlvAUkhVEPoBcsEoLRJBY01MPHjCs3cvogcT/4qJJN5NvHhoohcOnPw4YEGIkCh+oLGBKm3Z7nZ3dme2vjOhTcjiJJvZzPvOM8/HG2q325Dr3kLp7Y1ibpIxjs4KhQBZfvV6s7K5Vb0bjeof5ZlcGysP1a51mifODybvzE8mzCbrAoTDIThMoGXZiZ4YSiurf+Z1XeuCqJ7Oj+sK3jQcNAmg8xkGQ71mYejcAB49vpmeuzJccl0+dUj6KIAvfHCPg3N+uAv4vg9BOxcCmfEzuP/genpmeqhEMgude10Jwm+DuUIyUdTlqu2byoMfX/dRermBeExHsTiWNi3+lMpzRwDki8zxCIATmzbevfmClukiP5NFhJgwkjeRTeLShdOoVJqnAgwkgCAZ6+UdLC9twjQZ8pdzioFkZBHY3q6B3l4dJEEEPOCeD4cYVH7Xsf15F+FImC775INAJBJSkVoWo0QY9YqgiR4ZZzRaGBkdwK3bFxGLRZUfB3Rm2x4x9CGtsUxH9QYkKICDFuLxKAozGZwdTqBRs2FbLlXbiPdECMCHadj/AaDXZNFqedCIvnRcS4UpRo7+hC5zUmw8Ope9wUFinvpmZ7NKt2RTmB4hKZo6n8qP4Oq1HBkKlVYAQBrUlziB0XQSif4YmQhksgNIJk9iaLhPaV9b/Um+uJSCdzyDbGZQRSkvjo+n4JNxubGUSsCj+ZCpODYjkGMAND2k7exUsfhkCd+29yguB88Wl7FW/o6tT7/gcXqAgGv7hhx1LWBireHVn79YP6ChQ3njb/eFlfWqGqT3H3ZlGIhGI2i2UO/U/wkwAAmoalcxlNA1AAAAAElFTkSuQmCC", + "ai": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk5JREFUeNpsU01vElEUPTPzZqBAQaSFQiJYUmlKYhoTF41L3Tbu/Q/+AvsX3Bp/gPsuWLrqyqQ7TUxMtAvF1tYGoXwNw7wv7zwYgtKX3Lw379575p5z77O01ohW+/DVh8zj7aYKhflGdG9ZsGwLNydffgVfr19YHvsEa+Zu/nxndob5StQK+dyzvZzyw/gKlmMj7IygFM+xvNcanp4/t5dAomXHBy2UUBOO2MAl/B9/cPb6PULuoHx0WM0e3GvpUOxD3wZAJWutZqYUYmqpSg5OMgH3YQObL59W0/ullpryR3HegkKEqiWBSGV4R3vQ7sIhScTZFTpHx3A215B5sluVY/WWMg7+ATB/lcLsKpTonHzD+OMFEuTz8ikkt9Kwt9YJZB38cpBdoQAZJdLvCGByfoPB6Xdk90pYy6Xg3c/DaWwArg09DaG5lCsUFN0pckZAojdC8m4auBqaALuSgez7VB1RtDSUWOQvUaBLFUzJBMJ2DwmPgd1Jwm0WoSgJfjDvrTKxtwAIyEkAOQ5hU//Zdg5uowDlUNMnwZLW0sSuUuACYhwQRwFvJxupCjEYUUccOkoaKmdOlZnY1TkgAcXAhxhOwLsDsHoN3u4O5JTDfVCH6I9nfjId3gIgSUATFJk/hVevGtOMwS0XwQ3AzB/FrlKg8Q27I2javVoZrFgwD4qVipAEyMlnaFArzaj/D0DiMXlJAFQyK2r8fnMMRZp4lQ1MaSL5tU/1kqAkMCh2tYI+7+kh70cjPbr4bEZ51jZr8TJnB9PJXpz3V4ABAPOQVJn2Q60GAAAAAElFTkSuQmCC", + "aiff": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAohJREFUeNpkU9tqE1EUXZmZpE3aTBLbJFPTtFURtSCthr7UCyKKFJ/9An3og6Ag/oXfoUj7og9asCBYKT6UIPHaWtpq7NU2aZK5z5wZ9xxMpMwZDuewz9prr32ZiO/7CNaDx3OLt6fOjBqGg/aKRCIInp8+KzfKH7fudnVF58nE16el+/yU2mBFSWZKpWJKVc0OgUBo02K4NDmU6o75Mx+Wdu9IUXFeiOA/pn1xHeYaugVDdzpbp91qGlAKGTx8dC19/Wpxhjnsxj/RRwk85hGJC9d1O6fneWAuoztDYSSLe9OT6SuXB2ccx73Z9uukwDwfls1g0xZIY/Ad/Gnyt/XVfbyYrSDRE8PExHB6/8B6QuaxIwRBFMt0iIAiMx+LCys8jfGJEUik2WpZOD2SQf9oDtVqQwopCAiY66FS/om3b75CVS2MlU7AJ2WiJBCZjZ2dJuRkDJZFwFAR7UCBja3fNfxY2YEoCtRCj9em3Tpds6FpJseGCBxS0GgYGBzqw62p84gnYnAI2CSbSbPhEpFAaE2zODaUAlWWwDoS5DheGqbWpVE/0CmqCY9qkEyINBceb2uADRNQ8bSWAVVzIFKomCQim+0luS4yKYlsHlRyZo7EsSEC23K5vAsXh/H92zZkuRvxeBS5nEx2yp2KqhxPoV5TYS/8CtdApylM9sZQKKSQzyeRTseRV2QoAzIYY8jme5DN9fI0dQoUIjANGydP9VM7PZw9p/AiBpNYrdbw/t0yTJqRtdU9UrfJCUMpSJIgbWzsYe51BcViHzLHeqCRqhZ1YX1tFwNfZBxS9O3NWkAcHqR606k/n/3coKAoV/Y7vQ/OYCZevlrmv3c0GsFh06u3/f4KMABvSWfDHmbK2gAAAABJRU5ErkJggg==", + "avi": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1JREFUeNpsU8tu00AUPXZcN0nzTpq2KQ3pAwkIAnWHqCoeexBb+AQ+ABZ8A2s+AIkdm266QUJIFWKBkHg1KpRHi5omJGkbJ3bGHj+4M1EQrTvSyGPPueeec++1EgQBxHp+/9mbyuriRZdxjJaiKBD3W+u1+p9a856max+gDO8ebT+WT20Ezi9NZi/crqadvn2MQBAGfpCOpqNru2937vxPIpY6Onjccx3Twck9MBiSU0ncfHirXFmZX3Md9wqCUwiEVN/zaQfHt0vfbBe5uQyuPVgpl5Zn11ybL4/i/lkICOw5niQRGQShoiqI6Bo43W2ub8n3hRtLZT7gTynk6gkCX9gAOxpAnxhHZDwC1/aI1EViJolu/QhKRMHZ1UX0Gr1USIEn5FPWHy+/wTokkrQOq2vBaHZBN4hmY9Jwfr4An/teiEB45ZZDwDiMhoExT0N+sYDCuUkkplLIlXP4/XEXdo+RUhdhBSSfUwtVTUG8MIHK9QVqI7D/uY6vr2pwmCPrkz+Tk9gwARWQ9WxppbXZhNnpw+ya4A5HZi6L4lIR8WyCcL6sTZiAWjWgAmpxkn5+kqTamK6WkCwmERmLDLvjB0ML9ikWXPLFuozYOap3L8HYN6DHdbS/d5CeTVBndBz87FCBLYkNTyIjBQemnIEsSY5lYrK1+UoWcToLMjEHAyIQ2BCBSx/NVh+ZUhrqmEqBebS3WyhdLg0zt/ugAaIklsSGLHCLa6zDMGhZ2HjyGsnpFPqNHnY2fmHv3R5SMymYbROszSQ2ROAY9qHiofvlxSc5xsKKqqnY3diRE9h4X5d/pzg7lnM4ivsrwADe9Wg/CQJgFAAAAABJRU5ErkJggg==", + "bmp": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmZJREFUeNp0U+1rUlEY/13v9YV0vq2wttI5CdpL9aEGBZUDv0df668I6n+or0UQ/RuuD0EgVDAZrsKF4AR1a6COKW5qXvXec27PuVeda3bgcF6e8/ye5/d7niMZhgExnK9fbTrm5pbBGMZDkgCyq+VyhTUaT6Eo2ZHJePPWXJXRhez3B1yxmM/QdctXUSCgtV4Py4CvY3cky4e1x5DlLCaGbbzjXDcousG5OQe5HPRSCQPK4PpsEM/XH4WvhS4noeu3JwHGGRiULhsMoKZS4I0GtEIB9mgULJGA0+9DPBpBT7sffvf1W/Lg6OgJufw8C0CRGEXWazUwiiyFQjA8bsjVKjaJzovMD/Q5gxyJhG2cvyeXe2cAuADQNGBmBvLaGuTFRaDfh31lBTWi9pumjbK0B4JQul3vOQpM8JdskOLrdCvDcDjAsjtg5TIkoiKLaokMNR2cnZbqNAMycqG7XbHKR2fMzwO/dsxSwu0BiBJsNsv2LwAJAJCI5ux2gXYbqNetcz5PoORI1cDS0n8AxGW7A+zvEYBKZ2ZlcsEtJLbedMjePBaCTQMghx45ulyWkzxMVUQ2RMQhLfFO16YAqCrixPnm6iqKrRb2W23EfF4cUNSrHg90cr7hDyB33MTnSmUKALVs4uIlROjxg+AsPhGVl3fuIl2tIOB0Ya91gkOi9mxhAal0ekork1ic/kGLBORMxy2K1qS9V1ZQbNThIj2EGh+2tsyOnSai8r1UxMNIBB+LRTTULr4Uds0K1tU/uOLxIrmbNz8XXSrnASSpubG9fbKRyVh1n/zSw29t9oC1b47MfwUYAAUsLiWr4QUJAAAAAElFTkSuQmCC", + "c": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcxJREFUeNqEUk1rE0EYfmZnkgoJCaGNCehuJTalhJZSUZB66a0HwXsP/Qn+FM+9+hty0LNYCr2I7UVLIW0Fc0hpQpSS7O7MrO9MspuvVV8YMnk/nn2e5x0WRRFMvP/w6WSz5jbi/9NxfP693Wp3DrJCnMW5d28P7a+IE15lufR8o1ZEStwPhkWHsWbrZ+eNEPxsuubEF6m0TBv2Q4liPofXuzveulttSqW2UwH+GjqC0horpSL2njU89+FyMwjlTlxOJMTa9ZQHzDQIjgwdom9zLzfXPc75kbnOAswBJTlC2XrqQRMLxhi442DgB4UFBhgPpm3B5pgBHNUUxQKAHs8pHf3TEuFMetM9IKr/i2mWMwC0SnuSFTG2YKyppwKYVdGO7TFhzBqGIenVeLCUtfURgErucx5ECKREKBU4d3B718PHz6cICGT/1Qs8qpQtGOdyhtGEARWDQFqQJSeDL98u4VbLaKw9IRAJPwjtoJGlVAoDQ800+fRFTTYXcjlcXN2g++s36p5Lzzlve1iEROa8BGH1EbrSAeqrjxEqicHQt8/YSDHMpaNs7wJAp9vvfb287idboAVkRAa5fBYXP9rxO4Mgf0xvPPdHgAEA8OoGd40i1j0AAAAASUVORK5CYII=", + "cpp": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfJJREFUeNqEUs9PE0EU/mZ2WgqpXX+QIDFdalVslh8NlAOQaOKFAwfvHvwT/FM8e/U/MOnBmwcj8WD0ACEGghIkbU0baaEthe3OTJ0ZWV26q37JZt68ee/b9733yGAwgMbL12/fz+azbnAPY2Nrt7Zfqz9JMrYZ+J4/e2pOFjiciRvXlgp5GzHonXk2o6S8V6k/TjBrM/xGA4MLyeOSPZ8jkx7D+uqCU3Amy1yIYizB36AlCSkwfjWDR4uu40yMl/s+XwjeWThQQ4Z6QNSnSkYykcDXasP4lmfvOZTSF9q8TDBEFPbN5bOqCglCCCxK0TvvZyIV4CIxbgpC+4gm/PUmFCIE8iJPyME/e8Lon9j4HvyHYLjKSwRCSEUgf9+15mFbx8QS6CZJMzJ9SlBCwX3fJDLG4PX7ykcwkmQmJtpEhWa7g1dvNlSwjwelebz7tAXLolh0p/Fxe9fErK2WDFGEgKjxfNjegX0lDTc/heNuF99/HGEslcKXwyoazWNDdlCr6+DoJgrBzdI0T9rYO6yg2zszMlaKM3Dv5OBzbuyZuzm1B16U4Nzz2f3cFOx0Gq12F9cztpExncsqYoaHpSIKtx0zJdVIFpHQ6py29muNk1uTN829o/6SHEnh80HFaE6NjmLnWxUJy1LyTltB3k8BBgBeEeQTiWRskAAAAABJRU5ErkJggg==", + "css": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNpsUktvUlEQ/u5DoCLl/RAKKKUvWmIxjYntQtcu3LvwJ/hTXLt16coFC2PsojEaMKZtCqFaTdGmjbS0CG3By+vei3OOBSGXSU7uzNyZ78z3zRF6vR6YvXzzPrMUCyf68bB9zO+VfpROn5hkOdfPPX/2lH/lfiLidztX5mN2jLGG0rKLENIE8liWpdzwP7HvqJqujmvudFU4bFY8Wk1FZsOBtKppd8YCDNu77CZevd3gflfTUFcUhP0ePLibiIR9rjSBpgwAfe4dVcV6dhtep4PH5msylGYLrzeybErcT85FYiH/CyPAf74gObC2vMhzsiRhPhpC6eQUM+EA1pJzILEnjRSuJsju7MJqsUCSRei6Dp3yXqcdGlHZ/rLPazQWGCn8+6YW4pAkEW0SjzUzanWlCa/LgcR0lNfovTEi6lcIkzesnM/R8RlN0INGp3h4DHoDsE5YRvQyiKiRSMzikRAOS2WoqoZWu41K7RwzlOOAVDMMMHhIGvFlRxJFrKYW0ep0IYgC3SDh4b1lTJjNfENsrazOAMAw680mPuW+8lFno1P4XDigRhOiwQAyJK7TbsNS/PaA7giAIAhYz2yRgBIfsVA8wIetPG6FAqhdNrC5u0f+TUyHgyMTDDToEt/ftQsEvW4EPG5OZcrvw0mlimarTXkPfpXPcNlQoGtjACgpryQXsPNtH/nvRXqBJpoKHMzGNkNB0Odls7LNyAYKpUq1dt1iuvB7fRDp9kr9D1xOFwkpoksXusmXaZWFn0coV89r/b6/AgwAkUENaQaRxswAAAAASUVORK5CYII=", + "dat": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfVJREFUeNqMU01PE1EUPe/Na0uptmlASg3MoiZgCA3hQ8PHAjbqwsS9C3+CP8W1W/+BSReyYUPwI4QAVkAgUEgIbVIg1FZb2pl5b3zv2cHBjsaTTOa+e989OffcGeK6LhTevFv+OJoZHPHOfrz/sl86KpWfhxnLe7lXL1/oN/MSZqonOXU/k0AA6lfNhEFIrlAsP2PMyPtr1AscLpyg5pbtIHErhqez4+awmc45nI8FEvwNaiQuBHqTcSxMjJhmX0/Osp1xr878FxWEzwMinxAzEA4xFIpnOjedHTKpYbxW4U2CP4j8uWxmUKsghMCgFI2mFe9QgHZj0Ba4yhFF+KvGJToIRLuPC/efnjD6+26wB1Lq/xgbSCBXKeWJG/OTdky8cWTdT3C9RmWSGk2XCLlWo4xTNbfN5qh7PpXM72GjZeHt0gpq9QbmH4whGb+NpU/reDQ7hcWVVXxvXOHxzCQopQEKXKEbL6o1ZIcy+LC5g62DY2zsHeC0fA4zndIrHOjvg2XbAQRSfsuy9XxC2qzi/H5B6/68W0AsGkW0KyJPBLbDO0fg3JX/CUM81i0bD6WKe6j9qOPJ3EMcF0tSNsFA6g6alqW+VtZBUL78Vtk+Oqne7U9rs5qOQCjSheJFBeFIFOfVujSUYu3rIc4uqxWv76cAAwCwbvRb3SgYxQAAAABJRU5ErkJggg==", + "dmg": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAn9JREFUeNpsU01rE1EUPe9lkk47yWTStCmtNhFSWxos2EXVhSsRcasuxYV05V8Qf4DgD/AvCK5EV1oFI7iUBqmCNdDvppq2mWSSzEzy3vPOpFFq+uDNfR/3nnvueXeYUgrBWH1/9/NE7k5BKRnuRcfF2qdnmJq9DeF9tQ+2isuMsxXGWHh/a1mEVsPJSI5fSU3OPEj291IIlN49RXz0KqzEQjIeZS/L5Y/3wPGhDxIM/i/A7fZWgVG0t5EaG0ZUa0JGM8gvPrZmLt58QYwv91mfAqCIE0sAqgumBFITGQzpUYhuF0KfRa7waDyXXXolpVrsh/0tgSLDr5I+wUZo1UHCSkAficPzY6juFSmbRPrC/azjq+fkcO00gAqoU7B0ETKkfWbuCTjTYeq5oESAauexcTScX+ZACWFm0YQSLZKhHdr67+/wW0e0dgjYo3sCEXXybYtBDVSHLp2es3IpsILS24c42lkBg6DzRjgRzCDZ/xr0GNRJwwYiWgzt+hYMawleu0V3wbkT+kUirOc7IGJAz68R/Qak1BAlx3hqASPGBJRXpXOv58dkz3eAgQoOm4hyj57NgZm0MHvpBmK6QdUdg/DAg9cRkhicBSDaKJdeo1bdxmR2DtWDDUxl51HZ+QHTysD3XdQO95Gfv06aeGcAdBrY3Chi8lwO3768QWX7J5q1XWyVSxgajiOXLyBG2hzurRKV9lmt7ISNkkjo6HhNyjoK+2gXRsKE57ZIE2ot10Z1fz0Ue4ABVw3NMjnW14rInh8jTYywoTg3EOFpOM4mXNfH9PQUfGlrAwBOs3I8ljbtuMWhRWzIIPrkn+GcYcgIWEowbZ+0qB334/4IMADESjqbnHbH0gAAAABJRU5ErkJggg==", + "doc": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAppJREFUeNpsU79PFEEU/mZ39vZu77g7DokcP04BBSUmiEKCSCxs7Ei00JAYO2NlTKyMrX+CJhaGwopSQ0dMtFEsbDRBgiZEQIF4IHcg+2t2Z8eZ5QDlnM1mZ9+8973vfe8NEUJArfSNhzPG0VIfeIiDRSDkw1cWVt3N8rhG6SdSO2Gvn8dfuueqZwuNZqk3Jxg7iNcIfBbgXD6ZC8u5qffzX8eoYeyDxC77uygKhcouovgVUQj1H4YB2ovNuD9+tTTU0zMVBmG/+C8AIYh8F361DL/yE5HnADKYlVdg6MDAmW7cuz5WGuw+PsWDYGAvbL8ECFUt4K7/AHd/I9c7BLaxinD2Ld5Zo7g78RLuRhlBS2cpWbGfStfhfwCEpK0nUjCbWuGsLciSOELPhkq/YgdY3l6HsLfRcLYf+pHNbH0JigEPkLAyMsiEJ7NrqQzM1i7wyhoMZqOhvQs6Z0ovXgdAJACRoulEg5HOwrOroKk0zOY2BDtVpTF0CU6kLkQJXa+BNEoG0lMSsBBKQXWNQktmoGcaYeSaQCIVWOvUYQAiWZFQtk5mSMoSzEILtBrTfEcviC5bwVwQmoh96wA0ic5dB57ngeoaTIPCdb34zDITYNLOOIeVSsW+dQC+7+NSWx6jJ4tY/rWNV7PfcGv0tBoPTM7M4eKJVgx2FTE9u4QPS6x+kHzfw/mOAjarW2hJG3hy8zIceweuY+PRtREMdzbjzcd5WBqPB6xeRGUMGRzHjWvMmxQ7tiOF1JBN6FiTd6Sy9RuFbHpX7MMMqOD088Ii+op5OUAO7jyeRGfBwrF8Cg8mXuDL4neMXzgFwhwZz+hf7a9d5yu3Z6DTPjVQIY9k7erO7Y63Lvc8ErEeyq6JaM6efjai4v4IMABI0DEPqPKkigAAAABJRU5ErkJggg==", + "dotx": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAndJREFUeNpsU01rE1EUPTPzJk0y+WhMStW2qdVWxUVEQUF0I+4ELQiC7lz4N9z0T+hG9wrdZKUgLqulhrbSag1CKpT0g7RpYjqZmffle5NEKdMHlzfvvXvPPffcO4aUEno9f3Vt4dTp+BXOe+fB0u/NbVpv7h89NU1j1TCM8H7+xY9wJwPHZMbOjRadLAvE/2gToJTiTPx89k+OlVd/LT+0TPIPpO/SzyQk40xCMxBSZ9Z3CoAx5DOjeHT7SbE0XSpzwa8OWB9jINELolQg8AR0EgUKn1PIlIWpkUt4cPNxkTOU12trs8p95RiAXpqaztqou8q6SKQJJmZSqGwsodFsIJk1kcyLYv7IeafcLx4HUNkFF4jFTExMZ0B9DrfD4HUEusYhWs4GPEJg5wly/tBYRIOeDhpEwlS34xcyajdQr3UwOT2MlJOEBRuGNHWp9AQRVXDfQiFV/U5GBSiQ5p6ngBEa5z3fiIhC6g6IMDBwOdoHPkYnHPVyhN0tF7E4QSpr94CEOKELffq+y9Bq+DCJ7rWBoQQBVbPR2O6G4OlsLASJMtCZfQqm0NP5IVWnamdAkUxbyuIYtD7wWegb0YAzAVMkkI6NwPM9xEwHloyDGAmk7AKS9rAS0FKOdugbYeAHPu7OPEM+MY7q3hIKqTFQHmC3XcONc/fxdfMDrk/ew/edzyhvvTmBAddocVRqH3Frahau56qpZDho7+PnTgXffi/gbHYmLEvPSIQBp5JU62sYz13G609zKBXvoOMdYn2zgm7Xg2MVML/4Eu3uPgxhk2gXmNl8v/i2pcXTP8tKdTEcbWLZqDQXwu/l6pfwbEnSGsT9FWAA4mdHv2/9YJ4AAAAASUVORK5CYII=", + "dwg": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUeNpsU0tPE2EUPfOg006hD4rQh8WgbCSwkKgbF2owujaCiQsXxpX+D6MmbtXEsHCLmIAbE6NLo8YlGIxREIshIqVl+mQ6j8/zFVCb4UtuZua795577rl3FCEE5Bl79vPd5LHYiOP7cH1AUWi85ytmvlas1bJ9E5ryBntH3BpuP/X9i7ovkluuiE8N9SDepaLpCcRCCqa/VDCaMuIjSWP25Upl6n+QDoCz6Yh7KKzh3sI2LuUimPtRRyaqodj0MDloYiITSTi+mH29Wu0AUf9CsZPJoW5czJl48LmCc5kIKo5Al67B9gUGYxrun+5NnMlFZ+GKiQADj2a7AquseLIvjMv5KMaSBu4sWVir+3i8VIVKYSby0UTdFU8Znu8AYBHQgVOJEN5uOXi4UsdawwU0FSf6TaSoyw6DRvukPkgGWpDKy4F8a3jImCrqFDFn6rhKPR4VGnhvOTAY3WLcjifcQAsqRfhUc/Gq1MKNbBh9nIAMDjEppocxs9HCMktfGTCwP/oOBkUKNk/qF3pDYC6Ktk8RfWzyaaoKrqdDaBDwya8W1m0/CPCR3kFy7CcnmWQRUJqcRJFUKtTnPCeR71LwoeYF92CYyVnCFZpCTrRtCv5to2St8SOrKxiPqEEA4fkYT+mI0rdoeUiH1XZVuQPpsIKqw2QmfifTsnOABiWySlH9uU0Hh2MqjsZV5LtpPSoGeN9rKnhBX7ehoOSLIIPfnGONXGMMWN7xUfVldYDbjM3mrh5HCDgS17DhHgDQcIU+XbBxnDTn1x1UuQcJ9iv7l5Q5e1zLGri92EDJFnoAgHtcfr6wbbVXUqq193+0z97n3UJt1+d51n7aHwEGAAHXJoAuZNlzAAAAAElFTkSuQmCC", + "dxf": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAo5JREFUeNpsU0trE1EYPfNMmtdoH2kDNmJbaVFcaBVFpAsREQpFwY0bu3HjQnTj1mVd+ANcuC3qQixmry6E0kWFVIQ+bKy2tbFJm3emyXTujGca+4DkwsedfLnn3POd77uS67rw1vC79ek7fZEzpu3AYUqS9tKQGZPLpa3VXP0uFCmJ/8t9OLC3q/uJbcs5bkIybvdHoMsSbLKENRmvU2WcNnTjRFD7ML1WGSPJHI6sA4KRWMAWVDPxLYex3iCmfpuIh1QsFSyMxQO4GvXHHwOJ6XWSyIck8v6HQsnjAxFc7vTj2VwBg4aG78VdBHQFCk+dbVcxMdwev9gTSEC455sIBOu2KLsoJFzqasP9vjCeDBlYqzn4VXXwarGKZN7Crd5QfLDT/7KpBM84c9fFUFjFp2wdk6smflRsKKqMa7EgfJJ3Ac2OKlit2pEmBTQfngdpnupoU7BUtRGiiTe7fXiRqmK+KuDn6TpvYogmBRJcrOwIJLIWxmM+dOsyLKryQAaJpjJ1/AxrGO3SqdZt7kKZJrzJWBg5piHENuY8vV6e0UOye1TyftvC5l+gZB8SHJTwpSx4q4JeTUKaxhXoR57h7Rn+3iFolJ3xvPhab6HgJG/pJ7jsNP4sUX+jZiCgEsWd/DjH5IrSYpBUAr0yHpzSoXKOP25a6OBhndh0zcX1qIYM2RIbu6i0KiHD5B/GTMHG03kTGpEL7H80wHFOWwhqDZ+SpkBOtCDYJDhZE4gRcKNbYynAqbCMbXpwpVPFbEng0aKJGbYzK1p4wIegLlcEPmdt+DjXbzcsxFlCynRwwVAwW6hjqeg0Zt521SYCWCJvbe0Un29UDx7Hgrs3IEitHXkw3jOv2fl92D8BBgAJeyqBh90ENQAAAABJRU5ErkJggg==", + "eps": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNp0U01vElEUPfMFCEVArdoSqEA0KV246UJdUJM2Lo2JK/9FjXu3utJqTNz4D9worrsQExbFpAFT0TYp0CZ8pIAiyMfMvBnvm2Foa9uX3Lw7c98979x77hNM0wRf7ufPsq7Z2SQYw2QJAkDxQalUZa3WI8hy3gmZr15bu+z8kILBkCeRCJi6bufKMji0NhwiCQR6iitdatTvQ5LyOLLEiWcYukm3m4Zhmbq1BX13FyoxuH7xAlbvpqKRK1fT0PWbRwEmDEyiy1QVg/V1GO02tO1tKLEY2PIy3KEAlmJRDLXb0TeZL+n9g4MHlLJ5HIBuYnSzXq+DlcsQLk/D9Hoh1WrIUjlPcpsYGQzS3LWoaBhvKeXWMQCDA1D9pt8PaXERUjwOjEZQFhZQp9L2yERiqYRCkPt/z58ogTGqHQLE1BLgUmC6XGD5AlipBIFKkbhanKHGYLBDqQ4ZED0OAbfLlo8OIxwGvhVgyTHlA3xkomjH/gegBgDURMv6faDbBZpN+/tHkUApkdTA/PwZAPxntwdUyjYA/+ZMqJHjLgM9iv/6zRt2GgMaIE21aVIjnSm0DGPfmhzyde0UAE2Dj+p7urKCPvkZku9eJILOSMUnkvVhIo7GYIB3xSKYdhoA1erXGVKXpvFxZwdBonnD68PQ7YEwM4O4xwMPxc8RYE87g4FIcz+kvfmnA0YzIJIy77/m0OCqsTkkCTysKPjJG3viLei63Gm3kCO6UWqcMejjxecMPmxsoFKtYop6UNirYL9Wtc5OHqzznIXHq1na7OfMJROcK8a6O7MjW7nfzZdrd7jzT4ABACh3NGsh3GcdAAAAAElFTkSuQmCC", + "exe": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAo1JREFUeNp0k8tPE1EUxr+ZzvRJO62lUAQaKIQ0FVJFjBBdoIkrDDHuXJi4NnHtX+HCjW408Q/QmHTRaCRRohIJifgiiBICTQu29mHfnc7MHc+MlECKdxZz595zf+c737nD6boOYzxJLC6Nhwej7e/24HkO779s7G6mMjcEwfKZ21+/d+em+RbagaFev28qEpZwzKg3ZckqCPH1nfS8hScIdyhBe6JqTG3PfyTTeLrwFhvbKdy9/xi5QglXL0yGJsKDccZY7LDIAwWHpSferWBh+RN8ni4UylVER8MY6PHj0uSpUK0hxzfTmWsUtnoEwO3rer64jEyxim6/Hy67DXaHExvJX3jw7CX8XjfORUdDlOohhU4fAVjILCPbm9V1yIqK2FgYt+ZmsZcv4lH8Nb5upXD7+hVMjIRQa8qeDg8UTYPU5cTcxSk4nS709XTD53ZhpD+IYMAPj+TBz93fZiz5oHV4AP1fGdlyHZIkIZkrI7GyhnK9CZXy+Aig6p1+HQAY003AcF8AVtGGfLWG9XTO4MLZ5cL0WAixoT4zVmPHADSiMo3hzHA/xgeDWFjbNg8H3A7kKnX0koEcPdTu/ylgRGZgOjNv38zoSXC8BZJDRKOlwGEV0VJVGM0y4joAPO1spXbx6sNHeD1uRIYGUCxVSRlDt1fC8rfvcDnsmJ+dOaLgoAs6AVLZPJJ7WdhEkUyT8GJpBflSBcVKDTvpDBw2GzQqQT1OgaZqUOhtFQUTUKnVTVWNpgy51YLVKph7sqKYkA4A1ScEfT66vm5kC3+ofh6Xz59FQ5bpkvE4QW3M5Apoyorhl9ABIKnFgNdTOh2NkJG6WSf9eRBJtmFwLDJmriUzeaOkYvvcXwEGAIVNH6cDA1DkAAAAAElFTkSuQmCC", + "flv": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmtJREFUeNpsUl1PE0EUPbssLYUCXdpaC9gWoSTgAyFigiRGY+KjvuuTr/4A44MP/gx/gMYfwIsan0RjIjGiJIZgSIGFIoXSD0t3Z3dnd70zpITazuZmJzP3nnvumaMEQQCx3jx69SV3a3KWMxetpSgKxP3m242Do43SQy2k/YRydvds67n8a63k+FRSn7l/bdg5tdsAuM3he/5weDC8vLdqPLgIIpba2niux52mg//DqlsYSg3iztO7mczN3DJ3+ByCLgCBH4hOFEF7cDpzPCRyOpaeLGXSc2PL3HbnW3XaRQCPEgWI2MsRVAVqrwbX9bHxbhOKpiJ/bzpDOr2k68V2BtRNzMtqDEqPejY/4zSGjb54BM0mQ8k4xsDoIMauXxnqYOD7PmwScP31d0SS/eAuh1lrolFpIBQNQw2pqJdqsAlIceB1AJCIkkE/FZskXDQVRXw6IYHiE0nBEcaPXSSvJnGwWkQXAE4acAhbxPMJpOdHweoMhc9b2F8zwKizbdlyPLVH7QLg+JKBYzoorxzjz3oRzUoToaEw9KyO8XQW5AE5jrFT6AbAYVVNxCZ0Ka3So+DSTAoDiej5ywTySbls1OEDobhFlMcXxrHw+AbINEjNXgb7y6BndLhk8cRkHHbD7g4gEhiJFxsdhrDqaamBaDKKerGGSKwPI9kR9EZCaNA5ubE7A5s8IFhsrxQkgJhZoa/06xC5xRz2v+3BOjFlbqcGlquxsondT9vY+2pAJdeZR6fI355CgQCN2A4O1w7gkQ7cdLUOAKdhV6uFSv3kd/n8mT68eC8dKWLnY4FsfeZQh7nVVt0/AQYAsf5g+SvepeQAAAAASUVORK5CYII=", + "gif": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmVJREFUeNp0U0tPE1EU/trplAqlL0laiw40xASByEJIZFGVnSvj1j+gWxNXJq7VrbrwF7h10cSNhMRHojEuACVBKmH6SJQyJeXRxzzv9dyZPiCtN5lMe8853znf953xcc4hztDzZ1+C6fQMHAfd4/MBFG+p6h/n4OAeAoGNToi/eOm+A50LKRaLh6amoty2vVpZdotNXccMEK3LwZxa2bsDSdrAqePv/mLM5tSdMwYBYqyvw9zdhUn/L59P4OGtG8qlZCoH254/DdCdQBCxqZu+ugqnWoW9swN5ehp2NotgIo6bGQWGtaS8+vQ5V9a0u5S+1gfABEilAqdUgm98HDwUQkDT8JXoPPq+BoM5kCYmFT9jryn1+hkAt7heBx8dhbSwACmTAUwTgdlZ/CVKJaLnI1GD8TikZiPSR8Gxib8chH95mZTxgwWHwH7+gFMswqcokIRbjMO2HDCnZ1VvArpjEmnKZc8+cZJJYGsLsMiZ8AgwEqaY6Mb6RQR33JFhGECzCRyfAFXNu9v+RVNRZWIMuDJNuYMAaDycUFGhCOgtuAtFVDA83G5A8TrFDw+F5QMAxAKJJxz2xnW3RPJGbm+rCyjotZetH4DGzaSSeDA3h4Zl4R0JOEZWTpIzF4n/m995bNdqZwB6m0gFft3Ak6vz+KYWwFsGlqIxXItEcDt1ARMEtKdVgZb+fwA0G2C2hXM0ZTZNRcSf0b1pmXi7uYnjI+Lfanm5fRQsK8BIxKcrK7i/uIgP+Tw+FlREqHN5fx/vyU4uHBE6UO4gDWqk/JFaLuMxcXeFk6TuJ90V0HOk1in7J8AAjmgkPfjU+isAAAAASUVORK5CYII=", + "h": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbRJREFUeNqMUk1Lw0AQnf0woK0ttVqp0hwqVCl+UBERT94F7x78Cf4Uz179DT14F8WbYHtRkBYRLNqDtdaPZLObuLs1NGlXcWDJZGbey+x7QUEQgIqT07PL5WKhHL5H46J+22q22vsWpbWwdnR4oJ80LNiz2czGUjENhvj4ctIE4Wrj8XmPUlKL9nCYcOFzE9j1OKSTCdjdrtiLdr7KhVgzEvwW6krC92E6k4Kd9bJt57JV5vFK2KfRQRV+RAMkzxglYI1RaDy2dW1rpWRjQo5VGicYIorWVooFvQVCCAjG8Omw1MgG8AM0uSBUDSnCfk/IGCHwf3DCD/7UhOLBrFkDuep/hDUSSCv1iYo4rIfqGwmUSNJjfYbBcQKhZw0aBMA4B48LwBhBt/cON80HmM9NQ6fXg/Wlku4TwmNWDzaQqzHG+0PSKod5cH5Vh2RiAhYKc8DlV1UPSyuFMGygVlMg1/P6BC6DqXQK8jNZDXAYA1f21V34wMXYFaiyVw0rJyzLgs3VMkxOjGtix/V0XWChZ0cI2i/dzvXdfTd0Qf91BMPrhyNzgKfOmxaWypqaDXHfAgwAtCL8XOfF47gAAAAASUVORK5CYII=", + "hpp": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAehJREFUeNqEUk1v00AUHK/XKf1yZdESVRBXjRSRFqMQVBA5Ic5I3DnwE/gpnLnyG3LgXglx4UDDLZS0RWkDLiRxSusk9u6GXSembmLgWZbX7+2bnZl92mg0goo3b3ffO/ncdvyfjHef6q2Dlvs8Q2ktzr16+SL60jhhZ69bO8X8ClLC7w9XdKJVG8fuM0r1WrJG4gXjgqU1D0MGc2kBTytl+7a9XmWcl1IB/hZKEhccq5aJJ/e3bTu7Wg1CVo7rNLlRhUh4oMnXoDoyhoHGyWmUe+QUbELIa7W8CjAFlMzdzeckCwFN06ATAn8QmDMMMGlMuwWucpoCHNe4jBkAMenjYvRPTyi53JvuwX8AplleAeBcRFrH6rXIxLim9I/pi3QA1RhKaYxdjkN8IwalCMIwWs9ljMkh0wzk+9M7w179C3LZNXxve2h+c3Hu91HeKmD/6zHOLnw83ilB1/V0CeqU3Q81LC/O41b2Btx2N2JVP2riR8eTUxmi0TzBwrKZMsqMoz8MsDh/DWuWhUBKURLKxQIeOMWoptYPnS1c+INZBkwISomOSsmBZS7B+3WOzZvrKGzkMAiGqNy7g+LmRkRfekBnANy2163PZXrSbrQ6vch19Xz8fPDHyL39QzkHBKedXjfu+y3AAGU37INBJto1AAAAAElFTkSuQmCC", + "html": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmBJREFUeNqEUktPE1EU/mY605a+hhZTBNKRDApNrWIRA4nEBUZdmCgLNi4MK5f+FNdu3bFv1J1EXODCR1JJSMTwpqUP6NiCpe10Zjz3hj5Mm3iSybl37jnf+c53jmDbNpi9eb+6Ftcisea909bWNzNb6dwzSXKkhIt/r14+515qBqmDA8HpqKagh53XaopblpIbe+knDpFAhPab2Dw0TKvRK7lmNODzePBgZlK9oUWSpmVNdpIU8T+jaMsyMaD4MDcZVa+NhJMN00w0n6V2nN3yQgdHWZag+LzYPTomIAtT0THVtPGanmb/BbjwLFkvn2IttYGYplKyDzsHh7gdmyAWfh5zVq0Guhg4RAHFUhmfvq3j134aXo8bd+ITnMFOOovU5jbGRoZwNxFn1cxuAIcDW/sZDjA/c4u+BNxOJyxqaenpI3z88gMfPn9Hv98HQZS6RazW6kjExvFi8TGdDSy/W0Emf4LS6R8sv11BmfzSwkPcm74Jo9Ei0GZgmkw8QCOao8OXcaz/5vSZnPdnp3ApqBBLkWJE0Ci7ASzbIhCLLQ1E0iOkBDh9NpUgiUejo8oNuJwyn0YPABtn51UYFFivG3yBGCNZkuDtc/MW+ZQI3OrYpBaARCKufk3B5XIiWyhiL5ODp8+FfFHH+KiKSqWKUL8fC/NznGlPBmz+24dZjKnD0CJDcMoyW0SqXuMtHBFw7rhIAD1ErNUNafxKBNevapwu65NpEQ4FqXIA+RMd6VwBP3cPSERb6gLIFIq61+UqGWaFdcrVt/lmAuWjAi2aiMFwmOYuIJ/N6M28vwIMAMoNDyg4rcU9AAAAAElFTkSuQmCC", + "ics": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhRJREFUeNqEUkFPE0EU/mZ2dra7bLNpi2AxQFKalkJrohICiYkXPagXrx78Df4K48GDBzmQePLMhUODNxQ5ciEkJVqDtJGmMWrCATRbd2ecoS5u3aovmezsvu9973vfPiKlhI4XL7c2r5YL81LIELEghLA3u/udxmHnPmfGW/Wuv+LpwwdneRYBx7PeWK0wOYYhcXxyckGV1fdbnbuMsXcklqPRJQxFMKz4RxDCtVO4s3xlRjWoB0FYjlQPEEBieChwKCRGMx5uLtaKs1P5ei8IKlGa/YkXMXYtlTEDlsnw/mMXhBJcqxSK6vlcpa4PEpCooUyIqs5M6hG1o2CUwqA091cFcYLf/sjzcX75EiQIojI9779CTYR4jwTBf+r7GAwh0AxCiL6JMT/04vQ79u8aI2O/7Jzg69o6Go8ewycUahtBpADhHKLnK/eVbkMdtROWIv80NQ2sPhncA9Htwn+9hZG0rY6DzFwJl+7dhs0ZstUy8rduwPS/wd/ehmi3kwq4zTHiWUgXp+EuL8FvNvFl5Rn4xAS86iyI2kY3n0Mv48ByrOQmancdi8I0Kcj3U5iuA29xAelKCUHrEIayzltagG2E4IwkFaQgSC6lYI09iN0d8It5uNV5nG5sgJdKYC0G8WoTOZvBISFNEBxnsuzD3GX4vfDsszzqAu0jkJQDedCGbB6AWg54pYbPo+NGVPdTgAEAqQq70PytIL0AAAAASUVORK5CYII=", + "iso": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjlJREFUeNp0kstrU0EUxr/k5qbJzdPYpGkpsUJoA2q1oLjTdiGiIC5cuXHlxv9BEOrStTvBnQvRrSAIsejCrlqpsURq2hCJNQ+TNLm5uc/x3MmzJh34mDNnvvnNzOE4GGOwx8+t9XQkfn0VE0Y5/7Z+kHm+dvOhtd3P9c/xwNZh7nWaMYtNUmX/Fct/vlN7/8J5aRRgyzm8xzpRDjGE2aVH4VTqdnoUYg/XkEhmy+Cx3DhA5tMzdFolvg5Mx3Fx9SmH0JIg79Zo3j4GADMIokJTKtjbfAKXU4Y/2NvSfyH75TFOxa9Cmr0XnlPFl5ReOQ6wNMDsoFX6AElqQlNV1KsOuNwS/AGFjEUIDhmn5+/DMM16/9igBowAzFKIswPJr6MjlxFP3sV04gaP7RzMPe6xvWM1gNUBM2UKYlBau3QghGphg29J3gDlLLilWNdD3gkvIIDRhD9yGe2mCV0V4HFXuCxT5Dlv8Dz3sIkAs03FalDxBMQSt9BRBMhNncuO7dyU28c9tnf8C/Q0ZtR4GImeQSj8APLRH772BWcgiFODffCv/t8H9tO0v3RjV7VqkeeXLlzDfvYjj88uXhl4JwIsrYxmLY/M1gYclIvGE9jZfNPrSCD3/QgLyeWTADV6wW9AryIcCkB0u1Aq/oCPumlufoF72vIheaLDr4wCLIOqrYnULA14PSoqpSJEAUilZrD77Sv3LK+cI0+Be8cAbbmAOrob0agtD491LYfkoqvnyZLsWRkA/gkwABL4S3L78XYyAAAAAElFTkSuQmCC", + "java": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjxJREFUeNp8U01v00AUnNiOEyepQyhQobRBSlVIoRCBEPTAjQsSEneE+An8FM5cuXLNoQduIAE3qopKNJAIIppA2jrOR93aa6/N8yZuUxyxkrXr3ffmzczbTQRBgHC83nj3ca28dD36nx6fvnzrNNrdp4oibyUmey9fPBezEgWVFuYLdyvlPGaMY4fl1aRS+9pqP5ElAkmcnknRwuO+Nyt5u/ETYfyj9WrpZnmpxn2/Ok1Swn/GvtnH5k4TLue4kNfxoFoprRQv1TzOb8cAIu3+ZD7oD/Hm7XuxzqRUNDtdkuLiTmW5tFxceBXlnXgQTAORSMt2oGezUJJJrK9dFWdEH7Ik4dB29LiESeUEJXd7/dAT3L+1ivlCHr8NEzutXTBvbJPPSdO/AH5wysChwM/1HzCGlmAzOrKxu2eCud6Z2Jke2MwThpUXL6Nn2ZAVFTlNw70bK0iRnGAq9qwHtOmTRpsx1NsHyKRVnNPnoMoK9kc2BjbD4vk5JGV5NkBoEPM4FFnCteJFWOS4ntHEfphQyKaFTWFLw704AJ26ZFx/ZEEi3YyY0O1Dmr4EKTUHA8hUnS6siI0DEHLYog+b28RCRuNXR/iQUpPUEQ+NVht6Lodnjx+GXYgDSFRnq97Ed2pXSlXhUSeGhxYc5sKlNXM5DGLR2TMwfZVPAIi+otGNWy1fEZUKeo4qc4ysI+F8VksLIJfYcD9QYgB/DNPMptWBlsnBIS86xmDMTBo/PWd0LB6VZfdEbJT3V4ABAA5HIzlv9dtdAAAAAElFTkSuQmCC", + "jpg": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU8luUlEY/s4dmMpkWxRopGJNNbiwhk1tItbGtXHr0hcwmvgOdWld6Bu4coXumtREE3ZKu8FgOlC1kIoXtC3jPfdc/8PUIpzkBM7wf+f/hsts24YczuerGUc0moBlYTAYA+i8sbdXtAzjITRtq39kr73s/Gr9DTUYPOeamwvYnHdrdR0SnDebuCbswJGqpX+Uf92Hqm7hzFAG/4TgNr1uCwEJ0trcBC8U0Kb1/PQkHt9JxSLnL6TB+Y2zAIMOJBGLXmtsbEAYBsx8HnqCGKVScAX8uHf5EpqmGXv18VO6VDEe0PXsKABN8+AAgiabmYFNNJTDQ2RUFc8+Z9G0OPR4PKYwvKari0MAgiY/OQGCAajhMNR4nDZMaInrKBGl70SPMScck1NQG3X/CAWLE3/dAWV5hRRVIJxOWNksrP19sFgMqqAebUGYHMI6teq0A9oTVAhqu2sfbYYjsL7lCZ3683gA70T3TK7/B4BNoO020GwB9TpwfAz8LgMtWn/NkV8EHgoB81c7nYwCyBZlEVkHcqMTKFnkmehJTOPvEfCnKi0fAyADJKfXC/h83TaZTJjaa5lANLpOFqAXtlEAorAwO9u5syT5UxLfU0e3o1FMu1x4u7ODYq02BKAMAVSrSNLrK1MhLPj8mNF0vFm+C1ZvwKBwXXE4AGn1WAASazESwUW3BzUSMeJ2o1Aq4sPurvQYSRLwlhRR6mSaYyi0WlpAJrFRx3ouh5/lMt5lv8BLwXp0M4lSpYL17e2uK5wP6lj/c2ZPn2RI+YT8fDvqoyegVLyfG5kBKaQQOfvF2pLc+ifAABiQH3PEc1i/AAAAAElFTkSuQmCC", + "js": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUQ5ODY5Q0NGMTE4MTFFMTlDRjlDN0VBQTY3QTk0MTEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RUQ5ODY5Q0RGMTE4MTFFMTlDRjlDN0VBQTY3QTk0MTEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFRDk4NjlDQUYxMTgxMUUxOUNGOUM3RUFBNjdBOTQxMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFRDk4NjlDQkYxMTgxMUUxOUNGOUM3RUFBNjdBOTQxMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoT8zQ8AAAJdSURBVHjadFNbTxNREP52t7S0bktbKFAvTUVaw60YqkExUTD6oD74qC/yD/wp/gh885XEEI0RAyYQUiMpIBGMkYR6o23abi+73e2uc04v1LROMtnZPTPffvPNHMGyLDB7sbJ2ciUSli3U35smkK9t7x9v7n2dD/g8KUkUwWqeP3vKz23NxJGzgwOx0RC6mSgIo+WKuvP56MeUzy2nJEk8PWsGJVVTuhWbpgmHw47FB7d98Wg4mVWK52o1sxOg3Va3PmFp+Q2PdUquaFUM9/vw+O6cP3bxwm46Xwh1ALR3/vL1e+hGjcc9koScUsTSq3coVDQsXJ3wzo5HEs3clgZNMTVdx1T0Ep7cn6//QRQwMhzA6uZHLD5cIFEFSKIU+G8LK+tb0KsGZKcTJoEyP08AbpcLy6sbPKdQrigdAGaDwWxsDH1uGbliCYIgcM8WFPg8Mq5Pjzdyu4jYbCE44EepXMHuwXe+A8x3KKYxYsjvbUzmlPGpBmYdgI1oYjSMbL4Ao1YXMkcM2Dd2xnbAamPQAqg1GORLZdycmYTdJqFKk2DPR3fmwI4zBDrg9RADqxPAbPBif2WTSB584/3/TGegEOit+DRcvQ4OZJi1LgwIQKVCg2i6nb1I7H3Br3QWqT9pBAP9uDY5xjdSM3RqxeoUkfVnEOW8UkLykERTNXjkM7h3Iw6NNvHw6JjuhAhVrba0+QeALozcI9nQR0VvNxJc/ZmxCNGvIBQcpDG6udA22kyW29HC72wu8yG579ZoiSYuR/ly2+y9CA4NceWLmo717T1i5ULqJNtapL8CDACskxPFZRxLwQAAAABJRU5ErkJggg==", + "key": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlZJREFUeNpsU11PE0EUPbM7u/2AtJUWU6qiiSYYo5EmmPDCD9AH46sx8cEnja/+CB989z+Y+MKPgMiDsYQACcbaWBBogYD92t2Zud7ZlQZsbzKZ3bl3zj3n3IwgItjYeDO3MlWme0bjUth8e8/fO2tHzx3XqUEk50uft+Ndnhdmc3SlfNPkVZT8Cy600DoIISvVfKYtlvfX1p66XmoIYsMZdjJQWvEFbbsC/S5g2QhSkKUK7rx6OzvzqLpsovAhaAxA3DUBQn2TUFsl7KwTfm4Z9DoO5LW7uPXi9Wxpfn7ZKF09vyPxX2iWcNRkKGZz0mQWKoNs8AVB6x1yRY2pYnc2LLofuXTxMgAlmlXIfngCxNxEzM+DPv6NQa2BygLgZyX6JT83ngHTN5GAL0WSoUQkSQnXkyBh/k0GegTAaldM20sTKvet+yyhIZApECamL0jUSe3oFChx3TopM4TeEQP2gc6BgGIwb4KGNXRhCkMGxgg2kJeybRiZM45D8W61qEAknSmpHStBhywu0nFVupSCTAcM4ECwqapv+NQ6LS9JGALoMIIoPYDjZiEL1xHtbyO39AQUDaA7R1AH23DSeSA4hv5RG/VAhxomPYP8sw9A4TaC9iHkjUWmrtGvbyC18BLe3GP0m3WW4I5hEBEnPIStXzyuFIxb4EkMEJ79Qa/xHbKxCdM7xeCwzUZOjgEwnuzt7qLz6T3cySmQP43uzjeIiTJM6io6W19B/NLCKMVGCzkCoLR/0lrfOI2fNy/huKC1FTsK/rbGNeMRC8dHpHByfu+vAAMAL/0jvAVZQl0AAAAASUVORK5CYII=", + "less": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjZERjZENTJGMTE4MTFFMUIwOEVERjQ5MTZEMkVBREUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjZERjZENTNGMTE4MTFFMUIwOEVERjQ5MTZEMkVBREUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGNkRGNkQ1MEYxMTgxMUUxQjA4RURGNDkxNkQyRUFERSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGNkRGNkQ1MUYxMTgxMUUxQjA4RURGNDkxNkQyRUFERSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pl1w97IAAAJhSURBVHjahJNLbxJRFMf/wPAIMIxMkUI7tS0VYqlGDLGhjdKkqyZ24cJFN925de+XcONHaHRj4k7TND6SGo1VWwmp2kSLhlqMDbQ87gzPYcY7k4GgoJ6bmdw598zvnvM/95pUVYVma+svcovx8yMnFZHAMJPJBJfDzq5vpX6+/vD5qo/z7DOMBdo/d26t6jFMJ3iY51jBz4M+LP6wxEw40Gy23qYzB3HO7fpmpZCOmfEfa7Xb4NxOrC4lvbPToe2yKE3K1PdPwNOtHdx79ESfq4qKkijB5/XgevIyHxEC24USmewDqD2ABxubaLRkfW6zMqjWGlh7/ByyAtxYnOPnL0Q2+gGGmKRaw8zUBJaTiS5QOO1FJnuIAM8hciaIWHgi8NcSNt+loVDY8JBXh2ojJAR1HbTSNFMUpV8Dxcjg0nSYBrtBxdLbqI1iheCUh9XXNGurAwCdEkb9QyBSFam9TDfoPZ1LUg1BH28IiwEARTVAQOzcFKRaHZpLoa9avY6L1Gfs0c32t4PU6W2lWsV8LAorw0Cs1nXftYWE3qZGqwWHzYp2zzlgetuolVFvtiDLbRRKFTAWCxx2G/KlMtXFhWPqOzsWHJwBx7rxKv2R7mwFz3lw9/5DLC/M4Us2RwV0g3U58XJnF7dvrsBOoX0Abbej/DFKRMKI30fTVGC32WA2m5H9cQQvhYi0vE/7Wdgczn6ARA9QPBrBszcp/XvpyqxebzQ0Tlsq6llxLhe9bD4cFMr9XdjLHpLv+SLGBYHAYiVu1kNOpAaRTWbCejgiw0zGhFGSK1aw+zXbvfK/BBgAPwADAs5GpGsAAAAASUVORK5CYII=", + "mid": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNpsU01PE1EUPdOZKWUotKUKFLEWkQ1EASGGxGBi4sIVrt27IixN/Cn+CxfVnQsXJiz8IAoqRBGEaMUUWzofnXkz781436QDkjKTyXuZe96595x3rxJFEeTzaKW6dmdpfIoxjuRRFECGn7/4Utvarj/syWgflU5s891qvGoJePJasfBgeSpnW+yEIJVS4DEBx3FzGT2qfvh0tJxOE4mCU0yy8X3BLdODRQTJZ5oMzYaD0UuDePzkbnnx1mjV9/lMp+izBKEIwQMOzvnJGoYhhBDgFKtMjmBl9XZ54WapSjLnknMnEkQYgflCVhKXLt+/dRMy2d5OHdVnPoxeHUtLV8u2w5/S78UzBJwLMC8gAsosIqy9/ga37WNmvgKVKmEkb7JSwI3pIdRq1kBXBZJAUKkb6wd49fIzbJthdn6cIhE0XUWbyP4cmshmdZAE0eUBD6gCN0DtZwM7Xw+RUlVEJCui7CmyPaS94zC06ZMedREERNA6djBWHsS9+9fRS3p9AraOXbhELMlUQju2G2O7JAQENk0XhpHG3MIVlEZzaDbdOKO8jWy/TraGsMmL4L8KTgnIfcfy4JBWeQNp0j10MQtB4EJOg6qFMI/bEH3pGNtF4LOAjHMxO1dGvW4jXzDi7Iw60TB0jJRyONhv4MdunbDneMA6BMPDA6iMFzExcQH9AxkUiwby+QzevtnF2OU8lBT1i8fOa2UO1/FwdGTHE2STHM/14+vlPOz0RxibKPfn9AHXZHBzYx866ZdTKkuVndhHuqenS1h/v4ffvxqyvbUuAtPizZ0Dp7X1fTs+FA9cMnWd4ZG90NOjomVFzeTcPwEGACDGeYddZX86AAAAAElFTkSuQmCC", + "mp3": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnxJREFUeNp0U89PE0EU/ra7XWxpSsFYIbVQf9REFBHkYBRIPJh4wrN3DsZ4MPGP8b/wUCIHEw5EY0w04o9ILcREGmwVgaXbbXdnd2bXNxPahGyczebtzrz3ve99740WRRHkWn5cebu4cH6SMY7e0jRAHr9c3WxsVvcemmbys9yT6+uHJ8oaPefypdPDD5Ymh5w26wMkEho8JtDtuEOZFCrvN/4uJZNGH0T59D58X/C27aFNAL3Xthmsww5GCyN4+uzu+OLtQsUPxPQx6ZMAoQjBAw7O+bEVCMMQgqygs+LFs1h+dGd8bna0QmXO9OL6JYgwAvOFZKKoy3V44CgNfv7Yx8oLH+lUEgvzF8Ydhz+n41snAGRG5gUEwClzhHdvttFxfNyYK0EnJozKK5eGcf1qHo1GOxtjwI+pfvm4g/W1qtJgerYE2SXJSIL9+W0jk0mCShAxDXgQKgbNXxZq35vQKCiKQkSUXdc1+gcch1FHGPmKuIgBCdc66qJQHMG9+1NIpUylxxHtuW6gEiTIu+N4yjdWgty0yTmdNjFzcwKjY0MU7MLt+IjoSad16FoIx3b/A0DZ7FYXnsdpAjUMDOjI5zPgfoBsRodhhGhZHfBBU/nGAGRtxWIOg5lT2NtrI5dL0SB5KJzLodloqXaOEatPGztKq5gG3S5DNjuAK5NjKJfPYKI0okBkSdemCiSgS/rkQNLSePtxBj4LSCwfFtE0krqqX7ZVMnu9XlMXy2l7ME0dzA3iANQyY6vWxC61UY41zTyNcYh6/QCNXQvzi5dR39nHVq1BUyuMGAARsF6tbbe4iKD1r7Om5iFBdmW1SsDflLiuB6sX90+AAQDHAW7dW0YnzgAAAABJRU5ErkJggg==", + "mp4": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnBJREFUeNpsk99r01AUx79psrTrujVtbceabnZs4DYRHSoMh6Dgq77rn+AfoA/+If4Bok+C0CfxVRDBh+I2NqZzrpS1DVvbtU3SJPcm8SSlsJlecsn9dT73nO85V/B9H0H78OLdt/LDlQ1uMYybIAgI9n99OWxoe83nkiz9hDDae330JvxL48O51Xxm/enNtKPbVwAh0Ec6kYpXat9Pnl2GBC02HrjM5Y7h4P8+7FtIFVJ49OrxUnl7ucIdfhv+BIDv+fBcj7p/tXMPrs2RXVTw4OX2UnFTrXCbbY7tpMsA13FDSDAOQ4gJEGUJLs0PPh9CkESsPrmxxEz2lra3rnpAt3G6adgdQhBpmeLkFodNmsjpOPoXBrQTDcmFFNS7i3MRDzzPCw/vva8ikU+COQxm14BBhvJcHLGpGPTOAJxxeLbrRgAkYujBdH4G5oWJWXUW19YL4XqunAMFhnq1BqWYgaY1MAHASQOiU96zKzkU76mwehaOvx6h9uMv7KFN3RopL4oTAI4HRh4wSl399xla+00YbR3yrIzM9SzSqgJJnoKcklGrH08CcJjnBtLLCsSEGGpSWJvHtDKNoFippsJ0ulIsDDUCCATMlBQkNuahEyiZTcLsmFBKaQxaOk53TlHeKkM70AjAooCghBOk9sKtIvqtPqS4FBaRnJSRX8tj2DOh3lFB5Qw2ZNFK5LRo6w4sKt2ggAzywidAMN/9uIPSZglBLDO5FF3mRD3wHE9qVRvoHrUpfn+UEQK0/7ShtwboHJ6jdH8RZxSC57hSVETb7e5/2u0FxqPHJow+8iZ4lYY2QGu3idhIxO7Y7p8AAwALCGZKEPBGCgAAAABJRU5ErkJggg==", + "mpg": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnxJREFUeNpsU0tPE1EU/ubRdlqmnUBboa0UeUQDiUGCC1+JmrhxoXt/gBvXJi74If4AV0Y3sNKF0YUaICqoIfjgVShEiGF4tDOdO/fOeOaSKtie5GZu7pzz3e/c7ztKGIaI4vn9p+/P3h4e4a6Pv6EoQBDiy7P5rc1P1Xt6XP8M5ejXo6UJ+dWbuemeTGdpvNdiNe9YvQLe4Bi4PmTpRmyq8m71rp74BxKF2twIHvAo+f/l1T2Yp0zceHizfOZa/xRnfBRhG4CQqAYioBWeXDyA8Di6ei1ceXC1XBwrTXHPH2vW6ccBBBMI6BsSUEQzakGL6xB0tvjyBxRNxdCtc2Xf8R9TyaWTDOg2TjfVdw6hqIoE9B2GxkEDWlLH7s4ette2kSp0oDRezrQwCIIA3oGHr0/mKMmE53qo23W4+w5S+Q5ohob9X3tgHgO8ULQACC7gMx9mKQP30EW6mEHpYi8xcJEdzMucjfkKcrTfmqmiFYBxCF/Id+gayKJwoQjHdrA5v4HK7Cq44KjZNWpagaqp7QACks0H9znW365ia24DzoEDozOJbH8eVtGShXHTwNracnsG7q6LzsEuaAlNPm9h7DSSVjLyCMkppDI+GS2StQWA1RlKo0X56n2X+6QHkmkDakxF9WMVqWyK+s/BrthYfvWz1Ug+zUDcjMPMm0h3pxEjFma3CbIuCud7oMc0LL1ZgmElpGJtW3B+15HIGNITrMYIlOH7i0U41NrInREylYbu4R5qQbQBaAh95fVKZCnpQCnb9DrWZyrRERS6NDeUw+yHaXh7rt4C4B8y+9vkwn7kwKNRpDoa9aiFKBYnF+RcREqQ2e1m3R8BBgAy9kz9ysCE6QAAAABJRU5ErkJggg==", + "odf": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNp0UktrU0EU/mbu3FfE1KRRUpWYheALNBURUVy7cy9UkO6KW/+Lbt0IPsFui4gLBbUqFaUuXETUKCYa0jS5yZ2ZO557b5MmTXpgmDPnfOc7jznMGINYPi0de5UvmpORxpjE/kbNqW005DVu8TWw1H758ZfkFgNgJmtyxSPRjJIj0QTW/RDiYGXGb7Dl32/eXrVsd0gSCx9miqC0ooCdp69g5Q/h6OLN0ty5ynIkwzMwUwh2FwMdcbDiCZQXlkqFCpEoPT/wih1YjLInANcD+/Ua9bu3wJlGvrBZCmet2+S6ME5g4oGlZ9A/I70XCDhhDexPNTFmswJBwcnuXkF86VSNZxVu0ukLSGnBcqlnN4HoCQIaIuIv7LUooMOgQ7q75LAAb59B9gCBHSKgqemRr94mMKmD24CfM8nb7THYGQNLpAkUkcb66JyGBFFEWRVL57gFEH5qj8Lxwca2qS3EZaugmzAw24dR/XQgwtsCSBjPIdWbUoE2UJLBnV8Ac/ciWHsK9/glWLnD6K2vgPszsOdOQdfeQ1c/ThKoTgDn9A3KUED/52d45xchZsvorD6Bf/Z60riV3Q9Z/0bbGU1uopYGkfERSQ3VbsMwl0qlqoIARmSoPYXWy0dor79LfBMEEd8jGs/uQ3Yl7PJFNFbuEXiV2riCf88fovXhBbo/vqP3t02/ZYmJFqTkzY160Go9uEMbFK8hR/NrdXtFuUVmnmySVGgO4v4LMAAjRgmO+SJJiQAAAABJRU5ErkJggg==", + "ods": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAetJREFUeNqMUj1IHEEU/i7u7Z23e8tGgneGQPw3hZDkkhQiSuwMQREba4uUgpVlCrvEQhurkCoWqcQQ0oTAaYKNqJygGEwgHCSB6Knn7eXcdX/GmdHVPWYFP3gw78173/vmvYkQQsAwNvckq96UnyIEh7/d4t7uUd/8y+85P+bXSX4grkhI6nJYPW7LrXpBK2YxiSoShhu4Buq1NPofDeqdrZ3Z4cl7D4J3UtA5VyVAlmJoru9Af2ZAp1lcCQ3nqgiuKmbY3l/BH+MnHM9GVLP0Ww3KNA33CQoQQnL834Fj74PUGkANEIkCSSsa8gQqgYTIcB0PVsXB318GInRiCVWCkpRFAs+j5gKlA4t29Ggh4d0t04FKt9PQqF4UFgumSEA8ApeaElilWbYRVy/lsns/N1QBkxtENF4jxPxcgcB1CZVOrvMteK5IQDtJJIGh++PcX9iYwWjXK37+vP0WdYk0Ht99jtX8JywWFkQChw4tc+cZcvlF7rMze+ubbxN40fMalRMDP/6twaiUeK7wlZ0TD0a5hLTWxo2d45KKprqHKJslTsy209s2wnMFBTYNZjc/oLt9gPvLOx+hxVJIKS2YW5pCbSyJTGMK775O8VyBwDJd2LTDl/X5i8v3S7NVw9vJb51tITDEUwEGANCx2/rXEEFFAAAAAElFTkSuQmCC", + "odt": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAepJREFUeNqMkz1II1EQx/+7Ca6JkqyYiJ8cKEpAQbBQFDm0sVOsFBS9wt5KOTgEG5twxVlZ+XEnKNiIghYKxx5nwEpIIXaiSAgKGmMi0d23u8+3T7OaZJEMLG9mmPnN/w1vBUopLPNNhRWXHOyDg0nx82TiJtZPlPVoNpftc2cTotcHtxx06kdXpSQ/BvzKESZzIDmAz6y+NojOjpDMZiqRPIgNoFyWM8DrKUV7axO+gcp4g7AzmquAdVNqOgL2z2I4id1B0wgeygOyt/rLL5buLwAIDgA9dY+L+DkuDQOCrkMgBsRglcMOqAGwIstMg8AkGsuZMNUMRMkLqE+QGloglvlA7uIOAKvZajR0qJkUj/XHe0BTIclVKKlrfKsj9qA8gA6wqSJzPaXlr7ky//tdLEUfawsBjExUFGVWbT7AxSa42H2LMfODmvd3wKb7RAMLYwM8nts8xJ/pEe7/3PmP2eGv3D+9usb35W0bINoA7RmjXSHsH0f5Z/mUSZ0Ir2JmsBtD80s8/rGyzWsLFTD5yUQCbfUBHl9d38LvkdDTXIuHVBo0k+bbt06qO+yAPGXwe/cA4wO9PN44jKDG70GougIzi2tQ00ms7/3lpwnBBgjZ37Kkd1Shht5XzBIFl/ufFtniT/lFgAEAU//g6kvdGBMAAAAASUVORK5CYII=", + "otp": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcJJREFUeNqMkssvA1EUxr+ZjkdbrfFKVD12ErYSRELY2fkH+BMsLcQaSwsrSzZi47EjJEQkEhYkFlhYSVtFpdqOqpk717l3jKZmiC+5mZlzv/s795wzCuccQncz3YeRBj4KHz0/RrOZe2NsZPP20o255zQ3EAxzEAC+6uzTw13G4TFQAakA/CWtIYbY0KBOrx7IvwDQqlHV1o3YxKTOvyAUvfQCfqmA3e4ikyS/zRAKvOot7eoSHEgZIHrCfQAfBqBaKQQDKScQAExd8emBANg+2U2CvNMkkgSqBmrCxFB8mujeoJBWwEqARcssKTAJEGrmaGrjqK1zvNknH4BtyxKl2VUpRxmj5W+x73q9AEaZrR/ND1EJluIpS3i9JQiA+a+hSq8HwJjTsLrRaWitPTCOlhEZn5N75sM1qigmlN+dB3u++Qao5W4TtbEXXIsiszGL4PA00itTsu6XnQWo0TjMTAJqfMDx/ryBJcaVzSNSH4fW0Q+rkIf5rsjRiid7yyN7uoXS3Zn0egE0NiORAN9bQ017D1Lri7CLlP2EDr3Rf7C/itzV2bfXA/igLDaRixfngFhSCooH2xVPCWBlwKcAAwBX1suA6te+hAAAAABJRU5ErkJggg==", + "ots": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfZJREFUeNqMUk1rE1EUPS8zmabJdDKB2glEwY9ExJYiBUEQpV25qgtBXfgbpEtXuujKf+AfEKRddOdOGHClbYVCvyKWaijT2mhjphk7Sd7Me76ZONp0EsiBYWbOvfe88+69hHOOAE9f3zTVnDKNHvhlsfqPw/rM0ovyWsRFdXJEpDIyRnSlVz0KSkmvabaJeXSJBEhgAJzTDNybmtUnS5Pmg/lrN07H5NM/f13FoMgpXDSuhiIiK3Qi6LUugX7FAbaPPsJqfIHHKCStqRsXVFPQuZgD9BBxjikSiRq41AAkgCQBzVf0+BWEBX7GBm0xgHHUqk1UbBuEcIydzyCZlOI9YEGuDxwduCCitS3Xh3viCZ4jrcq4PJ6DLHd67tjtuAAXib54dCPVEfQ5XIcik/0/2iDeOYz3ceCxrisMi904y0XiMQFfkB7lg6xFHwFxEqUMV0anUNBLWKm8xd3i4zBWOzmASx0UsiW831mA59Xjm+h7HCOygduXHqJatzA7Poey9QnXjTuoVD/j/sRcmDOWLgqnLC5A2wwST+Pn8T629lahSCo291bwu9XA7vcy3m2+gTaUR14thrk9BXasbdiOjSe3nmPpwys0xSi/HpbDd3bIQC6dx/q3ZbRb/j8BEi3Po5cTJpHI9CBNDEa++GyDBN9/BBgAwfDlCVUQaNAAAAAASUVORK5CYII=", + "ott": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdFJREFUeNqMU89r02AYfpJ0iVm7EqhVOxw7dDBEdpiCE1RoEZRddvUgbIex/Rs7eehppyF4LOzQu4MxwYp0HgShIuwwUVSCVtl0s13afl+SzzcpyZYmyF74eN583/s+PO+PSEIIeJZdrtQVI19Cgmk/Ph39bpllXq82g7sgLxVcyKNZpIx8Uj5u5zSjc9Gov8ZihCRC8D+7On4JczevGeTGSEIC4ctKJtB1DTPXi1iCCEkIm1EFlC2Em0iwtWfinXkIzjiO0jljtDC5TtflGIGUQMB+mfja/oPv2Rx9MMjpMdJxOXyXTwkcwIkewfqQ1QtQNB385zcI14FrtQexsSb6SRysZ4Fbf+F6eHwATc9gJGNAm5iCTL5n/LCVRGADNoeaGoHqyaXj5gqQlTODovcwNk5Aj6wXqV8eCo7EDhMonEHpW+dZC7gUG98D3geo7vkb01h9cAvPdt76OGy1xntUd3bjUxAk3+l2sHJ/FgtrT0MUJNfDSm0bjQ/72Hzxxo+NK+h3B7XRNO4UrwymQtMIkdTBU0m+sBOayLsn8Ka78mQDjx/e87HXPkb1+UsfP37+AmZ1fP/suknBb6nefVQXjl06TxMlJfWKNWr+Kv8TYAAkUueexJF47QAAAABJRU5ErkJggg==", + "pdf": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmhJREFUeNp0U0trU0EYPTP35qYxaW6TlDapNKWGbgo2FkF8rARB6rboXusf0F/hyq2U4krFqugqSBeuAyL4SERBstHa0iR9JKZJ7mvu+M0tqZGkH3x8987jzDnnm2FSSqh4ns0VU1ybFzj674Wa3uWiWbfsFQb+jrGj8Xvbm0HlvYVRxhJprpmTlGmum+OMm5uNPZNbtjk3l82ey8++8oW4Jv/H/wdA456g2kvH99FyHNiuAz2dwflbN8YW8zMK5Go/CMfQkAhpGsyQgRCtlpE4jIULyC9fHzu7MPPEl/5ib6WOE0JJNRiHHg6j86mMjw/2gG4bkbY4PW4Yj2j64skA5FTHdaEMPiAJszt1sK0d4suJmY4k0+IDDGRfqmh0u5gejQc+fG8eYCIahRQCEfgQnIuhEkgtONE+dGxYxEDj1DhiEycZ+1YXdUpHCqTMJIYyEES5aXXQsi2kYlGEia5GtHVKn+amPBeCutPgfLALPuVu+xDVPw2EQyFEjHDghbpYNm1yKVVnYjTOerepn4E6XQmLGSPkPkOXWATMSDcjQEkAaqOu6+i/rccALtFL53LI3r0Nq1ZD4/MXZJaWYFer+PXiJc6s3IEgY3+uPYZHTAcAHM+DTE8gnM1CSyaCulv+GrRy8uYyElcu4XfhLVpkpNtn/DGA5Uu0abFH36WnzzCayWAkmYJvWeCkfb9SwY+NDbSoOx4bYqJF8rZqVRRXV/HhzWtUSmWwmWl0RmN4v76OUqGASrmMOkntSHF8MOs954dT08W248wzYsJDOujRBAaqqikTpRo/qqd0/dv97c3Lat9fAQYA4z8bX9nTsb8AAAAASUVORK5CYII=", + "php": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhNJREFUeNqMkltrE0EUx//ZbDaXNrvZzdIkbYOXGgxYQlCK2IIY6EufxGdB8Av44AdR8AP44JOPBR+Ego0PClUKTTXQSmkTYtOkmubSJrQ1e3H2yJSEJNIDs3PmP+f89pyZcdm2DcdWvn7LzkxFHmCIra7nm9ulg8yLZ09yXON55Dgjt1PM2iPs0+aW/frdh8bzV2/SvQBnCLiEqcFxLKSSodlrU9leiGPihWePBkgeEZO6ShC2dCAZNuf6ADb+ldQ5PUPx4BCFcgXfdwq4Ph1Dtd5CZi4Nw7SQiMdCXkl6yVIy/QBWgcU+yx/XsLK2cdHndqlK/lZxH/OpJO7fnsWY3z/YAq+g0TmHpoUH2vB5PXi8RD9Fo10aAmDJTgWyIuOupmK38rsPcOvqJO33XWEvwLJsmKxHRVEwf/MKWl/yUMf8mIloWN8rw+sP0D6PHQmYuzGNgCRiMZVA17IQV4OIaTI8buH/AJMFd02Tkp05PO4jnWvc57EDAINt7u1X8Pb9KgI+Lxbv3cFR8xjx6AQ+b+Txs/qL9KePlih2CMBCq92hg2qzt1AoV7H5YxdhdqhHzRbgcpFeqdUplpvQW4FhmAixZ/sws4BoWCM/qmsE5XqE3dDQCrqGAYWdejqZgK6GUD8+IV9VghBFN1RZJv3sT5diBwC15gncggCPJKF0WCPN8dun55jQdVpz3Ynl9leAAQAJhiGatD9AOgAAAABJRU5ErkJggg==", + "png": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmtJREFUeNpsU9tOE1EUXXPp0CAUWmJbC04xBANNTF+kKhG8fID6aqL/gPEj9E0lIf6Dj30HL03wxQtVIC0QKrWxNG1Dk9Z2Oj1zxn1m0oIZTnIyZ8/ee+211z5Hsm0bYg29fLGpxWIJWBYGS5IA8ncKhT9Wvf4Yqprtu+w3q85X7f9QxseD/pmZMZsxN9fnc5JNw0ACGGv6tPSvyvEDKEoWZ5Y8OHHObKpucw4B0t3agnl4CJPs2YkQVu4s61ORaBqMJc8CDBiIRhhVM9bXYdVqYAcH8M3NgS0tQQsFcfdKHEbvlr6WyaR/V6uPKPy7B4DT7lUq4MUipMlJ2MPDUKtVfKZ2nn/5BoNbkONxXeb8LYXe/A9AJLNWCxgdhZJagDI9DZg9qIkEytRSkdqTSFQtGILSbgc8LViM+tc0yPfukzIyOJ359k9YR0eQdB2KmBbpwXoM3Dod1SkD+scpEapCI5DdpsJhIJcjajQZagcjI+5oLe4VkeQnyiZgdIH2X6BJ7dSqQLfrggjw0AQwP+/GegCIHppNoFAgEMO1RZKo7BQgRi3yN05cnwdA0BQMAgF3C6pnbuNg92M9AFT1diSCh6kb+FGvo2MxnBB9ocZxp4Mns1cde213B81e7xwAcl4jkaa0IUSjUdLJwkL0Ej6VSvArCt7l81iku6GrKnYEU89VJlSJRmR0Dax+fI9suYxSo4HlWIw6M3FBlnD9YhiXabyOsOeIqG7TzDeIYo6EDGp+ZPb2kKKqH8h+mkxiI5/D1/19J3bwYPvPWXq2skkiJVxesqt0XzghpKM8nRVV2Lv2q9eLIvSfAAMAaacnllcFBmYAAAAASUVORK5CYII=", + "ppt": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkhJREFUeNpsU11rE0EUPTM7ySZpmzT9DNamWAtFfSiCigr+AxF9zKtv/hvf/Aki+FEi6ov4ItWHPGiwiBUKoUqqTUJImmR3M7Mz3t0kNe1m4LIwc+65595zlxljEJzdR5uf5nLmsvZx6gSvtd9W9bjhF7jg5dH9nRc/wq8YXaTSJptb0xklx7IZoKUEz1zJ2DUU69/37vFYrDxegJ9U0lC+AoIIVGg9CL+vIObP48KDQn7x0sWiVnJrnEDg7KGk+i/Ac4iUM/R7BsmrSSxtXMfa3X7el8+Kjf3KfUJ+iRJQw4w0Tc8BRyWGRAZY3rBR/VlC+XED2ayDhZyXl03+hNA3TxNQshlGLAnE44zCIL1goXZwiMNvB1i6zbC0KuAsxNITWwgNMYPeLVJiFEO9ArjHAivrAjNzBr4f4vwIgdGD4YUACsZCE8AtYGWT5jCsGQw5wEYJzP/pj5RwYTA1b07eQmfZ8P0sgdaM2FlYwWkMgMpl6NQAO33GKM0wsQWflkh1uqGVmVWblsiDkQyqxwfag35SqcktaEWTUTHYNx4iGU/C29+BvX4Lpu/C7zYgFjegSY63WySsHyXwpYHU00ieu0bAOuJbBTArBkiXKiaAmTzcvRJUV9E8rOgqBwqlY8ASs/AadbRLb8CzeTjVClqft6FdB17tL7yeCbFRBYoLr6vR/PiSEl5BZJaBD0/R2nkOZqfQ2fsKt+0SEQ+GLSIEUvJm+6jbah2+pS2aon+4g/afd4SYJVuA7vvXdC/IHQtSoTnK+yfAAIEaId1m+vudAAAAAElFTkSuQmCC", + "psd": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAqxJREFUeNpsU01ME0EYfbtdKKWGtoItRWgJHApCBE2I0YuoiSaaeDJeOJh41YN3TfTixcRwMfEk8eDJGA+Eg0YTTRRMg02KKFooCBbTlkJLS7f7P+u3K9Xo8iWT3Zn55s173/uGM00TVlwZfzJztD92iKO5ouvQGQPHcQDN380vlDPr65fdLj4Oa41i9sFt+ytgN7o7woGOrqgvvpLBaF8vWj1NUAwGTVNRM3mf5vU/zaU+XySQuTqIFXz9hxmGLkoS7r+YxvVnrzGzlgXPDOzUZPT4m3Dt/KlIuH9oUjXYEHZZ/wOgGQZi4TZcGI5hLb+FO++TSOSKcLtcMA0dI0EPrp4+HtnfG5skiUecDGwQE2MjAwiGWlFVNDz+tIyCokJhPKYSX7Gdz2I01hOJdnY9rJ/7UwPGTEiqjtbmJtw4MYx78S/4Wa3h5UoOYwPdIOp2Xi/t18rlFgcDw6o+ydiWVRwOBnCpL0oOAMmNEhLZIgSeoxwGSWcERon/M9DoBknTIdNQNAMnO4PIVGpIFXcwndlA2OtGc4MAxml27p4AIulWSIa9QVadiYSoJxhqBJivKgh5ad3k9gaw6JdlDaqq7q5wINY4F22HaLHSDZQkBW72O9cBYFEviBIURQH7a7MN0uDisUW12ZZcaGlmdq4DwCqeTo1zNtZuW7hUqGIw7MNqSUS2ImNsKEpSdEwt5lGhfQdAkQBEoub3NNrDJfAIeBuRrcrY5xGQ2RFJAjl00I8PCckJUCB9q1URBnk38XEJEuk41tmGwZAf66s1VOh2keqwoUnYpFxHH4iKIixkN3HzVQKP3iQR/5GDKMuYmE3h+fx3MHqh1sMafztHLuiCg0FAk0uFdLqcpGY5QEXbTC/j7mIaVjc18DxufUtBJ/vcggs+3ijVz/0SYABsJHPUtu/OYwAAAABJRU5ErkJggg==", + "py": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlVJREFUeNpsUktvEmEUPTPzTUFmgJK2UqXQFG3pA6OBLrQxamJcaYwuu3Dp0l9iXLvVtRuDpgt3JIYaTVSaxtRHsJq2xEJBHgXmifebMhECXzKZme+ee+65516h2+2Cn2cb2VwyHl12//vP2/zOQaF4uD7GWN69e/LogfNm7kUsPBFaXYwHMeK0OlpQEJApHJTuykzK98dE98O0bLM/UNgr4v32Dj1fwSQRt9dSsfmZcMa0rIv9ODaqYrPVxuPnL1Cu1aEbJu7fvIZUIo4bqeVYRzcyv/8c3SPYpwECt/dmu4ON3Ed4TymI+hQc1ZqoE+F+uQLDsnHlwkKMscJTgl4eJOi9fxZLePNhGx6ZQRRFqH4VjZaGSv0Y6cQcJLpra0ZguIWegqDiw7lYBBZV6xiGk9DQDLzK5bEyF4Hi9VLMsoYI7J6Es5PjeHjnOl5ubqHaaJGBEkzbxplQAKIgDmBHekDTgI+qKKqKLvNApgmEgyquLs1CoFn2Y4cIeLJpkjoCLkWnUSIF3JxISIUsCjAoxhWNJLBIJs3YeXj/08oYZkOKY65HllE/bkMmY504YUd40HUq2JSSyW6iVPmLiXE/ZMYQCU+hXK3h1toqdNN0sEObyKtqtDQ6kXDwcadDS2TBryp4nX2HxXjsJK6bDnZIAZem6Tp5YMMmicn5OC4lztNWtvB9cg+hQABtWjKL2jH/T3GgBcYDXEE6mcDM6SlaJAGMWkivLBC54ZgniZaDHSI4rNSqn7/t1vgkGJPwZXffSeCjk2iUWz9+nSTQN8e6ef8EGAClUi/qoiOc3wAAAABJRU5ErkJggg==", + "qt": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnVJREFUeNpsU8tu00AUPU5sp41NkzRxpfSZqi0VIIQqEEJUZYXECvbwCWxYsuBD+ABUFrDrCnWBQEJdIWigBSr6pqRJ1ebhxrE9M7aZmSrQ4o505fHMnXPPPWdGiaIIYrx89GKpNDdxmXkU3aEoCsT+z8W1Sm21+jCpJctQTvaerj+TX7WbnJ+0cpfuX8mQtn8GgJ4AZtIFY2Hz3foDVRcgyt+cRHcS0IARh+D/8G0PpmVi7smd0dLs+AIjwTVEiANEYYQwCHlEZyJgIQKfoX84g9uPZ0cHZ4YWmE9nuufU0wABCSSImMsWEgqSuoqA/39/swZFTWLy7vQo7dDnfPvWWQa8GuOV3IYLJXmyzDzG2/ChZ3pwbHdQ267BKJoYuj7SF2MQhiF8LuDK/Gf0DKTBKINz1IbTbEMzU1ANDW7LAfEIQKIgBsBFlAx6LYOz6MAcvoDCtAVGGPKlAiIu/F55F33FDA6W93EOAOMaMOl7biKPwRtD8Foetj5sYPfTDtxjl1f3Ubo5jkQieQ4ACSUD2iE4XDpAdbUiW9D7UsiN9WNkZgxajwbd0LGzt3keAJPUc1N5SVeENT0Ao2BKV6QzwlZeRBSKAYhe3aYHcZWn7l1EfjyPypcK9LQGa8qCvW9j9+MvaasQOHaRhGWdhsNLR8hwodYWf6B4tYjDjSOovRqq32rSYq/lytw4A77o1V2ERiAtzY5kkUrrsH+3QF2KY87ArTtQuQ6nAf4x6FCV1D001+vYersBM2vA4y1Rm2D7/Rac/TZIw4d/6MrcGAPf9htN0miJh7Lyuoyvr8rQeP9iVJcrSKgJ+TrFcyYebXTP/RFgAFQobmIOBxbsAAAAAElFTkSuQmCC", + "rar": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnpJREFUeNpsUktPE1EU/u68OgylZXi0hZACQU1LEKKCMcat7jTRnQsXxsQtv4E/4M74P1iriUaNCw1FgxpjCJQKKAU60+m8mJnrmSll4XCTc8+959zz3e88GOcc8aq9evChOHl/lvMoubvWX/z4+BwTlbvw7bXdg8b7h6LE1gGW+O88CRMt4XTlR6/rYxce5Xv3jlHH19fPkBu+gWy5mlcFb3Wn/umeKOEMJF5C7xCFbtA9dRXjFoYKGiTRAlPGUV1aKU9O3VwNQ74A8DQAIZxqAuAhBPIMFYpQVAVB4CPSZjEzv1weH5tbDQN+JQ2Abu488mnzIbAAA3o/VK2PwDJo7r5Fy7ZRuvi4PFS6+qIXdVYD8Jg6BUcuOD8BozSLlRWyicgVKkTMQWwUlFF0Ooe5FIPk57BD7G0SiywyjD8bCDyHsOkeeeR3SUxEkROmU6BfQYFJMHfhWXV8efkUrb13VPMTsrcTQSzxZ/+n0GVA6EGbSGdgG9vo15fg2nFgbO8k70SRdd+mahDT81vUxTZRlJBRMsjq89C0EXCvSf7TIBZ136YZUJEiE7LgJ2dN01BZuE0dkIhxE7KcQTK1QUj+cwAEyrPZ+IydzRoyah+mLy2isbWBweESJEnB9q+1RM9Ub9GQOWkABg8HjRr2d9Yh0hTlBlRsfn+D4vg0BvUC9rZqECUJuk7Tzr1zahCYlB6HJAREPwfbbMBzLBzsbUKVI0qBgQkc+SxgWUYaIAqOpKwKXJ6bgGlaaDV/YvHaFNrtDsKTfVSrJeqIg/bRNwjclFIALeP3saybhu8SC4VBHwnhBXXIKocYRXD9QzBi4Xgchmkd9+L+CTAAMqwy+ZzluBgAAAAASUVORK5CYII=", + "rb": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAixJREFUeNqEUktvElEU/mag5f2yJhXLwxIt0kiqsVEXujP+A925cu1Pce3WtXVtYuJCF7KtTY0NrVQIpRVKeXTkMcO9F8+9ZVooJJ5kcmbmfOe733fO1YbDIWS8+/g1dycVX7W/xyO3vdsuVKqvnE7HZ230783rlyo7bVBicSGyfjsVwozomVbIPe/c+FmsPHfoRKJd1HT7hXHBZjVbA4aA14NnD9bC2VR8gwuxPi5Sx39Cp+M0XUP0ahhP1jLhW7HFD4zze3b93ILtXYyyVKlR8/5hFbnvO9gtlrGSjOF+OpXkYviWyo8mCS4R6bqO4p86vm3v4fC4DrPfw4unj1XN6JvBaQtjChzUXK43sVU4wNFJA43Tv/B73edQwTmfIhAjCVL6UdPAj1IVFSKhCdAcAI9rnjBiAjtBYEu3GEeh1sKJ0YXR68sVIujzIhzwY8DEBHZqiLRKkicQDfvABxaiQTc4Y/C65pCOXwcjcmlvJgHtlwi4epYifiQWgmoLZwPW6HQG07LgcOgKO0UglAKOTt/E+09fwAiUWU7QAE9xUK3jbvomsispZVHMVEDSZdHo9rCZ/4VIMKAu0XGjpU7d2S8hk0pCELHEzrjKnCQOYJoD+Dxu1RyiwUm5LaMDo9NFt2cqDLvY4oQFp/QpfT/MrmI5FkWebt+NpWto0j2QmQkOjZ9hpwhqjXZzM/+7LU+cc7lRrjXh8/lVLRK5ovLWXglOsiOxdt8/AQYAzv8qbmu6vgEAAAAASUVORK5CYII=", + "rtf": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqEU01PE0EYfnZmd5FSvgLYFuwWt9EgHyEaox68eDJevHvwJ/hTPHv1N/QgZ2NC4g3kUAQKFKGhjVKqRrvbnRlnht262FHfy+y8877PPM8z71pCCKh4/ebt+rJfXEz26Vjf2mnsN5rPKKWbVpx7+eK5Xu2kyMtNTd5d8MdhiJ9BOO7atFI9ajy1UyAqSPIRMR6ZmoNehNHMMB7fX/UWvEKFMbYKE8DfQnAhwRmmJkbx6M6S5+WmK2Evup2c9yUk2nnKA0XVcSiGXAe1k5beP1i+4RFCXqnPywB/AKVzK34RjHNYlgVKCH50w7EBBogbTa/AVM5SgBdn0gc2AMDjPsbFPz2xye9asweS6n+NTbG8BCCfUtLjff2WoVnVpAH6z6hMUtJE3EykYfpF4vUiL3QNS7FMeSAQRBHW3r1Hq91B+VoBQRji4+ExFsvz6Hz7jm7Yw5OH92AcJKW9G4SoHhzhy/lXbB98Qmm2oCXN5WawsV2TACEoJXqwTKOsb3BtR2ucmZxANpPB8JUhyPnHWDaDpfJ1eZFALzJJ4MKO5MEtv4TSXB7V/br8iQLMz+almRZWbvoo5q9qRlxwewCgeXbe3qrVO5ZkUD/9jJGRLPaOm6COi92TU1DbxYe9umRD0DrrtJO+XwIMABWp9nS+FgaoAAAAAElFTkSuQmCC", + "sass": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDNDMTBBM0JGMTE5MTFFMTg3N0NFOTIyMTQ2QzhBNkQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDNDMTBBM0NGMTE5MTFFMTg3N0NFOTIyMTQ2QzhBNkQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowM0MxMEEzOUYxMTkxMUUxODc3Q0U5MjIxNDZDOEE2RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowM0MxMEEzQUYxMTkxMUUxODc3Q0U5MjIxNDZDOEE2RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po72XUcAAAJcSURBVHjahFJdTxNBFD1bykc/ttvdtttWGgI0bYrUgDZoNYqRJ014kMRXHvwB/hQTH/wFhMREJfFBQxBjhMRIFEQSCAlQxKYGggiU3e3HbnfX2bFt1EU9k9m9mblz5p4zlzFNExYmpue/jmTSZw5PZAl1MAwDT0c7O72wvPdudeNakPNtOZ0tsM7cvzdOc5yN5LDAsTFRAJks/kC2PxFRVe39Si6f4byez62EpAEH/gNN18F53Ri/Ocxf7OtdLMpKT42s/ZPg1cISJp/P0tg0TBzLCoK8D7eHh4RkLLJ4cCz12AjMXwgez8yhqtVo3NbqRKlcxcSL16gZwJ2Ry8KVc8kZO0HdTKlURn+8G6PD2SZhLMQj96WAiMAh2RXFYKI78lcJcx9WYBCycICnpNbojUWpD5Y0C4Zh2D0w6hWc70uQZC+IWfQZrXF0IsHvY+meBd08haAhoVMMQFJKWF7PNZM+klhRyogGhbqxOIXAMOtEwGAqDqVcgbVkkE+5UsEAWavf0az2t0ZqvK2qabh6IU3joizDwTgwej1LdVfJXkdbK8mt2QkayO99A0/0trQ46I1lVcX+UREhnsP34yLp1AD1xibBMuntpzU8mJyi3Tc1O4+l9U06n7x8Q/8PHz1DrrALt8tlr0CrkbJMHTop9Sk5sLa1g8L+ARJdnShKClY3tunN69t5iGLYTlCtakjFY7gxNABdN3B37BaqqoYT8pyX0in4ORbRkIA46YlDRbUTbBZ2Jb/Pw4qiKFnapcpPo9pdbrg8DjAOBsFgELJmsGs7eWkkc5bu/xBgAHkWC6UPADTOAAAAAElFTkSuQmCC", + "scss": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM4QjYyNDVGMTE4MTFFMTlBREZCNDNEM0ExMTk0MUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM4QjYyNDZGMTE4MTFFMTlBREZCNDNEM0ExMTk0MUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGQzhCNjI0M0YxMTgxMUUxOUFERkI0M0QzQTExOTQxQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGQzhCNjI0NEYxMTgxMUUxOUFERkI0M0QzQTExOTQxQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pkf1yeMAAAJbSURBVHjahFNdTxNBFD0tLULpB91uodVWPmorUIxo0VSiNSExMYYHE33l0Ud/in+C+OSjYgjRGDBRCKJIUkIEWi0WKlja0ul22+5219lJ26gLeiezuXvn7rnnnrlrUFUVms3Mvd2bjIyezRVLBA0zGAzo6jhjm1te+7EU37rFO+w7JlMbtG+ePJ5mOaZmci/nsPl6ONBtw18WDQc9tZq0sp7YjTisXV/NFKRpRvzHpHodDqsF03djzuvDg6vHJWFAprF/Arxe/oins6+YryoqCiUBvNOO+7FrXMjnWc0WyIAOQP0N4Nn8IqqSzPx2swllsYqZl28gK8DDyRvcxKXQvB6gISYpiwgH+jEVi7YAfW4nEqk0PJwDofNejAX7Pae2sPhhHQoF63U5Gai2Bn1epoPWmmaKoug1UBoMrgwHabIVVCx2jdrKFwm67TZ2plldPQGg2cK5HheIUMbaZqKV9In6giDCy3MNYXECgKI2gICxoQAEsQItpNCHWKngMo01arTY/jFIzbutShJuXh1Fm9FImYiM7tTtKOtbO+toN9Nc+fQ5SGUOIVYl7HzPIH2YRZ0y2KZ+sVzBHn2v1mpMGx0DTaR3nzfwfGEJdybGkdo/wEigDyvxLzg4yiESvojZhfd49OAeLJ2degaSLIPOO6vwgiYaaRErTRREEdn8MeJbSVZ5M7nLdNExqFLaQwEfFfACQn1+HBWKSKb3MT4Sgstuh9vVDa+bQ4DORE6o6RlspzMk9TOPfr+fiLJCLFYr3TZSKNcI7+aJwWQmPM+TkqRg49tu65f/JcAAMwMas6WUKd8AAAAASUVORK5CYII=", + "sql": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAh5JREFUeNp8kctrE1EUxr+ZyXMkoa1NBROaSkpTBE23PhZ25cql2y5duvAPUdGFS1FxIRRBXZlFQ9GVdDENIhGJxkDsw2mneZnM83ruNZlOmNoDhzlzz3d/9zv3Sowx8Ch/qlYK2XM3cEJsbH0+qjV/rd6/u6aN18b7RMFT+9aosP/Ex+0ae/puw7j36PlKEMAzctKJ3aGFamMHjV0d+wcGitkMrpWWp6hVIciEk2MAOwbUWjosx0UiFoWqJpGMx5DNzODq5aIPoa82AWBg/lyKLMH1PMp/a9XvLXLzG1cuFlBaWpiKxaIPSLY6CaC93ggQjyiQZRkeQSzLRovGaPciWLt5faSWEBoh6KBvOhiaNga0+Y9pwaFxvu7rfp8F5pWDt+qNMp2IijHGwddWCvN+33/CoAOP5nVdT9SdoQ1JkggiQ6Yvr7V60+9z7akA2gfH9cRF8hO5F5Ve4lQAF9uuK+qFsylkzsQxrcaQm04hdWkR83Mzfp9rQ3fAFzu9Ph6+WMfjl6/pGBdb2jbKmx8QlRjWy5vkyhUZBPgOeGNHN9AbDLGUz6He2hVj3Ll9C8/evsdgaMK0HV8bcmDTU0UUBYXcedR+NLGnH0I3jvDk1Rsy46FP4C/1BtrdntCGHNiOAzWZgEKQ5Qt5lIqLojbaXSQTcRy2OwT4SZqk0IYAOgkVWUE+lxX/zb0DpFNpkTzmZmfFtzewhHYcfwUYAMZmVaZQlLFHAAAAAElFTkSuQmCC", + "tga": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnxJREFUeNp0U89PE0EU/ra725K22ILRGipb22pMG6JcSEQTbUIwnozxpBcvepeEP0KPogcT/wlNT17kIKbEmChFUYKGVtL0R2gLtNCl3Z1Z3+zSAlonmezOe/O+973vvZEsy4JYnqdPMu6RkSQYQ29JEkB+PZcrslrtPhQl23VZc8/tr9I1yMHg0EA8HrBM04lVFAhoY38fSSDQVN3pfKV8G7KcxZHl6v1xblqU3eLc3p2VFZjr6+gQgwsnhzGTuq6Nhs6kYZqXjwL0GFhEl3U60OfnwWs1GGtrUKNRsKkpeIIBpKIRtI1J7cX7hXRhc/MOhXw5DkCZGG2zXAajzFIoBMvng1ypIKOqmP30GW3OIEcimovzlxRy5RgAFwDEAIODkCcmIMdiQLsNdWwMZdJlg8pzEUt1aBhKq3XinxKYqF9yQbqRIqsMy+0Gyy47bKgUWXSLtDENE5wdtuqQATm50F1VnPbRGeEw8HXZbiV8fsDvI9ldju9vADAyihLEbrWAZhOoVp3z6iqBUiB1A4nEfwCEsbkL/M4TgE5n5jDx+oTEzp1d8m9tC8H6MaAB0imzx0NU/WKUYE+loEyawDBo2ui6TGfT6ANAxrvx87gYCGCxXEKVJvCWFsG3eh1vN/J4OD6Od4UC8o0G3TX7TGLHwI9iEQmvF9X6Fh7F4/iYy+GcLOMSlfEgGsP0qdNOmX0BiGKpVkV1bw/1nW2b/gCpf1PTcI+Y7eg6ps+G4bG4PR99SjAVo9HE4q+fKNE0vl5awuSohjeijbRefVjAtUgEQRK7Yhi9OKn7nKWZxxlSPWl3QwgnaIrW8QMhD542vUbx/W49m7sq4v4IMABOqi3Ej7bAEAAAAABJRU5ErkJggg==", + "tgz": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNpsU1trE0EYPbMzSTfdtInFtkkpiaXVWou2FRUEn/so6JugL/oH/Af+B1988if40jcFERQURNBSQdDWlLQN2lsue8neZsZvc7FoOrDszM75znfOmVmmtUYyvry++36yfOeS1qqzDtvH2P76ApPlW3Drb2sHex/uccHWAdbZX30kO2+B3siN3zhTnHuQ66+95i423jzFzOVljBdKOZNHazvVT7e5wF+SZBj9iZJ+3J11mbW2kR8T4LwFli5i4fqTUvnczTUp9RLtDhKgJx0q4dEwWAxrREKICHEsoYYXMXvlcWmquLgmY71yCkG/c0AkARgLMZpnMDMpGNzEYe0dGp6HwvmHpbHC1Wf9MnFCkHQOyYEPzSJwQ2B65Tm5NZG3Fshim6wbMNJn4bpHowMKtIqo2COgR2IcAptwjvcgo6i77igjEmVDqbY8xQJ1VwRULhiBI6+G9Zf3cbTziuzIDkmHSNqECTFgQScEcYuc2NA8TcdYwXD+GkK/TYVN+u72WrIudiAD8o6oAR2RRCmQMjis3CIy1iSpPySCXhFTXeyAgh4BR+JVw8pauLi0Cp4yCX9A90FQhnSBYtnF/k+Q+HYam9itfIZB3QvT8zj8XSW5EhNTs9ivbSLwPUzPLNPJBIMEKnaQYg6aB9+RGR5F5VsNgnNKXMI1NdJGG5WfHzFVLJ7k8c8xUngpVodlDSGbFYj8Y4yMpOG09lHf3yIFPzA3fwHZTAQVtU4JUTeFDrdgDdlI8wAz5Qy2KxswReI7QODZcOr0ZH3q2hIDBI7zq16tuk3FNPxAI4wN+pkoccYoE4YJU5EdUtM4Qst26v26PwIMAKj3P/2YUKgYAAAAAElFTkSuQmCC", + "tiff": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmRJREFUeNp0UktPE1EU/qYzHWstlrYJNcWUElyUJsaNGh9B0g1Lo0v9Ey78EbrVxBhXuHShm25YGBJRQpAYBDEWpaEPEhksdVpbyjzveO4MfZDCTWbauefc736PIziOA77OPH2yJCcSGdg2uksQAKofFou/7VrtASRpvVNynj13f6XOhjg8HAlMTIQdy/LO+v3uYUPTkAHCTb+cK+0pdyGK6+hbvu4/xiyHbncYAwfR19ZgbG/DoO9LsSgeTd9JXoxfyMG2rvQDdBlwIZauQ5ufh12twioU4E+nYU1NIRCNIDs+Bt28mXzx8VNuZ796j9q/DgAwomwqClilAmF0FE4wCInAlkjO4y+r0JgNX2os6XPYS2q/cQyAcQatFjA0BPH6NYipccAwIGUy2CVJFZInkKlyJAqx3T4/IMGmJkeWIWSz5KgI5pdhb3yDXS5DSCYh8rTID8s0wexeVD0GtMd85KkkefFxUfE47M1NokbJkByEQl6tL+ouAI+MUwbFhnYbaJKc/Sqg0x4H4eDRGDA56fUOABA9/GsCpaIHwr8FOhQ823O5RfW66tUGADhNy3RNRDjcN41HLxdQ8J6jYTsOQLfOJBK4f+s2/uoathoNGKT1MtFeVHZxdWTEZfEq/wMKl3rCJOIzTV6ADs2R5ulYDDNkYjp0DhrF+zCVgkw31+v1UxjQZkNV0SADd2o1MIuc9gmY+/kLxb0/UFoHePd9A1qzeUoKpilx9xcLWzgg+u/zeVfuQqkM9bCN1ysrWKXxdtPgvScwUAm58XZ52W16QyPtifRUzi588GbEi1ztHPsvwAC4uC9qhnsZvwAAAABJRU5ErkJggg==", + "txt": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeJJREFUeNp8UrtOG1EQPfsyXiyzBguIJSyChZBBEFCKpKHLo6egpErNn8CHgH8gkZIiTSIXLhJAWCgkoMgRMSiRBSK29z4y9+I1d/HCrFb3MTPnnjkzlpQSynY+fP70fGF2gQuByCz6lfdd9Uurfvrrjes6762eb3tzQ69uFJwPsqOPC+MBEmxxphi4tlU5OGmsOzaBWLc+O9oIIVhScidkyGZ8vH62nHtSKlaI4cse6TjAfSaFBBcco0EWqyvzubmpyQrj/FXk75cQaSEMeMXU8xykPA/Hjd/6/LRcyjEpt2i7HAe4A2TeLZWKUOJaVLxj27j813EHGKCXaAJExu/4BOdiAED08riQD2riOrexyRoYc3CvsAbLGAAjZga7vgZG23WMCdBvoxKJc36TRBlMiaa2JByjNqqD8qkYc1pjDK7abey+/YhrWlfKswhpiCR96aEU9o5+QE3g2ovVWDm2Sc22bBQm8vrVpbkS9r+doPr1EOWZaQ0yFoxg2PcREosEAI4uvZhJpzFMP+cSXRbq+043RManez+tNWKMI6GN0g0Z04HFR+NoNC/0yx717efZOSbzY3AcR4Op2AGA5p/W31r9e0vNgSrh9OwCrpeCkqvZuqTybnpRqx/r2CjvvwADAJC/7lzAzQmwAAAAAElFTkSuQmCC", + "wav": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApFJREFUeNpsU1tPE0EYPXtpKbX0wqUQKVQMFdIXQBNCQBs06KP+B8ODGh+Mf4b/4IsGE54kxhcMBrkp7YOQgBRvSKG73fvsrt8Otoask0xmd+b7zpxzvm8E3/cRjPkniyulW0NFy2JoDkEAguOlpXJ9p3L8MBqVl4O9YHxae8pXuRlcGO7KPLhfTDVUqwUgigJMy4Whm6lEXHjxYf3XnByRN0QB/2KaH7btMlUxoRJAcyqKhdOaht7+DJ49n+2cvTnwynXcsb+kLwJ4rgfmMDDGWqvneXCZS9ND7mov5h9ND85M9y86Dpto5rUkuJ4Py3YDJpy6QGJPayqB+Njf+43XL220t0cwOZkfrNXsBUqZugDA6CbLdAiAwaek1ZU9LmP8Rh6S78GsGxjOp9FdzKJaVZIhBgGASzK21w/wbrnCk8euX+EMAjaaZuPHdwUdHVFYluuGPGCORwwYjg5rqOwccRk+3Ux0IEvntmsNG4ZmUayL/wAwKHUNfZfTKN0ZRaw9Cof8qJ/pMAyHy5KkAMTksSEJtnMenM7EMVMawbejMzJRh67bXEYiIXEAVTW50SEAhzqwfqrBcXx4VOhYm4RsNgHbsJFOyZTsQ1MN+hcohoUlkFiMT+TQFpMwXOjGpXgE+XwGk1N5pFJtKNCequgYGupCRBbCDOp0KBJc4VoP3dyBONW8uydBgBHUThqQKCk3mEZ/LoUG+RBioJO7VarAwEAntjYPiUUW9Hh4b2R7k9j98hN37xWx8fGAt3eIAdVMLn+uUv+b2KReSCZjZJiB9bV9jIz2ofr1BKvvd7G9dRC80lae0HzOt+cWVnrSKDrMJykifwNBpCgE/UAllEXufmDu8Zlffvvm8XSQ90eAAQA0pF7c08o4PAAAAABJRU5ErkJggg==", + "xls": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmxJREFUeNpsU0trFEEQ/mamZ3Y2+0zIC2MmITEkUYgERFQErx5E8KTi1b/h79A/4SW3nCNeYggBYZVEMU/y3N3Z7M7OTD/G6lk2ruw20zRdU/XV91VVG0mSQK/3n1a/jky6d6Xs3G8WXS+Pw5N6LXjLLGuna/78oZKerGsYKtrDE16uJGL1L9gEOOcYd2dL1fNwrbL//aXN7J1efPMmkUqEFAk0A0VZNbFEaQCBscIkXj975y3NLq9xye8PBkAniHOFph+j2eC4rsdoB4LsFubGl/Hq8RtvYWpxTQi52o1jvWiGYaRZL0/auDgOkC/Z8BYL2Pqxidp1FZkhoDxpeaXA/Ujuj/4HoOxKKjiOiek7RUShRNQWaNYFQuMafrYCxiw4ozZKfqbYJ0EvRdl1DQyyTs8XCNTA6UELMwvDyLpZWIZNNlNLlQOK2LMJRJ+5AkuZ1S7CFFzJzk56GnUjQWlYkqCoBWFbonEVYcLLA4dNnB624GQsDBWIgfZJEgxkoChzSFWvn4VpQemDm2VwXQsXJwF1h6c+gxlQ5jgSiEUEt0wdIe7tMES+nEG2aCLiJMOIIWIr9e0DEELAMUrwRuchVAyTKimUwO75Jm6VF3Bv7imOaj+xd7UFKVS/BPJF1b/E4tgTrE49J60O5kceoNqowiuuYKa8ghHXA48U9MT2AQgyRvTThE30bQiaSGa4yLMJNFo+Dq/2cHt4CYlwyFf2S6BHwwrMw/avDbR5C1k7h1YQ4KH3Amf+AcZyEbZPv9CItzQD1l9EbtYOjv74v/d3O9RMPTDrsEwGIWN8q2yk7XNYRs9JrRv3V4ABADSGR6eQ0/NQAAAAAElFTkSuQmCC", + "xlsx": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU8tqFEEUPVXdPY/ueWZIoiYZiSYKYhJc6EbduHOhgijo3t/wH1z6B0JAhOyMILhxo4kJGk1ASTAxwWF0Mpp5dHc9vFUzYwidaoqmq+8959xzbzGtNcx69PTS26ETmQtS9r4Hy/xv7MW7jV+th5yzVcaYPX/++It9u4NAv+CVR6tBUUTqMJsDcRzjZOZM8W9ZLKx+/XDb4e5/kH5In0lpIYWGUaC0YTZnBCAEKoVR3L36oDo7NbsglZwbqD6iQKOXFMcKUVfBkBAoQhlD5xxMDp/HrSv3q1JgYW3z0x0KXzkCYJaRZljru23aHWTzLiamAyytv0O9UYdf5PArqlppBfMUfu4oALErqZBKcUxMFRCHEp0DgW5Lo4N9NIN1dF0XXsVFOUyPJTzo+WBANDidjp8tgHGG3c0DnJ4uIRf4cOCBaW5KjY8xkZL72xpJ9QcFz5bVqHUJGHZL2YtNmKi06YCyiVFb4s/vEKMTAf1p4edOG6mMi1zR6wEpdUwX+vLDtkCzHoK7ptcM6ayLmGajvtex4PliyoIkFRjmUEASelB2rXQRSfjUCT9PlWpmW21iTGzCAyEkUixPRqXhe2V4zKczbdmybgkpJ0cGOuA6Y2MTCsKoi5HsNK7N3MN+uwYaWbxYfoLLkzdxcew6lrYWaZhm8PHHG3zffp1UwJSHz9vvkU8PodbcQYYYS5lxYkxTkGdVDQdV1Js1qPgYD6JIuIE7gsXVefIhIuM05k7dwMbeMmh87a18ufIMaVYyprrJLgje2Nr+1tzYXANnDnr3zRhHj37Vvy2wpXHtNAd5/wQYAD6WMuT2CwoVAAAAAElFTkSuQmCC", + "xml": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAilJREFUeNqMks1PE0EYxh+g3W2t1G0sEqyISynUFJsSOShNwCamiYZED3LgIkcuxoN/iCZePZiYGD2aGD+i0F5KMChxlVaakAK2ykcAt+WzdLu7zkxo3WZL4pu8mXfmeeY3885ug67roPFh5nvc62m9hjoR+5LMp7MrkYf370qVtco+VtCUFpbj+jGR+JbWn76OyQ8ePwsZATQb8R/hanZgINgj9IqeuBFCw1Kt9OMBnNWCs24XwkG/QKYUEiGjVAPQof/rq0783pShET3ULQo8xz0iS5FaANmrHQH2DoqY+DSLSz6RzecWlnD9ymU47LYjd4O5BXqDTG4FM3NpTEkpdJ5rw0AowLRMbhUfp58gTOaD/UHmNQPI6YmvKWRX1zESHUJ/oBs2nmPa+Mgw0ZIM3tZyGoJwygzQNB2jNyJIZX7iB0lpPoM70UGmPX8zCU+rG8NDVxHwdiC5mKsPUFUN/gvtLLf39sFzVqaN3YrC6TjBauqhXhNA1TQoqloV7Da+pjZq1FsXUCamF29j6LvYhf3iISamZ3Fv9DZevouhRzzPfOG+3hpA9U9UyioOlTJ7pFeTCQS6RGzIebyf+oz5pSzWtmSW1EO9phvQ00slBRt/8qR3DoWdXbiczUiTzd52D+tdLmyTB14mx1rMAKVcRpEATjrsuElee/HXGmnFRyBOGD30C/nEDjNgs7CDpsYmnHG3YPegBCvHs9oYfm8nG9dJa5X4K8AAQzQX4KSN3wcAAAAASUVORK5CYII=", + "yml": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdxJREFUeNqMUl1rE0EUPbM7m5Y0Zptu21AwWwhYpfSDFh+kvvRd8N0Hf4I/xWdf/Q158F0QoQ+CVsFKaLSQpt/dpmvztTOzzky6cetOpWcZZvbO3MO5514SxzEU3r57/3GpWllM/tP4sL3TarROXuSo/SWJvX71Uu80Cfhlr/T4UdWFAVfdnmsTUtvdP35OUyQKVnJgXDBTcj9icAsTeLax7j/052qM81UjwW1QJXEhMF0qYnN90fdnvdogYmvJPU0/VBApD4hcDrWRcyikfB17srzgW7b9Rh1vEvxDlI4tVytaBSEEtmWh0xsUMwpwnWjqAlcxogiHd1wiQyCu87iI/+sJtf6+NXsgpd7FWCMB50KvkYMGMbLdZgLlfj+K9K4+FnFQ2x7WntIs50AbmiGwLILt+k+EvzvSNIHzdigdJ/AmXQRhiHv5POSwYmG+cqPVo0HqDxj8uTK2vn1Hfa+JmdIkvtZ/4fOPXU3WPDpFeNWVyUKryCiIGMN4zsH98gym3CIcOTwT+XHdXrdQQHAZotE8kBPpSqPNHtBOr48HUmLOcXRJT9dWNMGYJFby91pHOAvaykSaITg+bwefdhrteDRTMSwyrFCgI88E056Hy+4Ah2cXQZL3R4ABALUe7fqXWFN6AAAAAElFTkSuQmCC", + "zip": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm9JREFUeNpsk0tv00AUhc+MY6dOmgeFJg1FoVVpUWlFC0s2IFF1jxBbhKj4BSxYdscPYcEmQmIDq0gsERIViy4TpD7VFzF1Ho5je2a4thOqNhlp5Mz4zudzzp0wpRTC8fPrk0/TC6+fDtYicLH97T1Kc2vQDcs+rH3eUAxVznn0fn1DRM8E+iOdv5ct3XmZG6yVlNj6solUbgVTt0q5FGtX6vXqC6VklTE+KAO/OODHSIQPRQpsXC+kkEz2ELA0ystv84tLzyucsbWByisAGf+QAS2CCDRRLMJMmxC+i8C4jdLCm/zM7OOKFGptcO6/BTpJ0yeQB0Y+mfKQuZZG0jQgeRbW8Xdomobs9LN8scc+UPHNy4Dwq8IljotIIQEm59/RoSyM1CKkXKZNBm7kIVgyM6wgAnSgRK9vqQfHPiMFDHqyFVsLR9Cm0o4YzoAASrSjCelQfRPb1Vc4qn0EY5L2W9GEaBLcxQgFHpGbkMIDJ69e+wjJ8VXqRgKid0r7ftQdxkRs9SqA2kgAm14SSIQh9uhuLGPMnKJs/5KquL1x0N0RCsizigoDaLqBdHoMiyvrlBsHVx1wphD4BCewoqxGKKDwAgtOy8JufYuk+5golGGaGZwc1sIGoDz3AOPZSVLaHgVwydoJDM1H4DbQODughB3YpOD44HfoHgnu4e7So0uAi0stHLJ3Aud8B9bpHu6vPoSu9TtDl6tUuoFiIYOgu0+158MKmOxomtyD3Qi/3MTR7i8K0EDG1GHO5DE3X4DvNahZlJOwEkOATvdPc2//hx3mXJ5lFJaF8K8bStd0YGfnOJbMGex21x6c+yfAAOlIPDJzr7cLAAAAAElFTkSuQmCC" +} \ No newline at end of file diff --git a/node_modules/ecstatic/lib/ecstatic/show-dir/index.js b/node_modules/ecstatic/lib/ecstatic/show-dir/index.js new file mode 100644 index 000000000..a4f7b7e2b --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/show-dir/index.js @@ -0,0 +1,179 @@ +var styles = require('./styles'), + supportedIcons = styles.icons, + css = styles.css, + permsToString = require('./perms-to-string'), + sizeToString = require('./size-to-string'), + sortFiles = require('./sort-files'), + fs = require('fs'), + path = require('path'), + he = require('he'), + etag = require('../etag'), + url = require('url'), + status = require('../status-handlers'); + +module.exports = function (opts, stat) { + // opts are parsed by opts.js, defaults already applied + var cache = opts.cache, + root = path.resolve(opts.root), + baseDir = opts.baseDir, + humanReadable = opts.humanReadable, + handleError = opts.handleError, + showDotfiles = opts.showDotfiles, + si = opts.si, + weakEtags = opts.weakEtags; + + return function middleware (req, res, next) { + + // Figure out the path for the file from the given url + var parsed = url.parse(req.url), + pathname = decodeURIComponent(parsed.pathname), + dir = path.normalize( + path.join(root, + path.relative( + path.join('/', baseDir), + pathname + ) + ) + ); + + fs.stat(dir, function (err, stat) { + if (err) { + return handleError ? status[500](res, next, { error: err }) : next(); + } + + // files are the listing of dir + fs.readdir(dir, function (err, files) { + if (err) { + return handleError ? status[500](res, next, { error: err }) : next(); + } + + // Optionally exclude dotfiles from directory listing. + if (!showDotfiles) { + files = files.filter(function(filename){ + return filename.slice(0,1) !== '.'; + }); + } + + res.setHeader('content-type', 'text/html'); + res.setHeader('etag', etag(stat, weakEtags)); + res.setHeader('last-modified', (new Date(stat.mtime)).toUTCString()); + res.setHeader('cache-control', cache); + + sortFiles(dir, files, function (lolwuts, dirs, files) { + // It's possible to get stat errors for all sorts of reasons here. + // Unfortunately, our two choices are to either bail completely, + // or just truck along as though everything's cool. In this case, + // I decided to just tack them on as "??!?" items along with dirs + // and files. + // + // Whatever. + + // if it makes sense to, add a .. link + if (path.resolve(dir, '..').slice(0, root.length) == root) { + return fs.stat(path.join(dir, '..'), function (err, s) { + if (err) { + return handleError ? status[500](res, next, { error: err }) : next(); + } + dirs.unshift([ '..', s ]); + render(dirs, files, lolwuts); + }); + } + render(dirs, files, lolwuts); + }); + + function render(dirs, files, lolwuts) { + // each entry in the array is a [name, stat] tuple + + var html = [ + '', + '', + ' ', + ' ', + ' ', + ' Index of ' + he.encode(pathname) +'', + ' ', + ' ', + ' ', + '

Index of ' + he.encode(pathname) + '

' + ].join('\n') + '\n'; + + html += ''; + + var failed = false; + var writeRow = function (file, i) { + // render a row given a [name, stat] tuple + var isDir = file[1].isDirectory && file[1].isDirectory(); + var href = parsed.pathname.replace(/\/$/, '') + '/' + encodeURIComponent(file[0]); + + // append trailing slash and query for dir entry + if (isDir) { + href += '/' + he.encode((parsed.search)? parsed.search:''); + } + + var displayName = he.encode(file[0]) + ((isDir)? '/':''); + + var ext = file[0].split('.').pop(); + + var iconClass = 'icon-' + (isDir ? '_blank' : (supportedIcons[ext] ? ext : '_page')); + + // TODO: use stylessheets? + html += '' + + '' + + '' + + '' + + '' + + '\n'; + }; + + dirs.sort(function (a, b) { return a[0].toString().localeCompare(b[0].toString()); }).forEach(writeRow); + files.sort(function (a, b) { return a.toString().localeCompare(b.toString()); }).forEach(writeRow); + lolwuts.sort(function (a, b) { return a[0].toString().localeCompare(b[0].toString()); }).forEach(writeRow); + + html += '
(' + permsToString(file[1]) + ')' + sizeToString(file[1], humanReadable, si) + '' + displayName + '
\n'; + html += '
\n' + + '' + ; + + if (!failed) { + res.writeHead(200, { "Content-Type": "text/html" }); + res.end(html); + } + } + }); + }); + }; +}; + +// given a file's stat, return the size of it in string +// humanReadable: (boolean) whether to result is human readable +// si: (boolean) whether to use si (1k = 1000), otherwise 1k = 1024 +// adopted from http://stackoverflow.com/a/14919494/665507 +function sizeToString(stat, humanReadable, si) { + if (stat.isDirectory && stat.isDirectory()) { + return ''; + } + + var sizeString = ''; + var bytes = stat.size; + var threshold = si ? 1000 : 1024; + + if (!humanReadable || bytes < threshold) { + return bytes + 'B'; + } + + var units = [ 'k','M','G','T','P','E','Z','Y' ]; + var u = -1; + do { + bytes /= threshold; + ++u; + } while (bytes >= threshold); + + var b = bytes.toFixed(1); + if (isNaN(b)) b = '??'; + + return b + units[u]; +} diff --git a/node_modules/ecstatic/lib/ecstatic/show-dir/perms-to-string.js b/node_modules/ecstatic/lib/ecstatic/show-dir/perms-to-string.js new file mode 100644 index 000000000..837e3f751 --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/show-dir/perms-to-string.js @@ -0,0 +1,23 @@ +module.exports = function permsToString(stat) { + + if (!stat.isDirectory || !stat.mode) { + return '???!!!???'; + } + + var dir = stat.isDirectory() ? 'd' : '-', + mode = stat.mode.toString(8); + + return dir + mode.slice(-3).split('').map(function (n) { + return [ + '---', + '--x', + '-w-', + '-wx', + 'r--', + 'r-x', + 'rw-', + 'rwx' + ][parseInt(n, 10)]; + }).join(''); +}; + diff --git a/node_modules/ecstatic/lib/ecstatic/show-dir/size-to-string.js b/node_modules/ecstatic/lib/ecstatic/show-dir/size-to-string.js new file mode 100644 index 000000000..c8ef99905 --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/show-dir/size-to-string.js @@ -0,0 +1,29 @@ +// given a file's stat, return the size of it in string +// humanReadable: (boolean) whether to result is human readable +// si: (boolean) whether to use si (1k = 1000), otherwise 1k = 1024 +// adopted from http://stackoverflow.com/a/14919494/665507 +module.exports = function sizeToString(stat, humanReadable, si) { + if (stat.isDirectory && stat.isDirectory()) { + return ''; + } + + var sizeString = ''; + var bytes = stat.size; + var threshold = si ? 1000 : 1024; + + if (!humanReadable || bytes < threshold) { + return bytes + 'B'; + } + + var units = [ 'k','M','G','T','P','E','Z','Y' ]; + var u = -1; + do { + bytes /= threshold; + ++u; + } while (bytes >= threshold); + + var b = bytes.toFixed(1); + if (isNaN(b)) b = '??'; + + return b + units[u]; +}; diff --git a/node_modules/ecstatic/lib/ecstatic/show-dir/sort-files.js b/node_modules/ecstatic/lib/ecstatic/show-dir/sort-files.js new file mode 100644 index 000000000..cd666cb5d --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/show-dir/sort-files.js @@ -0,0 +1,35 @@ +var fs = require('fs'), + path = require('path'); + +module.exports = function sortByIsDirectory(dir, paths, cb) { + // take the listing file names in `dir` + // returns directory and file array, each entry is + // of the array a [name, stat] tuple + var pending = paths.length, + errs = [], + dirs = [], + files = []; + + if (!pending) { + return cb(errs, dirs, files); + } + + paths.forEach(function (file) { + fs.stat(path.join(dir, file), function (err, s) { + if (err) { + errs.push([file, err]); + } + else if (s.isDirectory()) { + dirs.push([file, s]); + } + else { + files.push([file, s]); + } + + if (--pending === 0) { + cb(errs, dirs, files); + } + }); + }); +}; + diff --git a/node_modules/ecstatic/lib/ecstatic/show-dir/styles.js b/node_modules/ecstatic/lib/ecstatic/show-dir/styles.js new file mode 100644 index 000000000..4870ff9fe --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/show-dir/styles.js @@ -0,0 +1,20 @@ +var fs = require('fs'), + icons = require('./icons.json'), + path = require('path'); + +var IMG_SIZE = 16; + +var css = 'td.icon-parent { height: ' + IMG_SIZE + 'px; width: ' + IMG_SIZE + 'px; }\n'; +css += 'td.perms {}\n'; +css += 'td.file-size { text-align: right; padding-left: 1em; }\n'; +css += 'td.display-name { padding-left: 1em; }\n'; + +Object.keys(icons).forEach(function(key) { + css += 'i.icon-' + key + ' {\n'; + css += ' display: block; width: 100%; height: 100%; background-repeat: no-repeat;\n'; + css += ' background: url("data:image/png;base64,' + icons[key] + '");\n'; + css += '}\n\n'; +}); + +exports.icons = icons; +exports.css = css; diff --git a/node_modules/ecstatic/lib/ecstatic/status-handlers.js b/node_modules/ecstatic/lib/ecstatic/status-handlers.js new file mode 100644 index 000000000..348c99dcf --- /dev/null +++ b/node_modules/ecstatic/lib/ecstatic/status-handlers.js @@ -0,0 +1,104 @@ +var he = require('he'); + +// not modified +exports['304'] = function (res, next) { + res.statusCode = 304; + res.end(); +}; + +// access denied +exports['403'] = function (res, next) { + res.statusCode = 403; + if (typeof next === "function") { + next(); + } + else { + if (res.writable) { + res.setHeader('content-type', 'text/plain'); + res.end('ACCESS DENIED'); + } + } +}; + +// disallowed method +exports['405'] = function (res, next, opts) { + res.statusCode = 405; + if (typeof next === "function") { + next(); + } + else { + res.setHeader('allow', (opts && opts.allow) || 'GET, HEAD'); + res.end(); + } +}; + +// not found +exports['404'] = function (res, next) { + res.statusCode = 404; + if (typeof next === "function") { + next(); + } + else { + if (res.writable) { + res.setHeader('content-type', 'text/plain'); + res.end('File not found. :('); + } + } +}; + +exports['416'] = function (res, next) { + res.statusCode = 416; + if (typeof next === "function") { + next(); + } + else { + if (res.writable) { + res.setHeader('content-type', 'text/plain'); + res.end('Requested range not satisfiable'); + } + } +}; + +// flagrant error +exports['500'] = function (res, next, opts) { + res.statusCode = 500; + res.setHeader('content-type', 'text/html'); + var error = String(opts.error.stack || opts.error || "No specified error"), + html = [ + '', + '', + ' ', + ' ', + ' 500 Internal Server Error', + ' ', + ' ', + '

', + ' ' + he.encode(error), + '

', + ' ', + '' + ].join('\n') + '\n'; + res.end(html); +}; + +// bad request +exports['400'] = function (res, next, opts) { + res.statusCode = 400; + res.setHeader('content-type', 'text/html'); + var error = opts && opts.error ? String(opts.error) : 'Malformed request.', + html = [ + '', + '', + ' ', + ' ', + ' 400 Bad Request', + ' ', + ' ', + '

', + ' ' + he.encode(error), + '

', + ' ', + '' + ].join('\n') + '\n'; + res.end(html); +}; diff --git a/node_modules/ecstatic/node_modules/minimist/.travis.yml b/node_modules/ecstatic/node_modules/minimist/.travis.yml new file mode 100644 index 000000000..74c57bf15 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "iojs" +before_install: + - npm install -g npm@~1.4.6 diff --git a/node_modules/ecstatic/node_modules/minimist/LICENSE b/node_modules/ecstatic/node_modules/minimist/LICENSE new file mode 100644 index 000000000..ee27ba4b4 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ecstatic/node_modules/minimist/example/parse.js b/node_modules/ecstatic/node_modules/minimist/example/parse.js new file mode 100644 index 000000000..abff3e8ee --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/example/parse.js @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.dir(argv); diff --git a/node_modules/ecstatic/node_modules/minimist/index.js b/node_modules/ecstatic/node_modules/minimist/index.js new file mode 100644 index 000000000..6a0559d58 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/index.js @@ -0,0 +1,236 @@ +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/node_modules/ecstatic/node_modules/minimist/package.json b/node_modules/ecstatic/node_modules/minimist/package.json new file mode 100644 index 000000000..820dedaf0 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/package.json @@ -0,0 +1,73 @@ +{ + "_from": "minimist@^1.1.0", + "_id": "minimist@1.2.0", + "_inBundle": false, + "_integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "_location": "/ecstatic/minimist", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "minimist@^1.1.0", + "name": "minimist", + "escapedName": "minimist", + "rawSpec": "^1.1.0", + "saveSpec": null, + "fetchSpec": "^1.1.0" + }, + "_requiredBy": [ + "/ecstatic" + ], + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "_shasum": "a35008b20f41383eec1fb914f4cd5df79a264284", + "_spec": "minimist@^1.1.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/ecstatic", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "parse argument options", + "devDependencies": { + "covert": "^1.0.0", + "tap": "~0.4.0", + "tape": "^3.5.0" + }, + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "license": "MIT", + "main": "index.js", + "name": "minimist", + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "scripts": { + "coverage": "covert test/*.js", + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "version": "1.2.0" +} diff --git a/node_modules/ecstatic/node_modules/minimist/readme.markdown b/node_modules/ecstatic/node_modules/minimist/readme.markdown new file mode 100644 index 000000000..30a74cf8c --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/readme.markdown @@ -0,0 +1,91 @@ +# 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/node_modules/ecstatic/node_modules/minimist/test/all_bool.js b/node_modules/ecstatic/node_modules/minimist/test/all_bool.js new file mode 100644 index 000000000..ac835483d --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/all_bool.js @@ -0,0 +1,32 @@ +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/node_modules/ecstatic/node_modules/minimist/test/bool.js b/node_modules/ecstatic/node_modules/minimist/test/bool.js new file mode 100644 index 000000000..14b0717ce --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/bool.js @@ -0,0 +1,166 @@ +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/node_modules/ecstatic/node_modules/minimist/test/dash.js b/node_modules/ecstatic/node_modules/minimist/test/dash.js new file mode 100644 index 000000000..5a4fa5be4 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/dash.js @@ -0,0 +1,31 @@ +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/node_modules/ecstatic/node_modules/minimist/test/default_bool.js b/node_modules/ecstatic/node_modules/minimist/test/default_bool.js new file mode 100644 index 000000000..780a31127 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/default_bool.js @@ -0,0 +1,35 @@ +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/node_modules/ecstatic/node_modules/minimist/test/dotted.js b/node_modules/ecstatic/node_modules/minimist/test/dotted.js new file mode 100644 index 000000000..d8b3e856e --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/dotted.js @@ -0,0 +1,22 @@ +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/node_modules/ecstatic/node_modules/minimist/test/kv_short.js b/node_modules/ecstatic/node_modules/minimist/test/kv_short.js new file mode 100644 index 000000000..f813b3050 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/kv_short.js @@ -0,0 +1,16 @@ +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/node_modules/ecstatic/node_modules/minimist/test/long.js b/node_modules/ecstatic/node_modules/minimist/test/long.js new file mode 100644 index 000000000..5d3a1e09d --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/long.js @@ -0,0 +1,31 @@ +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/node_modules/ecstatic/node_modules/minimist/test/num.js b/node_modules/ecstatic/node_modules/minimist/test/num.js new file mode 100644 index 000000000..2cc77f4d6 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/num.js @@ -0,0 +1,36 @@ +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/node_modules/ecstatic/node_modules/minimist/test/parse.js b/node_modules/ecstatic/node_modules/minimist/test/parse.js new file mode 100644 index 000000000..7b4a2a17c --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/parse.js @@ -0,0 +1,197 @@ +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/node_modules/ecstatic/node_modules/minimist/test/parse_modified.js b/node_modules/ecstatic/node_modules/minimist/test/parse_modified.js new file mode 100644 index 000000000..ab620dc5e --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,9 @@ +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/node_modules/ecstatic/node_modules/minimist/test/short.js b/node_modules/ecstatic/node_modules/minimist/test/short.js new file mode 100644 index 000000000..d513a1c25 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/short.js @@ -0,0 +1,67 @@ +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/node_modules/ecstatic/node_modules/minimist/test/stop_early.js b/node_modules/ecstatic/node_modules/minimist/test/stop_early.js new file mode 100644 index 000000000..bdf9fbcb0 --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/stop_early.js @@ -0,0 +1,15 @@ +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/node_modules/ecstatic/node_modules/minimist/test/unknown.js b/node_modules/ecstatic/node_modules/minimist/test/unknown.js new file mode 100644 index 000000000..462a36bdd --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/unknown.js @@ -0,0 +1,102 @@ +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/node_modules/ecstatic/node_modules/minimist/test/whitespace.js b/node_modules/ecstatic/node_modules/minimist/test/whitespace.js new file mode 100644 index 000000000..8a52a58ce --- /dev/null +++ b/node_modules/ecstatic/node_modules/minimist/test/whitespace.js @@ -0,0 +1,8 @@ +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/node_modules/ecstatic/package.json b/node_modules/ecstatic/package.json new file mode 100644 index 000000000..0d7845071 --- /dev/null +++ b/node_modules/ecstatic/package.json @@ -0,0 +1,74 @@ +{ + "_from": "ecstatic@^2.0.0", + "_id": "ecstatic@2.2.1", + "_inBundle": false, + "_integrity": "sha512-ztE4WqheoWLh3wv+HQwy7dACnvNY620coWpa+XqY6R2cVWgaAT2lUISU1Uf7JpdLLJCURktJOaA9av2AOzsyYQ==", + "_location": "/ecstatic", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ecstatic@^2.0.0", + "name": "ecstatic", + "escapedName": "ecstatic", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/http-server" + ], + "_resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-2.2.1.tgz", + "_shasum": "b5087fad439dd9dd49d31e18131454817fe87769", + "_spec": "ecstatic@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/http-server", + "author": { + "name": "Joshua Holbrook", + "email": "josh@nodejitsu.com", + "url": "http://jesusabdullah.net" + }, + "bin": { + "ecstatic": "./lib/ecstatic.js" + }, + "bugs": { + "url": "https://github.com/jfhbrook/node-ecstatic/issues" + }, + "bundleDependencies": false, + "dependencies": { + "he": "^1.1.1", + "mime": "^1.2.11", + "minimist": "^1.1.0", + "url-join": "^2.0.2" + }, + "deprecated": false, + "description": "A simple static file server middleware that works with both Express and Flatiron", + "devDependencies": { + "codecov": "^2.2.0", + "eol": "^0.9.0", + "express": "^4.12.3", + "mkdirp": "^0.5.0", + "request": "^2.49.0", + "tap": "^10.3.3" + }, + "homepage": "https://github.com/jfhbrook/node-ecstatic", + "keywords": [ + "static", + "web", + "server", + "files", + "mime", + "middleware" + ], + "license": "MIT", + "main": "./lib/ecstatic.js", + "name": "ecstatic", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/jfhbrook/node-ecstatic.git" + }, + "scripts": { + "posttest": "tap --coverage-report=text-lcov | codecov", + "test": "tap --coverage test/*.js" + }, + "version": "2.2.1" +} diff --git a/node_modules/ecstatic/test.js b/node_modules/ecstatic/test.js new file mode 100644 index 000000000..195dcae99 --- /dev/null +++ b/node_modules/ecstatic/test.js @@ -0,0 +1,7 @@ +var fs = require('fs'); + +var stat = fs.statSync('./package.json'); // or some other file + +console.log(stat.mtime); +console.log('' + stat.mtime); +console.log(JSON.stringify(stat.mtime)); diff --git a/node_modules/ecstatic/tools/build-icons.js b/node_modules/ecstatic/tools/build-icons.js new file mode 100644 index 000000000..04b795407 --- /dev/null +++ b/node_modules/ecstatic/tools/build-icons.js @@ -0,0 +1,15 @@ +var fs = require('fs'), + path = require('path'); + +var IMG_SIZE = 16; + +var iconDir = path.resolve(__dirname, '../teambox-icons/' + IMG_SIZE + 'px'); + +var icons = {}; + +fs.readdirSync(iconDir).forEach(function (filename) { + var tuple = filename.split('.'); + icons[tuple[0]] = fs.readFileSync(path.resolve(iconDir, filename), 'base64'); +}); + +fs.writeFileSync(path.resolve(__dirname, '../lib/ecstatic/show-dir/icons.json'), JSON.stringify(icons, null, 2), 'utf8'); diff --git a/node_modules/ecstatic/tools/get-icons.sh b/node_modules/ecstatic/tools/get-icons.sh new file mode 100755 index 000000000..9106b690e --- /dev/null +++ b/node_modules/ecstatic/tools/get-icons.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +rm -rf teambox-icons +git clone --depth=1 git@github.com:teambox/Free-file-icons.git teambox-icons diff --git a/node_modules/elliptic/README.md b/node_modules/elliptic/README.md new file mode 100644 index 000000000..808984501 --- /dev/null +++ b/node_modules/elliptic/README.md @@ -0,0 +1,227 @@ +# Elliptic [![Build Status](https://secure.travis-ci.org/indutny/elliptic.png)](http://travis-ci.org/indutny/elliptic) [![Coverage Status](https://coveralls.io/repos/indutny/elliptic/badge.svg?branch=master&service=github)](https://coveralls.io/github/indutny/elliptic?branch=master) [![Code Climate](https://codeclimate.com/github/indutny/elliptic/badges/gpa.svg)](https://codeclimate.com/github/indutny/elliptic) + +[![Saucelabs Test Status](https://saucelabs.com/browser-matrix/gh-indutny-elliptic.svg)](https://saucelabs.com/u/gh-indutny-elliptic) + +Fast elliptic-curve cryptography in a plain javascript implementation. + +NOTE: Please take a look at http://safecurves.cr.yp.to/ before choosing a curve +for your cryptography operations. + +## Incentive + +ECC is much slower than regular RSA cryptography, the JS implementations are +even more slower. + +## Benchmarks + +```bash +$ node benchmarks/index.js +Benchmarking: sign +elliptic#sign x 262 ops/sec ±0.51% (177 runs sampled) +eccjs#sign x 55.91 ops/sec ±0.90% (144 runs sampled) +------------------------ +Fastest is elliptic#sign +======================== +Benchmarking: verify +elliptic#verify x 113 ops/sec ±0.50% (166 runs sampled) +eccjs#verify x 48.56 ops/sec ±0.36% (125 runs sampled) +------------------------ +Fastest is elliptic#verify +======================== +Benchmarking: gen +elliptic#gen x 294 ops/sec ±0.43% (176 runs sampled) +eccjs#gen x 62.25 ops/sec ±0.63% (129 runs sampled) +------------------------ +Fastest is elliptic#gen +======================== +Benchmarking: ecdh +elliptic#ecdh x 136 ops/sec ±0.85% (156 runs sampled) +------------------------ +Fastest is elliptic#ecdh +======================== +``` + +## API + +### ECDSA + +```javascript +var EC = require('elliptic').ec; + +// Create and initialize EC context +// (better do it once and reuse it) +var ec = new EC('secp256k1'); + +// Generate keys +var key = ec.genKeyPair(); + +// Sign message (must be an array, or it'll be treated as a hex sequence) +var msg = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; +var signature = key.sign(msg); + +// Export DER encoded signature in Array +var derSign = signature.toDER(); + +// Verify signature +console.log(key.verify(msg, derSign)); + +// CHECK WITH NO PRIVATE KEY + +// Public key as '04 + x + y' +var pub = '04bb1fa3...'; + +// Signature MUST be either: +// 1) hex-string of DER-encoded signature; or +// 2) DER-encoded signature as buffer; or +// 3) object with two hex-string properties (r and s) + +var signature = 'b102ac...'; // case 1 +var signature = new Buffer('...'); // case 2 +var signature = { r: 'b1fc...', s: '9c42...' }; // case 3 + +// Import public key +var key = ec.keyFromPublic(pub, 'hex'); + +// Verify signature +console.log(key.verify(msg, signature)); +``` + +### EdDSA + +```javascript +var EdDSA = require('elliptic').eddsa; + +// Create and initialize EdDSA context +// (better do it once and reuse it) +var ec = new EdDSA('ed25519'); + +// Create key pair from secret +var key = ec.keyFromSecret('693e3c...'); // hex string, array or Buffer + +// Sign message (must be an array, or it'll be treated as a hex sequence) +var msg = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; +var signature = key.sign(msg).toHex(); + +// Verify signature +console.log(key.verify(msg, signature)); + +// CHECK WITH NO PRIVATE KEY + +// Import public key +var pub = '0a1af638...'; +var key = ec.keyFromPublic(pub, 'hex'); + +// Verify signature +var signature = '70bed1...'; +console.log(key.verify(msg, signature)); +``` + +### ECDH + +```javascript +var EC = require('elliptic').ec; +var ec = new EC('curve25519'); + +// Generate keys +var key1 = ec.genKeyPair(); +var key2 = ec.genKeyPair(); + +var shared1 = key1.derive(key2.getPublic()); +var shared2 = key2.derive(key1.getPublic()); + +console.log('Both shared secrets are BN instances'); +console.log(shared1.toString(16)); +console.log(shared2.toString(16)); +``` + +three and more members: +```javascript +var EC = require('elliptic').ec; +var ec = new EC('curve25519'); + +var A = ec.genKeyPair(); +var B = ec.genKeyPair(); +var C = ec.genKeyPair(); + +var AB = A.getPublic().mul(B.getPrivate()) +var BC = B.getPublic().mul(C.getPrivate()) +var CA = C.getPublic().mul(A.getPrivate()) + +var ABC = AB.mul(C.getPrivate()) +var BCA = BC.mul(A.getPrivate()) +var CAB = CA.mul(B.getPrivate()) + +console.log(ABC.getX().toString(16)) +console.log(BCA.getX().toString(16)) +console.log(CAB.getX().toString(16)) +``` + +NOTE: `.derive()` returns a [BN][1] instance. + +## Supported curves + +Elliptic.js support following curve types: + +* Short Weierstrass +* Montgomery +* Edwards +* Twisted Edwards + +Following curve 'presets' are embedded into the library: + +* `secp256k1` +* `p192` +* `p224` +* `p256` +* `p384` +* `p521` +* `curve25519` +* `ed25519` + +NOTE: That `curve25519` could not be used for ECDSA, use `ed25519` instead. + +### Implementation details + +ECDSA is using deterministic `k` value generation as per [RFC6979][0]. Most of +the curve operations are performed on non-affine coordinates (either projective +or extended), various windowing techniques are used for different cases. + +All operations are performed in reduction context using [bn.js][1], hashing is +provided by [hash.js][2] + +### Related projects + +* [eccrypto][3]: isomorphic implementation of ECDSA, ECDH and ECIES for both + browserify and node (uses `elliptic` for browser and [secp256k1-node][4] for + node) + +#### LICENSE + +This software is licensed under the MIT License. + +Copyright Fedor Indutny, 2014. + +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. + +[0]: http://tools.ietf.org/html/rfc6979 +[1]: https://github.com/indutny/bn.js +[2]: https://github.com/indutny/hash.js +[3]: https://github.com/bitchan/eccrypto +[4]: https://github.com/wanderer/secp256k1-node diff --git a/node_modules/elliptic/lib/elliptic.js b/node_modules/elliptic/lib/elliptic.js new file mode 100644 index 000000000..dfe2fe7d1 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic.js @@ -0,0 +1,13 @@ +'use strict'; + +var elliptic = exports; + +elliptic.version = require('../package.json').version; +elliptic.utils = require('./elliptic/utils'); +elliptic.rand = require('brorand'); +elliptic.curve = require('./elliptic/curve'); +elliptic.curves = require('./elliptic/curves'); + +// Protocols +elliptic.ec = require('./elliptic/ec'); +elliptic.eddsa = require('./elliptic/eddsa'); diff --git a/node_modules/elliptic/lib/elliptic/curve/base.js b/node_modules/elliptic/lib/elliptic/curve/base.js new file mode 100644 index 000000000..3af82396a --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/curve/base.js @@ -0,0 +1,375 @@ +'use strict'; + +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; + +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); + + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); + + // Useful for many curves + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); + + // Curve configuration, optional + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); + + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); + + // Generalized Greg Maxwell's trick + var adjustCount = this.n && this.p.div(this.n); + if (!adjustCount || adjustCount.cmpn(100) > 0) { + this.redN = null; + } else { + this._maxwellTrick = true; + this.redN = this.n.toRed(this.red); + } +} +module.exports = BaseCurve; + +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); + + var naf = getNAF(k, 1); + var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; + + // Translate into more windowed form + var repr = []; + for (var j = 0; j < naf.length; j += doubles.step) { + var nafW = 0; + for (var k = j + doubles.step - 1; k >= j; k--) + nafW = (nafW << 1) + naf[k]; + repr.push(nafW); + } + + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (var j = 0; j < repr.length; j++) { + var nafW = repr[j]; + if (nafW === i) + b = b.mixedAdd(doubles.points[j]); + else if (nafW === -i) + b = b.mixedAdd(doubles.points[j].neg()); + } + a = a.add(b); + } + return a.toP(); +}; + +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; + + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; + + // Get NAF form + var naf = getNAF(k, w); + + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var k = 0; i >= 0 && naf[i] === 0; i--) + k++; + if (i >= 0) + k++; + acc = acc.dblp(k); + + if (i < 0) + break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) + acc = acc.mixedAdd(wnd[(z - 1) >> 1]); + else + acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); + } else { + // J +- J + if (z > 0) + acc = acc.add(wnd[(z - 1) >> 1]); + else + acc = acc.add(wnd[(-z - 1) >> 1].neg()); + } + } + return p.type === 'affine' ? acc.toP() : acc; +}; + +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, + points, + coeffs, + len, + jacobianResult) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; + + // Fill all arrays + var max = 0; + for (var i = 0; i < len; i++) { + var p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } + + // Comb small window NAFs + for (var i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a]); + naf[b] = getNAF(coeffs[b], wndWidth[b]); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } + + var comb = [ + points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b] /* 7 */ + ]; + + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } + + var index = [ + -3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3 /* 1 1 */ + ]; + + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (var j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; + + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } + + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (var i = max; i >= 0; i--) { + var k = 0; + + while (i >= 0) { + var zero = true; + for (var j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) + zero = false; + } + if (!zero) + break; + k++; + i--; + } + if (i >= 0) + k++; + acc = acc.dblp(k); + if (i < 0) + break; + + for (var j = 0; j < len; j++) { + var z = tmp[j]; + var p; + if (z === 0) + continue; + else if (z > 0) + p = wnd[j][(z - 1) >> 1]; + else if (z < 0) + p = wnd[j][(-z - 1) >> 1].neg(); + + if (p.type === 'affine') + acc = acc.mixedAdd(p); + else + acc = acc.add(p); + } + } + // Zeroify references + for (var i = 0; i < len; i++) + wnd[i] = null; + + if (jacobianResult) + return acc; + else + return acc.toP(); +}; + +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; + +BasePoint.prototype.eq = function eq(/*other*/) { + throw new Error('Not implemented'); +}; + +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; + +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); + + var len = this.p.byteLength(); + + // uncompressed, hybrid-odd, hybrid-even + if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && + bytes.length - 1 === 2 * len) { + if (bytes[0] === 0x06) + assert(bytes[bytes.length - 1] % 2 === 0); + else if (bytes[0] === 0x07) + assert(bytes[bytes.length - 1] % 2 === 1); + + var res = this.point(bytes.slice(1, 1 + len), + bytes.slice(1 + len, 1 + 2 * len)); + + return res; + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && + bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + throw new Error('Unknown point format'); +}; + +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; + +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); + + if (compact) + return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); + + return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; +}; + +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; + +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) + return this; + + var precomputed = { + doubles: null, + naf: null, + beta: null + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; + + return this; +}; + +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) + return false; + + var doubles = this.precomputed.doubles; + if (!doubles) + return false; + + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; + +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) + return this.precomputed.doubles; + + var doubles = [ this ]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) + acc = acc.dbl(); + doubles.push(acc); + } + return { + step: step, + points: doubles + }; +}; + +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) + return this.precomputed.naf; + + var res = [ this ]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) + res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res + }; +}; + +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; + +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) + r = r.dbl(); + return r; +}; diff --git a/node_modules/elliptic/lib/elliptic/curve/edwards.js b/node_modules/elliptic/lib/elliptic/curve/edwards.js new file mode 100644 index 000000000..6e9fb7742 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/curve/edwards.js @@ -0,0 +1,433 @@ +'use strict'; + +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; + +var assert = elliptic.utils.assert; + +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + + Base.call(this, 'edwards', conf); + + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; + +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) + return num.redNeg(); + else + return this.a.redMul(num); +}; + +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) + return num; + else + return this.c.redMul(num); +}; + +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; + +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) + y = y.toRed(this.red); + + // x^2 = (y^2 - 1) / (d y^2 + 1) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.one); + var rhs = y2.redMul(this.d).redAdd(this.one); + var x2 = lhs.redMul(rhs.redInvm()); + + if (x2.cmp(this.zero) === 0) { + if (odd) + throw new Error('invalid point'); + else + return this.point(this.zero, y); + } + + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + if (x.isOdd() !== odd) + x = x.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) + return true; + + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); + + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + + return lhs.cmp(rhs) === 0; +}; + +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) + this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; + + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) + this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); + +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && + this.y.cmp(this.z) === 0; +}; + +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); + + var nx; + var ny; + var nz; + if (this.curve.twisted) { + // E = a * C + var e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + var h = this.z.redSqr(); + // J = F - 2 * H + var j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + var e = c.redAdd(d); + // H = (c * Z1)^2 + var h = this.curve._mulC(this.c.redMul(this.z)).redSqr(); + // J = E - 2 * H + var j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + // Double in extended coordinates + if (this.curve.extended) + return this._extDbl(); + else + return this._projDbl(); +}; + +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.add = function add(p) { + if (this.isInfinity()) + return p; + if (p.isInfinity()) + return this; + + if (this.curve.extended) + return this._extAdd(p); + else + return this._projAdd(p); +}; + +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); +}; + +Point.prototype.normalize = function normalize() { + if (this.zOne) + return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) + this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; + +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), + this.y, + this.z, + this.t && this.t.redNeg()); +}; + +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; + +Point.prototype.eq = function eq(other) { + return this === other || + this.getX().cmp(other.getX()) === 0 && + this.getY().cmp(other.getY()) === 0; +}; + +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } + return false; +}; + +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; diff --git a/node_modules/elliptic/lib/elliptic/curve/index.js b/node_modules/elliptic/lib/elliptic/curve/index.js new file mode 100644 index 000000000..c589281df --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/curve/index.js @@ -0,0 +1,8 @@ +'use strict'; + +var curve = exports; + +curve.base = require('./base'); +curve.short = require('./short'); +curve.mont = require('./mont'); +curve.edwards = require('./edwards'); diff --git a/node_modules/elliptic/lib/elliptic/curve/mont.js b/node_modules/elliptic/lib/elliptic/curve/mont.js new file mode 100644 index 000000000..0ddea33e8 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/curve/mont.js @@ -0,0 +1,180 @@ +'use strict'; + +var curve = require('../curve'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; + +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; + +function MontCurve(conf) { + Base.call(this, 'mont', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); +} +inherits(MontCurve, Base); +module.exports = MontCurve; + +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); + + return y.redSqr().cmp(rhs) === 0; +}; + +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + } +} +inherits(Point, Base.BasePoint); + +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); +}; + +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; + +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +Point.prototype.precompute = function precompute() { + // No-op +}; + +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + + // A = X1 + Z1 + var a = this.x.redAdd(this.z); + // AA = A^2 + var aa = a.redSqr(); + // B = X1 - Z1 + var b = this.x.redSub(this.z); + // BB = B^2 + var bb = b.redSqr(); + // C = AA - BB + var c = aa.redSub(bb); + // X3 = AA * BB + var nx = aa.redMul(bb); + // Z3 = C * (BB + A24 * C) + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); +}; + +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + + // A = X2 + Z2 + var a = this.x.redAdd(this.z); + // B = X2 - Z2 + var b = this.x.redSub(this.z); + // C = X3 + Z3 + var c = p.x.redAdd(p.z); + // D = X3 - Z3 + var d = p.x.redSub(p.z); + // DA = D * A + var da = d.redMul(a); + // CB = C * B + var cb = c.redMul(b); + // X5 = Z1 * (DA + CB)^2 + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); + // Z5 = X1 * (DA - CB)^2 + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); +}; + +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + var b = this.curve.point(null, null); // (N / 2) * Q + var c = this; // Q + + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) + bits.push(t.andln(1)); + + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); + // N * Q = 2 * ((N / 2) * Q + Q)) + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); + // N * Q + Q = 2 * ((N / 2) * Q + Q) + a = a.dbl(); + } + } + return b; +}; + +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.jumlAdd = function jumlAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; +}; + +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; +}; + +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); + + return this.x.fromRed(); +}; diff --git a/node_modules/elliptic/lib/elliptic/curve/short.js b/node_modules/elliptic/lib/elliptic/curve/short.js new file mode 100644 index 000000000..0a09d2497 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/curve/short.js @@ -0,0 +1,938 @@ +'use strict'; + +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; + +var assert = elliptic.utils.assert; + +function ShortCurve(conf) { + Base.call(this, 'short', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; + +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) + return; + + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } + + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function(vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + + return { + beta: beta, + lambda: lambda, + basis: basis + }; +}; + +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [ l1, l2 ]; +}; + +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); + + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; + + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; + + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; + + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } + + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + + return [ + { a: a1, b: b1 }, + { a: a2, b: b2 } + ]; +}; + +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); + + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { k1: k1, k2: k2 }; +}; + +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) + return true; + + var x = point.x; + var y = point.y; + + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; + +ShortCurve.prototype._endoWnafMulAdd = + function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); + } + + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); + + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + return res; +}; + +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} +inherits(Point, Base.BasePoint); + +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; + +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; + +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) + return; + + var pre = this.precomputed; + if (pre && pre.beta) + return pre.beta; + + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; + } + return beta; +}; + +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) + return [ this.x, this.y ]; + + return [ this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) + } + } ]; +}; + +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') + obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) + return res; + + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [ res ].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [ res ].concat(pre.naf.points.map(obj2point)) + } + }; + return res; +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; + +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) + return p; + + // P + O = P + if (p.inf) + return this; + + // P + P = 2P + if (this.eq(p)) + return this.dbl(); + + // P + (-P) = O + if (this.neg().eq(p)) + return this.curve.point(null, null); + + // P + Q = O + if (this.x.cmp(p.x) === 0) + return this.curve.point(null, null); + + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) + c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.dbl = function dbl() { + if (this.inf) + return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) + return this.curve.point(null, null); + + var a = this.curve.a; + + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; + +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else if (this.curve.endo) + return this.curve._endoWnafMulAdd([ this ], [ k ]); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs, true); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; + +Point.prototype.eq = function eq(p) { + return this === p || + this.inf === p.inf && + (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) + return this; + + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function(p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } + }; + } + return res; +}; + +Point.prototype.toJ = function toJ() { + if (this.inf) + return this.curve.jpoint(null, null, null); + + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; + +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); + +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; + +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) + return this.curve.point(null, null); + + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + + return this.curve.point(ax, ay); +}; + +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; + +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) + return p; + + // P + O = P + if (p.isInfinity()) + return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) + return p.toJ(); + + // P + O = P + if (p.isInfinity()) + return this; + + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) + return this; + if (this.isInfinity()) + return this; + if (!pow) + return this.dbl(); + + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (var i = 0; i < pow; i++) + r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (var i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) + jz4 = jz4.redMul(jyd4); + + jx = nx; + jz = nz; + jyd = dny; + } + + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; + +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + if (this.curve.zeroA) + return this._zeroDbl(); + else if (this.curve.threeA) + return this._threeDbl(); + else + return this._dbl(); +}; + +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) + return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + + return this.curve._wnafMul(this, k); +}; + +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') + return this.eq(p.toJ()); + + if (this === p) + return true; + + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) + return false; + + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; + +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } + return false; +}; + +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; diff --git a/node_modules/elliptic/lib/elliptic/curves.js b/node_modules/elliptic/lib/elliptic/curves.js new file mode 100644 index 000000000..0614c0073 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/curves.js @@ -0,0 +1,205 @@ +'use strict'; + +var curves = exports; + +var hash = require('hash.js'); +var elliptic = require('../elliptic'); + +var assert = elliptic.utils.assert; + +function PresetCurve(options) { + if (options.type === 'short') + this.curve = new elliptic.curve.short(options); + else if (options.type === 'edwards') + this.curve = new elliptic.curve.edwards(options); + else + this.curve = new elliptic.curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; + + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} +curves.PresetCurve = PresetCurve; + +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function() { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve + }); + return curve; + } + }); +} + +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: [ + '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', + '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' + ] +}); + +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: [ + 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', + 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' + ] +}); + +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: [ + '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', + '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' + ] +}); + +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: [ + 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + + '5502f25d bf55296c 3a545e38 72760ab7', + '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' + ] +}); + +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: [ + '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', + '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + + '3fad0761 353c7086 a272c240 88be9476 9fd16650' + ] +}); + +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '1', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '9' + ] +}); + +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', + + // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658' + ] +}); + +var pre; +try { + pre = require('./precomputed/secp256k1'); +} catch (e) { + pre = undefined; +} + +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, + + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [ + { + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3' + }, + { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15' + } + ], + + gRed: false, + g: [ + '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', + '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', + pre + ] +}); diff --git a/node_modules/elliptic/lib/elliptic/ec/index.js b/node_modules/elliptic/lib/elliptic/ec/index.js new file mode 100644 index 000000000..012fa771e --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/ec/index.js @@ -0,0 +1,240 @@ +'use strict'; + +var BN = require('bn.js'); +var HmacDRBG = require('hmac-drbg'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; + +var KeyPair = require('./key'); +var Signature = require('./signature'); + +function EC(options) { + if (!(this instanceof EC)) + return new EC(options); + + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); + + options = elliptic.curves[options]; + } + + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof elliptic.curves.PresetCurve) + options = { curve: options }; + + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; + + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); + + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; + +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; + +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; + +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; + +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) + options = {}; + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), + entropyEnc: options.entropy && options.entropyEnc || 'utf8', + nonce: this.n.toArray() + }); + + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + do { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) + continue; + + priv.iaddn(1); + return this.keyFromPrivate(priv); + } while (true); +}; + +EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) + msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) + return msg.sub(this.n); + else + return msg; +}; + +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) + options = {}; + + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); + + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); + + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc || 'utf8' + }); + + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); + + for (var iter = 0; true; iter++) { + var k = options.k ? + options.k(iter) : + new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) + continue; + + var kp = this.g.mul(k); + if (kp.isInfinity()) + continue; + + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) + continue; + + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) + continue; + + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | + (kpX.cmp(r) !== 0 ? 2 : 0); + + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + + return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); + } +}; + +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) + return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) + return false; + + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + + if (!this.curve._maxwellTrick) { + var p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + return p.getX().umod(this.n).cmp(r) === 0; + } + + // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + var p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + return p.eqXToP(r); +}; + +EC.prototype.recoverPubKey = function(msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; + + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) + throw new Error('Unable to find sencond key candinate'); + + // 1.1. Let x = r + jn. + if (isSecondKey) + r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); + else + r = this.curve.pointFromX(r, isYOdd); + + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); + + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + return this.g.mulAdd(s1, r, s2); +}; + +EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) + return signature.recoveryParam; + + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + + if (Qprime.eq(Q)) + return i; + } + throw new Error('Unable to find valid recovery factor'); +}; diff --git a/node_modules/elliptic/lib/elliptic/ec/key.js b/node_modules/elliptic/lib/elliptic/ec/key.js new file mode 100644 index 000000000..e0f448326 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/ec/key.js @@ -0,0 +1,119 @@ +'use strict'; + +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; + +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; + + // KeyPair(ec, { priv: ..., pub: ... }) + if (options.priv) + this._importPrivate(options.priv, options.privEnc); + if (options.pub) + this._importPublic(options.pub, options.pubEnc); +} +module.exports = KeyPair; + +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) + return pub; + + return new KeyPair(ec, { + pub: pub, + pubEnc: enc + }); +}; + +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) + return priv; + + return new KeyPair(ec, { + priv: priv, + privEnc: enc + }); +}; + +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); + + if (pub.isInfinity()) + return { result: false, reason: 'Invalid public key' }; + if (!pub.validate()) + return { result: false, reason: 'Public key is not a point' }; + if (!pub.mul(this.ec.curve.n).isInfinity()) + return { result: false, reason: 'Public key * N != O' }; + + return { result: true, reason: null }; +}; + +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } + + if (!this.pub) + this.pub = this.ec.g.mul(this.priv); + + if (!enc) + return this.pub; + + return this.pub.encode(enc, compact); +}; + +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') + return this.priv.toString(16, 2); + else + return this.priv; +}; + +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); + + // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + this.priv = this.priv.umod(this.ec.curve.n); +}; + +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + // Montgomery points only have an `x` coordinate. + // Weierstrass/Edwards points on the other hand have both `x` and + // `y` coordinates. + if (this.ec.curve.type === 'mont') { + assert(key.x, 'Need x coordinate'); + } else if (this.ec.curve.type === 'short' || + this.ec.curve.type === 'edwards') { + assert(key.x && key.y, 'Need both x and y coordinate'); + } + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + this.pub = this.ec.curve.decodePoint(key, enc); +}; + +// ECDH +KeyPair.prototype.derive = function derive(pub) { + return pub.mul(this.priv).getX(); +}; + +// ECDSA +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); +}; + +KeyPair.prototype.verify = function verify(msg, signature) { + return this.ec.verify(msg, signature, this); +}; + +KeyPair.prototype.inspect = function inspect() { + return ''; +}; diff --git a/node_modules/elliptic/lib/elliptic/ec/signature.js b/node_modules/elliptic/lib/elliptic/ec/signature.js new file mode 100644 index 000000000..165b179a8 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/ec/signature.js @@ -0,0 +1,135 @@ +'use strict'; + +var BN = require('bn.js'); + +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; + +function Signature(options, enc) { + if (options instanceof Signature) + return options; + + if (this._importDER(options, enc)) + return; + + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) + this.recoveryParam = null; + else + this.recoveryParam = options.recoveryParam; +} +module.exports = Signature; + +function Position() { + this.place = 0; +} + +function getLength(buf, p) { + var initial = buf[p.place++]; + if (!(initial & 0x80)) { + return initial; + } + var octetLen = initial & 0xf; + var val = 0; + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + } + p.place = off; + return val; +} + +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; + } + if (i === 0) { + return buf; + } + return buf.slice(i); +} + +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + if (data[p.place++] !== 0x30) { + return false; + } + var len = getLength(data, p); + if ((len + p.place) !== data.length) { + return false; + } + if (data[p.place++] !== 0x02) { + return false; + } + var rlen = getLength(data, p); + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + if (data[p.place++] !== 0x02) { + return false; + } + var slen = getLength(data, p); + if (data.length !== slen + p.place) { + return false; + } + var s = data.slice(p.place, slen + p.place); + if (r[0] === 0 && (r[1] & 0x80)) { + r = r.slice(1); + } + if (s[0] === 0 && (s[1] & 0x80)) { + s = s.slice(1); + } + + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; + + return true; +}; + +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; + } + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + while (--octets) { + arr.push((len >>> (octets << 3)) & 0xff); + } + arr.push(len); +} + +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); + + // Pad values + if (r[0] & 0x80) + r = [ 0 ].concat(r); + // Pad values + if (s[0] & 0x80) + s = [ 0 ].concat(s); + + r = rmPadding(r); + s = rmPadding(s); + + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); + } + var arr = [ 0x02 ]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [ 0x30 ]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); +}; diff --git a/node_modules/elliptic/lib/elliptic/eddsa/index.js b/node_modules/elliptic/lib/elliptic/eddsa/index.js new file mode 100644 index 000000000..b218a1607 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/eddsa/index.js @@ -0,0 +1,118 @@ +'use strict'; + +var hash = require('hash.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var KeyPair = require('./key'); +var Signature = require('./signature'); + +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); + + if (!(this instanceof EDDSA)) + return new EDDSA(curve); + + var curve = elliptic.curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); + + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} + +module.exports = EDDSA; + +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message) + .mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); +}; + +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); +}; + +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + for (var i = 0; i < arguments.length; i++) + hash.update(arguments[i]); + return utils.intFromLE(hash.digest()).umod(this.curve.n); +}; + +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); +}; + +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; + +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) + return sig; + return new Signature(this, sig); +}; + +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; + +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); + + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; + +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; + +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; + +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; diff --git a/node_modules/elliptic/lib/elliptic/eddsa/key.js b/node_modules/elliptic/lib/elliptic/eddsa/key.js new file mode 100644 index 000000000..5d5e14274 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/eddsa/key.js @@ -0,0 +1,96 @@ +'use strict'; + +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; + +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) + this._pub = params.pub; + else + this._pubBytes = parseBytes(params.pub); +} + +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) + return pub; + return new KeyPair(eddsa, { pub: pub }); +}; + +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) + return secret; + return new KeyPair(eddsa, { secret: secret }); +}; + +KeyPair.prototype.secret = function secret() { + return this._secret; +}; + +cachedProperty(KeyPair, 'pubBytes', function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); + +cachedProperty(KeyPair, 'pub', function pub() { + if (this._pubBytes) + return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); + +cachedProperty(KeyPair, 'privBytes', function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; + + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; + + return a; +}); + +cachedProperty(KeyPair, 'priv', function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); + +cachedProperty(KeyPair, 'hash', function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); + +cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); + +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); +}; + +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); +}; + +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; + +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; + +module.exports = KeyPair; diff --git a/node_modules/elliptic/lib/elliptic/eddsa/signature.js b/node_modules/elliptic/lib/elliptic/eddsa/signature.js new file mode 100644 index 000000000..e944e8152 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/eddsa/signature.js @@ -0,0 +1,66 @@ +'use strict'; + +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; + +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ +function Signature(eddsa, sig) { + this.eddsa = eddsa; + + if (typeof sig !== 'object') + sig = parseBytes(sig); + + if (Array.isArray(sig)) { + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength) + }; + } + + assert(sig.R && sig.S, 'Signature without R or S'); + + if (eddsa.isPoint(sig.R)) + this._R = sig.R; + if (sig.S instanceof BN) + this._S = sig.S; + + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} + +cachedProperty(Signature, 'S', function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); + +cachedProperty(Signature, 'R', function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); + +cachedProperty(Signature, 'Rencoded', function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); + +cachedProperty(Signature, 'Sencoded', function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); + +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); +}; + +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); +}; + +module.exports = Signature; diff --git a/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js b/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js new file mode 100644 index 000000000..e4c91e543 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js @@ -0,0 +1,780 @@ +module.exports = { + doubles: { + step: 4, + points: [ + [ + 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', + 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821' + ], + [ + '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', + '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf' + ], + [ + '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', + 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695' + ], + [ + '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', + '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9' + ], + [ + '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', + '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36' + ], + [ + '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', + '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f' + ], + [ + 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', + '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999' + ], + [ + '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', + 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09' + ], + [ + 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', + '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d' + ], + [ + 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', + 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088' + ], + [ + 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', + '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d' + ], + [ + '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', + '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8' + ], + [ + '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', + '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a' + ], + [ + '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', + '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453' + ], + [ + '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', + '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160' + ], + [ + '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', + '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0' + ], + [ + '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', + '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6' + ], + [ + '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', + '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589' + ], + [ + '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', + 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17' + ], + [ + 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', + '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda' + ], + [ + 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', + '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd' + ], + [ + '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', + '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2' + ], + [ + '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', + '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6' + ], + [ + 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', + '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f' + ], + [ + '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', + 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01' + ], + [ + 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', + '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3' + ], + [ + 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', + 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f' + ], + [ + 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', + '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7' + ], + [ + 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', + 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78' + ], + [ + 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', + '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1' + ], + [ + '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', + 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150' + ], + [ + '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', + '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82' + ], + [ + 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', + '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc' + ], + [ + '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', + 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b' + ], + [ + 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', + '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51' + ], + [ + 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', + '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45' + ], + [ + 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', + 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120' + ], + [ + '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', + '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84' + ], + [ + '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', + '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d' + ], + [ + '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', + 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d' + ], + [ + '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', + '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8' + ], + [ + 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', + '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8' + ], + [ + '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', + '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac' + ], + [ + '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', + 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f' + ], + [ + '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', + '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962' + ], + [ + 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', + '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907' + ], + [ + '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', + 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec' + ], + [ + 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', + 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d' + ], + [ + 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', + '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414' + ], + [ + '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', + 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd' + ], + [ + '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', + 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0' + ], + [ + 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', + '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811' + ], + [ + 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', + '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1' + ], + [ + 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', + '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c' + ], + [ + '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', + 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73' + ], + [ + '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', + '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd' + ], + [ + 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', + 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405' + ], + [ + '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', + 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589' + ], + [ + '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', + '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e' + ], + [ + '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', + '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27' + ], + [ + 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', + 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1' + ], + [ + '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', + '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482' + ], + [ + '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', + '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945' + ], + [ + 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', + '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573' + ], + [ + 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', + 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82' + ] + ] + }, + naf: { + wnd: 7, + points: [ + [ + 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', + '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672' + ], + [ + '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', + 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6' + ], + [ + '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', + '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da' + ], + [ + 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', + 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37' + ], + [ + '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', + 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b' + ], + [ + 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', + 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81' + ], + [ + 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', + '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58' + ], + [ + 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', + '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77' + ], + [ + '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', + '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a' + ], + [ + '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', + '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c' + ], + [ + '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', + '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67' + ], + [ + '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', + '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402' + ], + [ + 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', + 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55' + ], + [ + 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', + '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482' + ], + [ + '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', + 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82' + ], + [ + '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', + 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396' + ], + [ + '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', + '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49' + ], + [ + '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', + '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf' + ], + [ + '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', + '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a' + ], + [ + '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', + 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7' + ], + [ + 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', + 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933' + ], + [ + '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', + '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a' + ], + [ + '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', + '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6' + ], + [ + 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', + 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37' + ], + [ + '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', + '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e' + ], + [ + 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', + 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6' + ], + [ + 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', + 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476' + ], + [ + '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', + '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40' + ], + [ + '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', + '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61' + ], + [ + '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', + '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683' + ], + [ + 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', + '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5' + ], + [ + '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', + '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b' + ], + [ + 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', + '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417' + ], + [ + '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', + 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868' + ], + [ + '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', + 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a' + ], + [ + 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', + 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6' + ], + [ + '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', + '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996' + ], + [ + '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', + 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e' + ], + [ + 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', + 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d' + ], + [ + '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', + '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2' + ], + [ + '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', + 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e' + ], + [ + '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', + '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437' + ], + [ + '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', + 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311' + ], + [ + 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', + '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4' + ], + [ + '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', + '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575' + ], + [ + '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', + 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d' + ], + [ + '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', + 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d' + ], + [ + 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', + 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629' + ], + [ + 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', + 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06' + ], + [ + '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', + '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374' + ], + [ + '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', + '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee' + ], + [ + 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', + '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1' + ], + [ + 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', + 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b' + ], + [ + '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', + '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661' + ], + [ + '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', + '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6' + ], + [ + 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', + '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e' + ], + [ + '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', + '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d' + ], + [ + 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', + 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc' + ], + [ + '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', + 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4' + ], + [ + '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', + '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c' + ], + [ + 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', + '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b' + ], + [ + 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', + '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913' + ], + [ + '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', + '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154' + ], + [ + '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', + '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865' + ], + [ + '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', + 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc' + ], + [ + '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', + 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224' + ], + [ + '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', + '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e' + ], + [ + '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', + '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6' + ], + [ + '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', + '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511' + ], + [ + '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', + 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b' + ], + [ + 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', + 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2' + ], + [ + '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', + 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c' + ], + [ + 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', + '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3' + ], + [ + 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', + '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d' + ], + [ + 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', + '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700' + ], + [ + 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', + '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4' + ], + [ + '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', + 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196' + ], + [ + '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', + '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4' + ], + [ + '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', + 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257' + ], + [ + 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', + 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13' + ], + [ + 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', + '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096' + ], + [ + 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', + 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38' + ], + [ + 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', + '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f' + ], + [ + '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', + '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448' + ], + [ + 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', + '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a' + ], + [ + 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', + '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4' + ], + [ + '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', + '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437' + ], + [ + '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', + 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7' + ], + [ + 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', + '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d' + ], + [ + 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', + '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a' + ], + [ + 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', + '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54' + ], + [ + '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', + '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77' + ], + [ + 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', + 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517' + ], + [ + '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', + 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10' + ], + [ + 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', + 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125' + ], + [ + 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', + '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e' + ], + [ + '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', + 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1' + ], + [ + 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', + '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2' + ], + [ + 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', + '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423' + ], + [ + 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', + '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8' + ], + [ + '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', + 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758' + ], + [ + '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', + 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375' + ], + [ + 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', + '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d' + ], + [ + '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', + 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec' + ], + [ + '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', + '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0' + ], + [ + '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', + 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c' + ], + [ + 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', + 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4' + ], + [ + '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', + 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f' + ], + [ + '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', + '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649' + ], + [ + '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', + 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826' + ], + [ + '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', + '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5' + ], + [ + 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', + 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87' + ], + [ + '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', + '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b' + ], + [ + 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', + '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc' + ], + [ + '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', + '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c' + ], + [ + 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', + 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f' + ], + [ + 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', + '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a' + ], + [ + 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', + 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46' + ], + [ + '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', + 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f' + ], + [ + '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', + '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03' + ], + [ + '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', + 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08' + ], + [ + '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', + '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8' + ], + [ + '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', + '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373' + ], + [ + '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', + 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3' + ], + [ + '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', + '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8' + ], + [ + '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', + '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1' + ], + [ + '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', + '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9' + ] + ] + } +}; diff --git a/node_modules/elliptic/lib/elliptic/utils.js b/node_modules/elliptic/lib/elliptic/utils.js new file mode 100644 index 000000000..982738149 --- /dev/null +++ b/node_modules/elliptic/lib/elliptic/utils.js @@ -0,0 +1,120 @@ +'use strict'; + +var utils = exports; +var BN = require('bn.js'); +var minAssert = require('minimalistic-assert'); +var minUtils = require('minimalistic-crypto-utils'); + +utils.assert = minAssert; +utils.toArray = minUtils.toArray; +utils.zero2 = minUtils.zero2; +utils.toHex = minUtils.toHex; +utils.encode = minUtils.encode; + +// Represent num in a w-NAF form +function getNAF(num, w) { + var naf = []; + var ws = 1 << (w + 1); + var k = num.clone(); + while (k.cmpn(1) >= 0) { + var z; + if (k.isOdd()) { + var mod = k.andln(ws - 1); + if (mod > (ws >> 1) - 1) + z = (ws >> 1) - mod; + else + z = mod; + k.isubn(z); + } else { + z = 0; + } + naf.push(z); + + // Optimization, shift by word if possible + var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; + for (var i = 1; i < shift; i++) + naf.push(0); + k.iushrn(shift); + } + + return naf; +} +utils.getNAF = getNAF; + +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [ + [], + [] + ]; + + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + + // First phase + var m14 = (k1.andln(3) + d1) & 3; + var m24 = (k2.andln(3) + d2) & 3; + if (m14 === 3) + m14 = -1; + if (m24 === 3) + m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + var m8 = (k1.andln(7) + d1) & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) + u1 = -m14; + else + u1 = m14; + } + jsf[0].push(u1); + + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + var m8 = (k2.andln(7) + d2) & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) + u2 = -m24; + else + u2 = m24; + } + jsf[1].push(u2); + + // Second phase + if (2 * d1 === u1 + 1) + d1 = 1 - d1; + if (2 * d2 === u2 + 1) + d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + + return jsf; +} +utils.getJSF = getJSF; + +function cachedProperty(obj, name, computer) { + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : + this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; + +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : + bytes; +} +utils.parseBytes = parseBytes; + +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; + diff --git a/node_modules/elliptic/package.json b/node_modules/elliptic/package.json new file mode 100644 index 000000000..be95d74ed --- /dev/null +++ b/node_modules/elliptic/package.json @@ -0,0 +1,87 @@ +{ + "_from": "elliptic@^6.0.0", + "_id": "elliptic@6.4.0", + "_inBundle": false, + "_integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "_location": "/elliptic", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "elliptic@^6.0.0", + "name": "elliptic", + "escapedName": "elliptic", + "rawSpec": "^6.0.0", + "saveSpec": null, + "fetchSpec": "^6.0.0" + }, + "_requiredBy": [ + "/browserify-sign", + "/create-ecdh" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df", + "_spec": "elliptic@^6.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/browserify-sign", + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com" + }, + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "bundleDependencies": false, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "deprecated": false, + "description": "EC cryptography", + "devDependencies": { + "brfs": "^1.4.3", + "coveralls": "^2.11.3", + "grunt": "^0.4.5", + "grunt-browserify": "^5.0.0", + "grunt-cli": "^1.2.0", + "grunt-contrib-connect": "^1.0.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-uglify": "^1.0.1", + "grunt-mocha-istanbul": "^3.0.1", + "grunt-saucelabs": "^8.6.2", + "istanbul": "^0.4.2", + "jscs": "^2.9.0", + "jshint": "^2.6.0", + "mocha": "^2.1.0" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "EC", + "Elliptic", + "curve", + "Cryptography" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "name": "elliptic", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "lint": "npm run jscs && npm run jshint", + "test": "npm run lint && npm run unit", + "unit": "istanbul test _mocha --reporter=spec test/index.js", + "version": "grunt dist && git add dist/" + }, + "version": "6.4.0" +} diff --git a/node_modules/emojis-list/CHANGELOG.md b/node_modules/emojis-list/CHANGELOG.md new file mode 100644 index 000000000..d81a55cb7 --- /dev/null +++ b/node_modules/emojis-list/CHANGELOG.md @@ -0,0 +1,70 @@ + +# 2.1.0 (2016-10-03) + +* Fetch new emoji ([7dbe84d](https://github.com/kikobeats/emojis-list/commit/7dbe84d)) + + + + +## 2.0.1 (2016-05-12) + +* Fix typo ([3808909](https://github.com/kikobeats/emojis-list/commit/3808909)) + + + + +# 2.0.0 (2016-05-12) + +* Add update script ([f846dd6](https://github.com/kikobeats/emojis-list/commit/f846dd6)) +* Block dependencies in last version ([1d9e0a5](https://github.com/kikobeats/emojis-list/commit/1d9e0a5)) +* Extract main file name ([9ffe7bb](https://github.com/kikobeats/emojis-list/commit/9ffe7bb)) +* Remove unnecessary files ([4c34729](https://github.com/kikobeats/emojis-list/commit/4c34729)) +* Update docs, special webpack setup is not necessary ([c4aefe9](https://github.com/kikobeats/emojis-list/commit/c4aefe9)) +* Update example ([1e2ae03](https://github.com/kikobeats/emojis-list/commit/1e2ae03)) +* Update how to generate emojis array ([b56bad9](https://github.com/kikobeats/emojis-list/commit/b56bad9)) +* Update main file based in the new interface ([996fccb](https://github.com/kikobeats/emojis-list/commit/996fccb)) + + + + +## 1.0.3 (2016-05-12) + +* Add standard as linter ([5e939d6](https://github.com/kikobeats/emojis-list/commit/5e939d6)) +* Change interface ([16bc0c0](https://github.com/kikobeats/emojis-list/commit/16bc0c0)) +* Generate emoji file ([fbcf8e9](https://github.com/kikobeats/emojis-list/commit/fbcf8e9)) +* Remove unnecessary special doc ([2b12bec](https://github.com/kikobeats/emojis-list/commit/2b12bec)) +* chore(package): update browserify to version 13.0.1 ([e2c98bf](https://github.com/kikobeats/emojis-list/commit/e2c98bf)) +* chore(package): update gulp-header to version 1.8.1 ([28de793](https://github.com/kikobeats/emojis-list/commit/28de793)) + + + + +## 1.0.2 (2016-05-05) + +* fixed #2 ([9a6abe7](https://github.com/kikobeats/emojis-list/commit/9a6abe7)), closes [#2](https://github.com/kikobeats/emojis-list/issues/2) +* Fomar using standard ([5202f9f](https://github.com/kikobeats/emojis-list/commit/5202f9f)) +* Update badge ([53fad9b](https://github.com/kikobeats/emojis-list/commit/53fad9b)) + + + + +## 1.0.1 (2016-04-13) + +* lock versions ([4a5d82e](https://github.com/kikobeats/emojis-list/commit/4a5d82e)) +* setup devDependencies ([d1de0fc](https://github.com/kikobeats/emojis-list/commit/d1de0fc)) +* update bumped ([9941038](https://github.com/kikobeats/emojis-list/commit/9941038)) +* Update package.json ([6c14b74](https://github.com/kikobeats/emojis-list/commit/6c14b74)) +* Update README.md ([1d9beeb](https://github.com/kikobeats/emojis-list/commit/1d9beeb)) +* Update README.md ([73f215e](https://github.com/kikobeats/emojis-list/commit/73f215e)) +* Update tests ([a94f7dc](https://github.com/kikobeats/emojis-list/commit/a94f7dc)) + + + + +# 1.0.0 (2015-05-12) + +* first commit ([a65b79d](https://github.com/kikobeats/emojis-list/commit/a65b79d)) +* updated ([9f0564c](https://github.com/kikobeats/emojis-list/commit/9f0564c)) + + + diff --git a/node_modules/emojis-list/LICENSE.md b/node_modules/emojis-list/LICENSE.md new file mode 100755 index 000000000..c0928aebc --- /dev/null +++ b/node_modules/emojis-list/LICENSE.md @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright © 2015 Kiko Beats + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/emojis-list/README.md b/node_modules/emojis-list/README.md new file mode 100755 index 000000000..1de02f9f9 --- /dev/null +++ b/node_modules/emojis-list/README.md @@ -0,0 +1,48 @@ +# emojis-list + +[![Dependency status](http://img.shields.io/david/Kikobeats/emojis-list.svg?style=flat-square)](https://david-dm.org/Kikobeats/emojis-list) +[![Dev Dependencies Status](http://img.shields.io/david/dev/Kikobeats/emojis-list.svg?style=flat-square)](https://david-dm.org/Kikobeats/emojis-list#info=devDependencies) +[![NPM Status](http://img.shields.io/npm/dm/emojis-list.svg?style=flat-square)](https://www.npmjs.org/package/emojis-list) +[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg?style=flat-square)](https://paypal.me/kikobeats) + +> Complete list of standard Unicode Hex Character Code that represent emojis. + +**NOTE**: The lists is related with the Unicode Hex Character Code. The representation of the emoji depend of the system. Will be possible that the system don't have all the representations. + +## Install + +```bash +npm install emojis-list --save +``` + +If you want to use in the browser (powered by [Browserify](http://browserify.org/)): + +```bash +bower install emojis-list --save +``` + +and later link in your HTML: + +```html + +``` + +## Usage + +``` +var emojis = require('emojis-list'); +console.log(emojis[0]); +// => 🀄 +``` + +## Related + +* [emojis-unicode](https://github.com/Kikobeats/emojis-unicode) – Complete list of standard Unicode codes that represent emojis. +* [emojis-keywords](https://github.com/Kikobeats/emojis-keywords) – Complete list of am emoji shortcuts. +* [is-emoji-keyword](https://github.com/Kikobeats/is-emoji-keyword) – Check if a word is a emoji shortcut. +* [is-standard-emoji](https://github.com/kikobeats/is-standard-emoji) – Simply way to check if a emoji is a standard emoji. +* [trim-emoji](https://github.com/Kikobeats/trim-emoji) – Deletes ':' from the begin and the end of an emoji shortcut. + +## License + +MIT © [Kiko Beats](http://www.kikobeats.com) diff --git a/node_modules/emojis-list/index.js b/node_modules/emojis-list/index.js new file mode 100644 index 000000000..d59beaba0 --- /dev/null +++ b/node_modules/emojis-list/index.js @@ -0,0 +1,2479 @@ +module.exports = [ + "🀄", + "🃏", + "🅰", + "🅱", + "🅾", + "🅿", + "🆎", + "🆑", + "🆒", + "🆓", + "🆔", + "🆕", + "🆖", + "🆗", + "🆘", + "🆙", + "🆚", + "🇦🇨", + "🇦🇩", + "🇦🇪", + "🇦🇫", + "🇦🇬", + "🇦🇮", + "🇦🇱", + "🇦🇲", + "🇦🇴", + "🇦🇶", + "🇦🇷", + "🇦🇸", + "🇦🇹", + "🇦🇺", + "🇦🇼", + "🇦🇽", + "🇦🇿", + "🇦", + "🇧🇦", + "🇧🇧", + "🇧🇩", + "🇧🇪", + "🇧🇫", + "🇧🇬", + "🇧🇭", + "🇧🇮", + "🇧🇯", + "🇧🇱", + "🇧🇲", + "🇧🇳", + "🇧🇴", + "🇧🇶", + "🇧🇷", + "🇧🇸", + "🇧🇹", + "🇧🇻", + "🇧🇼", + "🇧🇾", + "🇧🇿", + "🇧", + "🇨🇦", + "🇨🇨", + "🇨🇩", + "🇨🇫", + "🇨🇬", + "🇨🇭", + "🇨🇮", + "🇨🇰", + "🇨🇱", + "🇨🇲", + "🇨🇳", + "🇨🇴", + "🇨🇵", + "🇨🇷", + "🇨🇺", + "🇨🇻", + "🇨🇼", + "🇨🇽", + "🇨🇾", + "🇨🇿", + "🇨", + "🇩🇪", + "🇩🇬", + "🇩🇯", + "🇩🇰", + "🇩🇲", + "🇩🇴", + "🇩🇿", + "🇩", + "🇪🇦", + "🇪🇨", + "🇪🇪", + "🇪🇬", + "🇪🇭", + "🇪🇷", + "🇪🇸", + "🇪🇹", + "🇪🇺", + "🇪", + "🇫🇮", + "🇫🇯", + "🇫🇰", + "🇫🇲", + "🇫🇴", + "🇫🇷", + "🇫", + "🇬🇦", + "🇬🇧", + "🇬🇩", + "🇬🇪", + "🇬🇫", + "🇬🇬", + "🇬🇭", + "🇬🇮", + "🇬🇱", + "🇬🇲", + "🇬🇳", + "🇬🇵", + "🇬🇶", + "🇬🇷", + "🇬🇸", + "🇬🇹", + "🇬🇺", + "🇬🇼", + "🇬🇾", + "🇬", + "🇭🇰", + "🇭🇲", + "🇭🇳", + "🇭🇷", + "🇭🇹", + "🇭🇺", + "🇭", + "🇮🇨", + "🇮🇩", + "🇮🇪", + "🇮🇱", + "🇮🇲", + "🇮🇳", + "🇮🇴", + "🇮🇶", + "🇮🇷", + "🇮🇸", + "🇮🇹", + "🇮", + "🇯🇪", + "🇯🇲", + "🇯🇴", + "🇯🇵", + "🇯", + "🇰🇪", + "🇰🇬", + "🇰🇭", + "🇰🇮", + "🇰🇲", + "🇰🇳", + "🇰🇵", + "🇰🇷", + "🇰🇼", + "🇰🇾", + "🇰🇿", + "🇰", + "🇱🇦", + "🇱🇧", + "🇱🇨", + "🇱🇮", + "🇱🇰", + "🇱🇷", + "🇱🇸", + "🇱🇹", + "🇱🇺", + "🇱🇻", + "🇱🇾", + "🇱", + "🇲🇦", + "🇲🇨", + "🇲🇩", + "🇲🇪", + "🇲🇫", + "🇲🇬", + "🇲🇭", + "🇲🇰", + "🇲🇱", + "🇲🇲", + "🇲🇳", + "🇲🇴", + "🇲🇵", + "🇲🇶", + "🇲🇷", + "🇲🇸", + "🇲🇹", + "🇲🇺", + "🇲🇻", + "🇲🇼", + "🇲🇽", + "🇲🇾", + "🇲🇿", + "🇲", + "🇳🇦", + "🇳🇨", + "🇳🇪", + "🇳🇫", + "🇳🇬", + "🇳🇮", + "🇳🇱", + "🇳🇴", + "🇳🇵", + "🇳🇷", + "🇳🇺", + "🇳🇿", + "🇳", + "🇴🇲", + "🇴", + "🇵🇦", + "🇵🇪", + "🇵🇫", + "🇵🇬", + "🇵🇭", + "🇵🇰", + "🇵🇱", + "🇵🇲", + "🇵🇳", + "🇵🇷", + "🇵🇸", + "🇵🇹", + "🇵🇼", + "🇵🇾", + "🇵", + "🇶🇦", + "🇶", + "🇷🇪", + "🇷🇴", + "🇷🇸", + "🇷🇺", + "🇷🇼", + "🇷", + "🇸🇦", + "🇸🇧", + "🇸🇨", + "🇸🇩", + "🇸🇪", + "🇸🇬", + "🇸🇭", + "🇸🇮", + "🇸🇯", + "🇸🇰", + "🇸🇱", + "🇸🇲", + "🇸🇳", + "🇸🇴", + "🇸🇷", + "🇸🇸", + "🇸🇹", + "🇸🇻", + "🇸🇽", + "🇸🇾", + "🇸🇿", + "🇸", + "🇹🇦", + "🇹🇨", + "🇹🇩", + "🇹🇫", + "🇹🇬", + "🇹🇭", + "🇹🇯", + "🇹🇰", + "🇹🇱", + "🇹🇲", + "🇹🇳", + "🇹🇴", + "🇹🇷", + "🇹🇹", + "🇹🇻", + "🇹🇼", + "🇹🇿", + "🇹", + "🇺🇦", + "🇺🇬", + "🇺🇲", + "🇺🇳", + "🇺🇸", + "🇺🇾", + "🇺🇿", + "🇺", + "🇻🇦", + "🇻🇨", + "🇻🇪", + "🇻🇬", + "🇻🇮", + "🇻🇳", + "🇻🇺", + "🇻", + "🇼🇫", + "🇼🇸", + "🇼", + "🇽🇰", + "🇽", + "🇾🇪", + "🇾🇹", + "🇾", + "🇿🇦", + "🇿🇲", + "🇿🇼", + "🇿", + "🈁", + "🈂", + "🈚", + "🈯", + "🈲", + "🈳", + "🈴", + "🈵", + "🈶", + "🈷", + "🈸", + "🈹", + "🈺", + "🉐", + "🉑", + "🌀", + "🌁", + "🌂", + "🌃", + "🌄", + "🌅", + "🌆", + "🌇", + "🌈", + "🌉", + "🌊", + "🌋", + "🌌", + "🌍", + "🌎", + "🌏", + "🌐", + "🌑", + "🌒", + "🌓", + "🌔", + "🌕", + "🌖", + "🌗", + "🌘", + "🌙", + "🌚", + "🌛", + "🌜", + "🌝", + "🌞", + "🌟", + "🌠", + "🌡", + "🌤", + "🌥", + "🌦", + "🌧", + "🌨", + "🌩", + "🌪", + "🌫", + "🌬", + "🌭", + "🌮", + "🌯", + "🌰", + "🌱", + "🌲", + "🌳", + "🌴", + "🌵", + "🌶", + "🌷", + "🌸", + "🌹", + "🌺", + "🌻", + "🌼", + "🌽", + "🌾", + "🌿", + "🍀", + "🍁", + "🍂", + "🍃", + "🍄", + "🍅", + "🍆", + "🍇", + "🍈", + "🍉", + "🍊", + "🍋", + "🍌", + "🍍", + "🍎", + "🍏", + "🍐", + "🍑", + "🍒", + "🍓", + "🍔", + "🍕", + "🍖", + "🍗", + "🍘", + "🍙", + "🍚", + "🍛", + "🍜", + "🍝", + "🍞", + "🍟", + "🍠", + "🍡", + "🍢", + "🍣", + "🍤", + "🍥", + "🍦", + "🍧", + "🍨", + "🍩", + "🍪", + "🍫", + "🍬", + "🍭", + "🍮", + "🍯", + "🍰", + "🍱", + "🍲", + "🍳", + "🍴", + "🍵", + "🍶", + "🍷", + "🍸", + "🍹", + "🍺", + "🍻", + "🍼", + "🍽", + "🍾", + "🍿", + "🎀", + "🎁", + "🎂", + "🎃", + "🎄", + "🎅🏻", + "🎅🏼", + "🎅🏽", + "🎅🏾", + "🎅🏿", + "🎅", + "🎆", + "🎇", + "🎈", + "🎉", + "🎊", + "🎋", + "🎌", + "🎍", + "🎎", + "🎏", + "🎐", + "🎑", + "🎒", + "🎓", + "🎖", + "🎗", + "🎙", + "🎚", + "🎛", + "🎞", + "🎟", + "🎠", + "🎡", + "🎢", + "🎣", + "🎤", + "🎥", + "🎦", + "🎧", + "🎨", + "🎩", + "🎪", + "🎫", + "🎬", + "🎭", + "🎮", + "🎯", + "🎰", + "🎱", + "🎲", + "🎳", + "🎴", + "🎵", + "🎶", + "🎷", + "🎸", + "🎹", + "🎺", + "🎻", + "🎼", + "🎽", + "🎾", + "🎿", + "🏀", + "🏁", + "🏂🏻", + "🏂🏼", + "🏂🏽", + "🏂🏾", + "🏂🏿", + "🏂", + "🏃🏻‍♀️", + "🏃🏻‍♂️", + "🏃🏻", + "🏃🏼‍♀️", + "🏃🏼‍♂️", + "🏃🏼", + "🏃🏽‍♀️", + "🏃🏽‍♂️", + "🏃🏽", + "🏃🏾‍♀️", + "🏃🏾‍♂️", + "🏃🏾", + "🏃🏿‍♀️", + "🏃🏿‍♂️", + "🏃🏿", + "🏃‍♀️", + "🏃‍♂️", + "🏃", + "🏄🏻‍♀️", + "🏄🏻‍♂️", + "🏄🏻", + "🏄🏼‍♀️", + "🏄🏼‍♂️", + "🏄🏼", + "🏄🏽‍♀️", + "🏄🏽‍♂️", + "🏄🏽", + "🏄🏾‍♀️", + "🏄🏾‍♂️", + "🏄🏾", + "🏄🏿‍♀️", + "🏄🏿‍♂️", + "🏄🏿", + "🏄‍♀️", + "🏄‍♂️", + "🏄", + "🏅", + "🏆", + "🏇🏻", + "🏇🏼", + "🏇🏽", + "🏇🏾", + "🏇🏿", + "🏇", + "🏈", + "🏉", + "🏊🏻‍♀️", + "🏊🏻‍♂️", + "🏊🏻", + "🏊🏼‍♀️", + "🏊🏼‍♂️", + "🏊🏼", + "🏊🏽‍♀️", + "🏊🏽‍♂️", + "🏊🏽", + "🏊🏾‍♀️", + "🏊🏾‍♂️", + "🏊🏾", + "🏊🏿‍♀️", + "🏊🏿‍♂️", + "🏊🏿", + "🏊‍♀️", + "🏊‍♂️", + "🏊", + "🏋🏻‍♀️", + "🏋🏻‍♂️", + "🏋🏻", + "🏋🏼‍♀️", + "🏋🏼‍♂️", + "🏋🏼", + "🏋🏽‍♀️", + "🏋🏽‍♂️", + "🏋🏽", + "🏋🏾‍♀️", + "🏋🏾‍♂️", + "🏋🏾", + "🏋🏿‍♀️", + "🏋🏿‍♂️", + "🏋🏿", + "🏋️‍♀️", + "🏋️‍♂️", + "🏋", + "🏌🏻‍♀️", + "🏌🏻‍♂️", + "🏌🏻", + "🏌🏼‍♀️", + "🏌🏼‍♂️", + "🏌🏼", + "🏌🏽‍♀️", + "🏌🏽‍♂️", + "🏌🏽", + "🏌🏾‍♀️", + "🏌🏾‍♂️", + "🏌🏾", + "🏌🏿‍♀️", + "🏌🏿‍♂️", + "🏌🏿", + "🏌️‍♀️", + "🏌️‍♂️", + "🏌", + "🏍", + "🏎", + "🏏", + "🏐", + "🏑", + "🏒", + "🏓", + "🏔", + "🏕", + "🏖", + "🏗", + "🏘", + "🏙", + "🏚", + "🏛", + "🏜", + "🏝", + "🏞", + "🏟", + "🏠", + "🏡", + "🏢", + "🏣", + "🏤", + "🏥", + "🏦", + "🏧", + "🏨", + "🏩", + "🏪", + "🏫", + "🏬", + "🏭", + "🏮", + "🏯", + "🏰", + "🏳️‍🌈", + "🏳", + "🏴‍☠️", + "🏴", + "🏵", + "🏷", + "🏸", + "🏹", + "🏺", + "🏻", + "🏼", + "🏽", + "🏾", + "🏿", + "🐀", + "🐁", + "🐂", + "🐃", + "🐄", + "🐅", + "🐆", + "🐇", + "🐈", + "🐉", + "🐊", + "🐋", + "🐌", + "🐍", + "🐎", + "🐏", + "🐐", + "🐑", + "🐒", + "🐓", + "🐔", + "🐕", + "🐖", + "🐗", + "🐘", + "🐙", + "🐚", + "🐛", + "🐜", + "🐝", + "🐞", + "🐟", + "🐠", + "🐡", + "🐢", + "🐣", + "🐤", + "🐥", + "🐦", + "🐧", + "🐨", + "🐩", + "🐪", + "🐫", + "🐬", + "🐭", + "🐮", + "🐯", + "🐰", + "🐱", + "🐲", + "🐳", + "🐴", + "🐵", + "🐶", + "🐷", + "🐸", + "🐹", + "🐺", + "🐻", + "🐼", + "🐽", + "🐾", + "🐿", + "👀", + "👁‍🗨", + "👁", + "👂🏻", + "👂🏼", + "👂🏽", + "👂🏾", + "👂🏿", + "👂", + "👃🏻", + "👃🏼", + "👃🏽", + "👃🏾", + "👃🏿", + "👃", + "👄", + "👅", + "👆🏻", + "👆🏼", + "👆🏽", + "👆🏾", + "👆🏿", + "👆", + "👇🏻", + "👇🏼", + "👇🏽", + "👇🏾", + "👇🏿", + "👇", + "👈🏻", + "👈🏼", + "👈🏽", + "👈🏾", + "👈🏿", + "👈", + "👉🏻", + "👉🏼", + "👉🏽", + "👉🏾", + "👉🏿", + "👉", + "👊🏻", + "👊🏼", + "👊🏽", + "👊🏾", + "👊🏿", + "👊", + "👋🏻", + "👋🏼", + "👋🏽", + "👋🏾", + "👋🏿", + "👋", + "👌🏻", + "👌🏼", + "👌🏽", + "👌🏾", + "👌🏿", + "👌", + "👍🏻", + "👍🏼", + "👍🏽", + "👍🏾", + "👍🏿", + "👍", + "👎🏻", + "👎🏼", + "👎🏽", + "👎🏾", + "👎🏿", + "👎", + "👏🏻", + "👏🏼", + "👏🏽", + "👏🏾", + "👏🏿", + "👏", + "👐🏻", + "👐🏼", + "👐🏽", + "👐🏾", + "👐🏿", + "👐", + "👑", + "👒", + "👓", + "👔", + "👕", + "👖", + "👗", + "👘", + "👙", + "👚", + "👛", + "👜", + "👝", + "👞", + "👟", + "👠", + "👡", + "👢", + "👣", + "👤", + "👥", + "👦🏻", + "👦🏼", + "👦🏽", + "👦🏾", + "👦🏿", + "👦", + "👧🏻", + "👧🏼", + "👧🏽", + "👧🏾", + "👧🏿", + "👧", + "👨🏻‍🌾", + "👨🏻‍🍳", + "👨🏻‍🎓", + "👨🏻‍🎤", + "👨🏻‍🎨", + "👨🏻‍🏫", + "👨🏻‍🏭", + "👨🏻‍💻", + "👨🏻‍💼", + "👨🏻‍🔧", + "👨🏻‍🔬", + "👨🏻‍🚀", + "👨🏻‍🚒", + "👨🏻‍⚕️", + "👨🏻‍⚖️", + "👨🏻‍✈️", + "👨🏻", + "👨🏼‍🌾", + "👨🏼‍🍳", + "👨🏼‍🎓", + "👨🏼‍🎤", + "👨🏼‍🎨", + "👨🏼‍🏫", + "👨🏼‍🏭", + "👨🏼‍💻", + "👨🏼‍💼", + "👨🏼‍🔧", + "👨🏼‍🔬", + "👨🏼‍🚀", + "👨🏼‍🚒", + "👨🏼‍⚕️", + "👨🏼‍⚖️", + "👨🏼‍✈️", + "👨🏼", + "👨🏽‍🌾", + "👨🏽‍🍳", + "👨🏽‍🎓", + "👨🏽‍🎤", + "👨🏽‍🎨", + "👨🏽‍🏫", + "👨🏽‍🏭", + "👨🏽‍💻", + "👨🏽‍💼", + "👨🏽‍🔧", + "👨🏽‍🔬", + "👨🏽‍🚀", + "👨🏽‍🚒", + "👨🏽‍⚕️", + "👨🏽‍⚖️", + "👨🏽‍✈️", + "👨🏽", + "👨🏾‍🌾", + "👨🏾‍🍳", + "👨🏾‍🎓", + "👨🏾‍🎤", + "👨🏾‍🎨", + "👨🏾‍🏫", + "👨🏾‍🏭", + "👨🏾‍💻", + "👨🏾‍💼", + "👨🏾‍🔧", + "👨🏾‍🔬", + "👨🏾‍🚀", + "👨🏾‍🚒", + "👨🏾‍⚕️", + "👨🏾‍⚖️", + "👨🏾‍✈️", + "👨🏾", + "👨🏿‍🌾", + "👨🏿‍🍳", + "👨🏿‍🎓", + "👨🏿‍🎤", + "👨🏿‍🎨", + "👨🏿‍🏫", + "👨🏿‍🏭", + "👨🏿‍💻", + "👨🏿‍💼", + "👨🏿‍🔧", + "👨🏿‍🔬", + "👨🏿‍🚀", + "👨🏿‍🚒", + "👨🏿‍⚕️", + "👨🏿‍⚖️", + "👨🏿‍✈️", + "👨🏿", + "👨‍🌾", + "👨‍🍳", + "👨‍🎓", + "👨‍🎤", + "👨‍🎨", + "👨‍🏫", + "👨‍🏭", + "👨‍👦‍👦", + "👨‍👦", + "👨‍👧‍👦", + "👨‍👧‍👧", + "👨‍👧", + "👨‍👨‍👦‍👦", + "👨‍👨‍👦", + "👨‍👨‍👧‍👦", + "👨‍👨‍👧‍👧", + "👨‍👨‍👧", + "👨‍👩‍👦‍👦", + "👨‍👩‍👦", + "👨‍👩‍👧‍👦", + "👨‍👩‍👧‍👧", + "👨‍👩‍👧", + "👨‍💻", + "👨‍💼", + "👨‍🔧", + "👨‍🔬", + "👨‍🚀", + "👨‍🚒", + "👨‍⚕️", + "👨‍⚖️", + "👨‍✈️", + "👨‍❤️‍👨", + "👨‍❤️‍💋‍👨", + "👨", + "👩🏻‍🌾", + "👩🏻‍🍳", + "👩🏻‍🎓", + "👩🏻‍🎤", + "👩🏻‍🎨", + "👩🏻‍🏫", + "👩🏻‍🏭", + "👩🏻‍💻", + "👩🏻‍💼", + "👩🏻‍🔧", + "👩🏻‍🔬", + "👩🏻‍🚀", + "👩🏻‍🚒", + "👩🏻‍⚕️", + "👩🏻‍⚖️", + "👩🏻‍✈️", + "👩🏻", + "👩🏼‍🌾", + "👩🏼‍🍳", + "👩🏼‍🎓", + "👩🏼‍🎤", + "👩🏼‍🎨", + "👩🏼‍🏫", + "👩🏼‍🏭", + "👩🏼‍💻", + "👩🏼‍💼", + "👩🏼‍🔧", + "👩🏼‍🔬", + "👩🏼‍🚀", + "👩🏼‍🚒", + "👩🏼‍⚕️", + "👩🏼‍⚖️", + "👩🏼‍✈️", + "👩🏼", + "👩🏽‍🌾", + "👩🏽‍🍳", + "👩🏽‍🎓", + "👩🏽‍🎤", + "👩🏽‍🎨", + "👩🏽‍🏫", + "👩🏽‍🏭", + "👩🏽‍💻", + "👩🏽‍💼", + "👩🏽‍🔧", + "👩🏽‍🔬", + "👩🏽‍🚀", + "👩🏽‍🚒", + "👩🏽‍⚕️", + "👩🏽‍⚖️", + "👩🏽‍✈️", + "👩🏽", + "👩🏾‍🌾", + "👩🏾‍🍳", + "👩🏾‍🎓", + "👩🏾‍🎤", + "👩🏾‍🎨", + "👩🏾‍🏫", + "👩🏾‍🏭", + "👩🏾‍💻", + "👩🏾‍💼", + "👩🏾‍🔧", + "👩🏾‍🔬", + "👩🏾‍🚀", + "👩🏾‍🚒", + "👩🏾‍⚕️", + "👩🏾‍⚖️", + "👩🏾‍✈️", + "👩🏾", + "👩🏿‍🌾", + "👩🏿‍🍳", + "👩🏿‍🎓", + "👩🏿‍🎤", + "👩🏿‍🎨", + "👩🏿‍🏫", + "👩🏿‍🏭", + "👩🏿‍💻", + "👩🏿‍💼", + "👩🏿‍🔧", + "👩🏿‍🔬", + "👩🏿‍🚀", + "👩🏿‍🚒", + "👩🏿‍⚕️", + "👩🏿‍⚖️", + "👩🏿‍✈️", + "👩🏿", + "👩‍🌾", + "👩‍🍳", + "👩‍🎓", + "👩‍🎤", + "👩‍🎨", + "👩‍🏫", + "👩‍🏭", + "👩‍👦‍👦", + "👩‍👦", + "👩‍👧‍👦", + "👩‍👧‍👧", + "👩‍👧", + "👩‍👩‍👦‍👦", + "👩‍👩‍👦", + "👩‍👩‍👧‍👦", + "👩‍👩‍👧‍👧", + "👩‍👩‍👧", + "👩‍💻", + "👩‍💼", + "👩‍🔧", + "👩‍🔬", + "👩‍🚀", + "👩‍🚒", + "👩‍⚕️", + "👩‍⚖️", + "👩‍✈️", + "👩‍❤️‍👨", + "👩‍❤️‍👩", + "👩‍❤️‍💋‍👨", + "👩‍❤️‍💋‍👩", + "👩", + "👪🏻", + "👪🏼", + "👪🏽", + "👪🏾", + "👪🏿", + "👪", + "👫🏻", + "👫🏼", + "👫🏽", + "👫🏾", + "👫🏿", + "👫", + "👬🏻", + "👬🏼", + "👬🏽", + "👬🏾", + "👬🏿", + "👬", + "👭🏻", + "👭🏼", + "👭🏽", + "👭🏾", + "👭🏿", + "👭", + "👮🏻‍♀️", + "👮🏻‍♂️", + "👮🏻", + "👮🏼‍♀️", + "👮🏼‍♂️", + "👮🏼", + "👮🏽‍♀️", + "👮🏽‍♂️", + "👮🏽", + "👮🏾‍♀️", + "👮🏾‍♂️", + "👮🏾", + "👮🏿‍♀️", + "👮🏿‍♂️", + "👮🏿", + "👮‍♀️", + "👮‍♂️", + "👮", + "👯🏻‍♀️", + "👯🏻‍♂️", + "👯🏻", + "👯🏼‍♀️", + "👯🏼‍♂️", + "👯🏼", + "👯🏽‍♀️", + "👯🏽‍♂️", + "👯🏽", + "👯🏾‍♀️", + "👯🏾‍♂️", + "👯🏾", + "👯🏿‍♀️", + "👯🏿‍♂️", + "👯🏿", + "👯‍♀️", + "👯‍♂️", + "👯", + "👰🏻", + "👰🏼", + "👰🏽", + "👰🏾", + "👰🏿", + "👰", + "👱🏻‍♀️", + "👱🏻‍♂️", + "👱🏻", + "👱🏼‍♀️", + "👱🏼‍♂️", + "👱🏼", + "👱🏽‍♀️", + "👱🏽‍♂️", + "👱🏽", + "👱🏾‍♀️", + "👱🏾‍♂️", + "👱🏾", + "👱🏿‍♀️", + "👱🏿‍♂️", + "👱🏿", + "👱‍♀️", + "👱‍♂️", + "👱", + "👲🏻", + "👲🏼", + "👲🏽", + "👲🏾", + "👲🏿", + "👲", + "👳🏻‍♀️", + "👳🏻‍♂️", + "👳🏻", + "👳🏼‍♀️", + "👳🏼‍♂️", + "👳🏼", + "👳🏽‍♀️", + "👳🏽‍♂️", + "👳🏽", + "👳🏾‍♀️", + "👳🏾‍♂️", + "👳🏾", + "👳🏿‍♀️", + "👳🏿‍♂️", + "👳🏿", + "👳‍♀️", + "👳‍♂️", + "👳", + "👴🏻", + "👴🏼", + "👴🏽", + "👴🏾", + "👴🏿", + "👴", + "👵🏻", + "👵🏼", + "👵🏽", + "👵🏾", + "👵🏿", + "👵", + "👶🏻", + "👶🏼", + "👶🏽", + "👶🏾", + "👶🏿", + "👶", + "👷🏻‍♀️", + "👷🏻‍♂️", + "👷🏻", + "👷🏼‍♀️", + "👷🏼‍♂️", + "👷🏼", + "👷🏽‍♀️", + "👷🏽‍♂️", + "👷🏽", + "👷🏾‍♀️", + "👷🏾‍♂️", + "👷🏾", + "👷🏿‍♀️", + "👷🏿‍♂️", + "👷🏿", + "👷‍♀️", + "👷‍♂️", + "👷", + "👸🏻", + "👸🏼", + "👸🏽", + "👸🏾", + "👸🏿", + "👸", + "👹", + "👺", + "👻", + "👼🏻", + "👼🏼", + "👼🏽", + "👼🏾", + "👼🏿", + "👼", + "👽", + "👾", + "👿", + "💀", + "💁🏻‍♀️", + "💁🏻‍♂️", + "💁🏻", + "💁🏼‍♀️", + "💁🏼‍♂️", + "💁🏼", + "💁🏽‍♀️", + "💁🏽‍♂️", + "💁🏽", + "💁🏾‍♀️", + "💁🏾‍♂️", + "💁🏾", + "💁🏿‍♀️", + "💁🏿‍♂️", + "💁🏿", + "💁‍♀️", + "💁‍♂️", + "💁", + "💂🏻‍♀️", + "💂🏻‍♂️", + "💂🏻", + "💂🏼‍♀️", + "💂🏼‍♂️", + "💂🏼", + "💂🏽‍♀️", + "💂🏽‍♂️", + "💂🏽", + "💂🏾‍♀️", + "💂🏾‍♂️", + "💂🏾", + "💂🏿‍♀️", + "💂🏿‍♂️", + "💂🏿", + "💂‍♀️", + "💂‍♂️", + "💂", + "💃🏻", + "💃🏼", + "💃🏽", + "💃🏾", + "💃🏿", + "💃", + "💄", + "💅🏻", + "💅🏼", + "💅🏽", + "💅🏾", + "💅🏿", + "💅", + "💆🏻‍♀️", + "💆🏻‍♂️", + "💆🏻", + "💆🏼‍♀️", + "💆🏼‍♂️", + "💆🏼", + "💆🏽‍♀️", + "💆🏽‍♂️", + "💆🏽", + "💆🏾‍♀️", + "💆🏾‍♂️", + "💆🏾", + "💆🏿‍♀️", + "💆🏿‍♂️", + "💆🏿", + "💆‍♀️", + "💆‍♂️", + "💆", + "💇🏻‍♀️", + "💇🏻‍♂️", + "💇🏻", + "💇🏼‍♀️", + "💇🏼‍♂️", + "💇🏼", + "💇🏽‍♀️", + "💇🏽‍♂️", + "💇🏽", + "💇🏾‍♀️", + "💇🏾‍♂️", + "💇🏾", + "💇🏿‍♀️", + "💇🏿‍♂️", + "💇🏿", + "💇‍♀️", + "💇‍♂️", + "💇", + "💈", + "💉", + "💊", + "💋", + "💌", + "💍", + "💎", + "💏", + "💐", + "💑", + "💒", + "💓", + "💔", + "💕", + "💖", + "💗", + "💘", + "💙", + "💚", + "💛", + "💜", + "💝", + "💞", + "💟", + "💠", + "💡", + "💢", + "💣", + "💤", + "💥", + "💦", + "💧", + "💨", + "💩", + "💪🏻", + "💪🏼", + "💪🏽", + "💪🏾", + "💪🏿", + "💪", + "💫", + "💬", + "💭", + "💮", + "💯", + "💰", + "💱", + "💲", + "💳", + "💴", + "💵", + "💶", + "💷", + "💸", + "💹", + "💺", + "💻", + "💼", + "💽", + "💾", + "💿", + "📀", + "📁", + "📂", + "📃", + "📄", + "📅", + "📆", + "📇", + "📈", + "📉", + "📊", + "📋", + "📌", + "📍", + "📎", + "📏", + "📐", + "📑", + "📒", + "📓", + "📔", + "📕", + "📖", + "📗", + "📘", + "📙", + "📚", + "📛", + "📜", + "📝", + "📞", + "📟", + "📠", + "📡", + "📢", + "📣", + "📤", + "📥", + "📦", + "📧", + "📨", + "📩", + "📪", + "📫", + "📬", + "📭", + "📮", + "📯", + "📰", + "📱", + "📲", + "📳", + "📴", + "📵", + "📶", + "📷", + "📸", + "📹", + "📺", + "📻", + "📼", + "📽", + "📿", + "🔀", + "🔁", + "🔂", + "🔃", + "🔄", + "🔅", + "🔆", + "🔇", + "🔈", + "🔉", + "🔊", + "🔋", + "🔌", + "🔍", + "🔎", + "🔏", + "🔐", + "🔑", + "🔒", + "🔓", + "🔔", + "🔕", + "🔖", + "🔗", + "🔘", + "🔙", + "🔚", + "🔛", + "🔜", + "🔝", + "🔞", + "🔟", + "🔠", + "🔡", + "🔢", + "🔣", + "🔤", + "🔥", + "🔦", + "🔧", + "🔨", + "🔩", + "🔪", + "🔫", + "🔬", + "🔭", + "🔮", + "🔯", + "🔰", + "🔱", + "🔲", + "🔳", + "🔴", + "🔵", + "🔶", + "🔷", + "🔸", + "🔹", + "🔺", + "🔻", + "🔼", + "🔽", + "🕉", + "🕊", + "🕋", + "🕌", + "🕍", + "🕎", + "🕐", + "🕑", + "🕒", + "🕓", + "🕔", + "🕕", + "🕖", + "🕗", + "🕘", + "🕙", + "🕚", + "🕛", + "🕜", + "🕝", + "🕞", + "🕟", + "🕠", + "🕡", + "🕢", + "🕣", + "🕤", + "🕥", + "🕦", + "🕧", + "🕯", + "🕰", + "🕳", + "🕴🏻", + "🕴🏼", + "🕴🏽", + "🕴🏾", + "🕴🏿", + "🕴", + "🕵🏻‍♀️", + "🕵🏻‍♂️", + "🕵🏻", + "🕵🏼‍♀️", + "🕵🏼‍♂️", + "🕵🏼", + "🕵🏽‍♀️", + "🕵🏽‍♂️", + "🕵🏽", + "🕵🏾‍♀️", + "🕵🏾‍♂️", + "🕵🏾", + "🕵🏿‍♀️", + "🕵🏿‍♂️", + "🕵🏿", + "🕵️‍♀️", + "🕵️‍♂️", + "🕵", + "🕶", + "🕷", + "🕸", + "🕹", + "🕺🏻", + "🕺🏼", + "🕺🏽", + "🕺🏾", + "🕺🏿", + "🕺", + "🖇", + "🖊", + "🖋", + "🖌", + "🖍", + "🖐🏻", + "🖐🏼", + "🖐🏽", + "🖐🏾", + "🖐🏿", + "🖐", + "🖕🏻", + "🖕🏼", + "🖕🏽", + "🖕🏾", + "🖕🏿", + "🖕", + "🖖🏻", + "🖖🏼", + "🖖🏽", + "🖖🏾", + "🖖🏿", + "🖖", + "🖤", + "🖥", + "🖨", + "🖱", + "🖲", + "🖼", + "🗂", + "🗃", + "🗄", + "🗑", + "🗒", + "🗓", + "🗜", + "🗝", + "🗞", + "🗡", + "🗣", + "🗨", + "🗯", + "🗳", + "🗺", + "🗻", + "🗼", + "🗽", + "🗾", + "🗿", + "😀", + "😁", + "😂", + "😃", + "😄", + "😅", + "😆", + "😇", + "😈", + "😉", + "😊", + "😋", + "😌", + "😍", + "😎", + "😏", + "😐", + "😑", + "😒", + "😓", + "😔", + "😕", + "😖", + "😗", + "😘", + "😙", + "😚", + "😛", + "😜", + "😝", + "😞", + "😟", + "😠", + "😡", + "😢", + "😣", + "😤", + "😥", + "😦", + "😧", + "😨", + "😩", + "😪", + "😫", + "😬", + "😭", + "😮", + "😯", + "😰", + "😱", + "😲", + "😳", + "😴", + "😵", + "😶", + "😷", + "😸", + "😹", + "😺", + "😻", + "😼", + "😽", + "😾", + "😿", + "🙀", + "🙁", + "🙂", + "🙃", + "🙄", + "🙅🏻‍♀️", + "🙅🏻‍♂️", + "🙅🏻", + "🙅🏼‍♀️", + "🙅🏼‍♂️", + "🙅🏼", + "🙅🏽‍♀️", + "🙅🏽‍♂️", + "🙅🏽", + "🙅🏾‍♀️", + "🙅🏾‍♂️", + "🙅🏾", + "🙅🏿‍♀️", + "🙅🏿‍♂️", + "🙅🏿", + "🙅‍♀️", + "🙅‍♂️", + "🙅", + "🙆🏻‍♀️", + "🙆🏻‍♂️", + "🙆🏻", + "🙆🏼‍♀️", + "🙆🏼‍♂️", + "🙆🏼", + "🙆🏽‍♀️", + "🙆🏽‍♂️", + "🙆🏽", + "🙆🏾‍♀️", + "🙆🏾‍♂️", + "🙆🏾", + "🙆🏿‍♀️", + "🙆🏿‍♂️", + "🙆🏿", + "🙆‍♀️", + "🙆‍♂️", + "🙆", + "🙇🏻‍♀️", + "🙇🏻‍♂️", + "🙇🏻", + "🙇🏼‍♀️", + "🙇🏼‍♂️", + "🙇🏼", + "🙇🏽‍♀️", + "🙇🏽‍♂️", + "🙇🏽", + "🙇🏾‍♀️", + "🙇🏾‍♂️", + "🙇🏾", + "🙇🏿‍♀️", + "🙇🏿‍♂️", + "🙇🏿", + "🙇‍♀️", + "🙇‍♂️", + "🙇", + "🙈", + "🙉", + "🙊", + "🙋🏻‍♀️", + "🙋🏻‍♂️", + "🙋🏻", + "🙋🏼‍♀️", + "🙋🏼‍♂️", + "🙋🏼", + "🙋🏽‍♀️", + "🙋🏽‍♂️", + "🙋🏽", + "🙋🏾‍♀️", + "🙋🏾‍♂️", + "🙋🏾", + "🙋🏿‍♀️", + "🙋🏿‍♂️", + "🙋🏿", + "🙋‍♀️", + "🙋‍♂️", + "🙋", + "🙌🏻", + "🙌🏼", + "🙌🏽", + "🙌🏾", + "🙌🏿", + "🙌", + "🙍🏻‍♀️", + "🙍🏻‍♂️", + "🙍🏻", + "🙍🏼‍♀️", + "🙍🏼‍♂️", + "🙍🏼", + "🙍🏽‍♀️", + "🙍🏽‍♂️", + "🙍🏽", + "🙍🏾‍♀️", + "🙍🏾‍♂️", + "🙍🏾", + "🙍🏿‍♀️", + "🙍🏿‍♂️", + "🙍🏿", + "🙍‍♀️", + "🙍‍♂️", + "🙍", + "🙎🏻‍♀️", + "🙎🏻‍♂️", + "🙎🏻", + "🙎🏼‍♀️", + "🙎🏼‍♂️", + "🙎🏼", + "🙎🏽‍♀️", + "🙎🏽‍♂️", + "🙎🏽", + "🙎🏾‍♀️", + "🙎🏾‍♂️", + "🙎🏾", + "🙎🏿‍♀️", + "🙎🏿‍♂️", + "🙎🏿", + "🙎‍♀️", + "🙎‍♂️", + "🙎", + "🙏🏻", + "🙏🏼", + "🙏🏽", + "🙏🏾", + "🙏🏿", + "🙏", + "🚀", + "🚁", + "🚂", + "🚃", + "🚄", + "🚅", + "🚆", + "🚇", + "🚈", + "🚉", + "🚊", + "🚋", + "🚌", + "🚍", + "🚎", + "🚏", + "🚐", + "🚑", + "🚒", + "🚓", + "🚔", + "🚕", + "🚖", + "🚗", + "🚘", + "🚙", + "🚚", + "🚛", + "🚜", + "🚝", + "🚞", + "🚟", + "🚠", + "🚡", + "🚢", + "🚣🏻‍♀️", + "🚣🏻‍♂️", + "🚣🏻", + "🚣🏼‍♀️", + "🚣🏼‍♂️", + "🚣🏼", + "🚣🏽‍♀️", + "🚣🏽‍♂️", + "🚣🏽", + "🚣🏾‍♀️", + "🚣🏾‍♂️", + "🚣🏾", + "🚣🏿‍♀️", + "🚣🏿‍♂️", + "🚣🏿", + "🚣‍♀️", + "🚣‍♂️", + "🚣", + "🚤", + "🚥", + "🚦", + "🚧", + "🚨", + "🚩", + "🚪", + "🚫", + "🚬", + "🚭", + "🚮", + "🚯", + "🚰", + "🚱", + "🚲", + "🚳", + "🚴🏻‍♀️", + "🚴🏻‍♂️", + "🚴🏻", + "🚴🏼‍♀️", + "🚴🏼‍♂️", + "🚴🏼", + "🚴🏽‍♀️", + "🚴🏽‍♂️", + "🚴🏽", + "🚴🏾‍♀️", + "🚴🏾‍♂️", + "🚴🏾", + "🚴🏿‍♀️", + "🚴🏿‍♂️", + "🚴🏿", + "🚴‍♀️", + "🚴‍♂️", + "🚴", + "🚵🏻‍♀️", + "🚵🏻‍♂️", + "🚵🏻", + "🚵🏼‍♀️", + "🚵🏼‍♂️", + "🚵🏼", + "🚵🏽‍♀️", + "🚵🏽‍♂️", + "🚵🏽", + "🚵🏾‍♀️", + "🚵🏾‍♂️", + "🚵🏾", + "🚵🏿‍♀️", + "🚵🏿‍♂️", + "🚵🏿", + "🚵‍♀️", + "🚵‍♂️", + "🚵", + "🚶🏻‍♀️", + "🚶🏻‍♂️", + "🚶🏻", + "🚶🏼‍♀️", + "🚶🏼‍♂️", + "🚶🏼", + "🚶🏽‍♀️", + "🚶🏽‍♂️", + "🚶🏽", + "🚶🏾‍♀️", + "🚶🏾‍♂️", + "🚶🏾", + "🚶🏿‍♀️", + "🚶🏿‍♂️", + "🚶🏿", + "🚶‍♀️", + "🚶‍♂️", + "🚶", + "🚷", + "🚸", + "🚹", + "🚺", + "🚻", + "🚼", + "🚽", + "🚾", + "🚿", + "🛀🏻", + "🛀🏼", + "🛀🏽", + "🛀🏾", + "🛀🏿", + "🛀", + "🛁", + "🛂", + "🛃", + "🛄", + "🛅", + "🛋", + "🛌🏻", + "🛌🏼", + "🛌🏽", + "🛌🏾", + "🛌🏿", + "🛌", + "🛍", + "🛎", + "🛏", + "🛐", + "🛑", + "🛒", + "🛠", + "🛡", + "🛢", + "🛣", + "🛤", + "🛥", + "🛩", + "🛫", + "🛬", + "🛰", + "🛳", + "🛴", + "🛵", + "🛶", + "🤐", + "🤑", + "🤒", + "🤓", + "🤔", + "🤕", + "🤖", + "🤗", + "🤘🏻", + "🤘🏼", + "🤘🏽", + "🤘🏾", + "🤘🏿", + "🤘", + "🤙🏻", + "🤙🏼", + "🤙🏽", + "🤙🏾", + "🤙🏿", + "🤙", + "🤚🏻", + "🤚🏼", + "🤚🏽", + "🤚🏾", + "🤚🏿", + "🤚", + "🤛🏻", + "🤛🏼", + "🤛🏽", + "🤛🏾", + "🤛🏿", + "🤛", + "🤜🏻", + "🤜🏼", + "🤜🏽", + "🤜🏾", + "🤜🏿", + "🤜", + "🤝🏻", + "🤝🏼", + "🤝🏽", + "🤝🏾", + "🤝🏿", + "🤝", + "🤞🏻", + "🤞🏼", + "🤞🏽", + "🤞🏾", + "🤞🏿", + "🤞", + "🤠", + "🤡", + "🤢", + "🤣", + "🤤", + "🤥", + "🤦🏻‍♀️", + "🤦🏻‍♂️", + "🤦🏻", + "🤦🏼‍♀️", + "🤦🏼‍♂️", + "🤦🏼", + "🤦🏽‍♀️", + "🤦🏽‍♂️", + "🤦🏽", + "🤦🏾‍♀️", + "🤦🏾‍♂️", + "🤦🏾", + "🤦🏿‍♀️", + "🤦🏿‍♂️", + "🤦🏿", + "🤦‍♀️", + "🤦‍♂️", + "🤦", + "🤧", + "🤰🏻", + "🤰🏼", + "🤰🏽", + "🤰🏾", + "🤰🏿", + "🤰", + "🤳🏻", + "🤳🏼", + "🤳🏽", + "🤳🏾", + "🤳🏿", + "🤳", + "🤴🏻", + "🤴🏼", + "🤴🏽", + "🤴🏾", + "🤴🏿", + "🤴", + "🤵🏻", + "🤵🏼", + "🤵🏽", + "🤵🏾", + "🤵🏿", + "🤵", + "🤶🏻", + "🤶🏼", + "🤶🏽", + "🤶🏾", + "🤶🏿", + "🤶", + "🤷🏻‍♀️", + "🤷🏻‍♂️", + "🤷🏻", + "🤷🏼‍♀️", + "🤷🏼‍♂️", + "🤷🏼", + "🤷🏽‍♀️", + "🤷🏽‍♂️", + "🤷🏽", + "🤷🏾‍♀️", + "🤷🏾‍♂️", + "🤷🏾", + "🤷🏿‍♀️", + "🤷🏿‍♂️", + "🤷🏿", + "🤷‍♀️", + "🤷‍♂️", + "🤷", + "🤸🏻‍♀️", + "🤸🏻‍♂️", + "🤸🏻", + "🤸🏼‍♀️", + "🤸🏼‍♂️", + "🤸🏼", + "🤸🏽‍♀️", + "🤸🏽‍♂️", + "🤸🏽", + "🤸🏾‍♀️", + "🤸🏾‍♂️", + "🤸🏾", + "🤸🏿‍♀️", + "🤸🏿‍♂️", + "🤸🏿", + "🤸‍♀️", + "🤸‍♂️", + "🤸", + "🤹🏻‍♀️", + "🤹🏻‍♂️", + "🤹🏻", + "🤹🏼‍♀️", + "🤹🏼‍♂️", + "🤹🏼", + "🤹🏽‍♀️", + "🤹🏽‍♂️", + "🤹🏽", + "🤹🏾‍♀️", + "🤹🏾‍♂️", + "🤹🏾", + "🤹🏿‍♀️", + "🤹🏿‍♂️", + "🤹🏿", + "🤹‍♀️", + "🤹‍♂️", + "🤹", + "🤺", + "🤼🏻‍♀️", + "🤼🏻‍♂️", + "🤼🏻", + "🤼🏼‍♀️", + "🤼🏼‍♂️", + "🤼🏼", + "🤼🏽‍♀️", + "🤼🏽‍♂️", + "🤼🏽", + "🤼🏾‍♀️", + "🤼🏾‍♂️", + "🤼🏾", + "🤼🏿‍♀️", + "🤼🏿‍♂️", + "🤼🏿", + "🤼‍♀️", + "🤼‍♂️", + "🤼", + "🤽🏻‍♀️", + "🤽🏻‍♂️", + "🤽🏻", + "🤽🏼‍♀️", + "🤽🏼‍♂️", + "🤽🏼", + "🤽🏽‍♀️", + "🤽🏽‍♂️", + "🤽🏽", + "🤽🏾‍♀️", + "🤽🏾‍♂️", + "🤽🏾", + "🤽🏿‍♀️", + "🤽🏿‍♂️", + "🤽🏿", + "🤽‍♀️", + "🤽‍♂️", + "🤽", + "🤾🏻‍♀️", + "🤾🏻‍♂️", + "🤾🏻", + "🤾🏼‍♀️", + "🤾🏼‍♂️", + "🤾🏼", + "🤾🏽‍♀️", + "🤾🏽‍♂️", + "🤾🏽", + "🤾🏾‍♀️", + "🤾🏾‍♂️", + "🤾🏾", + "🤾🏿‍♀️", + "🤾🏿‍♂️", + "🤾🏿", + "🤾‍♀️", + "🤾‍♂️", + "🤾", + "🥀", + "🥁", + "🥂", + "🥃", + "🥄", + "🥅", + "🥇", + "🥈", + "🥉", + "🥊", + "🥋", + "🥐", + "🥑", + "🥒", + "🥓", + "🥔", + "🥕", + "🥖", + "🥗", + "🥘", + "🥙", + "🥚", + "🥛", + "🥜", + "🥝", + "🥞", + "🦀", + "🦁", + "🦂", + "🦃", + "🦄", + "🦅", + "🦆", + "🦇", + "🦈", + "🦉", + "🦊", + "🦋", + "🦌", + "🦍", + "🦎", + "🦏", + "🦐", + "🦑", + "🧀", + "‼", + "⁉", + "™", + "ℹ", + "↔", + "↕", + "↖", + "↗", + "↘", + "↙", + "↩", + "↪", + "#⃣", + "⌚", + "⌛", + "⌨", + "⏏", + "⏩", + "⏪", + "⏫", + "⏬", + "⏭", + "⏮", + "⏯", + "⏰", + "⏱", + "⏲", + "⏳", + "⏸", + "⏹", + "⏺", + "Ⓜ", + "▪", + "▫", + "▶", + "◀", + "◻", + "◼", + "◽", + "◾", + "☀", + "☁", + "☂", + "☃", + "☄", + "☎", + "☑", + "☔", + "☕", + "☘", + "☝🏻", + "☝🏼", + "☝🏽", + "☝🏾", + "☝🏿", + "☝", + "☠", + "☢", + "☣", + "☦", + "☪", + "☮", + "☯", + "☸", + "☹", + "☺", + "♀", + "♂", + "♈", + "♉", + "♊", + "♋", + "♌", + "♍", + "♎", + "♏", + "♐", + "♑", + "♒", + "♓", + "♠", + "♣", + "♥", + "♦", + "♨", + "♻", + "♿", + "⚒", + "⚓", + "⚔", + "⚕", + "⚖", + "⚗", + "⚙", + "⚛", + "⚜", + "⚠", + "⚡", + "⚪", + "⚫", + "⚰", + "⚱", + "⚽", + "⚾", + "⛄", + "⛅", + "⛈", + "⛎", + "⛏", + "⛑", + "⛓", + "⛔", + "⛩", + "⛪", + "⛰", + "⛱", + "⛲", + "⛳", + "⛴", + "⛵", + "⛷🏻", + "⛷🏼", + "⛷🏽", + "⛷🏾", + "⛷🏿", + "⛷", + "⛸", + "⛹🏻‍♀️", + "⛹🏻‍♂️", + "⛹🏻", + "⛹🏼‍♀️", + "⛹🏼‍♂️", + "⛹🏼", + "⛹🏽‍♀️", + "⛹🏽‍♂️", + "⛹🏽", + "⛹🏾‍♀️", + "⛹🏾‍♂️", + "⛹🏾", + "⛹🏿‍♀️", + "⛹🏿‍♂️", + "⛹🏿", + "⛹️‍♀️", + "⛹️‍♂️", + "⛹", + "⛺", + "⛽", + "✂", + "✅", + "✈", + "✉", + "✊🏻", + "✊🏼", + "✊🏽", + "✊🏾", + "✊🏿", + "✊", + "✋🏻", + "✋🏼", + "✋🏽", + "✋🏾", + "✋🏿", + "✋", + "✌🏻", + "✌🏼", + "✌🏽", + "✌🏾", + "✌🏿", + "✌", + "✍🏻", + "✍🏼", + "✍🏽", + "✍🏾", + "✍🏿", + "✍", + "✏", + "✒", + "✔", + "✖", + "✝", + "✡", + "✨", + "✳", + "✴", + "❄", + "❇", + "❌", + "❎", + "❓", + "❔", + "❕", + "❗", + "❣", + "❤", + "➕", + "➖", + "➗", + "➡", + "➰", + "➿", + "⤴", + "⤵", + "*⃣", + "⬅", + "⬆", + "⬇", + "⬛", + "⬜", + "⭐", + "⭕", + "0⃣", + "〰", + "〽", + "1⃣", + "2⃣", + "㊗", + "㊙", + "3⃣", + "4⃣", + "5⃣", + "6⃣", + "7⃣", + "8⃣", + "9⃣", + "©", + "®", + "" +] \ No newline at end of file diff --git a/node_modules/emojis-list/package.json b/node_modules/emojis-list/package.json new file mode 100644 index 000000000..eee7d2453 --- /dev/null +++ b/node_modules/emojis-list/package.json @@ -0,0 +1,76 @@ +{ + "_from": "emojis-list@^2.0.0", + "_id": "emojis-list@2.1.0", + "_inBundle": false, + "_integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "_location": "/emojis-list", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "emojis-list@^2.0.0", + "name": "emojis-list", + "escapedName": "emojis-list", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/loader-utils" + ], + "_resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "_shasum": "4daa4d9db00f9819880c79fa457ae5b09a1fd389", + "_spec": "emojis-list@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/loader-utils", + "author": { + "name": "Kiko Beats", + "email": "josefrancisco.verdu@gmail.com", + "url": "https://github.com/Kikobeats" + }, + "bugs": { + "url": "https://github.com/Kikobeats/emojis-list/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Complete list of standard emojis.", + "devDependencies": { + "acho": "latest", + "browserify": "latest", + "cheerio": "latest", + "got": ">=5 <6", + "gulp": "latest", + "gulp-header": "latest", + "gulp-uglify": "latest", + "gulp-util": "latest", + "standard": "latest", + "vinyl-buffer": "latest", + "vinyl-source-stream": "latest" + }, + "engines": { + "node": ">= 0.10" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/Kikobeats/emojis-list", + "keywords": [ + "archive", + "complete", + "emoji", + "list", + "standard" + ], + "license": "MIT", + "main": "./index.js", + "name": "emojis-list", + "repository": { + "type": "git", + "url": "git+https://github.com/kikobeats/emojis-list.git" + }, + "scripts": { + "pretest": "standard update.js", + "test": "echo 'YOLO'", + "update": "node update" + }, + "version": "2.1.0" +} diff --git a/node_modules/enhanced-resolve/README.md b/node_modules/enhanced-resolve/README.md new file mode 100644 index 000000000..6969c42d5 --- /dev/null +++ b/node_modules/enhanced-resolve/README.md @@ -0,0 +1,118 @@ +# enhanced-resolve + +Offers an async require.resolve function. It's highly configurable. + +## Features + +* plugin system +* provide a custom filesystem +* sync and async node.js filesystems included + + +## Getting Started +### Install +```sh +# npm +npm install enhanced-resolve +# or Yarn +yarn add enhanced-resolve +``` + +### Creating a Resolver +The easiest way to create a resolver is to use the `createResolver` function on `ResolveFactory`, along with one of the supplied File System implementations. +```js +const { + NodeJsInputFileSystem, + CachedInputFileSystem, + ResolverFactory +} = require('enhanced-resolve'); + +// create a resolver +const myResolver = ResolverFactory.createResolver({ + // Typical usage will consume the `NodeJsInputFileSystem` + `CachedInputFileSystem`, which wraps the Node.js `fs` wrapper to add resilience + caching. + fileSystem: new CachedInputFileSystem(new NodeJsInputFileSystem(), 4000), + extensions: ['.js', '.json'] + /* any other resolver options here. Options/defaults can be seen below */ +}); + +// resolve a file with the new resolver +const context = {}; +const lookupStartPath = '/Users/webpack/some/root/dir'; +const request = './path/to-look-up.js'; +myResolver.resolve({}, lookupStartPath, request, (err/*Error*/, filepath/*string*/) => { + // Do something with the path +}); +``` + +For more examples creating different types resolvers (sync/async, context, etc) see `lib/node.js`. +#### Resolver Options +| Field | Default | Description | +| ------------------------ | --------------------------- | ---------------------------------------------------------------------------------- | +| modules | ["node_modules"] | A list of directories to resolve modules from, can be absolute path or folder name | +| descriptionFiles | ["package.json"] | A list of description files to read from | +| plugins | [] | A list of additional resolve plugins which should be applied | +| mainFields | ["main"] | A list of main fields in description files | +| aliasFields | [] | A list of alias fields in description files | +| mainFiles | ["index"] | A list of main files in directories | +| extensions | [".js", ".json", ".node"] | A list of extensions which should be tried for files | +| enforceExtension | false | Enforce that a extension from extensions must be used | +| moduleExtensions | [] | A list of module extensions which should be tried for modules | +| enforceModuleExtension | false | Enforce that a extension from moduleExtensions must be used | +| alias | [] | A list of module alias configurations or an object which maps key to value | +| resolveToContext | false | Resolve to a context instead of a file | +| unsafeCache | false | Use this cache object to unsafely cache the successful requests | +| cacheWithContext | true | If unsafe cache is enabled, includes `request.context` in the cache key | +| cachePredicate | function() { return true }; | A function which decides whether a request should be cached or not. An object is passed to the function with `path` and `request` properties. | +| fileSystem | | The file system which should be used | +| resolver | undefined | A prepared Resolver to which the plugins are attached | + +## Plugins +Similar to `webpack`, the core of `enhanced-resolve` functionality is implemented as individual plugins that are executed using [`Tapable`](https://github.com/webpack/tapable). These plugins can extend the functionality of the library, adding other ways for files/contexts to be resolved. + +A plugin should be a `class` (or its ES5 equivalent) with an `apply` method. The `apply` method will receive a `resolver` instance, that can be used to hook in to the event system. + +### Plugin Boilerplate +```js +class MyResolverPlugin { + constructor(source, target) { + this.source = source; + this.target = target; + } + + apply(resolver) { + resolver.plugin(this.source, (request, callback) => { + // Any logic you need to create a new `request` can go here + resolver.doResolve(this.target, request, null, callback); + }); + } +} +``` + +Plugins are executed in a pipeline, and register which event they should be executed before/after. In the example above, `source` is the name of the event that starts the pipeline, and `target` is what event this plugin should fire, which is what continues the execution of the pipeline. For an example of how these different plugin events create a chain, see `lib/ResolverFactory.js`, in the `//// pipeline ////` section. + +## Tests + +``` javascript +npm test +``` + +[![Build Status](https://secure.travis-ci.org/webpack/enhanced-resolve.png?branch=master)](http://travis-ci.org/webpack/enhanced-resolve) + + +## Passing options from webpack +If you are using `webpack`, and you want to pass custom options to `enhanced-resolve`, the options are passed from the `resolve` key of your webpack configuration e.g.: + +``` +resolve: { + extensions: ['', '.js', '.jsx'], + modules: ['src', 'node_modules'], + plugins: [new DirectoryNamedWebpackPlugin()] + ... +}, +``` + +## License + +Copyright (c) 2012-2016 Tobias Koppers + +MIT (http://www.opensource.org/licenses/mit-license.php) diff --git a/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js b/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js new file mode 100644 index 000000000..1d4d830d5 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js @@ -0,0 +1,51 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + +var DescriptionFileUtils = require("./DescriptionFileUtils"); +var createInnerCallback = require("./createInnerCallback"); +var getInnerRequest = require("./getInnerRequest"); + +function AliasFieldPlugin(source, field, target) { + this.source = source; + this.field = field; + this.target = target; +} +module.exports = AliasFieldPlugin; + +AliasFieldPlugin.prototype.apply = function(resolver) { + var target = this.target; + var field = this.field; + resolver.plugin(this.source, function(request, callback) { + if(!request.descriptionFileData) return callback(); + var innerRequest = getInnerRequest(resolver, request); + if(!innerRequest) return callback(); + var fieldData = DescriptionFileUtils.getField(request.descriptionFileData, field); + if(typeof fieldData !== "object") { + if(callback.log) callback.log("Field '" + field + "' doesn't contain a valid alias configuration"); + return callback(); + } + var data1 = fieldData[innerRequest]; + var data2 = fieldData[innerRequest.replace(/^\.\//, "")]; + var data = typeof data1 !== "undefined" ? data1 : data2; + if(data === innerRequest) return callback(); + if(data === undefined) return callback(); + if(data === false) { + var ignoreObj = Object.assign({}, request, { + path: false + }); + return callback(null, ignoreObj); + } + var obj = Object.assign({}, request, { + path: request.descriptionFileRoot, + request: data + }); + resolver.doResolve(target, obj, "aliased from description file " + request.descriptionFilePath + " with mapping '" + innerRequest + "' to '" + data + "'", createInnerCallback(function(err, result) { + if(arguments.length > 0) return callback(err, result); + + // Don't allow other aliasing or raw request + callback(null, null); + }, callback)); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/AliasPlugin.js b/node_modules/enhanced-resolve/lib/AliasPlugin.js new file mode 100644 index 000000000..242868446 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/AliasPlugin.js @@ -0,0 +1,57 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var createInnerCallback = require("./createInnerCallback"); + +function startsWith(string, searchString) { + var stringLength = string.length; + var searchLength = searchString.length; + + // early out if the search length is greater than the search string + if(searchLength > stringLength) { + return false; + } + var index = -1; + while(++index < searchLength) { + if(string.charCodeAt(index) !== searchString.charCodeAt(index)) { + return false; + } + } + return true; +} + +function AliasPlugin(source, options, target) { + this.source = source; + this.name = options.name; + this.alias = options.alias; + this.onlyModule = options.onlyModule; + this.target = target; +} +module.exports = AliasPlugin; + +AliasPlugin.prototype.apply = function(resolver) { + var target = this.target; + var name = this.name; + var alias = this.alias; + var onlyModule = this.onlyModule; + resolver.plugin(this.source, function(request, callback) { + var innerRequest = request.request; + if(!innerRequest) return callback(); + if(innerRequest === name || (!onlyModule && startsWith(innerRequest, name + "/"))) { + if(innerRequest !== alias && !startsWith(innerRequest, alias + "/")) { + var newRequestStr = alias + innerRequest.substr(name.length); + var obj = Object.assign({}, request, { + request: newRequestStr + }); + return resolver.doResolve(target, obj, "aliased with mapping '" + name + "': '" + alias + "' to '" + newRequestStr + "'", createInnerCallback(function(err, result) { + if(arguments.length > 0) return callback(err, result); + + // don't allow other aliasing or raw request + callback(null, null); + }, callback)); + } + } + return callback(); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/AppendPlugin.js b/node_modules/enhanced-resolve/lib/AppendPlugin.js new file mode 100644 index 000000000..73a8a6f31 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/AppendPlugin.js @@ -0,0 +1,22 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function AppendPlugin(source, appending, target) { + this.source = source; + this.appending = appending; + this.target = target; +} +module.exports = AppendPlugin; + +AppendPlugin.prototype.apply = function(resolver) { + var target = this.target; + var appending = this.appending; + resolver.plugin(this.source, function(request, callback) { + var obj = Object.assign({}, request, { + path: request.path + appending, + relativePath: request.relativePath && (request.relativePath + appending) + }); + resolver.doResolve(target, obj, appending, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js b/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js new file mode 100644 index 000000000..ce136b957 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js @@ -0,0 +1,271 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function Storage(duration) { + this.duration = duration; + this.running = new Map(); + this.data = new Map(); + this.levels = []; + if(duration > 0) { + this.levels.push(new Set(), new Set(), new Set(), new Set(), new Set(), new Set(), new Set(), new Set(), new Set()); + for(var i = 8000; i < duration; i += 500) + this.levels.push(new Set()); + } + this.count = 0; + this.interval = null; + this.needTickCheck = false; + this.nextTick = null; + this.passive = true; + this.tick = this.tick.bind(this); +} + +Storage.prototype.ensureTick = function() { + if(!this.interval && this.duration > 0 && !this.nextTick) + this.interval = setInterval(this.tick, Math.floor(this.duration / this.levels.length)); +}; + +Storage.prototype.finished = function(name, err, result) { + var callbacks = this.running.get(name); + this.running.delete(name); + if(this.duration > 0) { + this.data.set(name, [err, result]); + var levelData = this.levels[0]; + this.count -= levelData.size; + levelData.add(name); + this.count += levelData.size; + this.ensureTick(); + } + for(var i = 0; i < callbacks.length; i++) { + callbacks[i](err, result); + } +}; + +Storage.prototype.finishedSync = function(name, err, result) { + if(this.duration > 0) { + this.data.set(name, [err, result]); + var levelData = this.levels[0]; + this.count -= levelData.size; + levelData.add(name); + this.count += levelData.size; + this.ensureTick(); + } +}; + +Storage.prototype.provide = function(name, provider, callback) { + if(typeof name !== "string") { + callback(new TypeError("path must be a string")); + return; + } + var running = this.running.get(name); + if(running) { + running.push(callback); + return; + } + if(this.duration > 0) { + this.checkTicks(); + var data = this.data.get(name); + if(data) { + return process.nextTick(function() { + callback.apply(null, data); + }); + } + } + this.running.set(name, running = [callback]); + var _this = this; + provider(name, function(err, result) { + _this.finished(name, err, result); + }); +}; + +Storage.prototype.provideSync = function(name, provider) { + if(typeof name !== "string") { + throw new TypeError("path must be a string"); + } + if(this.duration > 0) { + this.checkTicks(); + var data = this.data.get(name); + if(data) { + if(data[0]) + throw data[0]; + return data[1]; + } + } + try { + var result = provider(name); + } catch(e) { + this.finishedSync(name, e); + throw e; + } + this.finishedSync(name, null, result); + return result; +}; + +Storage.prototype.tick = function() { + var decay = this.levels.pop(); + for(var item of decay) { + this.data.delete(item); + } + this.count -= decay.size; + decay.clear(); + this.levels.unshift(decay); + if(this.count === 0) { + clearInterval(this.interval); + this.interval = null; + this.nextTick = null; + return true; + } else if(this.nextTick) { + this.nextTick += Math.floor(this.duration / this.levels.length); + var time = new Date().getTime(); + if(this.nextTick > time) { + this.nextTick = null; + this.interval = setInterval(this.tick, Math.floor(this.duration / this.levels.length)); + return true; + } + } else if(this.passive) { + clearInterval(this.interval); + this.interval = null; + this.nextTick = new Date().getTime() + Math.floor(this.duration / this.levels.length); + } else { + this.passive = true; + } +}; + +Storage.prototype.checkTicks = function() { + this.passive = false; + if(this.nextTick) { + while(!this.tick()); + } +}; + +Storage.prototype.purge = function(what) { + if(!what) { + this.count = 0; + clearInterval(this.interval); + this.nextTick = null; + this.data.clear(); + this.levels.forEach(function(level) { + level.clear(); + }); + } else if(typeof what === "string") { + for(var key of this.data.keys()) { + if(key.startsWith(what)) + this.data.delete(key); + } + } else { + for(var i = what.length - 1; i >= 0; i--) { + this.purge(what[i]); + } + } +}; + +function CachedInputFileSystem(fileSystem, duration) { + this.fileSystem = fileSystem; + this._statStorage = new Storage(duration); + this._readdirStorage = new Storage(duration); + this._readFileStorage = new Storage(duration); + this._readJsonStorage = new Storage(duration); + this._readlinkStorage = new Storage(duration); + + this._stat = this.fileSystem.stat ? this.fileSystem.stat.bind(this.fileSystem) : null; + if(!this._stat) this.stat = null; + + this._statSync = this.fileSystem.statSync ? this.fileSystem.statSync.bind(this.fileSystem) : null; + if(!this._statSync) this.statSync = null; + + this._readdir = this.fileSystem.readdir ? this.fileSystem.readdir.bind(this.fileSystem) : null; + if(!this._readdir) this.readdir = null; + + this._readdirSync = this.fileSystem.readdirSync ? this.fileSystem.readdirSync.bind(this.fileSystem) : null; + if(!this._readdirSync) this.readdirSync = null; + + this._readFile = this.fileSystem.readFile ? this.fileSystem.readFile.bind(this.fileSystem) : null; + if(!this._readFile) this.readFile = null; + + this._readFileSync = this.fileSystem.readFileSync ? this.fileSystem.readFileSync.bind(this.fileSystem) : null; + if(!this._readFileSync) this.readFileSync = null; + + if(this.fileSystem.readJson) { + this._readJson = this.fileSystem.readJson.bind(this.fileSystem); + } else if(this.readFile) { + this._readJson = function(path, callback) { + this.readFile(path, function(err, buffer) { + if(err) return callback(err); + try { + var data = JSON.parse(buffer.toString("utf-8")); + } catch(e) { + return callback(e); + } + callback(null, data); + }); + }.bind(this); + } else { + this.readJson = null; + } + if(this.fileSystem.readJsonSync) { + this._readJsonSync = this.fileSystem.readJsonSync.bind(this.fileSystem); + } else if(this.readFileSync) { + this._readJsonSync = function(path) { + var buffer = this.readFileSync(path); + var data = JSON.parse(buffer.toString("utf-8")); + return data; + }.bind(this); + } else { + this.readJsonSync = null; + } + + this._readlink = this.fileSystem.readlink ? this.fileSystem.readlink.bind(this.fileSystem) : null; + if(!this._readlink) this.readlink = null; + + this._readlinkSync = this.fileSystem.readlinkSync ? this.fileSystem.readlinkSync.bind(this.fileSystem) : null; + if(!this._readlinkSync) this.readlinkSync = null; +} +module.exports = CachedInputFileSystem; + +CachedInputFileSystem.prototype.stat = function(path, callback) { + this._statStorage.provide(path, this._stat, callback); +}; + +CachedInputFileSystem.prototype.readdir = function(path, callback) { + this._readdirStorage.provide(path, this._readdir, callback); +}; + +CachedInputFileSystem.prototype.readFile = function(path, callback) { + this._readFileStorage.provide(path, this._readFile, callback); +}; + +CachedInputFileSystem.prototype.readJson = function(path, callback) { + this._readJsonStorage.provide(path, this._readJson, callback); +}; + +CachedInputFileSystem.prototype.readlink = function(path, callback) { + this._readlinkStorage.provide(path, this._readlink, callback); +}; + +CachedInputFileSystem.prototype.statSync = function(path) { + return this._statStorage.provideSync(path, this._statSync); +}; + +CachedInputFileSystem.prototype.readdirSync = function(path) { + return this._readdirStorage.provideSync(path, this._readdirSync); +}; + +CachedInputFileSystem.prototype.readFileSync = function(path) { + return this._readFileStorage.provideSync(path, this._readFileSync); +}; + +CachedInputFileSystem.prototype.readJsonSync = function(path) { + return this._readJsonStorage.provideSync(path, this._readJsonSync); +}; + +CachedInputFileSystem.prototype.readlinkSync = function(path) { + return this._readlinkStorage.provideSync(path, this._readlinkSync); +}; + +CachedInputFileSystem.prototype.purge = function(what) { + this._statStorage.purge(what); + this._readdirStorage.purge(what); + this._readFileStorage.purge(what); + this._readlinkStorage.purge(what); + this._readJsonStorage.purge(what); +}; diff --git a/node_modules/enhanced-resolve/lib/CloneBasenamePlugin.js b/node_modules/enhanced-resolve/lib/CloneBasenamePlugin.js new file mode 100644 index 000000000..d6a76dbe4 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/CloneBasenamePlugin.js @@ -0,0 +1,24 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var basename = require("./getPaths").basename; + +function CloneBasenamePlugin(source, target) { + this.source = source; + this.target = target; +} +module.exports = CloneBasenamePlugin; + +CloneBasenamePlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var filename = basename(request.path); + var filePath = resolver.join(request.path, filename); + var obj = Object.assign({}, request, { + path: filePath, + relativePath: request.relativePath && resolver.join(request.relativePath, filename) + }); + resolver.doResolve(target, obj, "using path: " + filePath, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/ConcordExtensionsPlugin.js b/node_modules/enhanced-resolve/lib/ConcordExtensionsPlugin.js new file mode 100644 index 000000000..91b336839 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ConcordExtensionsPlugin.js @@ -0,0 +1,37 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var concord = require("./concord"); +var DescriptionFileUtils = require("./DescriptionFileUtils"); +var forEachBail = require("./forEachBail"); +var createInnerCallback = require("./createInnerCallback"); + +function ConcordExtensionsPlugin(source, options, target) { + this.source = source; + this.options = options; + this.target = target; +} +module.exports = ConcordExtensionsPlugin; + +ConcordExtensionsPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var concordField = DescriptionFileUtils.getField(request.descriptionFileData, "concord"); + if(!concordField) return callback(); + var extensions = concord.getExtensions(request.context, concordField); + if(!extensions) return callback(); + var topLevelCallback = callback; + forEachBail(extensions, function(appending, callback) { + var obj = Object.assign({}, request, { + path: request.path + appending, + relativePath: request.relativePath && (request.relativePath + appending) + }); + resolver.doResolve(target, obj, "concord extension: " + appending, createInnerCallback(callback, topLevelCallback)); + }, function(err, result) { + if(arguments.length > 0) return callback(err, result); + + callback(null, null); + }); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/ConcordMainPlugin.js b/node_modules/enhanced-resolve/lib/ConcordMainPlugin.js new file mode 100644 index 000000000..a4b5bd510 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ConcordMainPlugin.js @@ -0,0 +1,30 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var path = require("path"); +var concord = require("./concord"); +var DescriptionFileUtils = require("./DescriptionFileUtils"); + +function ConcordMainPlugin(source, options, target) { + this.source = source; + this.options = options; + this.target = target; +} +module.exports = ConcordMainPlugin; + +ConcordMainPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + if(request.path !== request.descriptionFileRoot) return callback(); + var concordField = DescriptionFileUtils.getField(request.descriptionFileData, "concord"); + if(!concordField) return callback(); + var mainModule = concord.getMain(request.context, concordField); + if(!mainModule) return callback(); + var obj = Object.assign({}, request, { + request: mainModule + }); + var filename = path.basename(request.descriptionFilePath); + return resolver.doResolve(target, obj, "use " + mainModule + " from " + filename, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/ConcordModulesPlugin.js b/node_modules/enhanced-resolve/lib/ConcordModulesPlugin.js new file mode 100644 index 000000000..bd5348f9d --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ConcordModulesPlugin.js @@ -0,0 +1,44 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var concord = require("./concord"); +var DescriptionFileUtils = require("./DescriptionFileUtils"); +var createInnerCallback = require("./createInnerCallback"); +var getInnerRequest = require("./getInnerRequest"); + +function ConcordModulesPlugin(source, options, target) { + this.source = source; + this.options = options; + this.target = target; +} +module.exports = ConcordModulesPlugin; + +ConcordModulesPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var innerRequest = getInnerRequest(resolver, request); + if(!innerRequest) return callback(); + var concordField = DescriptionFileUtils.getField(request.descriptionFileData, "concord"); + if(!concordField) return callback(); + var data = concord.matchModule(request.context, concordField, innerRequest); + if(data === innerRequest) return callback(); + if(data === undefined) return callback(); + if(data === false) { + var ignoreObj = Object.assign({}, request, { + path: false + }); + return callback(null, ignoreObj); + } + var obj = Object.assign({}, request, { + path: request.descriptionFileRoot, + request: data + }); + resolver.doResolve(target, obj, "aliased from description file " + request.descriptionFilePath + " with mapping '" + innerRequest + "' to '" + data + "'", createInnerCallback(function(err, result) { + if(arguments.length > 0) return callback(err, result); + + // Don't allow other aliasing or raw request + callback(null, null); + }, callback)); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js b/node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js new file mode 100644 index 000000000..e6ff80fa3 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js @@ -0,0 +1,51 @@ +"use strict"; +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +const createInnerCallback = require("./createInnerCallback"); +const DescriptionFileUtils = require("./DescriptionFileUtils"); + +class DescriptionFilePlugin { + constructor(source, filenames, target) { + this.source = source; + this.filenames = [].concat(filenames); + this.target = target; + } + + apply(resolver) { + const filenames = this.filenames; + const target = this.target; + resolver.plugin(this.source, (request, callback) => { + const directory = request.path; + DescriptionFileUtils.loadDescriptionFile(resolver, directory, filenames, ((err, result) => { + if(err) return callback(err); + if(!result) { + if(callback.missing) { + filenames.forEach((filename) => { + callback.missing.push(resolver.join(directory, filename)); + }); + } + if(callback.log) callback.log("No description file found"); + return callback(); + } + const relativePath = "." + request.path.substr(result.directory.length).replace(/\\/g, "/"); + const obj = Object.assign({}, request, { + descriptionFilePath: result.path, + descriptionFileData: result.content, + descriptionFileRoot: result.directory, + relativePath: relativePath + }); + resolver.doResolve(target, obj, "using description file: " + result.path + " (relative path: " + relativePath + ")", createInnerCallback((err, result) => { + if(err) return callback(err); + if(result) return callback(null, result); + + // Don't allow other description files or none at all + callback(null, null); + }, callback)); + })); + }); + } +} + +module.exports = DescriptionFilePlugin; diff --git a/node_modules/enhanced-resolve/lib/DescriptionFileUtils.js b/node_modules/enhanced-resolve/lib/DescriptionFileUtils.js new file mode 100644 index 000000000..1ee54e26a --- /dev/null +++ b/node_modules/enhanced-resolve/lib/DescriptionFileUtils.js @@ -0,0 +1,93 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var forEachBail = require("./forEachBail"); + +function loadDescriptionFile(resolver, directory, filenames, callback) { + (function findDescriptionFile() { + forEachBail(filenames, function(filename, callback) { + var descriptionFilePath = resolver.join(directory, filename); + if(resolver.fileSystem.readJson) { + resolver.fileSystem.readJson(descriptionFilePath, function(err, content) { + if(err) { + if(typeof err.code !== "undefined") return callback(); + return onJson(err); + } + onJson(null, content); + }); + } else { + resolver.fileSystem.readFile(descriptionFilePath, function(err, content) { + if(err) return callback(); + try { + var json = JSON.parse(content); + } catch(e) { + onJson(e); + } + onJson(null, json); + }); + } + + function onJson(err, content) { + if(err) { + if(callback.log) + callback.log(descriptionFilePath + " (directory description file): " + err); + else + err.message = descriptionFilePath + " (directory description file): " + err; + return callback(err); + } + callback(null, { + content: content, + directory: directory, + path: descriptionFilePath + }); + } + }, function(err, result) { + if(err) return callback(err); + if(result) { + return callback(null, result); + } else { + directory = cdUp(directory); + if(!directory) { + return callback(); + } else { + return findDescriptionFile(); + } + } + }); + }()); +} + +function getField(content, field) { + if(!content) return undefined; + if(Array.isArray(field)) { + var current = content; + for(var j = 0; j < field.length; j++) { + if(current === null || typeof current !== "object") { + current = null; + break; + } + current = current[field[j]]; + } + if(typeof current === "object") { + return current; + } + } else { + if(typeof content[field] === "object") { + return content[field]; + } + } +} + +function cdUp(directory) { + if(directory === "/") return null; + var i = directory.lastIndexOf("/"), + j = directory.lastIndexOf("\\"); + var p = i < 0 ? j : j < 0 ? i : i < j ? j : i; + if(p < 0) return null; + return directory.substr(0, p || 1); +} + +exports.loadDescriptionFile = loadDescriptionFile; +exports.getField = getField; +exports.cdUp = cdUp; diff --git a/node_modules/enhanced-resolve/lib/DirectoryExistsPlugin.js b/node_modules/enhanced-resolve/lib/DirectoryExistsPlugin.js new file mode 100644 index 000000000..cc1441c41 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/DirectoryExistsPlugin.js @@ -0,0 +1,30 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function DirectoryExistsPlugin(source, target) { + this.source = source; + this.target = target; +} +module.exports = DirectoryExistsPlugin; + +DirectoryExistsPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var fs = this.fileSystem; + var directory = request.path; + fs.stat(directory, function(err, stat) { + if(err || !stat) { + if(callback.missing) callback.missing.push(directory); + if(callback.log) callback.log(directory + " doesn't exist"); + return callback(); + } + if(!stat.isDirectory()) { + if(callback.missing) callback.missing.push(directory); + if(callback.log) callback.log(directory + " is not a directory"); + return callback(); + } + this.doResolve(target, request, "existing directory", callback); + }.bind(this)); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/FileExistsPlugin.js b/node_modules/enhanced-resolve/lib/FileExistsPlugin.js new file mode 100644 index 000000000..ed1af5afd --- /dev/null +++ b/node_modules/enhanced-resolve/lib/FileExistsPlugin.js @@ -0,0 +1,30 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function FileExistsPlugin(source, target) { + this.source = source; + this.target = target; +} +module.exports = FileExistsPlugin; + +FileExistsPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var fs = this.fileSystem; + var file = request.path; + fs.stat(file, function(err, stat) { + if(err || !stat) { + if(callback.missing) callback.missing.push(file); + if(callback.log) callback.log(file + " doesn't exist"); + return callback(); + } + if(!stat.isFile()) { + if(callback.missing) callback.missing.push(file); + if(callback.log) callback.log(file + " is not a file"); + return callback(); + } + this.doResolve(target, request, "existing file: " + file, callback, true); + }.bind(this)); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/FileKindPlugin.js b/node_modules/enhanced-resolve/lib/FileKindPlugin.js new file mode 100644 index 000000000..d4df37b18 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/FileKindPlugin.js @@ -0,0 +1,19 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function FileKindPlugin(source, target) { + this.source = source; + this.target = target; +} +module.exports = FileKindPlugin; + +FileKindPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + if(request.directory) return callback(); + var obj = Object.assign({}, request); + delete obj.directory; + resolver.doResolve(target, obj, null, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/JoinRequestPlugin.js b/node_modules/enhanced-resolve/lib/JoinRequestPlugin.js new file mode 100644 index 000000000..b62b09150 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/JoinRequestPlugin.js @@ -0,0 +1,21 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function JoinRequestPlugin(source, target) { + this.source = source; + this.target = target; +} +module.exports = JoinRequestPlugin; + +JoinRequestPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var obj = Object.assign({}, request, { + path: resolver.join(request.path, request.request), + relativePath: request.relativePath && resolver.join(request.relativePath, request.request), + request: undefined + }); + resolver.doResolve(target, obj, null, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/LogInfoPlugin.js b/node_modules/enhanced-resolve/lib/LogInfoPlugin.js new file mode 100644 index 000000000..82db1fec9 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/LogInfoPlugin.js @@ -0,0 +1,25 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function LogInfoPlugin(source) { + this.source = source; +} +module.exports = LogInfoPlugin; + +LogInfoPlugin.prototype.apply = function(resolver) { + var source = this.source; + resolver.plugin(this.source, function(request, callback) { + if(!callback.log) return callback(); + var log = callback.log; + var prefix = "[" + source + "] "; + if(request.path) log(prefix + "Resolving in directory: " + request.path); + if(request.request) log(prefix + "Resolving request: " + request.request); + if(request.module) log(prefix + "Request is an module request."); + if(request.directory) log(prefix + "Request is a directory request."); + if(request.query) log(prefix + "Resolving request query: " + request.query); + if(request.descriptionFilePath) log(prefix + "Has description data from " + request.descriptionFilePath); + if(request.relativePath) log(prefix + "Relative path from description file is: " + request.relativePath); + callback(); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/MainFieldPlugin.js b/node_modules/enhanced-resolve/lib/MainFieldPlugin.js new file mode 100644 index 000000000..50dc0c8d1 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/MainFieldPlugin.js @@ -0,0 +1,48 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var path = require("path"); + +function MainFieldPlugin(source, options, target) { + this.source = source; + this.options = options; + this.target = target; +} +module.exports = MainFieldPlugin; + +MainFieldPlugin.prototype.apply = function(resolver) { + var target = this.target; + var options = this.options; + resolver.plugin(this.source, function mainField(request, callback) { + if(request.path !== request.descriptionFileRoot) return callback(); + var content = request.descriptionFileData; + var filename = path.basename(request.descriptionFilePath); + var mainModule; + var field = options.name; + if(Array.isArray(field)) { + var current = content; + for(var j = 0; j < field.length; j++) { + if(current === null || typeof current !== "object") { + current = null; + break; + } + current = current[field[j]]; + } + if(typeof current === "string") { + mainModule = current; + } + } else { + if(typeof content[field] === "string") { + mainModule = content[field]; + } + } + if(!mainModule) return callback(); + if(options.forceRelative && !/^\.\.?\//.test(mainModule)) + mainModule = "./" + mainModule; + var obj = Object.assign({}, request, { + request: mainModule + }); + return resolver.doResolve(target, obj, "use " + mainModule + " from " + options.name + " in " + filename, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/ModuleAppendPlugin.js b/node_modules/enhanced-resolve/lib/ModuleAppendPlugin.js new file mode 100644 index 000000000..ea176f295 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ModuleAppendPlugin.js @@ -0,0 +1,35 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function ModuleAppendPlugin(source, appending, target) { + this.source = source; + this.appending = appending; + this.target = target; +} +module.exports = ModuleAppendPlugin; + +ModuleAppendPlugin.prototype.apply = function(resolver) { + var appending = this.appending; + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var i = request.request.indexOf("/"), + j = request.request.indexOf("\\"); + var p = i < 0 ? j : j < 0 ? i : i < j ? i : j; + var moduleName, remainingRequest; + if(p < 0) { + moduleName = request.request; + remainingRequest = ""; + } else { + moduleName = request.request.substr(0, p); + remainingRequest = request.request.substr(p); + } + if(moduleName === "." || moduleName === "..") + return callback(); + var moduleFinalName = moduleName + appending; + var obj = Object.assign({}, request, { + request: moduleFinalName + remainingRequest + }); + resolver.doResolve(target, obj, "module variation " + moduleFinalName, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/ModuleKindPlugin.js b/node_modules/enhanced-resolve/lib/ModuleKindPlugin.js new file mode 100644 index 000000000..73cd492e9 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ModuleKindPlugin.js @@ -0,0 +1,26 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var createInnerCallback = require("./createInnerCallback"); + +function ModuleKindPlugin(source, target) { + this.source = source; + this.target = target; +} +module.exports = ModuleKindPlugin; + +ModuleKindPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + if(!request.module) return callback(); + var obj = Object.assign({}, request); + delete obj.module; + resolver.doResolve(target, obj, "resolve as module", createInnerCallback(function(err, result) { + if(arguments.length > 0) return callback(err, result); + + // Don't allow other alternatives + callback(null, null); + }, callback)); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/ModulesInHierachicDirectoriesPlugin.js b/node_modules/enhanced-resolve/lib/ModulesInHierachicDirectoriesPlugin.js new file mode 100644 index 000000000..2f192f223 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ModulesInHierachicDirectoriesPlugin.js @@ -0,0 +1,46 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var createInnerCallback = require("./createInnerCallback"); +var forEachBail = require("./forEachBail"); +var getPaths = require("./getPaths"); + +function ModulesInHierachicDirectoriesPlugin(source, directories, target) { + this.source = source; + this.directories = [].concat(directories); + this.target = target; +} +module.exports = ModulesInHierachicDirectoriesPlugin; + +ModulesInHierachicDirectoriesPlugin.prototype.apply = function(resolver) { + var directories = this.directories; + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var fs = this.fileSystem; + var topLevelCallback = callback; + var addrs = getPaths(request.path).paths.map(function(p) { + return directories.map(function(d) { + return this.join(p, d); + }, this); + }, this).reduce(function(array, p) { + array.push.apply(array, p); + return array; + }, []); + forEachBail(addrs, function(addr, callback) { + fs.stat(addr, function(err, stat) { + if(!err && stat && stat.isDirectory()) { + var obj = Object.assign({}, request, { + path: addr, + request: "./" + request.request + }); + var message = "looking for modules in " + addr; + return resolver.doResolve(target, obj, message, createInnerCallback(callback, topLevelCallback)); + } + if(topLevelCallback.log) topLevelCallback.log(addr + " doesn't exist or is not a directory"); + if(topLevelCallback.missing) topLevelCallback.missing.push(addr); + return callback(); + }); + }, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/ModulesInRootPlugin.js b/node_modules/enhanced-resolve/lib/ModulesInRootPlugin.js new file mode 100644 index 000000000..089c9dbcd --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ModulesInRootPlugin.js @@ -0,0 +1,22 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function ModulesInRootPlugin(source, path, target) { + this.source = source; + this.path = path; + this.target = target; +} +module.exports = ModulesInRootPlugin; + +ModulesInRootPlugin.prototype.apply = function(resolver) { + var target = this.target; + var path = this.path; + resolver.plugin(this.source, function(request, callback) { + var obj = Object.assign({}, request, { + path: path, + request: "./" + request.request + }); + resolver.doResolve(target, obj, "looking for modules in " + path, callback, true); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/NextPlugin.js b/node_modules/enhanced-resolve/lib/NextPlugin.js new file mode 100644 index 000000000..495815e44 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/NextPlugin.js @@ -0,0 +1,16 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function NextPlugin(source, target) { + this.source = source; + this.target = target; +} +module.exports = NextPlugin; + +NextPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + resolver.doResolve(target, request, null, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/NodeJsInputFileSystem.js b/node_modules/enhanced-resolve/lib/NodeJsInputFileSystem.js new file mode 100644 index 000000000..87770481c --- /dev/null +++ b/node_modules/enhanced-resolve/lib/NodeJsInputFileSystem.js @@ -0,0 +1,29 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var fs = require("graceful-fs"); + +function NodeJsInputFileSystem() {} +module.exports = NodeJsInputFileSystem; + +NodeJsInputFileSystem.prototype.stat = fs.stat.bind(fs); +NodeJsInputFileSystem.prototype.readdir = function readdir(path, callback) { + fs.readdir(path, function(err, files) { + callback(err, files && files.map(function(file) { + return file.normalize ? file.normalize("NFC") : file; + })); + }); +}; +NodeJsInputFileSystem.prototype.readFile = fs.readFile.bind(fs); +NodeJsInputFileSystem.prototype.readlink = fs.readlink.bind(fs); + +NodeJsInputFileSystem.prototype.statSync = fs.statSync.bind(fs); +NodeJsInputFileSystem.prototype.readdirSync = function readdirSync(path) { + var files = fs.readdirSync(path); + return files && files.map(function(file) { + return file.normalize ? file.normalize("NFC") : file; + }); +}; +NodeJsInputFileSystem.prototype.readFileSync = fs.readFileSync.bind(fs); +NodeJsInputFileSystem.prototype.readlinkSync = fs.readlinkSync.bind(fs); diff --git a/node_modules/enhanced-resolve/lib/ParsePlugin.js b/node_modules/enhanced-resolve/lib/ParsePlugin.js new file mode 100644 index 000000000..ad8b5bdfb --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ParsePlugin.js @@ -0,0 +1,27 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function ParsePlugin(source, target) { + this.source = source; + this.target = target; +} +module.exports = ParsePlugin; + +ParsePlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var parsed = resolver.parse(request.request); + var obj = Object.assign({}, request, parsed); + if(request.query && !parsed.query) { + obj.query = request.query; + } + if(parsed && callback.log) { + if(parsed.module) + callback.log("Parsed request is a module"); + if(parsed.directory) + callback.log("Parsed request is a directory"); + } + resolver.doResolve(target, obj, null, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/Resolver.js b/node_modules/enhanced-resolve/lib/Resolver.js new file mode 100644 index 000000000..837431766 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/Resolver.js @@ -0,0 +1,227 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var Tapable = require("tapable"); +var createInnerCallback = require("./createInnerCallback"); + +function Resolver(fileSystem) { + Tapable.call(this); + this.fileSystem = fileSystem; +} +module.exports = Resolver; + +Resolver.prototype = Object.create(Tapable.prototype); + +Resolver.prototype.constructor = Resolver; + +Resolver.prototype.resolveSync = function resolveSync(context, path, request) { + var err, result, sync = false; + this.resolve(context, path, request, function(e, r) { + err = e; + result = r; + sync = true; + }); + if(!sync) throw new Error("Cannot 'resolveSync' because the fileSystem is not sync. Use 'resolve'!"); + if(err) throw err; + return result; +}; + +Resolver.prototype.resolve = function resolve(context, path, request, callback) { + if(arguments.length === 3) { + throw new Error("Signature changed: context parameter added"); + } + var resolver = this; + var obj = { + context: context, + path: path, + request: request + }; + + var localMissing; + var log; + var message = "resolve '" + request + "' in '" + path + "'"; + + function writeLog(msg) { + log.push(msg); + } + + function logAsString() { + return log.join("\n"); + } + + function onError(err, result) { + if(callback.log) { + for(var i = 0; i < log.length; i++) + callback.log(log[i]); + } + + if(err) return callback(err); + + var error = new Error("Can't " + message); + error.details = logAsString(); + error.missing = localMissing; + resolver.applyPlugins("no-resolve", obj, error); + return callback(error); + } + + function onResolve(err, result) { + if(!err && result) { + return callback(null, result.path === false ? false : result.path + (result.query || ""), result); + } + + localMissing = []; + log = []; + + return resolver.doResolve("resolve", obj, message, createInnerCallback(onError, { + log: writeLog, + missing: localMissing, + stack: callback.stack + })); + } + + onResolve.missing = callback.missing; + onResolve.stack = callback.stack; + + return this.doResolve("resolve", obj, message, onResolve); +}; + +Resolver.prototype.doResolve = function doResolve(type, request, message, callback) { + var resolver = this; + var stackLine = type + ": (" + request.path + ") " + + (request.request || "") + (request.query || "") + + (request.directory ? " directory" : "") + + (request.module ? " module" : ""); + var newStack = [stackLine]; + if(callback.stack) { + newStack = callback.stack.concat(newStack); + if(callback.stack.indexOf(stackLine) >= 0) { + // Prevent recursion + var recursionError = new Error("Recursion in resolving\nStack:\n " + newStack.join("\n ")); + recursionError.recursion = true; + if(callback.log) callback.log("abort resolving because of recursion"); + return callback(recursionError); + } + } + resolver.applyPlugins("resolve-step", type, request); + + var beforePluginName = "before-" + type; + if(resolver.hasPlugins(beforePluginName)) { + resolver.applyPluginsAsyncSeriesBailResult1(beforePluginName, request, createInnerCallback(beforeInnerCallback, { + log: callback.log, + missing: callback.missing, + stack: newStack + }, message && ("before " + message), true)); + } else { + runNormal(); + } + + function beforeInnerCallback(err, result) { + if(arguments.length > 0) { + if(err) return callback(err); + if(result) return callback(null, result); + return callback(); + } + runNormal(); + } + + function runNormal() { + if(resolver.hasPlugins(type)) { + return resolver.applyPluginsAsyncSeriesBailResult1(type, request, createInnerCallback(innerCallback, { + log: callback.log, + missing: callback.missing, + stack: newStack + }, message)); + } else { + runAfter(); + } + } + + function innerCallback(err, result) { + if(arguments.length > 0) { + if(err) return callback(err); + if(result) return callback(null, result); + return callback(); + } + runAfter(); + } + + function runAfter() { + var afterPluginName = "after-" + type; + if(resolver.hasPlugins(afterPluginName)) { + return resolver.applyPluginsAsyncSeriesBailResult1(afterPluginName, request, createInnerCallback(afterInnerCallback, { + log: callback.log, + missing: callback.missing, + stack: newStack + }, message && ("after " + message), true)); + } else { + callback(); + } + } + + function afterInnerCallback(err, result) { + if(arguments.length > 0) { + if(err) return callback(err); + if(result) return callback(null, result); + return callback(); + } + return callback(); + } +}; + +Resolver.prototype.parse = function parse(identifier) { + if(identifier === "") return null; + var part = { + request: "", + query: "", + module: false, + directory: false, + file: false + }; + var idxQuery = identifier.indexOf("?"); + if(idxQuery === 0) { + part.query = identifier; + } else if(idxQuery > 0) { + part.request = identifier.slice(0, idxQuery); + part.query = identifier.slice(idxQuery); + } else { + part.request = identifier; + } + if(part.request) { + part.module = this.isModule(part.request); + part.directory = this.isDirectory(part.request); + if(part.directory) { + part.request = part.request.substr(0, part.request.length - 1); + } + } + return part; +}; + +var notModuleRegExp = /^\.$|^\.[\\\/]|^\.\.$|^\.\.[\/\\]|^\/|^[A-Z]:[\\\/]/i; +Resolver.prototype.isModule = function isModule(path) { + return !notModuleRegExp.test(path); +}; + +var directoryRegExp = /[\/\\]$/i; +Resolver.prototype.isDirectory = function isDirectory(path) { + return directoryRegExp.test(path); +}; + +var memoryFsJoin = require("memory-fs/lib/join"); +var memoizedJoin = new Map(); +Resolver.prototype.join = function(path, request) { + var cacheEntry; + var pathCache = memoizedJoin.get(path); + if(typeof pathCache === "undefined") { + memoizedJoin.set(path, pathCache = new Map()); + } else { + cacheEntry = pathCache.get(request); + if(typeof cacheEntry !== "undefined") + return cacheEntry; + } + cacheEntry = memoryFsJoin(path, request); + pathCache.set(request, cacheEntry); + return cacheEntry; +}; + +Resolver.prototype.normalize = require("memory-fs/lib/normalize"); diff --git a/node_modules/enhanced-resolve/lib/ResolverFactory.js b/node_modules/enhanced-resolve/lib/ResolverFactory.js new file mode 100644 index 000000000..be1271723 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ResolverFactory.js @@ -0,0 +1,273 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var Resolver = require("./Resolver"); + +var SyncAsyncFileSystemDecorator = require("./SyncAsyncFileSystemDecorator"); + +var ParsePlugin = require("./ParsePlugin"); +var DescriptionFilePlugin = require("./DescriptionFilePlugin"); +var NextPlugin = require("./NextPlugin"); +var TryNextPlugin = require("./TryNextPlugin"); +var ModuleKindPlugin = require("./ModuleKindPlugin"); +var FileKindPlugin = require("./FileKindPlugin"); +var JoinRequestPlugin = require("./JoinRequestPlugin"); +var ModulesInHierachicDirectoriesPlugin = require("./ModulesInHierachicDirectoriesPlugin"); +var ModulesInRootPlugin = require("./ModulesInRootPlugin"); +var AliasPlugin = require("./AliasPlugin"); +var AliasFieldPlugin = require("./AliasFieldPlugin"); +var ConcordExtensionsPlugin = require("./ConcordExtensionsPlugin"); +var ConcordMainPlugin = require("./ConcordMainPlugin"); +var ConcordModulesPlugin = require("./ConcordModulesPlugin"); +var DirectoryExistsPlugin = require("./DirectoryExistsPlugin"); +var FileExistsPlugin = require("./FileExistsPlugin"); +var SymlinkPlugin = require("./SymlinkPlugin"); +var MainFieldPlugin = require("./MainFieldPlugin"); +var UseFilePlugin = require("./UseFilePlugin"); +var AppendPlugin = require("./AppendPlugin"); +var ResultPlugin = require("./ResultPlugin"); +var ModuleAppendPlugin = require("./ModuleAppendPlugin"); +var UnsafeCachePlugin = require("./UnsafeCachePlugin"); + +exports.createResolver = function(options) { + + //// OPTIONS //// + + // A list of directories to resolve modules from, can be absolute path or folder name + var modules = options.modules || ["node_modules"]; + + // A list of description files to read from + var descriptionFiles = options.descriptionFiles || ["package.json"]; + + // A list of additional resolve plugins which should be applied + // The slice is there to create a copy, because otherwise pushing into plugins + // changes the original options.plugins array, causing duplicate plugins + var plugins = (options.plugins && options.plugins.slice()) || []; + + // A list of main fields in description files + var mainFields = options.mainFields || ["main"]; + + // A list of alias fields in description files + var aliasFields = options.aliasFields || []; + + // A list of main files in directories + var mainFiles = options.mainFiles || ["index"]; + + // A list of extensions which should be tried for files + var extensions = options.extensions || [".js", ".json", ".node"]; + + // Enforce that a extension from extensions must be used + var enforceExtension = options.enforceExtension || false; + + // A list of module extensions which should be tried for modules + var moduleExtensions = options.moduleExtensions || []; + + // Enforce that a extension from moduleExtensions must be used + var enforceModuleExtension = options.enforceModuleExtension || false; + + // A list of module alias configurations or an object which maps key to value + var alias = options.alias || []; + + // Resolve symlinks to their symlinked location + var symlinks = typeof options.symlinks !== "undefined" ? options.symlinks : true; + + // Resolve to a context instead of a file + var resolveToContext = options.resolveToContext || false; + + // Use this cache object to unsafely cache the successful requests + var unsafeCache = options.unsafeCache || false; + + // Whether or not the unsafeCache should include request context as part of the cache key. + var cacheWithContext = typeof options.cacheWithContext !== "undefined" ? options.cacheWithContext : true; + + // A function which decides whether a request should be cached or not. + // an object is passed with `path` and `request` properties. + var cachePredicate = options.cachePredicate || function() { + return true; + }; + + // The file system which should be used + var fileSystem = options.fileSystem; + + // Use only the sync variants of the file system calls + var useSyncFileSystemCalls = options.useSyncFileSystemCalls; + + // A prepared Resolver to which the plugins are attached + var resolver = options.resolver; + + //// options processing //// + + if(!resolver) { + resolver = new Resolver(useSyncFileSystemCalls ? new SyncAsyncFileSystemDecorator(fileSystem) : fileSystem); + } + + extensions = [].concat(extensions); + moduleExtensions = [].concat(moduleExtensions); + + modules = mergeFilteredToArray([].concat(modules), function(item) { + return !isAbsolutePath(item); + }); + + mainFields = mainFields.map(function(item) { + if(typeof item === "string") { + item = { + name: item, + forceRelative: true + }; + } + return item; + }); + + if(typeof alias === "object" && !Array.isArray(alias)) { + alias = Object.keys(alias).map(function(key) { + var onlyModule = false; + var obj = alias[key]; + if(/\$$/.test(key)) { + onlyModule = true; + key = key.substr(0, key.length - 1); + } + if(typeof obj === "string") { + obj = { + alias: obj + }; + } + obj = Object.assign({ + name: key, + onlyModule: onlyModule + }, obj); + return obj; + }); + } + + if(unsafeCache && typeof unsafeCache !== "object") { + unsafeCache = {}; + } + + //// pipeline //// + + // resolve + if(unsafeCache) { + plugins.push(new UnsafeCachePlugin("resolve", cachePredicate, unsafeCache, cacheWithContext, "new-resolve")); + plugins.push(new ParsePlugin("new-resolve", "parsed-resolve")); + } else { + plugins.push(new ParsePlugin("resolve", "parsed-resolve")); + } + + // parsed-resolve + plugins.push(new DescriptionFilePlugin("parsed-resolve", descriptionFiles, "described-resolve")); + plugins.push(new NextPlugin("after-parsed-resolve", "described-resolve")); + + // described-resolve + alias.forEach(function(item) { + plugins.push(new AliasPlugin("described-resolve", item, "resolve")); + }); + plugins.push(new ConcordModulesPlugin("described-resolve", {}, "resolve")); + aliasFields.forEach(function(item) { + plugins.push(new AliasFieldPlugin("described-resolve", item, "resolve")); + }); + plugins.push(new ModuleKindPlugin("after-described-resolve", "raw-module")); + plugins.push(new JoinRequestPlugin("after-described-resolve", "relative")); + + // raw-module + moduleExtensions.forEach(function(item) { + plugins.push(new ModuleAppendPlugin("raw-module", item, "module")); + }); + if(!enforceModuleExtension) + plugins.push(new TryNextPlugin("raw-module", null, "module")); + + // module + modules.forEach(function(item) { + if(Array.isArray(item)) + plugins.push(new ModulesInHierachicDirectoriesPlugin("module", item, "resolve")); + else + plugins.push(new ModulesInRootPlugin("module", item, "resolve")); + }); + + // relative + plugins.push(new DescriptionFilePlugin("relative", descriptionFiles, "described-relative")); + plugins.push(new NextPlugin("after-relative", "described-relative")); + + // described-relative + plugins.push(new FileKindPlugin("described-relative", "raw-file")); + plugins.push(new TryNextPlugin("described-relative", "as directory", "directory")); + + // directory + plugins.push(new DirectoryExistsPlugin("directory", "existing-directory")); + + if(resolveToContext) { + + // existing-directory + plugins.push(new NextPlugin("existing-directory", "resolved")); + + } else { + + // existing-directory + plugins.push(new ConcordMainPlugin("existing-directory", {}, "resolve")); + mainFields.forEach(function(item) { + plugins.push(new MainFieldPlugin("existing-directory", item, "resolve")); + }); + mainFiles.forEach(function(item) { + plugins.push(new UseFilePlugin("existing-directory", item, "undescribed-raw-file")); + }); + + // undescribed-raw-file + plugins.push(new DescriptionFilePlugin("undescribed-raw-file", descriptionFiles, "raw-file")); + plugins.push(new NextPlugin("after-undescribed-raw-file", "raw-file")); + + // raw-file + if(!enforceExtension) + plugins.push(new TryNextPlugin("raw-file", "no extension", "file")); + plugins.push(new ConcordExtensionsPlugin("raw-file", {}, "file")); + extensions.forEach(function(item) { + plugins.push(new AppendPlugin("raw-file", item, "file")); + }); + + // file + alias.forEach(function(item) { + plugins.push(new AliasPlugin("file", item, "resolve")); + }); + plugins.push(new ConcordModulesPlugin("file", {}, "resolve")); + aliasFields.forEach(function(item) { + plugins.push(new AliasFieldPlugin("file", item, "resolve")); + }); + if(symlinks) + plugins.push(new SymlinkPlugin("file", "relative")); + plugins.push(new FileExistsPlugin("file", "existing-file")); + + // existing-file + plugins.push(new NextPlugin("existing-file", "resolved")); + + } + + // resolved + plugins.push(new ResultPlugin("resolved")); + + //// RESOLVER //// + + plugins.forEach(function(plugin) { + resolver.apply(plugin); + }); + return resolver; +}; + +function mergeFilteredToArray(array, filter) { + return array.reduce(function(array, item) { + if(filter(item)) { + var lastElement = array[array.length - 1]; + if(Array.isArray(lastElement)) { + lastElement.push(item); + } else { + array.push([item]); + } + return array; + } else { + array.push(item); + return array; + } + }, []); +} + +function isAbsolutePath(path) { + return /^[A-Z]:|^\//.test(path); +} diff --git a/node_modules/enhanced-resolve/lib/ResultPlugin.js b/node_modules/enhanced-resolve/lib/ResultPlugin.js new file mode 100644 index 000000000..6b4fd988e --- /dev/null +++ b/node_modules/enhanced-resolve/lib/ResultPlugin.js @@ -0,0 +1,18 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function ResultPlugin(source) { + this.source = source; +} +module.exports = ResultPlugin; + +ResultPlugin.prototype.apply = function(resolver) { + resolver.plugin(this.source, function(request, callback) { + var obj = Object.assign({}, request); + resolver.applyPluginsAsyncSeries1("result", obj, function(err) { + if(err) return callback(err); + callback(null, obj); + }); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/SymlinkPlugin.js b/node_modules/enhanced-resolve/lib/SymlinkPlugin.js new file mode 100644 index 000000000..cadf223a1 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/SymlinkPlugin.js @@ -0,0 +1,47 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var getPaths = require("./getPaths"); +var forEachBail = require("./forEachBail"); + +function SymlinkPlugin(source, target) { + this.source = source; + this.target = target; +} +module.exports = SymlinkPlugin; + +SymlinkPlugin.prototype.apply = function(resolver) { + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var _this = this; + var fs = _this.fileSystem; + var pathsResult = getPaths(request.path); + var pathSeqments = pathsResult.seqments; + var paths = pathsResult.paths; + + var containsSymlink = false; + forEachBail.withIndex(paths, function(path, idx, callback) { + fs.readlink(path, function(err, result) { + if(!err && result) { + pathSeqments[idx] = result; + containsSymlink = true; + // Shortcut when absolute symlink found + if(/^(\/|[a-zA-z]:($|\\))/.test(result)) + return callback(null, idx); + } + callback(); + }); + }, function(err, idx) { + if(!containsSymlink) return callback(); + var resultSeqments = typeof idx === "number" ? pathSeqments.slice(0, idx + 1) : pathSeqments.slice(); + var result = resultSeqments.reverse().reduce(function(a, b) { + return _this.join(a, b); + }); + var obj = Object.assign({}, request, { + path: result + }); + resolver.doResolve(target, obj, "resolved symlink to " + result, callback); + }); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/SyncAsyncFileSystemDecorator.js b/node_modules/enhanced-resolve/lib/SyncAsyncFileSystemDecorator.js new file mode 100644 index 000000000..d0f5869e7 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/SyncAsyncFileSystemDecorator.js @@ -0,0 +1,58 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function SyncAsyncFileSystemDecorator(fs) { + this.fs = fs; + if(fs.statSync) { + this.stat = function(arg, callback) { + try { + var result = fs.statSync(arg); + } catch(e) { + return callback(e); + } + callback(null, result); + }; + } + if(fs.readdirSync) { + this.readdir = function(arg, callback) { + try { + var result = fs.readdirSync(arg); + } catch(e) { + return callback(e); + } + callback(null, result); + }; + } + if(fs.readFileSync) { + this.readFile = function(arg, callback) { + try { + var result = fs.readFileSync(arg); + } catch(e) { + return callback(e); + } + callback(null, result); + }; + } + if(fs.readlinkSync) { + this.readlink = function(arg, callback) { + try { + var result = fs.readlinkSync(arg); + } catch(e) { + return callback(e); + } + callback(null, result); + }; + } + if(fs.readJsonSync) { + this.readJson = function(arg, callback) { + try { + var result = fs.readJsonSync(arg); + } catch(e) { + return callback(e); + } + callback(null, result); + }; + } +} +module.exports = SyncAsyncFileSystemDecorator; diff --git a/node_modules/enhanced-resolve/lib/TryNextPlugin.js b/node_modules/enhanced-resolve/lib/TryNextPlugin.js new file mode 100644 index 000000000..5f851c07a --- /dev/null +++ b/node_modules/enhanced-resolve/lib/TryNextPlugin.js @@ -0,0 +1,18 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function TryNextPlugin(source, message, target) { + this.source = source; + this.message = message; + this.target = target; +} +module.exports = TryNextPlugin; + +TryNextPlugin.prototype.apply = function(resolver) { + var target = this.target; + var message = this.message; + resolver.plugin(this.source, function(request, callback) { + resolver.doResolve(target, request, message, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js b/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js new file mode 100644 index 000000000..eb0c1c89b --- /dev/null +++ b/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js @@ -0,0 +1,43 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var createInnerCallback = require("./createInnerCallback"); + +function UnsafeCachePlugin(source, filterPredicate, cache, withContext, target) { + this.source = source; + this.filterPredicate = filterPredicate; + this.withContext = withContext; + this.cache = cache || {}; + this.target = target; +} +module.exports = UnsafeCachePlugin; + +function getCacheId(request, withContext) { + return JSON.stringify({ + context: withContext ? request.context : "", + path: request.path, + query: request.query, + request: request.request + }); +} + +UnsafeCachePlugin.prototype.apply = function(resolver) { + var filterPredicate = this.filterPredicate; + var cache = this.cache; + var target = this.target; + var withContext = this.withContext; + resolver.plugin(this.source, function(request, callback) { + if(!filterPredicate(request)) return callback(); + var cacheId = getCacheId(request, withContext); + var cacheEntry = cache[cacheId]; + if(cacheEntry) { + return callback(null, cacheEntry); + } + resolver.doResolve(target, request, null, createInnerCallback(function(err, result) { + if(err) return callback(err); + if(result) return callback(null, cache[cacheId] = result); + callback(); + }, callback)); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/UseFilePlugin.js b/node_modules/enhanced-resolve/lib/UseFilePlugin.js new file mode 100644 index 000000000..2be7f4268 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/UseFilePlugin.js @@ -0,0 +1,23 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function UseFilePlugin(source, filename, target) { + this.source = source; + this.filename = filename; + this.target = target; +} +module.exports = UseFilePlugin; + +UseFilePlugin.prototype.apply = function(resolver) { + var filename = this.filename; + var target = this.target; + resolver.plugin(this.source, function(request, callback) { + var filePath = resolver.join(request.path, filename); + var obj = Object.assign({}, request, { + path: filePath, + relativePath: request.relativePath && resolver.join(request.relativePath, filename) + }); + resolver.doResolve(target, obj, "using path: " + filePath, callback); + }); +}; diff --git a/node_modules/enhanced-resolve/lib/concord.js b/node_modules/enhanced-resolve/lib/concord.js new file mode 100644 index 000000000..d0e396772 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/concord.js @@ -0,0 +1,189 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var globToRegExp = require("./globToRegExp").globToRegExp; + +function parseType(type) { + var items = type.split("+"); + var t = items.shift(); + return { + type: t === "*" ? null : t, + features: items + }; +} + +function isTypeMatched(baseType, testedType) { + if(typeof baseType === "string") baseType = parseType(baseType); + if(typeof testedType === "string") testedType = parseType(testedType); + if(testedType.type && testedType.type !== baseType.type) return false; + return testedType.features.every(function(requiredFeature) { + return baseType.features.indexOf(requiredFeature) >= 0; + }); +} + +function isResourceTypeMatched(baseType, testedType) { + baseType = baseType.split("/"); + testedType = testedType.split("/"); + if(baseType.length !== testedType.length) return false; + for(var i = 0; i < baseType.length; i++) { + if(!isTypeMatched(baseType[i], testedType[i])) + return false; + } + return true; +} + +function isResourceTypeSupported(context, type) { + return context.supportedResourceTypes && context.supportedResourceTypes.some(function(supportedType) { + return isResourceTypeMatched(supportedType, type); + }); +} + +function isEnvironment(context, env) { + return context.environments && context.environments.every(function(environment) { + return isTypeMatched(environment, env); + }); +} + +var globCache = {}; + +function getGlobRegExp(glob) { + var regExp = globCache[glob] || (globCache[glob] = globToRegExp(glob)); + return regExp; +} + +function matchGlob(glob, relativePath) { + var regExp = getGlobRegExp(glob); + return regExp.exec(relativePath); +} + +function isGlobMatched(glob, relativePath) { + return !!matchGlob(glob, relativePath); +} + +function isConditionMatched(context, condition) { + var items = condition.split("|"); + return items.some(function testFn(item) { + item = item.trim(); + var inverted = /^!/.test(item); + if(inverted) return !testFn(item.substr(1)); + if(/^[a-z]+:/.test(item)) { + // match named condition + var match = /^([a-z]+):\s*/.exec(item); + var value = item.substr(match[0].length); + var name = match[1]; + switch(name) { + case "referrer": + return isGlobMatched(value, context.referrer); + default: + return false; + } + } else if(item.indexOf("/") >= 0) { + // match supported type + return isResourceTypeSupported(context, item); + } else { + // match environment + return isEnvironment(context, item); + } + }); +} + +function isKeyMatched(context, key) { + while(true) { //eslint-disable-line + var match = /^\[([^\]]+)\]\s*/.exec(key); + if(!match) return key; + key = key.substr(match[0].length); + var condition = match[1]; + if(!isConditionMatched(context, condition)) { + return false; + } + } +} + +function getField(context, configuration, field) { + var value; + Object.keys(configuration).forEach(function(key) { + var pureKey = isKeyMatched(context, key); + if(pureKey === field) { + value = configuration[key]; + } + }); + return value; +} + +function getMain(context, configuration) { + return getField(context, configuration, "main"); +} + +function getExtensions(context, configuration) { + return getField(context, configuration, "extensions"); +} + +function matchModule(context, configuration, request) { + var modulesField = getField(context, configuration, "modules"); + if(!modulesField) return request; + var newRequest = request; + var keys = Object.keys(modulesField); + var iteration = 0; + for(var i = 0; i < keys.length; i++) { + var key = keys[i]; + var pureKey = isKeyMatched(context, key); + var match = matchGlob(pureKey, newRequest); + if(match) { + var value = modulesField[key]; + if(typeof value !== "string") { + return value; + } else if(/^\(.+\)$/.test(pureKey)) { + newRequest = newRequest.replace(getGlobRegExp(pureKey), value); + } else { + var index = 1; + newRequest = value.replace(/(\/?\*)?\*/g, replaceMatcher); + } + i = -1; + if(iteration++ > keys.length) { + throw new Error("Request '" + request + "' matches recursively"); + } + } + } + return newRequest; + + function replaceMatcher(find) { + switch(find) { + case "/**": + var m = match[index++]; + return m ? "/" + m : ""; + case "**": + case "*": + return match[index++]; + } + } +} + +function matchType(context, configuration, relativePath) { + var typesField = getField(context, configuration, "types"); + if(!typesField) return undefined; + var type; + Object.keys(typesField).forEach(function(key) { + var pureKey = isKeyMatched(context, key); + if(isGlobMatched(pureKey, relativePath)) { + var value = typesField[key]; + if(!type && /\/\*$/.test(value)) + throw new Error("value ('" + value + "') of key '" + key + "' contains '*', but there is no previous value defined"); + type = value.replace(/\/\*$/, "/" + type); + } + }); + return type; +} + +exports.parseType = parseType; +exports.isTypeMatched = isTypeMatched; +exports.isResourceTypeSupported = isResourceTypeSupported; +exports.isEnvironment = isEnvironment; +exports.isGlobMatched = isGlobMatched; +exports.isConditionMatched = isConditionMatched; +exports.isKeyMatched = isKeyMatched; +exports.getField = getField; +exports.getMain = getMain; +exports.getExtensions = getExtensions; +exports.matchModule = matchModule; +exports.matchType = matchType; diff --git a/node_modules/enhanced-resolve/lib/createInnerCallback.js b/node_modules/enhanced-resolve/lib/createInnerCallback.js new file mode 100644 index 000000000..33eab075c --- /dev/null +++ b/node_modules/enhanced-resolve/lib/createInnerCallback.js @@ -0,0 +1,41 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function createInnerCallback(callback, options, message, messageOptional) { + var log = options.log; + if(!log) { + if(options.stack !== callback.stack) { + var callbackWrapper = function callbackWrapper() { + return callback.apply(this, arguments); + }; + callbackWrapper.stack = options.stack; + callbackWrapper.missing = options.missing; + return callbackWrapper; + } + return callback; + } + + function loggingCallbackWrapper() { + var i; + if(message) { + if(!messageOptional || theLog.length > 0) { + log(message); + for(i = 0; i < theLog.length; i++) + log(" " + theLog[i]); + } + } else { + for(i = 0; i < theLog.length; i++) + log(theLog[i]); + } + return callback.apply(this, arguments); + + } + var theLog = []; + loggingCallbackWrapper.log = function writeLog(msg) { + theLog.push(msg); + }; + loggingCallbackWrapper.stack = options.stack; + loggingCallbackWrapper.missing = options.missing; + return loggingCallbackWrapper; +}; diff --git a/node_modules/enhanced-resolve/lib/forEachBail.js b/node_modules/enhanced-resolve/lib/forEachBail.js new file mode 100644 index 000000000..8ca90dbb7 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/forEachBail.js @@ -0,0 +1,65 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function forEachBail(array, iterator, callback) { + if(array.length === 0) return callback(); + var currentPos = array.length; + var currentResult; + var done = []; + for(var i = 0; i < array.length; i++) { + var itCb = createIteratorCallback(i); + iterator(array[i], itCb); + if(currentPos === 0) break; + } + + function createIteratorCallback(i) { + return function() { + if(i >= currentPos) return; // ignore + var args = Array.prototype.slice.call(arguments); + done.push(i); + if(args.length > 0) { + currentPos = i + 1; + done = done.filter(function(item) { + return item <= i; + }); + currentResult = args; + } + if(done.length === currentPos) { + callback.apply(null, currentResult); + currentPos = 0; + } + }; + } +}; + +module.exports.withIndex = function forEachBailWithIndex(array, iterator, callback) { + if(array.length === 0) return callback(); + var currentPos = array.length; + var currentResult; + var done = []; + for(var i = 0; i < array.length; i++) { + var itCb = createIteratorCallback(i); + iterator(array[i], i, itCb); + if(currentPos === 0) break; + } + + function createIteratorCallback(i) { + return function() { + if(i >= currentPos) return; // ignore + var args = Array.prototype.slice.call(arguments); + done.push(i); + if(args.length > 0) { + currentPos = i + 1; + done = done.filter(function(item) { + return item <= i; + }); + currentResult = args; + } + if(done.length === currentPos) { + callback.apply(null, currentResult); + currentPos = 0; + } + }; + } +}; diff --git a/node_modules/enhanced-resolve/lib/getInnerRequest.js b/node_modules/enhanced-resolve/lib/getInnerRequest.js new file mode 100644 index 000000000..2dfbba117 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/getInnerRequest.js @@ -0,0 +1,22 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function getInnerRequest(resolver, request) { + if(typeof request.__innerRequest === "string" && + request.__innerRequest_request === request.request && + request.__innerRequest_relativePath === request.relativePath) + return request.__innerRequest; + var innerRequest; + if(request.request) { + innerRequest = request.request; + if(/^\.\.?\//.test(innerRequest) && request.relativePath) { + innerRequest = resolver.join(request.relativePath, innerRequest); + } + } else { + innerRequest = request.relativePath; + } + request.__innerRequest_request = request.request; + request.__innerRequest_relativePath = request.relativePath; + return request.__innerRequest = innerRequest; +}; diff --git a/node_modules/enhanced-resolve/lib/getPaths.js b/node_modules/enhanced-resolve/lib/getPaths.js new file mode 100644 index 000000000..fecc54114 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/getPaths.js @@ -0,0 +1,33 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function getPaths(path) { + var parts = path.split(/(.*?[\\\/]+)/); + var paths = [path]; + var seqments = [parts[parts.length - 1]]; + var part = parts[parts.length - 1]; + path = path.substr(0, path.length - part.length - 1); + paths.push(path); + for(var i = parts.length - 2; i > 2; i -= 2) { + part = parts[i]; + path = path.substr(0, path.length - part.length) || "/"; + paths.push(path); + seqments.push(part.substr(0, part.length - 1)); + } + part = parts[1]; + seqments.push(part.length > 1 ? part.substr(0, part.length - 1) : part); + return { + paths: paths, + seqments: seqments + }; +}; + +module.exports.basename = function basename(path) { + var i = path.lastIndexOf("/"), + j = path.lastIndexOf("\\"); + var p = i < 0 ? j : j < 0 ? i : i < j ? j : i; + if(p < 0) return null; + var s = path.substr(p + 1); + return s; +}; diff --git a/node_modules/enhanced-resolve/lib/globToRegExp.js b/node_modules/enhanced-resolve/lib/globToRegExp.js new file mode 100644 index 000000000..4390a6a90 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/globToRegExp.js @@ -0,0 +1,188 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function globToRegExp(glob) { + // * [^\\\/]* + // /**/ /.+/ + // ^* \./.+ (concord special) + // ? [^\\\/] + // [!...] [^...] + // [^...] [^...] + // / [\\\/] + // {...,...} (...|...) + // ?(...|...) (...|...)? + // +(...|...) (...|...)+ + // *(...|...) (...|...)* + // @(...|...) (...|...) + if(/^\(.+\)$/.test(glob)) { + // allow to pass an RegExp in brackets + return new RegExp(glob.substr(1, glob.length - 2)); + } + var tokens = tokenize(glob); + var process = createRoot(); + var regExpStr = tokens.map(process).join(""); + return new RegExp("^" + regExpStr + "$"); +} + +var SIMPLE_TOKENS = { + "@(": "one", + "?(": "zero-one", + "+(": "one-many", + "*(": "zero-many", + "|": "segment-sep", + "/**/": "any-path-segments", + "**": "any-path", + "*": "any-path-segment", + "?": "any-char", + "{": "or", + "/": "path-sep", + ",": "comma", + ")": "closing-segment", + "}": "closing-or" +}; + +function tokenize(glob) { + return glob.split(/([@?+*]\(|\/\*\*\/|\*\*|[?*]|\[[\!\^]?(?:[^\]\\]|\\.)+\]|\{|,|\/|[|)}])/g).map(function(item) { + if(!item) + return null; + var t = SIMPLE_TOKENS[item]; + if(t) { + return { + type: t + }; + } + if(item[0] === "[") { + if(item[1] === "^" || item[1] === "!") { + return { + type: "inverted-char-set", + value: item.substr(2, item.length - 3) + }; + } else { + return { + type: "char-set", + value: item.substr(1, item.length - 2) + }; + } + } + return { + type: "string", + value: item + }; + }).filter(Boolean).concat({ + type: "end" + }); +} + +function createRoot() { + var inOr = []; + var process = createSeqment(); + var initial = true; + return function(token) { + switch(token.type) { + case "or": + inOr.push(initial); + return "("; + case "comma": + if(inOr.length) { + initial = inOr[inOr.length - 1]; + return "|"; + } else { + return process({ + type: "string", + value: "," + }, initial); + } + case "closing-or": + if(inOr.length === 0) + throw new Error("Unmatched '}'"); + inOr.pop(); + return ")"; + case "end": + if(inOr.length) + throw new Error("Unmatched '{'"); + return process(token, initial); + default: + var result = process(token, initial); + initial = false; + return result; + } + }; +} + +function createSeqment() { + var inSeqment = []; + var process = createSimple(); + return function(token, initial) { + switch(token.type) { + case "one": + case "one-many": + case "zero-many": + case "zero-one": + inSeqment.push(token.type); + return "("; + case "segment-sep": + if(inSeqment.length) { + return "|"; + } else { + return process({ + type: "string", + value: "|" + }, initial); + } + case "closing-segment": + var segment = inSeqment.pop(); + switch(segment) { + case "one": + return ")"; + case "one-many": + return ")+"; + case "zero-many": + return ")*"; + case "zero-one": + return ")?"; + } + throw new Error("Unexcepted segment " + segment); + case "end": + if(inSeqment.length > 0) { + throw new Error("Unmatched segment, missing ')'"); + } + return process(token, initial); + default: + return process(token, initial); + } + }; +} + +function createSimple() { + return function(token, initial) { + switch(token.type) { + case "path-sep": + return "[\\\\/]+"; + case "any-path-segments": + return "[\\\\/]+(?:(.+)[\\\\/]+)?"; + case "any-path": + return "(.*)"; + case "any-path-segment": + if(initial) { + return "\\.[\\\\/]+(?:.*[\\\\/]+)?([^\\\\/]+)"; + } else { + return "([^\\\\/]*)"; + } + case "any-char": + return "[^\\\\/]"; + case "inverted-char-set": + return "[^" + token.value + "]"; + case "char-set": + return "[" + token.value + "]"; + case "string": + return token.value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + case "end": + return ""; + default: + throw new Error("Unsupported token '" + token.type + "'"); + } + }; +} + +exports.globToRegExp = globToRegExp; diff --git a/node_modules/enhanced-resolve/lib/node.js b/node_modules/enhanced-resolve/lib/node.js new file mode 100644 index 000000000..57a11ccc0 --- /dev/null +++ b/node_modules/enhanced-resolve/lib/node.js @@ -0,0 +1,144 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var ResolverFactory = require("./ResolverFactory"); + +var NodeJsInputFileSystem = require("./NodeJsInputFileSystem"); +var CachedInputFileSystem = require("./CachedInputFileSystem"); + +var nodeFileSystem = new CachedInputFileSystem(new NodeJsInputFileSystem(), 4000); + +var nodeContext = { + environments: [ + "node+es3+es5+process+native" + ] +}; + +var asyncResolver = ResolverFactory.createResolver({ + extensions: [".js", ".json", ".node"], + fileSystem: nodeFileSystem +}); +module.exports = function resolve(context, path, request, callback) { + if(typeof context === "string") { + callback = request; + request = path; + path = context; + context = nodeContext; + } + asyncResolver.resolve(context, path, request, callback); +}; + +var syncResolver = ResolverFactory.createResolver({ + extensions: [".js", ".json", ".node"], + useSyncFileSystemCalls: true, + fileSystem: nodeFileSystem +}); +module.exports.sync = function resolveSync(context, path, request) { + if(typeof context === "string") { + request = path; + path = context; + context = nodeContext; + } + return syncResolver.resolveSync(context, path, request); +}; + +var asyncContextResolver = ResolverFactory.createResolver({ + extensions: [".js", ".json", ".node"], + resolveToContext: true, + fileSystem: nodeFileSystem +}); +module.exports.context = function resolveContext(context, path, request, callback) { + if(typeof context === "string") { + callback = request; + request = path; + path = context; + context = nodeContext; + } + asyncContextResolver.resolve(context, path, request, callback); +}; + +var syncContextResolver = ResolverFactory.createResolver({ + extensions: [".js", ".json", ".node"], + resolveToContext: true, + useSyncFileSystemCalls: true, + fileSystem: nodeFileSystem +}); +module.exports.context.sync = function resolveContextSync(context, path, request) { + if(typeof context === "string") { + request = path; + path = context; + context = nodeContext; + } + return syncContextResolver.resolveSync(context, path, request); +}; + +var asyncLoaderResolver = ResolverFactory.createResolver({ + extensions: [".js", ".json", ".node"], + moduleExtensions: ["-loader"], + mainFields: ["loader", "main"], + fileSystem: nodeFileSystem +}); +module.exports.loader = function resolveLoader(context, path, request, callback) { + if(typeof context === "string") { + callback = request; + request = path; + path = context; + context = nodeContext; + } + asyncLoaderResolver.resolve(context, path, request, callback); +}; + +var syncLoaderResolver = ResolverFactory.createResolver({ + extensions: [".js", ".json", ".node"], + moduleExtensions: ["-loader"], + mainFields: ["loader", "main"], + useSyncFileSystemCalls: true, + fileSystem: nodeFileSystem +}); +module.exports.loader.sync = function resolveLoaderSync(context, path, request) { + if(typeof context === "string") { + request = path; + path = context; + context = nodeContext; + } + return syncLoaderResolver.resolveSync(context, path, request); +}; + +module.exports.create = function create(options) { + options = Object.assign({ + fileSystem: nodeFileSystem + }, options); + var resolver = ResolverFactory.createResolver(options); + return function(context, path, request, callback) { + if(typeof context === "string") { + callback = request; + request = path; + path = context; + context = nodeContext; + } + resolver.resolve(context, path, request, callback); + }; +}; + +module.exports.create.sync = function createSync(options) { + options = Object.assign({ + useSyncFileSystemCalls: true, + fileSystem: nodeFileSystem + }, options); + var resolver = ResolverFactory.createResolver(options); + return function(context, path, request) { + if(typeof context === "string") { + request = path; + path = context; + context = nodeContext; + } + return resolver.resolveSync(context, path, request); + }; +}; + +// Export Resolver, FileSystems and Plugins +module.exports.ResolverFactory = ResolverFactory; + +module.exports.NodeJsInputFileSystem = NodeJsInputFileSystem; +module.exports.CachedInputFileSystem = CachedInputFileSystem; diff --git a/node_modules/enhanced-resolve/package.json b/node_modules/enhanced-resolve/package.json new file mode 100644 index 000000000..f818e01f5 --- /dev/null +++ b/node_modules/enhanced-resolve/package.json @@ -0,0 +1,82 @@ +{ + "_from": "enhanced-resolve@^3.4.0", + "_id": "enhanced-resolve@3.4.1", + "_inBundle": false, + "_integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "_location": "/enhanced-resolve", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "enhanced-resolve@^3.4.0", + "name": "enhanced-resolve", + "escapedName": "enhanced-resolve", + "rawSpec": "^3.4.0", + "saveSpec": null, + "fetchSpec": "^3.4.0" + }, + "_requiredBy": [ + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "_shasum": "0421e339fd71419b3da13d129b3979040230476e", + "_spec": "enhanced-resolve@^3.4.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack", + "author": { + "name": "Tobias Koppers @sokra" + }, + "bugs": { + "url": "https://github.com/webpack/enhanced-resolve/issues" + }, + "bundleDependencies": false, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + }, + "deprecated": false, + "description": "Offers a async require.resolve function. It's highly configurable.", + "devDependencies": { + "beautify-lint": "^1.0.3", + "codecov.io": "^0.1.6", + "coveralls": "^2.11.6", + "eslint": "^3.14.1", + "eslint-plugin-node": "^3.0.5", + "eslint-plugin-nodeca": "^1.0.3", + "istanbul": "^0.4.1", + "js-beautify": "^1.5.10", + "mocha": "^2.3.4", + "should": "^8.0.2" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + }, + "files": [ + "lib" + ], + "homepage": "http://github.com/webpack/enhanced-resolve", + "licenses": [ + { + "type": "MIT", + "url": "http://www.opensource.org/licenses/mit-license.php" + } + ], + "main": "lib/node.js", + "name": "enhanced-resolve", + "repository": { + "type": "git", + "url": "git://github.com/webpack/enhanced-resolve.git" + }, + "scripts": { + "beautify": "beautify-rewrite lib/**.js test/*.js", + "beautify-lint": "beautify-lint lib/**.js test/*.js", + "cover": "istanbul cover node_modules/mocha/bin/_mocha", + "lint": "eslint lib test", + "precover": "npm run lint && npm run beautify-lint", + "pretest": "npm run lint && npm run beautify-lint", + "test": "mocha --full-trace --check-leaks", + "travis": "npm run cover -- --report lcovonly" + }, + "version": "3.4.1" +} diff --git a/node_modules/errno/.jshintrc b/node_modules/errno/.jshintrc new file mode 100644 index 000000000..c8ef3ca40 --- /dev/null +++ b/node_modules/errno/.jshintrc @@ -0,0 +1,59 @@ +{ + "predef": [ ] + , "bitwise": false + , "camelcase": false + , "curly": false + , "eqeqeq": false + , "forin": false + , "immed": false + , "latedef": false + , "noarg": true + , "noempty": true + , "nonew": true + , "plusplus": false + , "quotmark": true + , "regexp": false + , "undef": true + , "unused": true + , "strict": false + , "trailing": true + , "maxlen": 120 + , "asi": true + , "boss": true + , "debug": true + , "eqnull": true + , "esnext": true + , "evil": true + , "expr": true + , "funcscope": false + , "globalstrict": false + , "iterator": false + , "lastsemic": true + , "laxbreak": true + , "laxcomma": true + , "loopfunc": true + , "multistr": false + , "onecase": false + , "proto": false + , "regexdash": false + , "scripturl": true + , "smarttabs": false + , "shadow": false + , "sub": true + , "supernew": false + , "validthis": true + , "browser": true + , "couch": false + , "devel": false + , "dojo": false + , "mootools": false + , "node": true + , "nonstandard": true + , "prototypejs": false + , "rhino": false + , "worker": true + , "wsh": false + , "nomen": false + , "onevar": false + , "passfail": false +} \ No newline at end of file diff --git a/node_modules/errno/.npmignore b/node_modules/errno/.npmignore new file mode 100644 index 000000000..b512c09d4 --- /dev/null +++ b/node_modules/errno/.npmignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/node_modules/errno/README.md b/node_modules/errno/README.md new file mode 100644 index 000000000..2c1f8a525 --- /dev/null +++ b/node_modules/errno/README.md @@ -0,0 +1,141 @@ +# node-errno + +Better [libuv](https://github.com/libuv/libuv)/[Node.js](https://nodejs.org)/[io.js](https://iojs.org) error handling & reporting. Available in npm as *errno*. + +* [errno exposed](#errnoexposed) +* [Custom errors](#customerrors) + + +## errno exposed + +Ever find yourself needing more details about Node.js errors? Me too, so *node-errno* contains the errno mappings direct from libuv so you can use them in your code. + +**By errno:** + +```js +require('errno').errno[3] +// → { +// "errno": 3, +// "code": "EACCES", +// "description": "permission denied" +// } +``` + +**By code:** + +```js +require('errno').code.ENOTEMPTY +// → { +// "errno": 53, +// "code": "ENOTEMPTY", +// "description": "directory not empty" +// } +``` + +**Make your errors more descriptive:** + +```js +var errno = require('errno') + +function errmsg(err) { + var str = 'Error: ' + // if it's a libuv error then get the description from errno + if (errno.errno[err.errno]) + str += errno.errno[err.errno].description + else + str += err.message + + // if it's a `fs` error then it'll have a 'path' property + if (err.path) + str += ' [' + err.path + ']' + + return str +} + +var fs = require('fs') + +fs.readFile('thisisnotarealfile.txt', function (err, data) { + if (err) + console.log(errmsg(err)) +}) +``` + +**Use as a command line tool:** + +``` +~ $ errno 53 +{ + "errno": 53, + "code": "ENOTEMPTY", + "description": "directory not empty" +} +~ $ errno EROFS +{ + "errno": 56, + "code": "EROFS", + "description": "read-only file system" +} +~ $ errno foo +No such errno/code: "foo" +``` + +Supply no arguments for the full list. Error codes are processed case-insensitive. + +You will need to install with `npm install errno -g` if you want the `errno` command to be available without supplying a full path to the node_modules installation. + + +## Custom errors + +Use `errno.custom.createError()` to create custom `Error` objects to throw around in your Node.js library. Create error heirachies so `instanceof` becomes a useful tool in tracking errors. Call-stack is correctly captured at the time you create an instance of the error object, plus a `cause` property will make available the original error object if you pass one in to the constructor. + +```js +var create = require('errno').custom.createError +var MyError = create('MyError') // inherits from Error +var SpecificError = create('SpecificError', MyError) // inherits from MyError +var OtherError = create('OtherError', MyError) + +// use them! +if (condition) throw new SpecificError('Eeek! Something bad happened') + +if (err) return callback(new OtherError(err)) +``` + +Also available is a `errno.custom.FilesystemError` with in-built access to errno properties: + +```js +fs.readFile('foo', function (err, data) { + if (err) return callback(new errno.custom.FilesystemError(err)) + // do something else +}) +``` + +The resulting error object passed through the callback will have the following properties: `code`, `errno`, `path` and `message` will contain a descriptive human-readable message. + +## Contributors + +* [bahamas10](https://github.com/bahamas10) (Dave Eddy) - Added CLI +* [ralphtheninja](https://github.com/ralphtheninja) (Lars-Magnus Skog) + +## Copyright & Licence + +*Copyright (c) 2012-2015 [Rod Vagg](https://github.com/rvagg) ([@rvagg](https://twitter.com/rvagg))* + +Made available under the MIT licence: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/node_modules/errno/build.js b/node_modules/errno/build.js new file mode 100755 index 000000000..fce89260c --- /dev/null +++ b/node_modules/errno/build.js @@ -0,0 +1,43 @@ +#!/usr/bin/env node + +var request = require('request') + , fs = require('fs') + + , uvheadloc = 'https://raw.github.com/joyent/libuv/master/include/uv.h' + , defreg = /^\s*XX\(\s*([\-\d]+),\s*([A-Z]+),\s*"([^"]*)"\s*\)\s*\\?$/ + + +request(uvheadloc, function (err, response) { + if (err) + throw err + + var data, out + + data = response.body + .split('\n') + .map(function (line) { return line.match(defreg) }) + .filter(function (match) { return match }) + .map(function (match) { return { + errno: parseInt(match[1], 10) + , code: match[2] + , description: match[3] + }}) + + out = 'var all = module.exports.all = ' + JSON.stringify(data, 0, 1) + '\n\n' + + out += '\nmodule.exports.errno = {\n ' + + data.map(function (e, i) { + return '\'' + e.errno + '\': all[' + i + ']' + }).join('\n , ') + + '\n}\n\n' + + out += '\nmodule.exports.code = {\n ' + + data.map(function (e, i) { + return '\'' + e.code + '\': all[' + i + ']' + }).join('\n , ') + + '\n}\n\n' + + out += '\nmodule.exports.custom = require("./custom")(module.exports)\n' + + fs.writeFile('errno.js', out) +}) \ No newline at end of file diff --git a/node_modules/errno/cli.js b/node_modules/errno/cli.js new file mode 100755 index 000000000..f841771b8 --- /dev/null +++ b/node_modules/errno/cli.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +var errno = require('./') + , arg = process.argv[2] + , data, code + +if (arg === undefined) + return console.log(JSON.stringify(errno.code, null, 2)) + +if ((code = +arg) == arg) + data = errno.errno[code] +else + data = errno.code[arg] || errno.code[arg.toUpperCase()] + +if (data) + console.log(JSON.stringify(data, null, 2)) +else { + console.error('No such errno/code: "' + arg + '"') + process.exit(1) +} \ No newline at end of file diff --git a/node_modules/errno/custom.js b/node_modules/errno/custom.js new file mode 100644 index 000000000..7be16c1e4 --- /dev/null +++ b/node_modules/errno/custom.js @@ -0,0 +1,55 @@ +var prr = require('prr') + +function init (type, message, cause) { + prr(this, { + type : type + , name : type + // can be passed just a 'cause' + , cause : typeof message != 'string' ? message : cause + , message : !!message && typeof message != 'string' ? message.message : message + + }, 'ewr') +} + +// generic prototype, not intended to be actually used - helpful for `instanceof` +function CustomError (message, cause) { + Error.call(this) + if (Error.captureStackTrace) + Error.captureStackTrace(this, arguments.callee) + init.call(this, 'CustomError', message, cause) +} + +CustomError.prototype = new Error() + +function createError (errno, type, proto) { + var err = function (message, cause) { + init.call(this, type, message, cause) + //TODO: the specificity here is stupid, errno should be available everywhere + if (type == 'FilesystemError') { + this.code = this.cause.code + this.path = this.cause.path + this.errno = this.cause.errno + this.message = + (errno.errno[this.cause.errno] + ? errno.errno[this.cause.errno].description + : this.cause.message) + + (this.cause.path ? ' [' + this.cause.path + ']' : '') + } + Error.call(this) + if (Error.captureStackTrace) + Error.captureStackTrace(this, arguments.callee) + } + err.prototype = !!proto ? new proto() : new CustomError() + return err +} + +module.exports = function (errno) { + var ce = function (type, proto) { + return createError(errno, type, proto) + } + return { + CustomError : CustomError + , FilesystemError : ce('FilesystemError') + , createError : ce + } +} diff --git a/node_modules/errno/errno.js b/node_modules/errno/errno.js new file mode 100644 index 000000000..efb79d41b --- /dev/null +++ b/node_modules/errno/errno.js @@ -0,0 +1,313 @@ +var all = module.exports.all = [ + { + errno: -2, + code: 'ENOENT', + description: 'no such file or directory' + }, + { + errno: -1, + code: 'UNKNOWN', + description: 'unknown error' + }, + { + errno: 0, + code: 'OK', + description: 'success' + }, + { + errno: 1, + code: 'EOF', + description: 'end of file' + }, + { + errno: 2, + code: 'EADDRINFO', + description: 'getaddrinfo error' + }, + { + errno: 3, + code: 'EACCES', + description: 'permission denied' + }, + { + errno: 4, + code: 'EAGAIN', + description: 'resource temporarily unavailable' + }, + { + errno: 5, + code: 'EADDRINUSE', + description: 'address already in use' + }, + { + errno: 6, + code: 'EADDRNOTAVAIL', + description: 'address not available' + }, + { + errno: 7, + code: 'EAFNOSUPPORT', + description: 'address family not supported' + }, + { + errno: 8, + code: 'EALREADY', + description: 'connection already in progress' + }, + { + errno: 9, + code: 'EBADF', + description: 'bad file descriptor' + }, + { + errno: 10, + code: 'EBUSY', + description: 'resource busy or locked' + }, + { + errno: 11, + code: 'ECONNABORTED', + description: 'software caused connection abort' + }, + { + errno: 12, + code: 'ECONNREFUSED', + description: 'connection refused' + }, + { + errno: 13, + code: 'ECONNRESET', + description: 'connection reset by peer' + }, + { + errno: 14, + code: 'EDESTADDRREQ', + description: 'destination address required' + }, + { + errno: 15, + code: 'EFAULT', + description: 'bad address in system call argument' + }, + { + errno: 16, + code: 'EHOSTUNREACH', + description: 'host is unreachable' + }, + { + errno: 17, + code: 'EINTR', + description: 'interrupted system call' + }, + { + errno: 18, + code: 'EINVAL', + description: 'invalid argument' + }, + { + errno: 19, + code: 'EISCONN', + description: 'socket is already connected' + }, + { + errno: 20, + code: 'EMFILE', + description: 'too many open files' + }, + { + errno: 21, + code: 'EMSGSIZE', + description: 'message too long' + }, + { + errno: 22, + code: 'ENETDOWN', + description: 'network is down' + }, + { + errno: 23, + code: 'ENETUNREACH', + description: 'network is unreachable' + }, + { + errno: 24, + code: 'ENFILE', + description: 'file table overflow' + }, + { + errno: 25, + code: 'ENOBUFS', + description: 'no buffer space available' + }, + { + errno: 26, + code: 'ENOMEM', + description: 'not enough memory' + }, + { + errno: 27, + code: 'ENOTDIR', + description: 'not a directory' + }, + { + errno: 28, + code: 'EISDIR', + description: 'illegal operation on a directory' + }, + { + errno: 29, + code: 'ENONET', + description: 'machine is not on the network' + }, + { + errno: 31, + code: 'ENOTCONN', + description: 'socket is not connected' + }, + { + errno: 32, + code: 'ENOTSOCK', + description: 'socket operation on non-socket' + }, + { + errno: 33, + code: 'ENOTSUP', + description: 'operation not supported on socket' + }, + { + errno: 34, + code: 'ENOENT', + description: 'no such file or directory' + }, + { + errno: 35, + code: 'ENOSYS', + description: 'function not implemented' + }, + { + errno: 36, + code: 'EPIPE', + description: 'broken pipe' + }, + { + errno: 37, + code: 'EPROTO', + description: 'protocol error' + }, + { + errno: 38, + code: 'EPROTONOSUPPORT', + description: 'protocol not supported' + }, + { + errno: 39, + code: 'EPROTOTYPE', + description: 'protocol wrong type for socket' + }, + { + errno: 40, + code: 'ETIMEDOUT', + description: 'connection timed out' + }, + { + errno: 41, + code: 'ECHARSET', + description: 'invalid Unicode character' + }, + { + errno: 42, + code: 'EAIFAMNOSUPPORT', + description: 'address family for hostname not supported' + }, + { + errno: 44, + code: 'EAISERVICE', + description: 'servname not supported for ai_socktype' + }, + { + errno: 45, + code: 'EAISOCKTYPE', + description: 'ai_socktype not supported' + }, + { + errno: 46, + code: 'ESHUTDOWN', + description: 'cannot send after transport endpoint shutdown' + }, + { + errno: 47, + code: 'EEXIST', + description: 'file already exists' + }, + { + errno: 48, + code: 'ESRCH', + description: 'no such process' + }, + { + errno: 49, + code: 'ENAMETOOLONG', + description: 'name too long' + }, + { + errno: 50, + code: 'EPERM', + description: 'operation not permitted' + }, + { + errno: 51, + code: 'ELOOP', + description: 'too many symbolic links encountered' + }, + { + errno: 52, + code: 'EXDEV', + description: 'cross-device link not permitted' + }, + { + errno: 53, + code: 'ENOTEMPTY', + description: 'directory not empty' + }, + { + errno: 54, + code: 'ENOSPC', + description: 'no space left on device' + }, + { + errno: 55, + code: 'EIO', + description: 'i/o error' + }, + { + errno: 56, + code: 'EROFS', + description: 'read-only file system' + }, + { + errno: 57, + code: 'ENODEV', + description: 'no such device' + }, + { + errno: 58, + code: 'ESPIPE', + description: 'invalid seek' + }, + { + errno: 59, + code: 'ECANCELED', + description: 'operation canceled' + } +] + +module.exports.errno = {} +module.exports.code = {} + +all.forEach(function (error) { + module.exports.errno[error.errno] = error + module.exports.code[error.code] = error +}) + +module.exports.custom = require('./custom')(module.exports) +module.exports.create = module.exports.custom.createError diff --git a/node_modules/errno/package.json b/node_modules/errno/package.json new file mode 100644 index 000000000..76e581fd2 --- /dev/null +++ b/node_modules/errno/package.json @@ -0,0 +1,60 @@ +{ + "_from": "errno@^0.1.3", + "_id": "errno@0.1.4", + "_inBundle": false, + "_integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "_location": "/errno", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "errno@^0.1.3", + "name": "errno", + "escapedName": "errno", + "rawSpec": "^0.1.3", + "saveSpec": null, + "fetchSpec": "^0.1.3" + }, + "_requiredBy": [ + "/memory-fs" + ], + "_resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "_shasum": "b896e23a9e5e8ba33871fc996abd3635fc9a1c7d", + "_spec": "errno@^0.1.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/memory-fs", + "authors": [ + "Rod Vagg @rvagg (https://github.com/rvagg)" + ], + "bin": { + "errno": "./cli.js" + }, + "bugs": { + "url": "https://github.com/rvagg/node-errno/issues" + }, + "bundleDependencies": false, + "dependencies": { + "prr": "~0.0.0" + }, + "deprecated": false, + "description": "libuv errno details exposed", + "devDependencies": { + "tape": "~3.5.0" + }, + "homepage": "https://github.com/rvagg/node-errno#readme", + "keywords": [ + "errors", + "errno", + "libuv" + ], + "license": "MIT", + "main": "errno.js", + "name": "errno", + "repository": { + "type": "git", + "url": "git+https://github.com/rvagg/node-errno.git" + }, + "scripts": { + "test": "tape test.js" + }, + "version": "0.1.4" +} diff --git a/node_modules/errno/test.js b/node_modules/errno/test.js new file mode 100755 index 000000000..6b76a85ae --- /dev/null +++ b/node_modules/errno/test.js @@ -0,0 +1,31 @@ +#!/usr/bin/env node + +var test = require('tape') + , errno = require('./') + +test('sanity checks', function (t) { + t.ok(errno.all, 'errno.all not found') + t.ok(errno.errno, 'errno.errno not found') + t.ok(errno.code, 'errno.code not found') + + t.equal(errno.all.length, 59, 'found ' + errno.all.length + ', expected 59') + t.equal(errno.errno['-1'], errno.all[0], 'errno -1 not first element') + + t.equal(errno.code['UNKNOWN'], errno.all[0], 'code UNKNOWN not first element') + + t.equal(errno.errno[1], errno.all[2], 'errno 1 not third element') + + t.equal(errno.code['EOF'], errno.all[2], 'code EOF not third element') + t.end() +}) + +test('custom errors', function (t) { + var Cust = errno.create('FooNotBarError') + var cust = new Cust('foo is not bar') + + t.equal(cust.name, 'FooNotBarError', 'correct custom name') + t.equal(cust.type, 'FooNotBarError', 'correct custom type') + t.equal(cust.message, 'foo is not bar', 'correct custom message') + t.notOk(cust.cause, 'no cause') + t.end() +}) diff --git a/node_modules/error-ex/LICENSE b/node_modules/error-ex/LICENSE new file mode 100644 index 000000000..0a5f461a6 --- /dev/null +++ b/node_modules/error-ex/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 JD Ballard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/error-ex/README.md b/node_modules/error-ex/README.md new file mode 100644 index 000000000..97f744af8 --- /dev/null +++ b/node_modules/error-ex/README.md @@ -0,0 +1,144 @@ +# node-error-ex [![Travis-CI.org Build Status](https://img.shields.io/travis/Qix-/node-error-ex.svg?style=flat-square)](https://travis-ci.org/Qix-/node-error-ex) [![Coveralls.io Coverage Rating](https://img.shields.io/coveralls/Qix-/node-error-ex.svg?style=flat-square)](https://coveralls.io/r/Qix-/node-error-ex) +> Easily subclass and customize new Error types + +## Examples +To include in your project: +```javascript +var errorEx = require('error-ex'); +``` + +To create an error message type with a specific name (note, that `ErrorFn.name` +will not reflect this): +```javascript +var JSONError = errorEx('JSONError'); + +var err = new JSONError('error'); +err.name; //-> JSONError +throw err; //-> JSONError: error +``` + +To add a stack line: +```javascript +var JSONError = errorEx('JSONError', {fileName: errorEx.line('in %s')}); + +var err = new JSONError('error') +err.fileName = '/a/b/c/foo.json'; +throw err; //-> (line 2)-> in /a/b/c/foo.json +``` + +To append to the error message: +```javascript +var JSONError = errorEx('JSONError', {fileName: errorEx.append('in %s')}); + +var err = new JSONError('error'); +err.fileName = '/a/b/c/foo.json'; +throw err; //-> JSONError: error in /a/b/c/foo.json +``` + +## API + +#### `errorEx([name], [properties])` +Creates a new ErrorEx error type + +- `name`: the name of the new type (appears in the error message upon throw; + defaults to `Error.name`) +- `properties`: if supplied, used as a key/value dictionary of properties to + use when building up the stack message. Keys are property names that are + looked up on the error message, and then passed to function values. + - `line`: if specified and is a function, return value is added as a stack + entry (error-ex will indent for you). Passed the property value given + the key. + - `stack`: if specified and is a function, passed the value of the property + using the key, and the raw stack lines as a second argument. Takes no + return value (but the stack can be modified directly). + - `message`: if specified and is a function, return value is used as new + `.message` value upon get. Passed the property value of the property named + by key, and the existing message is passed as the second argument as an + array of lines (suitable for multi-line messages). + +Returns a constructor (Function) that can be used just like the regular Error +constructor. + +```javascript +var errorEx = require('error-ex'); + +var BasicError = errorEx(); + +var NamedError = errorEx('NamedError'); + +// -- + +var AdvancedError = errorEx('AdvancedError', { + foo: { + line: function (value, stack) { + if (value) { + return 'bar ' + value; + } + return null; + } + } +} + +var err = new AdvancedError('hello, world'); +err.foo = 'baz'; +throw err; + +/* + AdvancedError: hello, world + bar baz + at tryReadme() (readme.js:20:1) +*/ +``` + +#### `errorEx.line(str)` +Creates a stack line using a delimiter + +> This is a helper function. It is to be used in lieu of writing a value object +> for `properties` values. + +- `str`: The string to create + - Use the delimiter `%s` to specify where in the string the value should go + +```javascript +var errorEx = require('error-ex'); + +var FileError = errorEx('FileError', {fileName: errorEx.line('in %s')}); + +var err = new FileError('problem reading file'); +err.fileName = '/a/b/c/d/foo.js'; +throw err; + +/* + FileError: problem reading file + in /a/b/c/d/foo.js + at tryReadme() (readme.js:7:1) +*/ +``` + +#### `errorEx.append(str)` +Appends to the `error.message` string + +> This is a helper function. It is to be used in lieu of writing a value object +> for `properties` values. + +- `str`: The string to append + - Use the delimiter `%s` to specify where in the string the value should go + +```javascript +var errorEx = require('error-ex'); + +var SyntaxError = errorEx('SyntaxError', {fileName: errorEx.append('in %s')}); + +var err = new SyntaxError('improper indentation'); +err.fileName = '/a/b/c/d/foo.js'; +throw err; + +/* + SyntaxError: improper indentation in /a/b/c/d/foo.js + at tryReadme() (readme.js:7:1) +*/ +``` + +## License +Licensed under the [MIT License](http://opensource.org/licenses/MIT). +You can find a copy of it in [LICENSE](LICENSE). diff --git a/node_modules/error-ex/index.js b/node_modules/error-ex/index.js new file mode 100644 index 000000000..43641b08f --- /dev/null +++ b/node_modules/error-ex/index.js @@ -0,0 +1,133 @@ +'use strict'; + +var util = require('util'); +var isArrayish = require('is-arrayish'); + +var errorEx = function errorEx(name, properties) { + if (!name || name.constructor !== String) { + properties = name || {}; + name = Error.name; + } + + var errorExError = function ErrorEXError(message) { + if (!this) { + return new ErrorEXError(message); + } + + message = message instanceof Error + ? message.message + : (message || this.message); + + Error.call(this, message); + Error.captureStackTrace(this, errorExError); + + this.name = name; + + Object.defineProperty(this, 'message', { + configurable: true, + enumerable: false, + get: function () { + var newMessage = message.split(/\r?\n/g); + + for (var key in properties) { + if (!properties.hasOwnProperty(key)) { + continue; + } + + var modifier = properties[key]; + + if ('message' in modifier) { + newMessage = modifier.message(this[key], newMessage) || newMessage; + if (!isArrayish(newMessage)) { + newMessage = [newMessage]; + } + } + } + + return newMessage.join('\n'); + }, + set: function (v) { + message = v; + } + }); + + var stackDescriptor = Object.getOwnPropertyDescriptor(this, 'stack'); + var stackGetter = stackDescriptor.get; + var stackValue = stackDescriptor.value; + delete stackDescriptor.value; + delete stackDescriptor.writable; + + stackDescriptor.get = function () { + var stack = (stackGetter) + ? stackGetter.call(this).split(/\r?\n+/g) + : stackValue.split(/\r?\n+/g); + + // starting in Node 7, the stack builder caches the message. + // just replace it. + stack[0] = this.name + ': ' + this.message; + + var lineCount = 1; + for (var key in properties) { + if (!properties.hasOwnProperty(key)) { + continue; + } + + var modifier = properties[key]; + + if ('line' in modifier) { + var line = modifier.line(this[key]); + if (line) { + stack.splice(lineCount++, 0, ' ' + line); + } + } + + if ('stack' in modifier) { + modifier.stack(this[key], stack); + } + } + + return stack.join('\n'); + }; + + Object.defineProperty(this, 'stack', stackDescriptor); + }; + + if (Object.setPrototypeOf) { + Object.setPrototypeOf(errorExError.prototype, Error.prototype); + Object.setPrototypeOf(errorExError, Error); + } else { + util.inherits(errorExError, Error); + } + + return errorExError; +}; + +errorEx.append = function (str, def) { + return { + message: function (v, message) { + v = v || def; + + if (v) { + message[0] += ' ' + str.replace('%s', v.toString()); + } + + return message; + } + }; +}; + +errorEx.line = function (str, def) { + return { + line: function (v) { + v = v || def; + + if (v) { + return str.replace('%s', v.toString()); + } + + return null; + } + }; +}; + +module.exports = errorEx; diff --git a/node_modules/error-ex/package.json b/node_modules/error-ex/package.json new file mode 100644 index 000000000..491f2099f --- /dev/null +++ b/node_modules/error-ex/package.json @@ -0,0 +1,86 @@ +{ + "_from": "error-ex@^1.2.0", + "_id": "error-ex@1.3.1", + "_inBundle": false, + "_integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "_location": "/error-ex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "error-ex@^1.2.0", + "name": "error-ex", + "escapedName": "error-ex", + "rawSpec": "^1.2.0", + "saveSpec": null, + "fetchSpec": "^1.2.0" + }, + "_requiredBy": [ + "/parse-json" + ], + "_resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "_shasum": "f855a86ce61adc4e8621c3cda21e7a7612c3a8dc", + "_spec": "error-ex@^1.2.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/parse-json", + "bugs": { + "url": "https://github.com/qix-/node-error-ex/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-arrayish": "^0.2.1" + }, + "deprecated": false, + "description": "Easy error subclassing and stack customization", + "devDependencies": { + "coffee-script": "^1.9.3", + "coveralls": "^2.11.2", + "istanbul": "^0.3.17", + "mocha": "^2.2.5", + "should": "^7.0.1", + "xo": "^0.7.1" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/qix-/node-error-ex#readme", + "keywords": [ + "error", + "errors", + "extend", + "extending", + "extension", + "subclass", + "stack", + "custom" + ], + "license": "MIT", + "maintainers": [ + { + "name": "Josh Junon", + "email": "i.am.qix@gmail.com", + "url": "github.com/qix-" + }, + { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + } + ], + "name": "error-ex", + "repository": { + "type": "git", + "url": "git+https://github.com/qix-/node-error-ex.git" + }, + "scripts": { + "pretest": "xo", + "test": "mocha --compilers coffee:coffee-script/register" + }, + "version": "1.3.1", + "xo": { + "rules": { + "operator-linebreak": [ + 0 + ] + } + } +} diff --git a/node_modules/es5-ext/.lint b/node_modules/es5-ext/.lint new file mode 100644 index 000000000..ded0b5321 --- /dev/null +++ b/node_modules/es5-ext/.lint @@ -0,0 +1,43 @@ +@root + +module + +indent 2 +maxlen 100 +tabs + +ass +continue +forin +nomen +plusplus +vars +sub + +./global.js +./function/_define-length.js +./function/#/copy.js +./object/unserialize.js +./test/function/valid-function.js +./test/function/#/to-string-tokens.js +evil + +./math/_pack-ieee754.js +./math/_unpack-ieee754.js +./math/clz32/shim.js +./math/imul/shim.js +./number/to-uint32.js +./string/#/at.js +bitwise + +./math/fround/shim.js +predef+ Float32Array + +./object/first-key.js +forin + +./test +predef+ Symbol + +./test/reg-exp/#/index.js +predef+ __dirname diff --git a/node_modules/es5-ext/.lintignore b/node_modules/es5-ext/.lintignore new file mode 100644 index 000000000..eece4ff3c --- /dev/null +++ b/node_modules/es5-ext/.lintignore @@ -0,0 +1,9 @@ +/string/#/normalize/_data.js +/test/boolean/is-boolean.js +/test/date/is-date.js +/test/number/is-number.js +/test/object/is-copy.js +/test/object/is-number-value.js +/test/object/is-object.js +/test/reg-exp/is-reg-exp.js +/test/string/is-string.js diff --git a/node_modules/es5-ext/.npmignore b/node_modules/es5-ext/.npmignore new file mode 100644 index 000000000..14b020063 --- /dev/null +++ b/node_modules/es5-ext/.npmignore @@ -0,0 +1,14 @@ +.DS_Store +Thumbs.db +/.idea +/.vscode +npm-debug.log +/wallaby.js +.DS_Store +/node_modules +/.lintcache +/npm-debug.log +/.travis.yml +/.gitignore +/.circle.yml +/.appveyor.yml diff --git a/node_modules/es5-ext/CHANGELOG.md b/node_modules/es5-ext/CHANGELOG.md new file mode 100644 index 000000000..f6d7c5040 --- /dev/null +++ b/node_modules/es5-ext/CHANGELOG.md @@ -0,0 +1,169 @@ +# 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. + + +## [0.10.30](https://github.com/medikoo/es5-ext/compare/v0.10.29...v0.10.30) (2017-08-25) + + +### Bug Fixes + +* value stringification for error message ([37bb96b](https://github.com/medikoo/es5-ext/commit/37bb96b)) + + + + +## [0.10.29](https://github.com/medikoo/es5-ext/compare/v0.10.28...v0.10.29) (2017-08-18) + + +### Bug Fixes + +* string.repeat after recent regression ([b02fab4](https://github.com/medikoo/es5-ext/commit/b02fab4)) + + + + +## [0.10.28](https://github.com/medikoo/es5-ext/compare/v0.10.27...v0.10.28) (2017-08-18) + + +### Features + +* array.isEmpty method ([b0cfbdd](https://github.com/medikoo/es5-ext/commit/b0cfbdd)) +* improve new lines representation ([860fe8b](https://github.com/medikoo/es5-ext/commit/860fe8b)) +* Object.ensureArray util ([595c341](https://github.com/medikoo/es5-ext/commit/595c341)) +* toShortStringRepresentation util ([6842d06](https://github.com/medikoo/es5-ext/commit/6842d06)) + + + + +## [0.10.27](https://github.com/medikoo/es5-ext/compare/v0.10.26...v0.10.27) (2017-08-11) + + +### Bug Fixes + +* isNumberValue should not crash on non-coercible values ([0db765e](https://github.com/medikoo/es5-ext/commit/0db765e)) + + +### Features + +* add Object.ensureFiniteNumber util ([11c67f5](https://github.com/medikoo/es5-ext/commit/11c67f5)) +* add Object.isFiniteNumber util ([fe5b55a](https://github.com/medikoo/es5-ext/commit/fe5b55a)) + + + + +## [0.10.26](https://github.com/medikoo/es5-ext/compare/v0.10.25...v0.10.26) (2017-08-02) + + +### Bug Fixes + +* **general:** ensure optionalChaining in index ([3df879a](https://github.com/medikoo/es5-ext/commit/3df879a)) + + + + +## [0.10.25](https://github.com/medikoo/es5-ext/compare/v0.10.24...v0.10.25) (2017-08-02) + + +### Features + +* **general:** optionalChaining utility ([26332b5](https://github.com/medikoo/es5-ext/commit/26332b5)) + + + + +## [0.10.24](https://github.com/medikoo/es5-ext/compare/v0.10.23...v0.10.24) (2017-07-10) + + +### Features + +* resolve global with CSP safe method ([d386449](https://github.com/medikoo/es5-ext/commit/d386449)) + + + + +## [0.10.23](https://github.com/medikoo/es5-ext/compare/v0.10.22...v0.10.23) (2017-06-05) + + +### Bug Fixes + +* **Error.custom:** allow non-string code ([e8db3a0](https://github.com/medikoo/es5-ext/commit/e8db3a0)) +* **Error.custom:** improve `ext` argument detection ([0edbfbc](https://github.com/medikoo/es5-ext/commit/0edbfbc)) + + + + +## [0.10.22](https://github.com/medikoo/es5-ext/compare/v0.10.21...v0.10.22) (2017-05-31) + + +### Bug Fixes + +* ensure proper symbols stringification in early implementations ([ce51900](https://github.com/medikoo/es5-ext/commit/ce51900)) + + + + +## [0.10.21](https://github.com/medikoo/es5-ext/compare/v0.10.20...v0.10.21) (2017-05-22) + + +### Features + +* support arrow functions in Function/#/to-tring-tokens.js ([ad3de1e](https://github.com/medikoo/es5-ext/commit/ad3de1e)) + + + + +## [0.10.20](https://github.com/medikoo/es5-ext/compare/v0.10.19...v0.10.20) (2017-05-17) + + +### Features + +* if listed copy not only if own property ([d7e7cef](https://github.com/medikoo/es5-ext/commit/d7e7cef)) +* support `ensure` option in Object.copy ([295326f](https://github.com/medikoo/es5-ext/commit/295326f)) + + + + +## [0.10.19](https://github.com/medikoo/es5-ext/compare/v0.10.18...v0.10.19) (2017-05-17) + + +### Features + +* support propertyNames option in Object.copy ([5442279](https://github.com/medikoo/es5-ext/commit/5442279)) + + + + +## [0.10.18](https://github.com/medikoo/es5-ext/compare/v0.10.17...v0.10.18) (2017-05-15) + + +### Bug Fixes + +* take all changes in safeToString ([3c5cd12](https://github.com/medikoo/es5-ext/commit/3c5cd12)) + + + + +## [0.10.17](https://github.com/medikoo/es5-ext/compare/v0.10.16...v0.10.17) (2017-05-15) + + +### Features + +* introduce Object.ensurePromise ([46a2f45](https://github.com/medikoo/es5-ext/commit/46a2f45)) +* introduce Object.isPromise ([27aecc8](https://github.com/medikoo/es5-ext/commit/27aecc8)) +* introduce safeToString ([0cc6a7b](https://github.com/medikoo/es5-ext/commit/0cc6a7b)) + + + + +## [0.10.16](https://github.com/medikoo/es5-ext/compare/v0.10.15...v0.10.16) (2017-05-09) + + +### Features + +* add String.prototype.count ([2e53241](https://github.com/medikoo/es5-ext/commit/2e53241)) + + +## Changelog for previous versions + +See `CHANGES` file \ No newline at end of file diff --git a/node_modules/es5-ext/CHANGES b/node_modules/es5-ext/CHANGES new file mode 100644 index 000000000..bb84baba3 --- /dev/null +++ b/node_modules/es5-ext/CHANGES @@ -0,0 +1,650 @@ +For recent changelog see CHANGELOG.md + +----- + +v0.10.15 -- 2017.03.20 +* Fix Object.isValue (it was actually isNotValue) + +v0.10.14 -- 2017.03.15 +* Object.isValue util + +v0.10.13 -- 2017.03.13 +* Introduce JSON.safeStringify +* Improve message handling in error/custom +* Fix Array#concat shim +* Improve Array#flatten algorithm so it's stack trace friendly +* Make Object.isObject ES3 compatible + +v0.10.12 -- 2016.07.01 +* Ensure symbols are copied in Object.mixin +* Prevent RangeError errors in array#flatten +* Do not validate invalidate dates in validDate + +v0.10.11 -- 2015.12.18 +* Ensure that check for implementation of RegExp flags doesn't crash in V8 (thanks @mathiasbynens) + +v0.10.10 -- 2015.12.11 +* Add Object.isNumberValue util + +v0.10.9 -- 2015.12.01 +* Add Object.ensureNaturalNumber and Object.ensureNaturalNumberValue + +v0.10.8 -- 2015.10.02 +* Add Number.isNatural +* Add Object.find and Object.findKey +* Support arrays in Object.copyDeep +* Fix iteration issue in forEachRight and someRight +* Fix detection of native sinh +* Depend on es6-symbol v3 + +v0.10.7 -- 2015.04.22 +* New utlitities. They're convention differs from v0.10, as they were supposed to land in v1. + Still they're non breaking and start the conventions to be used in v1 + * Object.validateArrayLike + * Object.validateArrayLikeObject + * Object.validateStringifiable + * Object.validateStringifiableValue + * Universal utilities for array-like/iterable objects + * Iterable.is + * Iterable.validate + * Iterable.validateObject + * Iterable.forEach +* Fix camelToHyphen resolution, it must be absolutely reversable by hyphenToCamel +* Fix calculations of large numbers in Math.tanh +* Fix algorithm of Math.sinh +* Fix indexes to not use real symbols +* Fix length of String.fromCodePoint +* Fix tests of Array#copyWithin +* Update Travis CI configuration + +v0.10.6 -- 2015.02.02 +* Fix handling of infinite values in Math.trunc +* Fix handling of getters in Object.normalizeOptions + +v0.10.5 -- 2015.01.20 +* Add Function#toStringTokens +* Add Object.serialize and Object.unserialize +* Add String.randomUniq +* Fix Strin#camelToHyphen issue with tokens that end with digit +* Optimise Number.isInteger logic +* Improve documentation +* Configure lint scripts +* Fix spelling of LICENSE + +v0.10.4 -- 2014.04.30 +* Assure maximum spec compliance of Array.of and Array.from (thanks @mathiasbynens) +* Improve documentations + +v0.10.3 -- 2014.04.29 +Provide accurate iterators handling: +* Array.from improvements: + * Assure right unicode symbols resolution when processing strings in Array.from + * Rely on ES6 symbol shim and use native @@iterator Symbol if provided by environment +* Add methods: + * Array.prototype.entries + * Array.prototype.keys + * Array.prototype.values + * Array.prototype[@@iterator] + * String.prototype[@@iterator] + +Improve documentation + +v0.10.2 -- 2014.04.24 +- Simplify and deprecate `isCallable`. It seems in ES5 based engines there are + no callable objects which are `typeof obj !== 'function'` +- Update Array.from map callback signature (up to latest resolution of TC39) +- Improve documentation + +v0.10.1 -- 2014.04.14 +Bump version for npm +(Workaround for accidental premature publish & unpublish of v0.10.0 a while ago) + +v0.10.0 -- 2014.04.13 +Major update: +- All methods and function specified for ECMAScript 6 are now introduced as + shims accompanied with functions through which (optionally) they can be + implementend on native objects +- Filename convention was changed to shorter and strictly lower case names. e.g. + `lib/String/prototype/starts-with` became `string/#/starts-with` +- Generated functions are guaranteed to have expected length +- Objects with null prototype (created via `Object.create(null)`) are widely + supported (older version have crashed due to implied `obj.hasOwnProperty` and + related invocations) +- Support array subclasses +- When handling lists do not limit its length to Uint32 range +- Use newly introduced `Object.eq` for strict equality in place of `Object.is` +- Iteration of Object have been improved so properties that were hidden or + removed after iteration started are not iterated. + +Additions: +- `Array.isPlainArray` +- `Array.validArray` +- `Array.prototype.concat` (as updated with ES6) +- `Array.prototype.copyWithin` (as introduced with ES6) +- `Array.prototype.fill` (as introduced with ES6) +- `Array.prototype.filter` (as updated with ES6) +- `Array.prototype.findIndex` (as introduced with ES6) +- `Array.prototype.map` (as updated with ES6) +- `Array.prototype.separate` +- `Array.prototype.slice` (as updated with ES6) +- `Array.prototype.splice` (as updated with ES6) +- `Function.prototype.copy` +- `Math.acosh` (as introduced with ES6) +- `Math.atanh` (as introduced with ES6) +- `Math.cbrt` (as introduced with ES6) +- `Math.clz32` (as introduced with ES6) +- `Math.cosh` (as introduced with ES6) +- `Math.expm1` (as introduced with ES6) +- `Math.fround` (as introduced with ES6) +- `Math.hypot` (as introduced with ES6) +- `Math.imul` (as introduced with ES6) +- `Math.log2` (as introduced with ES6) +- `Math.log10` (as introduced with ES6) +- `Math.log1p` (as introduced with ES6) +- `Math.sinh` (as introduced with ES6) +- `Math.tanh` (as introduced with ES6) +- `Math.trunc` (as introduced with ES6) +- `Number.EPSILON` (as introduced with ES6) +- `Number.MIN_SAFE_INTEGER` (as introduced with ES6) +- `Number.MAX_SAFE_INTEGER` (as introduced with ES6) +- `Number.isFinite` (as introduced with ES6) +- `Number.isInteger` (as introduced with ES6) +- `Number.isSafeInteger` (as introduced with ES6) +- `Object.create` (with fix for V8 issue which disallows prototype turn of + objects derived from null +- `Object.eq` - Less restrictive version of `Object.is` based on SameValueZero + algorithm +- `Object.firstKey` +- `Object.keys` (as updated with ES6) +- `Object.mixinPrototypes` +- `Object.primitiveSet` +- `Object.setPrototypeOf` (as introduced with ES6) +- `Object.validObject` +- `RegExp.escape` +- `RegExp.prototype.match` (as introduced with ES6) +- `RegExp.prototype.replace` (as introduced with ES6) +- `RegExp.prototype.search` (as introduced with ES6) +- `RegExp.prototype.split` (as introduced with ES6) +- `RegExp.prototype.sticky` (as introduced with ES6) +- `RegExp.prototype.unicode` (as introduced with ES6) +- `String.fromCodePoint` (as introduced with ES6) +- `String.raw` (as introduced with ES6) +- `String.prototype.at` +- `String.prototype.codePointAt` (as introduced with ES6) +- `String.prototype.normalize` (as introduced with ES6) +- `String.prototype.plainReplaceAll` + +Removals: +- `reserved` set +- `Array.prototype.commonLeft` +- `Function.insert` +- `Function.remove` +- `Function.prototype.silent` +- `Function.prototype.wrap` +- `Object.descriptor` Move to external `d` project. + See: https://github.com/medikoo/d +- `Object.diff` +- `Object.extendDeep` +- `Object.reduce` +- `Object.values` +- `String.prototype.trimCommonLeft` + +Renames: +- `Function.i` into `Function.identity` +- `Function.k` into `Function.constant` +- `Number.toInt` into `Number.toInteger` +- `Number.toUint` into `Number.toPosInteger` +- `Object.extend` into `Object.assign` (as introduced in ES 6) +- `Object.extendProperties` into `Object.mixin`, with improved internal + handling, so it matches temporarily specified `Object.mixin` for ECMAScript 6 +- `Object.isList` into `Object.isArrayLike` +- `Object.mapToArray` into `Object.toArray` (with fixed function length) +- `Object.toPlainObject` into `Object.normalizeOptions` (as this is the real + use case where we use this function) +- `Function.prototype.chain` into `Function.prototype.compose` +- `Function.prototype.match` into `Function.prototype.spread` +- `String.prototype.format` into `String.formatMethod` + +Improvements & Fixes: +- Remove workaround for primitive values handling in object iterators +- `Array.from`: Update so it follows ES 6 spec +- `Array.prototype.compact`: filters just null and undefined values + (not all falsies) +- `Array.prototype.eIndexOf` and `Array.prototype.eLastIndexOf`: fix position + handling, improve internals +- `Array.prototype.find`: return undefined not null, in case of not found + (follow ES 6) +- `Array.prototype.remove` fix function length +- `Error.custom`: simplify, Custom class case is addressed by outer + `error-create` project -> https://github.com/medikoo/error-create +- `Error.isError` true only for Error instances (remove detection of host + Exception objects) +- `Number.prototype.pad`: Normalize negative pad +- `Object.clear`: Handle errors same way as in `Object.assign` +- `Object.compact`: filters just null and undefined values (not all falsies) +- `Object.compare`: Take into account NaN values +- `Object.copy`: Split into `Object.copy` and `Object.copyDeep` +- `Object.isCopy`: Separate into `Object.isCopy` and `Object.isCopyDeep`, where + `isCopyDeep` handles nested plain objects and plain arrays only +- `String.prototype.endsWith`: Adjust up to ES6 specification +- `String.prototype.repeat`: Adjust up to ES6 specification and improve algorithm +- `String.prototype.simpleReplace`: Rename into `String.prototype.plainReplace` +- `String.prototype.startsWith`: Adjust up to ES6 specification +- Update lint rules, and adjust code to that +- Update Travis CI configuration +- Remove Makefile (it's cross-env utility) + +v0.9.2 -- 2013.03.11 +Added: +* Array.prototype.isCopy +* Array.prototype.isUniq +* Error.CustomError +* Function.validFunction +* Object.extendDeep +* Object.descriptor.binder +* Object.safeTraverse +* RegExp.validRegExp +* String.prototype.capitalize +* String.prototype.simpleReplace + +Fixed: +* Fix Array.prototype.diff for sparse arrays +* Accept primitive objects as input values in Object iteration methods and + Object.clear, Object.count, Object.diff, Object.extend, + Object.getPropertyNames, Object.values +* Pass expected arguments to callbacks of Object.filter, Object.mapKeys, + Object.mapToArray, Object.map +* Improve callable callback support in Object.mapToArray + +v0.9.1 -- 2012.09.17 +* Object.reduce - reduce for hash-like collections +* Accapt any callable object as callback in Object.filter, mapKeys and map +* Convention cleanup + +v0.9.0 -- 2012.09.13 +We're getting to real solid API + +Removed: +* Function#memoize - it's grown up to be external package, to be soon published + as 'memoizee' +* String.guid - it doesn't fit es5-ext (extensions) concept, will be provided as + external package +# Function.arguments - obsolete +# Function.context - obsolete +# Function#flip - not readable when used, so it was never used +# Object.clone - obsolete and confusing + +Added: +* String#camelToHyphen - String format convertion + +Renamed: +* String#dashToCamelCase -> String#hyphenToCamel + +Fixes: +* Object.isObject - Quote names in literals that match reserved keywords + (older implementations crashed on that) +* String#repeat - Do not accept negative values (coerce them to 1) + +Improvements: +* Array#remove - Accepts many arguments, we can now remove many values at once +* Object iterators (forEach, map, some) - Compare function invoked with scope + object bound to this +* Function#curry - Algorithm cleanup +* Object.isCopy - Support for all types, not just plain objects +* Object.isPlainObject - Support for cross-frame objects +* Do not memoize any of the functions, it shouldn't be decided internally +* Remove Object.freeze calls in reserved, it's not up to convention +* Improved documentation +* Better linting (hard-core approach using both JSLint mod and JSHint) +* Optional arguments are now documented in funtions signature + +v0.8.2 -- 2012.06.22 +Fix errors in Array's intersection and exclusion methods, related to improper +usage of contains method + +v0.8.1 -- 2012.06.13 +Reorganized internal logic of Function.prototype.memoize. So it's more safe now +and clears cache properly. Additionally preventCache option was provided. + +v0.8.0 -- 2012.05.28 +Again, major overhaul. Probably last experimental stuff was trashed, all API +looks more like standard extensions now. + +Changes: +* Turn all Object.prototype extensions into functions and move them to Object +namespace. We learned that extending Object.prototype is bad idea in any case. +* Rename Function.prototype.curry into Function.prototype.partial. This function + is really doing partial application while currying is slightly different + concept. +* Convert Function.prototype.ncurry to new implementation of + Function.prototype.curry, it now serves real curry concept additionaly it + covers use cases for aritize and hold, which were removed. +* Rename Array's peek to last, and provide support for sparse arrays in it +* Rename Date's monthDaysCount into daysInMonth +* Simplify object iterators, now order of iteration can be configured with just + compareFn argument (no extra byKeys option) +* Rename Object.isDuplicate to Object.isCopy +* Rename Object.isEqual to Object.is which is compatible with future 'is' + keyword +* Function.memoize is now Function.prototype.memoize. Additionally clear cache + functionality is added, and access to original arguments object. +* Rename validation functions: assertNotNull to validValue, assertCallable to + validCallable. validValue was moved to Object namespace. On success they now + return validated value instead of true, it supports better composition. + Additionally created Date.validDate and Error.validError +* All documentation is now held in README.md not in code files. +* Move guid to String namespace. All guids now start with numbers. +* Array.generate: fill argument is now optional +* Object.toArray is now Array.from (as new ES6 specification draft suggests) +* All methods that rely on indexOf or lastIndexOf, now rely on egal (Object.is) + versions of them (eIndexOf, eLastIndexOf) +* Turn all get* functions that returned methods into actuall methods (get* + functionality can still be achieved with help of Function.prototype.partial). + So: Date.getFormat is now Date.prototype.format, + Number.getPad is now Number.prototype.pad, + String.getFormat is now String.prototype.format, + String.getIndent is now String.prototype.indent, + String.getPad is now String.prototype.pad +* Refactored Object.descriptor, it is now just two functions, main one and + main.gs, main is for describing values, and gs for describing getters and + setters. Configuration is passed with first argument as string e.g. 'ce' for + configurable and enumerable. If no configuration string is provided then by + default it returns configurable and writable but not enumerable for value or + configurable but not enumerable for getter/setter +* Function.prototype.silent now returns prepared function (it was + expected to be fixed for 0.7) +* Reserved keywords map (reserved) is now array not hash. +* Object.merge is now Object.extend (while former Object.extend was completely + removed) - 'extend' implies that we change object, not creating new one (as + 'merge' may imply). Similarily Object.mergeProperties was renamed to + Object.extendProperties +* Position argument support in Array.prototype.contains and + String.prototype.contains (so it follows ES6 specification draft) +* endPosition argument support in String.prototype.endsWith and fromPosition + argument support in String.prototype.startsWith (so it follows ES6 + specification draft) +* Better and cleaner String.prototype.indent implementation. No default value + for indent string argument, optional nest value (defaults to 1), remove + nostart argument +* Correct length values for most methods (so they reflect length of similar + methods in standard) +* Length argument is now optional in number and string pad methods. +* Improve arguments validation in general, so it adheres to standard conventions +* Fixed format of package.json + +Removed methods and functions: +* Object.prototype.slice - Object is not ordered collection, so slice doesn't + make sense. +* Function's rcurry, rncurry, s - too cumbersome for JS, not many use cases for + that +* Function.prototype.aritize and Function.prototype.hold - same functionality + can be achieved with new Function.prototype.curry +* Function.prototype.log - provided more generic Function.prototype.wrap for + same use case +* getNextIdGenerator - no use case for that (String.guid should be used if + needed) +* Object.toObject - Can be now acheived with Object(validValue(x)) +* Array.prototype.someValue - no real use case (personally used once and + case was already controversial) +* Date.prototype.duration - moved to external package +* Number.getAutoincrement - No real use case +* Object.prototype.extend, Object.prototype.override, + Object.prototype.plainCreate, Object.prototype.plainExtend - It was probably + too complex, same should be achieved just with Object.create, + Object.descriptor and by saving references to super methods in local scope. +* Object.getCompareBy - Functions should be created individually for each use + case +* Object.get, Object.getSet, Object.set, Object.unset - Not many use cases and + same can be easily achieved with simple inline function +* String.getPrefixWith - Not real use case for something that can be easily + achieved with '+' operator +* Object.isPrimitive - It's just negation of Object.isObject +* Number.prototype.isLess, Number.prototype.isLessOrEqual - they shouldn't be in + Number namespace and should rather be addressed with simple inline functions. +* Number.prototype.subtract - Should rather be addressed with simple inline + function + +New methods and functions: +* Array.prototype.lastIndex - Returns last declared index in array +* String.prototype.last - last for strings +* Function.prototype.wrap - Wrap function with other, it allows to specify + before and after behavior transform return value or prevent original function + from being called. +* Math.sign - Returns sign of a number (already in ES6 specification draft) +* Number.toInt - Converts value to integer (already in ES6 specification draft) +* Number.isNaN - Returns true if value is NaN (already in ES6 specification + draft) +* Number.toUint - Converts value to unsigned integer +* Number.toUint32 - Converts value to 32bit unsigned integer +* Array.prototype.eIndexOf, eLastIndexOf - Egal version (that uses Object.is) of + standard methods (all methods that were using native indexOf or lastIndexOf + now uses eIndexOf and elastIndexOf respectively) +* Array.of - as it's specified for ES6 + +Fixes: +* Fixed binarySearch so it always returns valid list index +* Object.isList - it failed on lists that are callable (e.g. NodeList in Nitro + engine) +* Object.map now supports third argument for callback + +v0.7.1 -- 2012.01.05 +New methods: +* Array.prototype.firstIndex - returns first valid index of array (for + sparse arrays it may not be '0' + +Improvements: +* Array.prototype.first - now returns value for index returned by firstIndex +* Object.prototype.mapToArray - can be called without callback, then array of + key-value pairs is returned + +Fixes +* Array.prototype.forEachRight, object's length read through UInt32 conversion + +v0.7.0 -- 2011.12.27 +Major update. +Stepped back from experimental ideas and introduced more standard approach +taking example from how ES5 methods and functions are designed. One exceptions +is that, we don’t refrain from declaring methods for Object.prototype - it’s up +to developer whether how he decides to use it in his context (as function or as +method). + +In general: +* Removed any method 'functionalization' and functionalize method itself. + es5-ext declares plain methods, which can be configured to work as functions + with call.bind(method) - see documentation. +* Removed separation of Object methods for ES5 (with descriptors) and + ES3 (plain) - we're following ES5 idea on that, some methods are intended just + for enumerable properties and some are for all properties, all are declared + for Object.prototype +* Removed separation of Array generic (collected in List folder) and not generic + methods (collected in Array folder). Now all methods are generic and are in + Array/prototype folder. This separation also meant, that methods in Array are + usually destructive. We don’t do that separation now, there’s generally no use + case for destructive iterators, we should be fine with one version of each + method, (same as ES5 is fine with e.g. one, non destructive 'filter' method) +* Folder structure resembles tree of native ES5 Objects +* All methods are written with ES5 conventions in mind, it means that most + methods are generic and can be run on any object. In more detail: + ** Array.prototype and Object.prototype methods can be run on any object (any + not null or undefined value), + ** Date.prototype methods should be called only on Date instances. + ** Function.prototype methods can be called on any callable objects (not + necessarily functions) + ** Number.prototype & String.prototype methods can be called on any value, in + case of Number it it’ll be degraded to number, in case of string it’ll be + degraded to string. +* Travis CI support (only for Node v0.6 branch, as v0.4 has buggy V8 version) + +Improvements for existing functions and methods: +* Function.memoize (was Function.cache) is now fully generic, can operate on any + type of arguments and it’s NaN safe (all NaN objects are considered equal) +* Method properties passed to Object.prototype.extend or + Object.prototype.override can aside of _super optionally take prototype object + via _proto argument +* Object iterators: forEach, mapToArray and every can now iterate in specified + order +* pluck, invoke and other functions that return reusable functions or methods + have now their results memoized. + +New methods: +* Global: assertNotNull, getNextIdGenerator, guid, isEqual, isPrimitive, + toObject +* Array: generate +* Array.prototype: binarySearch, clear, contains, diff, exclusion, find, first, + forEachRight, group, indexesOf, intersection, remove, someRight, someValue +* Boolean: isBoolean +* Date: isDate +* Function: arguments, context, insert, isArguments, remove +* Function.prototype: not, silent +* Number: getAutoincrement, isNumber +* Number.prototype: isLessOrEqual, isLess, subtract +* Object: assertCallable, descriptor (functions for clean descriptors), + getCompareBy, isCallable, isObject +* Object.prototype: clone (real clone), compact, count, diff, empty, + getPropertyNames, get, keyOf, mapKeys, override, plainCreate, plainExtend, + slice, some, unset +* RegExp: isRegExp +* String: getPrefixWith, isString +* String.prototype: caseInsensitiveCompare, contains, isNumeric + +Renamed methods: +* Date.clone -> Date.prototype.copy +* Date.format -> Date.getFormat +* Date/day/floor -> Date.prototype.floorDay +* Date/month/floor -> Date.prototype.floorMonth +* Date/month/year -> Date.prototype.floorYear +* Function.cache -> Function.memoize +* Function.getApplyArg -> Function.prototype.match +* Function.sequence -> Function.prototype.chain +* List.findSameStartLength -> Array.prototype.commonLeft +* Number.pad -> Number.getPad +* Object/plain/clone -> Object.prototype.copy +* Object/plain/elevate -> Object.prototype.flatten +* Object/plain/same -> Object.prototype.isDuplicate +* Object/plain/setValue -> Object.getSet +* String.format -> String.getFormat +* String.indent -> String.getIndent +* String.pad -> String.getPad +* String.trimLeftStr -> String.prototype.trimCommonLeft +* Object.merge -> Object.prototype.mergeProperties +* Object/plain/pluck -> Object.prototype.get +* Array.clone is now Array.prototype.copy and can be used also on any array-like + objects +* List.isList -> Object.isList +* List.toArray -> Object.prototype.toArray +* String/convert/dashToCamelCase -> String.prototype.dashToCamelCase + +Removed methods: +* Array.compact - removed destructive version (that operated on same array), we + have now non destructive version as Array.prototype.compact. +* Function.applyBind -> use apply.bind directly +* Function.bindBind -> use bind.bind directly +* Function.callBind -> use call.bind directly +* Fuction.clone -> no valid use case +* Function.dscope -> controversial approach, shouldn’t be considered seriously +* Function.functionalize -> It was experimental but standards are standards +* List/sort/length -> It can be easy obtained by Object.getCompareBy(‘length’) +* List.concat -> Concat’s for array-like’s makes no sense, just convert to array + first +* List.every -> Use Array.prototype.every directly +* List.filter -> Use Array.prototype.filter directly +* List.forEach -> User Array.prototype.forEach directly +* List.isListObject -> No valid use case, do: isList(list) && (typeof list === + 'object’) +* List.map -> Use Array.prototype.map directly +* List.reduce -> Use Array.prototype.reduce directly +* List.shiftSame -> Use Array.prototype.commonLeft and do slice +* List.slice -> Use Array.prototype.slice directly +* List.some -> Use Array.prototype.some directly +* Object.bindMethods -> it was version that considered descriptors, we have now + Object.prototype.bindMethods which operates only on enumerable properties +* Object.every -> version that considered all properties, we have now + Object.prototype.every which iterates only enumerables +* Object.invoke -> no use case +* Object.mergeDeep -> no use case +* Object.pluck -> no use case +* Object.same -> it considered descriptors, now there’s only Object.isDuplicate + which compares only enumerable properties +* Object.sameType -> no use case +* Object.toDescriptor and Object.toDescriptors -> replaced by much nicer + Object.descriptor functions +* Object/plain/link -> no use case (it was used internally only by + Object/plain/merge) +* Object/plain/setTrue -> now easily configurable by more universal + Object.getSet(true) +* String.trimRightStr -> Eventually String.prototype.trimCommonRight will be + added + +v0.6.3 -- 2011.12.12 +* Cleared npm warning for misnamed property in package.json + +v0.6.2 -- 2011.08.12 +* Calling String.indent without scope (global scope then) now treated as calling + it with null scope, it allows more direct invocations when using default nest + string: indent().call(str, nest) + +v0.6.1 -- 2011.08.08 +* Added TAD test suite to devDependencies, configured test commands. + Tests can be run with 'make test' or 'npm test' + +v0.6.0 -- 2011.08.07 +New methods: +* Array: clone, compact (in place) +* Date: format, duration, clone, monthDaysCount, day.floor, month.floor, + year.floor +* Function: getApplyArg, , ncurry, rncurry, hold, cache, log +* List: findSameStartLength, shiftSame, peek, isListObject +* Number: pad +* Object: sameType, toString, mapToArray, mergeDeep, toDescriptor, + toDescriptors, invoke +* String: startsWith, endsWith, indent, trimLeftStr, trimRightStr, pad, format + +Fixed: +* Object.extend does now prototypal extend as exptected +* Object.merge now tries to overwrite only configurable properties +* Function.flip + +Improved: +* Faster List.toArray +* Better global retrieval +* Functionalized all Function methods +* Renamed bindApply and bindCall to applyBind and callBind +* Removed Function.inherit (as it's unintuitive curry clone) +* Straightforward logic in Function.k +* Fixed naming of some tests files (letter case issue) +* Renamed Function.saturate into Function.lock +* String.dashToCamelCase digits support +* Strings now considered as List objects +* Improved List.compact +* Concise logic for List.concat +* Test wit TAD in clean ES5 context + +v0.5.1 -- 2011.07.11 +* Function's bindBind, bindCall and bindApply now more versatile + +v0.5.0 -- 2011.07.07 +* Removed Object.is and List.apply +* Renamed Object.plain.is to Object.plain.isPlainObject (keep naming convention + consistent) +* Improved documentation + +v0.4.0 -- 2011.07.05 +* Take most functions on Object to Object.plain to keep them away from object + descriptors +* Object functions with ES5 standard in mind (object descriptors) + +v0.3.0 -- 2011.06.24 +* New functions +* Consistent file naming (dash instead of camelCase) + +v0.2.1 -- 2011.05.28 +* Renamed Functions.K and Function.S to to lowercase versions (use consistent + naming) + +v0.2.0 -- 2011.05.28 +* Renamed Array folder to List (as its generic functions for array-like objects) +* Added Makefile +* Added various functions + +v0.1.0 -- 2011.05.24 +* Initial version diff --git a/node_modules/es5-ext/LICENSE b/node_modules/es5-ext/LICENSE new file mode 100644 index 000000000..f82047ef9 --- /dev/null +++ b/node_modules/es5-ext/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (C) 2011-2017 Mariusz Nowak (www.medikoo.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/es5-ext/README.md b/node_modules/es5-ext/README.md new file mode 100644 index 000000000..594b48ed8 --- /dev/null +++ b/node_modules/es5-ext/README.md @@ -0,0 +1,993 @@ +# es5-ext +## ECMAScript 5 extensions +### (with respect to ECMAScript 6 standard) + +Shims for upcoming ES6 standard and other goodies implemented strictly with ECMAScript conventions in mind. + +It's designed to be used in compliant ECMAScript 5 or ECMAScript 6 environments. Older environments are not supported, although most of the features should work with correct ECMAScript 5 shim on board. + +When used in ECMAScript 6 environment, native implementation (if valid) takes precedence over shims. + +### Installation + + $ npm install es5-ext + +To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/) + +### Usage + +#### ECMAScript 6 features + +You can force ES6 features to be implemented in your environment, e.g. following will assign `from` function to `Array` (only if it's not implemented already). + +```javascript +require('es5-ext/array/from/implement'); +Array.from('foo'); // ['f', 'o', 'o'] +``` + +You can also access shims directly, without fixing native objects. Following will return native `Array.from` if it's available and fallback to shim if it's not. + +```javascript +var aFrom = require('es5-ext/array/from'); +aFrom('foo'); // ['f', 'o', 'o'] +``` + +If you want to use shim unconditionally (even if native implementation exists) do: + +```javascript +var aFrom = require('es5-ext/array/from/shim'); +aFrom('foo'); // ['f', 'o', 'o'] +``` + +##### List of ES6 shims + +It's about properties introduced with ES6 and those that have been updated in new spec. + +- `Array.from` -> `require('es5-ext/array/from')` +- `Array.of` -> `require('es5-ext/array/of')` +- `Array.prototype.concat` -> `require('es5-ext/array/#/concat')` +- `Array.prototype.copyWithin` -> `require('es5-ext/array/#/copy-within')` +- `Array.prototype.entries` -> `require('es5-ext/array/#/entries')` +- `Array.prototype.fill` -> `require('es5-ext/array/#/fill')` +- `Array.prototype.filter` -> `require('es5-ext/array/#/filter')` +- `Array.prototype.find` -> `require('es5-ext/array/#/find')` +- `Array.prototype.findIndex` -> `require('es5-ext/array/#/find-index')` +- `Array.prototype.keys` -> `require('es5-ext/array/#/keys')` +- `Array.prototype.map` -> `require('es5-ext/array/#/map')` +- `Array.prototype.slice` -> `require('es5-ext/array/#/slice')` +- `Array.prototype.splice` -> `require('es5-ext/array/#/splice')` +- `Array.prototype.values` -> `require('es5-ext/array/#/values')` +- `Array.prototype[@@iterator]` -> `require('es5-ext/array/#/@@iterator')` +- `Math.acosh` -> `require('es5-ext/math/acosh')` +- `Math.asinh` -> `require('es5-ext/math/asinh')` +- `Math.atanh` -> `require('es5-ext/math/atanh')` +- `Math.cbrt` -> `require('es5-ext/math/cbrt')` +- `Math.clz32` -> `require('es5-ext/math/clz32')` +- `Math.cosh` -> `require('es5-ext/math/cosh')` +- `Math.exmp1` -> `require('es5-ext/math/expm1')` +- `Math.fround` -> `require('es5-ext/math/fround')` +- `Math.hypot` -> `require('es5-ext/math/hypot')` +- `Math.imul` -> `require('es5-ext/math/imul')` +- `Math.log1p` -> `require('es5-ext/math/log1p')` +- `Math.log2` -> `require('es5-ext/math/log2')` +- `Math.log10` -> `require('es5-ext/math/log10')` +- `Math.sign` -> `require('es5-ext/math/sign')` +- `Math.signh` -> `require('es5-ext/math/signh')` +- `Math.tanh` -> `require('es5-ext/math/tanh')` +- `Math.trunc` -> `require('es5-ext/math/trunc')` +- `Number.EPSILON` -> `require('es5-ext/number/epsilon')` +- `Number.MAX_SAFE_INTEGER` -> `require('es5-ext/number/max-safe-integer')` +- `Number.MIN_SAFE_INTEGER` -> `require('es5-ext/number/min-safe-integer')` +- `Number.isFinite` -> `require('es5-ext/number/is-finite')` +- `Number.isInteger` -> `require('es5-ext/number/is-integer')` +- `Number.isNaN` -> `require('es5-ext/number/is-nan')` +- `Number.isSafeInteger` -> `require('es5-ext/number/is-safe-integer')` +- `Object.assign` -> `require('es5-ext/object/assign')` +- `Object.keys` -> `require('es5-ext/object/keys')` +- `Object.setPrototypeOf` -> `require('es5-ext/object/set-prototype-of')` +- `RegExp.prototype.match` -> `require('es5-ext/reg-exp/#/match')` +- `RegExp.prototype.replace` -> `require('es5-ext/reg-exp/#/replace')` +- `RegExp.prototype.search` -> `require('es5-ext/reg-exp/#/search')` +- `RegExp.prototype.split` -> `require('es5-ext/reg-exp/#/split')` +- `RegExp.prototype.sticky` -> Implement with `require('es5-ext/reg-exp/#/sticky/implement')`, use as function with `require('es5-ext/reg-exp/#/is-sticky')` +- `RegExp.prototype.unicode` -> Implement with `require('es5-ext/reg-exp/#/unicode/implement')`, use as function with `require('es5-ext/reg-exp/#/is-unicode')` +- `String.fromCodePoint` -> `require('es5-ext/string/from-code-point')` +- `String.raw` -> `require('es5-ext/string/raw')` +- `String.prototype.codePointAt` -> `require('es5-ext/string/#/code-point-at')` +- `String.prototype.contains` -> `require('es5-ext/string/#/contains')` +- `String.prototype.endsWith` -> `require('es5-ext/string/#/ends-with')` +- `String.prototype.normalize` -> `require('es5-ext/string/#/normalize')` +- `String.prototype.repeat` -> `require('es5-ext/string/#/repeat')` +- `String.prototype.startsWith` -> `require('es5-ext/string/#/starts-with')` +- `String.prototype[@@iterator]` -> `require('es5-ext/string/#/@@iterator')` + +#### Non ECMAScript standard features + +__es5-ext__ provides also other utils, and implements them as if they were proposed for a standard. It mostly offers methods (not functions) which can directly be assigned to native prototypes: + +```javascript +Object.defineProperty(Function.prototype, 'partial', { value: require('es5-ext/function/#/partial'), + configurable: true, enumerable: false, writable: true }); +Object.defineProperty(Array.prototype, 'flatten', { value: require('es5-ext/array/#/flatten'), + configurable: true, enumerable: false, writable: true }); +Object.defineProperty(String.prototype, 'capitalize', { value: require('es5-ext/string/#/capitalize'), + configurable: true, enumerable: false, writable: true }); +``` + +See [es5-extend](https://github.com/wookieb/es5-extend#es5-extend), a great utility that automatically will extend natives for you. + +__Important:__ Remember to __not__ extend natives in scope of generic reusable packages (e.g. ones you intend to publish to npm). Extending natives is fine __only__ if you're the _owner_ of the global scope, so e.g. in final project you lead development of. + +When you're in situation when native extensions are not good idea, then you should use methods indirectly: + + +```javascript +var flatten = require('es5-ext/array/#/flatten'); + +flatten.call([1, [2, [3, 4]]]); // [1, 2, 3, 4] +``` + +for better convenience you can turn methods into functions: + + +```javascript +var call = Function.prototype.call +var flatten = call.bind(require('es5-ext/array/#/flatten')); + +flatten([1, [2, [3, 4]]]); // [1, 2, 3, 4] +``` + +You can configure custom toolkit (like [underscorejs](http://underscorejs.org/)), and use it throughout your application + +```javascript +var util = {}; +util.partial = call.bind(require('es5-ext/function/#/partial')); +util.flatten = call.bind(require('es5-ext/array/#/flatten')); +util.startsWith = call.bind(require('es5-ext/string/#/starts-with')); + +util.flatten([1, [2, [3, 4]]]); // [1, 2, 3, 4] +``` + +As with native ones most methods are generic and can be run on any type of object. + +## API + +### Global extensions + +#### global _(es5-ext/global)_ + +Object that represents global scope + +### Array Constructor extensions + +#### from(arrayLike[, mapFn[, thisArg]]) _(es5-ext/array/from)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from). +Returns array representation of _iterable_ or _arrayLike_. If _arrayLike_ is an instance of array, its copy is returned. + +#### generate([length[, …fill]]) _(es5-ext/array/generate)_ + +Generate an array of pre-given _length_ built of repeated arguments. + +#### isPlainArray(x) _(es5-ext/array/is-plain-array)_ + +Returns true if object is plain array (not instance of one of the Array's extensions). + +#### of([…items]) _(es5-ext/array/of)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.of). +Create an array from given arguments. + +#### toArray(obj) _(es5-ext/array/to-array)_ + +Returns array representation of `obj`. If `obj` is already an array, `obj` is returned back. + +#### validArray(obj) _(es5-ext/array/valid-array)_ + +Returns `obj` if it's an array, otherwise throws `TypeError` + +### Array Prototype extensions + +#### arr.binarySearch(compareFn) _(es5-ext/array/#/binary-search)_ + +In __sorted__ list search for index of item for which _compareFn_ returns value closest to _0_. +It's variant of binary search algorithm + +#### arr.clear() _(es5-ext/array/#/clear)_ + +Clears the array + +#### arr.compact() _(es5-ext/array/#/compact)_ + +Returns a copy of the context with all non-values (`null` or `undefined`) removed. + +#### arr.concat() _(es5-ext/array/#/concat)_ + +[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.concat). +ES6's version of `concat`. Supports `isConcatSpreadable` symbol, and returns array of same type as the context. + +#### arr.contains(searchElement[, position]) _(es5-ext/array/#/contains)_ + +Whether list contains the given value. + +#### arr.copyWithin(target, start[, end]) _(es5-ext/array/#/copy-within)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.copywithin). + +#### arr.diff(other) _(es5-ext/array/#/diff)_ + +Returns the array of elements that are present in context list but not present in other list. + +#### arr.eIndexOf(searchElement[, fromIndex]) _(es5-ext/array/#/e-index-of)_ + +_egal_ version of `indexOf` method. [_SameValueZero_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) logic is used for comparision + +#### arr.eLastIndexOf(searchElement[, fromIndex]) _(es5-ext/array/#/e-last-index-of)_ + +_egal_ version of `lastIndexOf` method. [_SameValueZero_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) logic is used for comparision + +#### arr.entries() _(es5-ext/array/#/entries)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.entries). +Returns iterator object, which traverses the array. Each value is represented with an array, where first value is an index and second is corresponding to index value. + +#### arr.exclusion([…lists]]) _(es5-ext/array/#/exclusion)_ + +Returns the array of elements that are found only in one of the lists (either context list or list provided in arguments). + +#### arr.fill(value[, start, end]) _(es5-ext/array/#/fill)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.fill). + +#### arr.filter(callback[, thisArg]) _(es5-ext/array/#/filter)_ + +[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.filter). +ES6's version of `filter`, returns array of same type as the context. + +#### arr.find(predicate[, thisArg]) _(es5-ext/array/#/find)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.find). +Return first element for which given function returns true + +#### arr.findIndex(predicate[, thisArg]) _(es5-ext/array/#/find-index)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.findindex). +Return first index for which given function returns true + +#### arr.first() _(es5-ext/array/#/first)_ + +Returns value for first defined index + +#### arr.firstIndex() _(es5-ext/array/#/first-index)_ + +Returns first declared index of the array + +#### arr.flatten() _(es5-ext/array/#/flatten)_ + +Returns flattened version of the array + +#### arr.forEachRight(cb[, thisArg]) _(es5-ext/array/#/for-each-right)_ + +`forEach` starting from last element + +#### arr.group(cb[, thisArg]) _(es5-ext/array/#/group)_ + +Group list elements by value returned by _cb_ function + +#### arr.indexesOf(searchElement[, fromIndex]) _(es5-ext/array/#/indexes-of)_ + +Returns array of all indexes of given value + +#### arr.intersection([…lists]) _(es5-ext/array/#/intersection)_ + +Computes the array of values that are the intersection of all lists (context list and lists given in arguments) + +#### arr.isCopy(other) _(es5-ext/array/#/is-copy)_ + +Returns true if both context and _other_ lists have same content + +#### arr.isUniq() _(es5-ext/array/#/is-uniq)_ + +Returns true if all values in array are unique + +#### arr.keys() _(es5-ext/array/#/keys)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.keys). +Returns iterator object, which traverses all array indexes. + +#### arr.last() _(es5-ext/array/#/last)_ + +Returns value of last defined index + +#### arr.lastIndex() _(es5-ext/array/#/last)_ + +Returns last defined index of the array + +#### arr.map(callback[, thisArg]) _(es5-ext/array/#/map)_ + +[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.map). +ES6's version of `map`, returns array of same type as the context. + +#### arr.remove(value[, …valuen]) _(es5-ext/array/#/remove)_ + +Remove values from the array + +#### arr.separate(sep) _(es5-ext/array/#/separate)_ + +Returns array with items separated with `sep` value + +#### arr.slice(callback[, thisArg]) _(es5-ext/array/#/slice)_ + +[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.slice). +ES6's version of `slice`, returns array of same type as the context. + +#### arr.someRight(cb[, thisArg]) _(es5-ext/array/#/someRight)_ + +`some` starting from last element + +#### arr.splice(callback[, thisArg]) _(es5-ext/array/#/splice)_ + +[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.splice). +ES6's version of `splice`, returns array of same type as the context. + +#### arr.uniq() _(es5-ext/array/#/uniq)_ + +Returns duplicate-free version of the array + +#### arr.values() _(es5-ext/array/#/values)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.values). +Returns iterator object which traverses all array values. + +#### arr[@@iterator] _(es5-ext/array/#/@@iterator)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype-@@iterator). +Returns iterator object which traverses all array values. + +### Boolean Constructor extensions + +#### isBoolean(x) _(es5-ext/boolean/is-boolean)_ + +Whether value is boolean + +### Date Constructor extensions + +#### isDate(x) _(es5-ext/date/is-date)_ + +Whether value is date instance + +#### validDate(x) _(es5-ext/date/valid-date)_ + +If given object is not date throw TypeError in other case return it. + +### Date Prototype extensions + +#### date.copy(date) _(es5-ext/date/#/copy)_ + +Returns a copy of the date object + +#### date.daysInMonth() _(es5-ext/date/#/days-in-month)_ + +Returns number of days of date's month + +#### date.floorDay() _(es5-ext/date/#/floor-day)_ + +Sets the date time to 00:00:00.000 + +#### date.floorMonth() _(es5-ext/date/#/floor-month)_ + +Sets date day to 1 and date time to 00:00:00.000 + +#### date.floorYear() _(es5-ext/date/#/floor-year)_ + +Sets date month to 0, day to 1 and date time to 00:00:00.000 + +#### date.format(pattern) _(es5-ext/date/#/format)_ + +Formats date up to given string. Supported patterns: + +* `%Y` - Year with century, 1999, 2003 +* `%y` - Year without century, 99, 03 +* `%m` - Month, 01..12 +* `%d` - Day of the month 01..31 +* `%H` - Hour (24-hour clock), 00..23 +* `%M` - Minute, 00..59 +* `%S` - Second, 00..59 +* `%L` - Milliseconds, 000..999 + +### Error Constructor extensions + +#### custom(message/*, code, ext*/) _(es5-ext/error/custom)_ + +Creates custom error object, optinally extended with `code` and other extension properties (provided with `ext` object) + +#### isError(x) _(es5-ext/error/is-error)_ + +Whether value is an error (instance of `Error`). + +#### validError(x) _(es5-ext/error/valid-error)_ + +If given object is not error throw TypeError in other case return it. + +### Error Prototype extensions + +#### err.throw() _(es5-ext/error/#/throw)_ + +Throws error + +### Function Constructor extensions + +Some of the functions were inspired by [Functional JavaScript](http://osteele.com/sources/javascript/functional/) project by Olivier Steele + +#### constant(x) _(es5-ext/function/constant)_ + +Returns a constant function that returns pregiven argument + +_k(x)(y) =def x_ + +#### identity(x) _(es5-ext/function/identity)_ + +Identity function. Returns first argument + +_i(x) =def x_ + +#### invoke(name[, …args]) _(es5-ext/function/invoke)_ + +Returns a function that takes an object as an argument, and applies object's +_name_ method to arguments. +_name_ can be name of the method or method itself. + +_invoke(name, …args)(object, …args2) =def object\[name\]\(…args, …args2\)_ + +#### isArguments(x) _(es5-ext/function/is-arguments)_ + +Whether value is arguments object + +#### isFunction(arg) _(es5-ext/function/is-function)_ + +Whether value is instance of function + +#### noop() _(es5-ext/function/noop)_ + +No operation function + +#### pluck(name) _(es5-ext/function/pluck)_ + +Returns a function that takes an object, and returns the value of its _name_ +property + +_pluck(name)(obj) =def obj[name]_ + +#### validFunction(arg) _(es5-ext/function/valid-function)_ + +If given object is not function throw TypeError in other case return it. + +### Function Prototype extensions + +Some of the methods were inspired by [Functional JavaScript](http://osteele.com/sources/javascript/functional/) project by Olivier Steele + +#### fn.compose([…fns]) _(es5-ext/function/#/compose)_ + +Applies the functions in reverse argument-list order. + +_f1.compose(f2, f3, f4)(…args) =def f1(f2(f3(f4(…arg))))_ + +#### fn.copy() _(es5-ext/function/#/copy)_ + +Produces copy of given function + +#### fn.curry([n]) _(es5-ext/function/#/curry)_ + +Invoking the function returned by this function only _n_ arguments are passed to the underlying function. If the underlying function is not saturated, the result is a function that passes all its arguments to the underlying function. +If _n_ is not provided then it defaults to context function length + +_f.curry(4)(arg1, arg2)(arg3)(arg4) =def f(arg1, args2, arg3, arg4)_ + +#### fn.lock([…args]) _(es5-ext/function/#/lock)_ + +Returns a function that applies the underlying function to _args_, and ignores its own arguments. + +_f.lock(…args)(…args2) =def f(…args)_ + +_Named after it's counterpart in Google Closure_ + +#### fn.not() _(es5-ext/function/#/not)_ + +Returns a function that returns boolean negation of value returned by underlying function. + +_f.not()(…args) =def !f(…args)_ + +#### fn.partial([…args]) _(es5-ext/function/#/partial)_ + +Returns a function that when called will behave like context function called with initially passed arguments. If more arguments are suplilied, they are appended to initial args. + +_f.partial(…args1)(…args2) =def f(…args1, …args2)_ + +#### fn.spread() _(es5-ext/function/#/spread)_ + +Returns a function that applies underlying function with first list argument + +_f.match()(args) =def f.apply(null, args)_ + +#### fn.toStringTokens() _(es5-ext/function/#/to-string-tokens)_ + +Serializes function into two (arguments and body) string tokens. Result is plain object with `args` and `body` properties. + +### Math extensions + +#### acosh(x) _(es5-ext/math/acosh)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.acosh). + +#### asinh(x) _(es5-ext/math/asinh)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.asinh). + +#### atanh(x) _(es5-ext/math/atanh)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.atanh). + +#### cbrt(x) _(es5-ext/math/cbrt)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.cbrt). + +#### clz32(x) _(es5-ext/math/clz32)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.clz32). + +#### cosh(x) _(es5-ext/math/cosh)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.cosh). + +#### expm1(x) _(es5-ext/math/expm1)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.expm1). + +#### fround(x) _(es5-ext/math/fround)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.fround). + +#### hypot([…values]) _(es5-ext/math/hypot)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.hypot). + +#### imul(x, y) _(es5-ext/math/imul)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.imul). + +#### log1p(x) _(es5-ext/math/log1p)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.log1p). + +#### log2(x) _(es5-ext/math/log2)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.log2). + +#### log10(x) _(es5-ext/math/log10)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.log10). + +#### sign(x) _(es5-ext/math/sign)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.sign). + +#### sinh(x) _(es5-ext/math/sinh)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.sinh). + +#### tanh(x) _(es5-ext/math/tanh)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.tanh). + +#### trunc(x) _(es5-ext/math/trunc)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.trunc). + +### Number Constructor extensions + +#### EPSILON _(es5-ext/number/epsilon)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.epsilon). + +The difference between 1 and the smallest value greater than 1 that is representable as a Number value, which is approximately 2.2204460492503130808472633361816 x 10-16. + +#### isFinite(x) _(es5-ext/number/is-finite)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite). +Whether value is finite. Differs from global isNaN that it doesn't do type coercion. + +#### isInteger(x) _(es5-ext/number/is-integer)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isinteger). +Whether value is integer. + +#### isNaN(x) _(es5-ext/number/is-nan)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isnan). +Whether value is NaN. Differs from global isNaN that it doesn't do type coercion. + +#### isNumber(x) _(es5-ext/number/is-number)_ + +Whether given value is number + +#### isSafeInteger(x) _(es5-ext/number/is-safe-integer)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.issafeinteger). + +#### MAX_SAFE_INTEGER _(es5-ext/number/max-safe-integer)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.maxsafeinteger). +The value of Number.MAX_SAFE_INTEGER is 9007199254740991. + +#### MIN_SAFE_INTEGER _(es5-ext/number/min-safe-integer)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.minsafeinteger). +The value of Number.MIN_SAFE_INTEGER is -9007199254740991 (253-1). + +#### toInteger(x) _(es5-ext/number/to-integer)_ + +Converts value to integer + +#### toPosInteger(x) _(es5-ext/number/to-pos-integer)_ + +Converts value to positive integer. If provided value is less than 0, then 0 is returned + +#### toUint32(x) _(es5-ext/number/to-uint32)_ + +Converts value to unsigned 32 bit integer. This type is used for array lengths. +See: http://www.2ality.com/2012/02/js-integers.html + +### Number Prototype extensions + +#### num.pad(length[, precision]) _(es5-ext/number/#/pad)_ + +Pad given number with zeros. Returns string + +### Object Constructor extensions + +#### assign(target, source[, …sourcen]) _(es5-ext/object/assign)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign). +Extend _target_ by enumerable own properties of other objects. If properties are already set on target object, they will be overwritten. + +#### clear(obj) _(es5-ext/object/clear)_ + +Remove all enumerable own properties of the object + +#### compact(obj) _(es5-ext/object/compact)_ + +Returns copy of the object with all enumerable properties that have no falsy values + +#### compare(obj1, obj2) _(es5-ext/object/compare)_ + +Universal cross-type compare function. To be used for e.g. array sort. + +#### copy(obj) _(es5-ext/object/copy)_ + +Returns copy of the object with all enumerable properties. + +#### copyDeep(obj) _(es5-ext/object/copy-deep)_ + +Returns deep copy of the object with all enumerable properties. + +#### count(obj) _(es5-ext/object/count)_ + +Counts number of enumerable own properties on object + +#### create(obj[, properties]) _(es5-ext/object/create)_ + +`Object.create` alternative that provides workaround for [V8 issue](http://code.google.com/p/v8/issues/detail?id=2804). + +When `null` is provided as a prototype, it's substituted with specially prepared object that derives from Object.prototype but has all Object.prototype properties shadowed with undefined. + +It's quirky solution that allows us to have plain objects with no truthy properties but with turnable prototype. + +Use only for objects that you plan to switch prototypes of and be aware of limitations of this workaround. + +#### eq(x, y) _(es5-ext/object/eq)_ + +Whether two values are equal, using [_SameValueZero_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) algorithm. + +#### every(obj, cb[, thisArg[, compareFn]]) _(es5-ext/object/every)_ + +Analogous to Array.prototype.every. Returns true if every key-value pair in this object satisfies the provided testing function. +Optionally _compareFn_ can be provided which assures that keys are tested in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key). + +#### filter(obj, cb[, thisArg]) _(es5-ext/object/filter)_ + +Analogous to Array.prototype.filter. Returns new object with properites for which _cb_ function returned truthy value. + +#### firstKey(obj) _(es5-ext/object/first-key)_ + +Returns first enumerable key of the object, as keys are unordered by specification, it can be any key of an object. + +#### flatten(obj) _(es5-ext/object/flatten)_ + +Returns new object, with flatten properties of input object + +_flatten({ a: { b: 1 }, c: { d: 1 } }) =def { b: 1, d: 1 }_ + +#### forEach(obj, cb[, thisArg[, compareFn]]) _(es5-ext/object/for-each)_ + +Analogous to Array.prototype.forEach. Calls a function for each key-value pair found in object +Optionally _compareFn_ can be provided which assures that properties are iterated in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key). + +#### getPropertyNames() _(es5-ext/object/get-property-names)_ + +Get all (not just own) property names of the object + +#### is(x, y) _(es5-ext/object/is)_ + +Whether two values are equal, using [_SameValue_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) algorithm. + +#### isArrayLike(x) _(es5-ext/object/is-array-like)_ + +Whether object is array-like object + +#### isCopy(x, y) _(es5-ext/object/is-copy)_ + +Two values are considered a copy of same value when all of their own enumerable properties have same values. + +#### isCopyDeep(x, y) _(es5-ext/object/is-copy-deep)_ + +Deep comparision of objects + +#### isEmpty(obj) _(es5-ext/object/is-empty)_ + +True if object doesn't have any own enumerable property + +#### isObject(arg) _(es5-ext/object/is-object)_ + +Whether value is not primitive + +#### isPlainObject(arg) _(es5-ext/object/is-plain-object)_ + +Whether object is plain object, its protototype should be Object.prototype and it cannot be host object. + +#### keyOf(obj, searchValue) _(es5-ext/object/key-of)_ + +Search object for value + +#### keys(obj) _(es5-ext/object/keys)_ + +[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.keys). +ES6's version of `keys`, doesn't throw on primitive input + +#### map(obj, cb[, thisArg]) _(es5-ext/object/map)_ + +Analogous to Array.prototype.map. Creates a new object with properties which values are results of calling a provided function on every key-value pair in this object. + +#### mapKeys(obj, cb[, thisArg]) _(es5-ext/object/map-keys)_ + +Create new object with same values, but remapped keys + +#### mixin(target, source) _(es5-ext/object/mixin)_ + +Extend _target_ by all own properties of other objects. Properties found in both objects will be overwritten (unless they're not configurable and cannot be overwritten). +_It was for a moment part of ECMAScript 6 draft._ + +#### mixinPrototypes(target, …source]) _(es5-ext/object/mixin-prototypes)_ + +Extends _target_, with all source and source's prototype properties. +Useful as an alternative for `setPrototypeOf` in environments in which it cannot be shimmed (no `__proto__` support). + +#### normalizeOptions(options) _(es5-ext/object/normalize-options)_ + +Normalizes options object into flat plain object. + +Useful for functions in which we either need to keep options object for future reference or need to modify it for internal use. + +- It never returns input `options` object back (always a copy is created) +- `options` can be undefined in such case empty plain object is returned. +- Copies all enumerable properties found down prototype chain. + +#### primitiveSet([…names]) _(es5-ext/object/primitive-set)_ + +Creates `null` prototype based plain object, and sets on it all property names provided in arguments to true. + +#### safeTraverse(obj[, …names]) _(es5-ext/object/safe-traverse)_ + +Safe navigation of object properties. See http://wiki.ecmascript.org/doku.php?id=strawman:existential_operator + +#### serialize(value) _(es5-ext/object/serialize)_ + +Serialize value into string. Differs from [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) that it serializes also dates, functions and regular expresssions. + +#### setPrototypeOf(object, proto) _(es5-ext/object/set-prototype-of)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.setprototypeof). +If native version is not provided, it depends on existence of `__proto__` functionality, if it's missing, `null` instead of function is exposed. + +#### some(obj, cb[, thisArg[, compareFn]]) _(es5-ext/object/some)_ + +Analogous to Array.prototype.some Returns true if any key-value pair satisfies the provided +testing function. +Optionally _compareFn_ can be provided which assures that keys are tested in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key). + +#### toArray(obj[, cb[, thisArg[, compareFn]]]) _(es5-ext/object/to-array)_ + +Creates an array of results of calling a provided function on every key-value pair in this object. +Optionally _compareFn_ can be provided which assures that results are added in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key). + +#### unserialize(str) _(es5-ext/object/unserialize)_ + +Userializes value previously serialized with [serialize](#serializevalue-es5-extobjectserialize) + +#### validCallable(x) _(es5-ext/object/valid-callable)_ + +If given object is not callable throw TypeError in other case return it. + +#### validObject(x) _(es5-ext/object/valid-object)_ + +Throws error if given value is not an object, otherwise it is returned. + +#### validValue(x) _(es5-ext/object/valid-value)_ + +Throws error if given value is `null` or `undefined`, otherwise returns value. + +### RegExp Constructor extensions + +#### escape(str) _(es5-ext/reg-exp/escape)_ + +Escapes string to be used in regular expression + +#### isRegExp(x) _(es5-ext/reg-exp/is-reg-exp)_ + +Whether object is regular expression + +#### validRegExp(x) _(es5-ext/reg-exp/valid-reg-exp)_ + +If object is regular expression it is returned, otherwise TypeError is thrown. + +### RegExp Prototype extensions + +#### re.isSticky(x) _(es5-ext/reg-exp/#/is-sticky)_ + +Whether regular expression has `sticky` flag. + +It's to be used as counterpart to [regExp.sticky](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-get-regexp.prototype.sticky) if it's not implemented. + +#### re.isUnicode(x) _(es5-ext/reg-exp/#/is-unicode)_ + +Whether regular expression has `unicode` flag. + +It's to be used as counterpart to [regExp.unicode](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-get-regexp.prototype.unicode) if it's not implemented. + +#### re.match(string) _(es5-ext/reg-exp/#/match)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.match). + +#### re.replace(string, replaceValue) _(es5-ext/reg-exp/#/replace)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.replace). + +#### re.search(string) _(es5-ext/reg-exp/#/search)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.search). + +#### re.split(string) _(es5-ext/reg-exp/#/search)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.split). + +#### re.sticky _(es5-ext/reg-exp/#/sticky/implement)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.sticky). +It's a getter, so only `implement` and `is-implemented` modules are provided. + +#### re.unicode _(es5-ext/reg-exp/#/unicode/implement)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.unicode). +It's a getter, so only `implement` and `is-implemented` modules are provided. + +### String Constructor extensions + +#### formatMethod(fMap) _(es5-ext/string/format-method)_ + +Creates format method. It's used e.g. to create `Date.prototype.format` method + +#### fromCodePoint([…codePoints]) _(es5-ext/string/from-code-point)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.fromcodepoint) + +#### isString(x) _(es5-ext/string/is-string)_ + +Whether object is string + +#### randomUniq() _(es5-ext/string/random-uniq)_ + +Returns randomly generated id, with guarantee of local uniqueness (no same id will be returned twice) + +#### raw(callSite[, …substitutions]) _(es5-ext/string/raw)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.raw) + +### String Prototype extensions + +#### str.at(pos) _(es5-ext/string/#/at)_ + +_Proposed for ECMAScript 6/7 standard, but not (yet) in a draft_ + +Returns a string at given position in Unicode-safe manner. +Based on [implementation by Mathias Bynens](https://github.com/mathiasbynens/String.prototype.at). + +#### str.camelToHyphen() _(es5-ext/string/#/camel-to-hyphen)_ + +Convert camelCase string to hyphen separated, e.g. one-two-three -> oneTwoThree. +Useful when converting names from js property convention into filename convention. + +#### str.capitalize() _(es5-ext/string/#/capitalize)_ + +Capitalize first character of a string + +#### str.caseInsensitiveCompare(str) _(es5-ext/string/#/case-insensitive-compare)_ + +Case insensitive compare + +#### str.codePointAt(pos) _(es5-ext/string/#/code-point-at)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.codepointat) + +Based on [implementation by Mathias Bynens](https://github.com/mathiasbynens/String.prototype.codePointAt). + +#### str.contains(searchString[, position]) _(es5-ext/string/#/contains)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.contains) + +Whether string contains given string. + +#### str.endsWith(searchString[, endPosition]) _(es5-ext/string/#/ends-with)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.endswith). +Whether strings ends with given string + +#### str.hyphenToCamel() _(es5-ext/string/#/hyphen-to-camel)_ + +Convert hyphen separated string to camelCase, e.g. one-two-three -> oneTwoThree. +Useful when converting names from filename convention to js property name convention. + +#### str.indent(str[, count]) _(es5-ext/string/#/indent)_ + +Indents each line with provided _str_ (if _count_ given then _str_ is repeated _count_ times). + +#### str.last() _(es5-ext/string/#/last)_ + +Return last character + +#### str.normalize([form]) _(es5-ext/string/#/normalize)_ + +[_Introduced with ECMAScript 6_](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize). +Returns the Unicode Normalization Form of a given string. +Based on Matsuza's version. Code used for integrated shim can be found at [github.com/walling/unorm](https://github.com/walling/unorm/blob/master/lib/unorm.js) + +#### str.pad(fill[, length]) _(es5-ext/string/#/pad)_ + +Pad string with _fill_. +If _length_ si given than _fill_ is reapated _length_ times. +If _length_ is negative then pad is applied from right. + +#### str.repeat(n) _(es5-ext/string/#/repeat)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.repeat). +Repeat given string _n_ times + +#### str.plainReplace(search, replace) _(es5-ext/string/#/plain-replace)_ + +Simple `replace` version. Doesn't support regular expressions. Replaces just first occurrence of search string. Doesn't support insert patterns, therefore it is safe to replace text with text obtained programmatically (there's no need for additional _$_ characters escape in such case). + +#### str.plainReplaceAll(search, replace) _(es5-ext/string/#/plain-replace-all)_ + +Simple `replace` version. Doesn't support regular expressions. Replaces all occurrences of search string. Doesn't support insert patterns, therefore it is safe to replace text with text obtained programmatically (there's no need for additional _$_ characters escape in such case). + +#### str.startsWith(searchString[, position]) _(es5-ext/string/#/starts-with)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.startswith). +Whether strings starts with given string + +#### str[@@iterator] _(es5-ext/string/#/@@iterator)_ + +[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype-@@iterator). +Returns iterator object which traverses all string characters (with respect to unicode symbols) + +### Tests [![Build Status](https://img.shields.io/circleci/project/github/medikoo/es5-ext.svg)](https://circleci.com/gh/medikoo/es5-ext) + + $ npm test diff --git a/node_modules/es5-ext/appveyor.yml b/node_modules/es5-ext/appveyor.yml new file mode 100644 index 000000000..942ab8278 --- /dev/null +++ b/node_modules/es5-ext/appveyor.yml @@ -0,0 +1,26 @@ +# Test against the latest version of this Node.js version +environment: + matrix: + # node.js + - nodejs_version: "0.12" + - nodejs_version: "4" + - nodejs_version: "6" + - nodejs_version: "8" + +# Install scripts. (runs after repo cloning) +install: + # Get the latest stable version of Node.js or io.js + - ps: Install-Product node $env:nodejs_version + # install modules + - npm install + +# Post-install test scripts. +test_script: + # Output useful info for debugging. + - node --version + - npm --version + # run tests + - npm test + +# Don't actually build. +build: off diff --git a/node_modules/es5-ext/array/#/@@iterator/implement.js b/node_modules/es5-ext/array/#/@@iterator/implement.js new file mode 100644 index 000000000..8073f2bc6 --- /dev/null +++ b/node_modules/es5-ext/array/#/@@iterator/implement.js @@ -0,0 +1,10 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, require("es6-symbol").iterator, { + value: require("./shim"), + configurable: true, + enumerable: false, + writable: true + }); +} diff --git a/node_modules/es5-ext/array/#/@@iterator/index.js b/node_modules/es5-ext/array/#/@@iterator/index.js new file mode 100644 index 000000000..d93774654 --- /dev/null +++ b/node_modules/es5-ext/array/#/@@iterator/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype[require("es6-symbol").iterator] : require("./shim"); diff --git a/node_modules/es5-ext/array/#/@@iterator/is-implemented.js b/node_modules/es5-ext/array/#/@@iterator/is-implemented.js new file mode 100644 index 000000000..6445c04ea --- /dev/null +++ b/node_modules/es5-ext/array/#/@@iterator/is-implemented.js @@ -0,0 +1,16 @@ +"use strict"; + +var iteratorSymbol = require("es6-symbol").iterator; + +module.exports = function () { + var arr = ["foo", 1], iterator, result; + if (typeof arr[iteratorSymbol] !== "function") return false; + iterator = arr[iteratorSymbol](); + if (!iterator) return false; + if (typeof iterator.next !== "function") return false; + result = iterator.next(); + if (!result) return false; + if (result.value !== "foo") return false; + if (result.done !== false) return false; + return true; +}; diff --git a/node_modules/es5-ext/array/#/@@iterator/shim.js b/node_modules/es5-ext/array/#/@@iterator/shim.js new file mode 100644 index 000000000..307b1c0aa --- /dev/null +++ b/node_modules/es5-ext/array/#/@@iterator/shim.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("../values/shim"); diff --git a/node_modules/es5-ext/array/#/_compare-by-length.js b/node_modules/es5-ext/array/#/_compare-by-length.js new file mode 100644 index 000000000..f1c0cacc7 --- /dev/null +++ b/node_modules/es5-ext/array/#/_compare-by-length.js @@ -0,0 +1,9 @@ +// Used internally to sort array of lists by length + +"use strict"; + +var toPosInt = require("../../number/to-pos-integer"); + +module.exports = function (arr1, arr2) { + return toPosInt(arr1.length) - toPosInt(arr2.length); +}; diff --git a/node_modules/es5-ext/array/#/binary-search.js b/node_modules/es5-ext/array/#/binary-search.js new file mode 100644 index 000000000..9b2c42ec5 --- /dev/null +++ b/node_modules/es5-ext/array/#/binary-search.js @@ -0,0 +1,28 @@ +"use strict"; + +var toPosInt = require("../../number/to-pos-integer") + , callable = require("../../object/valid-callable") + , value = require("../../object/valid-value") + + , floor = Math.floor; + +module.exports = function (compareFn) { + var length, low, high, middle; + + value(this); + callable(compareFn); + + length = toPosInt(this.length); + low = 0; + high = length - 1; + + while (low <= high) { + middle = floor((low + high) / 2); + if (compareFn(this[middle]) < 0) high = middle - 1; + else low = middle + 1; + } + + if (high < 0) return 0; + if (high >= length) return length - 1; + return high; +}; diff --git a/node_modules/es5-ext/array/#/clear.js b/node_modules/es5-ext/array/#/clear.js new file mode 100644 index 000000000..fd539c9b7 --- /dev/null +++ b/node_modules/es5-ext/array/#/clear.js @@ -0,0 +1,12 @@ +// Inspired by Google Closure: +// http://closure-library.googlecode.com/svn/docs/ +// closure_goog_array_array.js.html#goog.array.clear + +"use strict"; + +var value = require("../../object/valid-value"); + +module.exports = function () { + value(this).length = 0; + return this; +}; diff --git a/node_modules/es5-ext/array/#/compact.js b/node_modules/es5-ext/array/#/compact.js new file mode 100644 index 000000000..3da1309d3 --- /dev/null +++ b/node_modules/es5-ext/array/#/compact.js @@ -0,0 +1,13 @@ +// Inspired by: http://documentcloud.github.com/underscore/#compact + +"use strict"; + +var isValue = require("../../object/is-value"); + +var filter = Array.prototype.filter; + +module.exports = function () { + return filter.call(this, function (val) { + return isValue(val); + }); +}; diff --git a/node_modules/es5-ext/array/#/concat/implement.js b/node_modules/es5-ext/array/#/concat/implement.js new file mode 100644 index 000000000..a5a1a4090 --- /dev/null +++ b/node_modules/es5-ext/array/#/concat/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "concat", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/concat/index.js b/node_modules/es5-ext/array/#/concat/index.js new file mode 100644 index 000000000..8bbb7bc19 --- /dev/null +++ b/node_modules/es5-ext/array/#/concat/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.concat : require("./shim"); diff --git a/node_modules/es5-ext/array/#/concat/is-implemented.js b/node_modules/es5-ext/array/#/concat/is-implemented.js new file mode 100644 index 000000000..2a3a9fc60 --- /dev/null +++ b/node_modules/es5-ext/array/#/concat/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +var SubArray = require("../../_sub-array-dummy-safe"); + +module.exports = function () { + return (new SubArray()).concat("foo") instanceof SubArray; +}; diff --git a/node_modules/es5-ext/array/#/concat/shim.js b/node_modules/es5-ext/array/#/concat/shim.js new file mode 100644 index 000000000..5158dde52 --- /dev/null +++ b/node_modules/es5-ext/array/#/concat/shim.js @@ -0,0 +1,48 @@ +"use strict"; + +var isPlainArray = require("../../is-plain-array") + , toPosInt = require("../../../number/to-pos-integer") + , isObject = require("../../../object/is-object") + , isConcatSpreadable = require("es6-symbol").isConcatSpreadable + , isArray = Array.isArray + , concat = Array.prototype.concat + , forEach = Array.prototype.forEach + , isSpreadable; + +isSpreadable = function (value) { + if (!value) return false; + if (!isObject(value)) return false; + if (value[isConcatSpreadable] !== undefined) { + return Boolean(value[isConcatSpreadable]); + } + return isArray(value); +}; + +// eslint-disable-next-line no-unused-vars +module.exports = function (item /*, …items*/) { + var result; + if (!this || !isArray(this) || isPlainArray(this)) { + return concat.apply(this, arguments); + } + result = new this.constructor(); + if (isSpreadable(this)) { + forEach.call(this, function (val, i) { + result[i] = val; + }); + } else { + result[0] = this; + } + forEach.call(arguments, function (arg) { + var base; + if (isSpreadable(arg)) { + base = result.length; + result.length += toPosInt(arg.length); + forEach.call(arg, function (val, i) { + result[base + i] = val; + }); + return; + } + result.push(arg); + }); + return result; +}; diff --git a/node_modules/es5-ext/array/#/contains.js b/node_modules/es5-ext/array/#/contains.js new file mode 100644 index 000000000..cde6850ec --- /dev/null +++ b/node_modules/es5-ext/array/#/contains.js @@ -0,0 +1,7 @@ +"use strict"; + +var indexOf = require("./e-index-of"); + +module.exports = function (searchElement/*, position*/) { + return indexOf.call(this, searchElement, arguments[1]) > -1; +}; diff --git a/node_modules/es5-ext/array/#/copy-within/implement.js b/node_modules/es5-ext/array/#/copy-within/implement.js new file mode 100644 index 000000000..20910507a --- /dev/null +++ b/node_modules/es5-ext/array/#/copy-within/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "copyWithin", + { value: require("./shim"), +configurable: true, +enumerable: false, + writable: true }); +} diff --git a/node_modules/es5-ext/array/#/copy-within/index.js b/node_modules/es5-ext/array/#/copy-within/index.js new file mode 100644 index 000000000..0919b79b9 --- /dev/null +++ b/node_modules/es5-ext/array/#/copy-within/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.copyWithin : require("./shim"); diff --git a/node_modules/es5-ext/array/#/copy-within/is-implemented.js b/node_modules/es5-ext/array/#/copy-within/is-implemented.js new file mode 100644 index 000000000..40c499e6d --- /dev/null +++ b/node_modules/es5-ext/array/#/copy-within/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var arr = [1, 2, 3, 4, 5]; + if (typeof arr.copyWithin !== "function") return false; + return String(arr.copyWithin(1, 3)) === "1,4,5,4,5"; +}; diff --git a/node_modules/es5-ext/array/#/copy-within/shim.js b/node_modules/es5-ext/array/#/copy-within/shim.js new file mode 100644 index 000000000..aad220ca7 --- /dev/null +++ b/node_modules/es5-ext/array/#/copy-within/shim.js @@ -0,0 +1,45 @@ +// Taken from: https://github.com/paulmillr/es6-shim/ + +"use strict"; + +var toInteger = require("../../../number/to-integer") + , toPosInt = require("../../../number/to-pos-integer") + , validValue = require("../../../object/valid-value") + , objHasOwnProperty = Object.prototype.hasOwnProperty + , max = Math.max + , min = Math.min; + +module.exports = function (target, start /*, end*/) { + var arr = validValue(this) + , end = arguments[2] + , length = toPosInt(arr.length) + , to + , from + , fin + , count + , direction; + + target = toInteger(target); + start = toInteger(start); + end = end === undefined ? length : toInteger(end); + + to = target < 0 ? max(length + target, 0) : min(target, length); + from = start < 0 ? max(length + start, 0) : min(start, length); + fin = end < 0 ? max(length + end, 0) : min(end, length); + count = min(fin - from, length - to); + direction = 1; + + if (from < to && to < from + count) { + direction = -1; + from += count - 1; + to += count - 1; + } + while (count > 0) { + if (objHasOwnProperty.call(arr, from)) arr[to] = arr[from]; + else delete arr[from]; + from += direction; + to += direction; + count -= 1; + } + return arr; +}; diff --git a/node_modules/es5-ext/array/#/diff.js b/node_modules/es5-ext/array/#/diff.js new file mode 100644 index 000000000..fbb1682b7 --- /dev/null +++ b/node_modules/es5-ext/array/#/diff.js @@ -0,0 +1,13 @@ +"use strict"; + +var value = require("../../object/valid-value") + , contains = require("./contains") + , filter = Array.prototype.filter; + +module.exports = function (other) { + value(this); + value(other); + return filter.call(this, function (item) { + return !contains.call(other, item); + }); +}; diff --git a/node_modules/es5-ext/array/#/e-index-of.js b/node_modules/es5-ext/array/#/e-index-of.js new file mode 100644 index 000000000..8b0701177 --- /dev/null +++ b/node_modules/es5-ext/array/#/e-index-of.js @@ -0,0 +1,28 @@ +"use strict"; + +var numberIsNaN = require("../../number/is-nan") + , toPosInt = require("../../number/to-pos-integer") + , value = require("../../object/valid-value") + , indexOf = Array.prototype.indexOf + , objHasOwnProperty = Object.prototype.hasOwnProperty + , abs = Math.abs + , floor = Math.floor; + +module.exports = function (searchElement /*, fromIndex*/) { + var i, length, fromIndex, val; + if (!numberIsNaN(searchElement)) return indexOf.apply(this, arguments); + + length = toPosInt(value(this).length); + fromIndex = arguments[1]; + if (isNaN(fromIndex)) fromIndex = 0; + else if (fromIndex >= 0) fromIndex = floor(fromIndex); + else fromIndex = toPosInt(this.length) - floor(abs(fromIndex)); + + for (i = fromIndex; i < length; ++i) { + if (objHasOwnProperty.call(this, i)) { + val = this[i]; + if (numberIsNaN(val)) return i; // Jslint: ignore + } + } + return -1; +}; diff --git a/node_modules/es5-ext/array/#/e-last-index-of.js b/node_modules/es5-ext/array/#/e-last-index-of.js new file mode 100644 index 000000000..15dbe05b8 --- /dev/null +++ b/node_modules/es5-ext/array/#/e-last-index-of.js @@ -0,0 +1,31 @@ +"use strict"; + +var numberIsNaN = require("../../number/is-nan") + , toPosInt = require("../../number/to-pos-integer") + , value = require("../../object/valid-value") + , lastIndexOf = Array.prototype.lastIndexOf + , objHasOwnProperty = Object.prototype.hasOwnProperty + , abs = Math.abs + , floor = Math.floor; + +module.exports = function (searchElement /*, fromIndex*/) { + var i, fromIndex, val; + if (!numberIsNaN(searchElement)) { + // Jslint: ignore + return lastIndexOf.apply(this, arguments); + } + + value(this); + fromIndex = arguments[1]; + if (isNaN(fromIndex)) fromIndex = toPosInt(this.length) - 1; + else if (fromIndex >= 0) fromIndex = floor(fromIndex); + else fromIndex = toPosInt(this.length) - floor(abs(fromIndex)); + + for (i = fromIndex; i >= 0; --i) { + if (objHasOwnProperty.call(this, i)) { + val = this[i]; + if (numberIsNaN(val)) return i; // Jslint: ignore + } + } + return -1; +}; diff --git a/node_modules/es5-ext/array/#/entries/implement.js b/node_modules/es5-ext/array/#/entries/implement.js new file mode 100644 index 000000000..acc8a111c --- /dev/null +++ b/node_modules/es5-ext/array/#/entries/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "entries", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/entries/index.js b/node_modules/es5-ext/array/#/entries/index.js new file mode 100644 index 000000000..f18f7d921 --- /dev/null +++ b/node_modules/es5-ext/array/#/entries/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.entries : require("./shim"); diff --git a/node_modules/es5-ext/array/#/entries/is-implemented.js b/node_modules/es5-ext/array/#/entries/is-implemented.js new file mode 100644 index 000000000..335f1c209 --- /dev/null +++ b/node_modules/es5-ext/array/#/entries/is-implemented.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = function () { + var arr = [1, "foo"], iterator, result; + if (typeof arr.entries !== "function") return false; + iterator = arr.entries(); + if (!iterator) return false; + if (typeof iterator.next !== "function") return false; + result = iterator.next(); + if (!result || !result.value) return false; + if (result.value[0] !== 0) return false; + if (result.value[1] !== 1) return false; + if (result.done !== false) return false; + return true; +}; diff --git a/node_modules/es5-ext/array/#/entries/shim.js b/node_modules/es5-ext/array/#/entries/shim.js new file mode 100644 index 000000000..caa45b7a2 --- /dev/null +++ b/node_modules/es5-ext/array/#/entries/shim.js @@ -0,0 +1,6 @@ +"use strict"; + +var ArrayIterator = require("es6-iterator/array"); +module.exports = function () { + return new ArrayIterator(this, "key+value"); +}; diff --git a/node_modules/es5-ext/array/#/exclusion.js b/node_modules/es5-ext/array/#/exclusion.js new file mode 100644 index 000000000..41057d06f --- /dev/null +++ b/node_modules/es5-ext/array/#/exclusion.js @@ -0,0 +1,31 @@ +"use strict"; + +var value = require("../../object/valid-value") + , aFrom = require("../from") + , toArray = require("../to-array") + , contains = require("./contains") + , byLength = require("./_compare-by-length") + , filter = Array.prototype.filter + , push = Array.prototype.push; + +module.exports = function (/* …lists*/) { + var lists, seen, result; + if (!arguments.length) return aFrom(this); + push.apply(lists = [this], arguments); + lists.forEach(value); + seen = []; + result = []; + lists.sort(byLength).forEach(function (list) { + result = result + .filter(function (item) { + return !contains.call(list, item); + }) + .concat( + filter.call(list, function (item) { + return !contains.call(seen, item); + }) + ); + push.apply(seen, toArray(list)); + }); + return result; +}; diff --git a/node_modules/es5-ext/array/#/fill/implement.js b/node_modules/es5-ext/array/#/fill/implement.js new file mode 100644 index 000000000..9de58b75f --- /dev/null +++ b/node_modules/es5-ext/array/#/fill/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "fill", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/fill/index.js b/node_modules/es5-ext/array/#/fill/index.js new file mode 100644 index 000000000..a8272475d --- /dev/null +++ b/node_modules/es5-ext/array/#/fill/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.fill : require("./shim"); diff --git a/node_modules/es5-ext/array/#/fill/is-implemented.js b/node_modules/es5-ext/array/#/fill/is-implemented.js new file mode 100644 index 000000000..5d6d02e1a --- /dev/null +++ b/node_modules/es5-ext/array/#/fill/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var arr = [1, 2, 3, 4, 5, 6]; + if (typeof arr.fill !== "function") return false; + return String(arr.fill(-1, -3)) === "1,2,3,-1,-1,-1"; +}; diff --git a/node_modules/es5-ext/array/#/fill/shim.js b/node_modules/es5-ext/array/#/fill/shim.js new file mode 100644 index 000000000..0040bf81a --- /dev/null +++ b/node_modules/es5-ext/array/#/fill/shim.js @@ -0,0 +1,25 @@ +// Taken from: https://github.com/paulmillr/es6-shim/ + +"use strict"; + +var toInteger = require("../../../number/to-integer") + , toPosInt = require("../../../number/to-pos-integer") + , validValue = require("../../../object/valid-value") + , max = Math.max + , min = Math.min; + +module.exports = function (value /*, start, end*/) { + var arr = validValue(this) + , start = arguments[1] + , end = arguments[2] + , length = toPosInt(arr.length) + , relativeStart + , i; + + start = start === undefined ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + + relativeStart = start < 0 ? max(length + start, 0) : min(start, length); + for (i = relativeStart; i < length && i < end; ++i) arr[i] = value; + return arr; +}; diff --git a/node_modules/es5-ext/array/#/filter/implement.js b/node_modules/es5-ext/array/#/filter/implement.js new file mode 100644 index 000000000..450257515 --- /dev/null +++ b/node_modules/es5-ext/array/#/filter/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "filter", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/filter/index.js b/node_modules/es5-ext/array/#/filter/index.js new file mode 100644 index 000000000..ad2082d93 --- /dev/null +++ b/node_modules/es5-ext/array/#/filter/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.filter : require("./shim"); diff --git a/node_modules/es5-ext/array/#/filter/is-implemented.js b/node_modules/es5-ext/array/#/filter/is-implemented.js new file mode 100644 index 000000000..06de09960 --- /dev/null +++ b/node_modules/es5-ext/array/#/filter/is-implemented.js @@ -0,0 +1,11 @@ +"use strict"; + +var SubArray = require("../../_sub-array-dummy-safe") + + , pass = function () { + return true; +}; + +module.exports = function () { + return (new SubArray()).filter(pass) instanceof SubArray; +}; diff --git a/node_modules/es5-ext/array/#/filter/shim.js b/node_modules/es5-ext/array/#/filter/shim.js new file mode 100644 index 000000000..38304e4b8 --- /dev/null +++ b/node_modules/es5-ext/array/#/filter/shim.js @@ -0,0 +1,23 @@ +"use strict"; + +var isPlainArray = require("../../is-plain-array") + , callable = require("../../../object/valid-callable") + , isArray = Array.isArray + , filter = Array.prototype.filter + , forEach = Array.prototype.forEach + , call = Function.prototype.call; + +module.exports = function (callbackFn /*, thisArg*/) { + var result, thisArg, i; + if (!this || !isArray(this) || isPlainArray(this)) { + return filter.apply(this, arguments); + } + callable(callbackFn); + thisArg = arguments[1]; + result = new this.constructor(); + i = 0; + forEach.call(this, function (val, j, self) { + if (call.call(callbackFn, thisArg, val, j, self)) result[i++] = val; + }); + return result; +}; diff --git a/node_modules/es5-ext/array/#/find-index/implement.js b/node_modules/es5-ext/array/#/find-index/implement.js new file mode 100644 index 000000000..4876b9e4e --- /dev/null +++ b/node_modules/es5-ext/array/#/find-index/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "findIndex", + { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/find-index/index.js b/node_modules/es5-ext/array/#/find-index/index.js new file mode 100644 index 000000000..3d505b1f5 --- /dev/null +++ b/node_modules/es5-ext/array/#/find-index/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.findIndex : require("./shim"); diff --git a/node_modules/es5-ext/array/#/find-index/is-implemented.js b/node_modules/es5-ext/array/#/find-index/is-implemented.js new file mode 100644 index 000000000..818c920e4 --- /dev/null +++ b/node_modules/es5-ext/array/#/find-index/is-implemented.js @@ -0,0 +1,11 @@ +"use strict"; + +var fn = function (value) { + return value > 3; +}; + +module.exports = function () { + var arr = [1, 2, 3, 4, 5, 6]; + if (typeof arr.findIndex !== "function") return false; + return arr.findIndex(fn) === 3; +}; diff --git a/node_modules/es5-ext/array/#/find-index/shim.js b/node_modules/es5-ext/array/#/find-index/shim.js new file mode 100644 index 000000000..bc82827ad --- /dev/null +++ b/node_modules/es5-ext/array/#/find-index/shim.js @@ -0,0 +1,26 @@ +"use strict"; + +var callable = require("../../../object/valid-callable") + , ensureValue = require("../../../object/valid-value") + , some = Array.prototype.some + , apply = Function.prototype.apply; + +module.exports = function (predicate /*, thisArg*/) { + var k, self; + self = Object(ensureValue(this)); + callable(predicate); + + return some.call( + self, + function (value, index) { + if (apply.call(predicate, this, arguments)) { + k = index; + return true; + } + return false; + }, + arguments[1] + ) + ? k + : -1; +}; diff --git a/node_modules/es5-ext/array/#/find/implement.js b/node_modules/es5-ext/array/#/find/implement.js new file mode 100644 index 000000000..d8ebc5b81 --- /dev/null +++ b/node_modules/es5-ext/array/#/find/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "find", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/find/index.js b/node_modules/es5-ext/array/#/find/index.js new file mode 100644 index 000000000..131a71be4 --- /dev/null +++ b/node_modules/es5-ext/array/#/find/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.find : require("./shim"); diff --git a/node_modules/es5-ext/array/#/find/is-implemented.js b/node_modules/es5-ext/array/#/find/is-implemented.js new file mode 100644 index 000000000..aa278a7b5 --- /dev/null +++ b/node_modules/es5-ext/array/#/find/is-implemented.js @@ -0,0 +1,11 @@ +"use strict"; + +var fn = function (value) { + return value > 3; +}; + +module.exports = function () { + var arr = [1, 2, 3, 4, 5, 6]; + if (typeof arr.find !== "function") return false; + return arr.find(fn) === 4; +}; diff --git a/node_modules/es5-ext/array/#/find/shim.js b/node_modules/es5-ext/array/#/find/shim.js new file mode 100644 index 000000000..c45a93805 --- /dev/null +++ b/node_modules/es5-ext/array/#/find/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +var findIndex = require("../find-index/shim"); + +// eslint-disable-next-line no-unused-vars +module.exports = function (predicate /*, thisArg*/) { + var index = findIndex.apply(this, arguments); + return index === -1 ? undefined : this[index]; +}; diff --git a/node_modules/es5-ext/array/#/first-index.js b/node_modules/es5-ext/array/#/first-index.js new file mode 100644 index 000000000..19bff5419 --- /dev/null +++ b/node_modules/es5-ext/array/#/first-index.js @@ -0,0 +1,15 @@ +"use strict"; + +var toPosInt = require("../../number/to-pos-integer") + , value = require("../../object/valid-value") + , objHasOwnProperty = Object.prototype.hasOwnProperty; + +module.exports = function () { + var i, length; + if (!(length = toPosInt(value(this).length))) return null; + i = 0; + while (!objHasOwnProperty.call(this, i)) { + if (++i === length) return null; + } + return i; +}; diff --git a/node_modules/es5-ext/array/#/first.js b/node_modules/es5-ext/array/#/first.js new file mode 100644 index 000000000..ca76833b1 --- /dev/null +++ b/node_modules/es5-ext/array/#/first.js @@ -0,0 +1,9 @@ +"use strict"; + +var firstIndex = require("./first-index"); + +module.exports = function () { + var i; + if ((i = firstIndex.call(this)) !== null) return this[i]; + return undefined; +}; diff --git a/node_modules/es5-ext/array/#/flatten.js b/node_modules/es5-ext/array/#/flatten.js new file mode 100644 index 000000000..40167274e --- /dev/null +++ b/node_modules/es5-ext/array/#/flatten.js @@ -0,0 +1,40 @@ +// Stack grow safe implementation + +"use strict"; + +var ensureValue = require("../../object/valid-value") + , isArray = Array.isArray + , objHasOwnProperty = Object.prototype.hasOwnProperty; + +module.exports = function () { + var input = ensureValue(this), index = 0, remaining, remainingIndexes, length, i, result = []; + // Jslint: ignore + main: while (input) { + length = input.length; + for (i = index; i < length; ++i) { + if (!objHasOwnProperty.call(input, i)) continue; + if (isArray(input[i])) { + if (i < length - 1) { + // eslint-disable-next-line max-depth + if (!remaining) { + remaining = []; + remainingIndexes = []; + } + remaining.push(input); + remainingIndexes.push(i + 1); + } + input = input[i]; + index = 0; + continue main; + } + result.push(input[i]); + } + if (remaining) { + input = remaining.pop(); + index = remainingIndexes.pop(); + } else { + input = null; + } + } + return result; +}; diff --git a/node_modules/es5-ext/array/#/for-each-right.js b/node_modules/es5-ext/array/#/for-each-right.js new file mode 100644 index 000000000..ebf076b17 --- /dev/null +++ b/node_modules/es5-ext/array/#/for-each-right.js @@ -0,0 +1,19 @@ +"use strict"; + +var toPosInt = require("../../number/to-pos-integer") + , callable = require("../../object/valid-callable") + , value = require("../../object/valid-value") + , objHasOwnProperty = Object.prototype.hasOwnProperty + , call = Function.prototype.call; + +module.exports = function (cb /*, thisArg*/) { + var i, self, thisArg; + + self = Object(value(this)); + callable(cb); + thisArg = arguments[1]; + + for (i = toPosInt(self.length) - 1; i >= 0; --i) { + if (objHasOwnProperty.call(self, i)) call.call(cb, thisArg, self[i], i, self); + } +}; diff --git a/node_modules/es5-ext/array/#/group.js b/node_modules/es5-ext/array/#/group.js new file mode 100644 index 000000000..711eb586a --- /dev/null +++ b/node_modules/es5-ext/array/#/group.js @@ -0,0 +1,28 @@ +// Inspired by Underscore's groupBy: +// http://documentcloud.github.com/underscore/#groupBy + +"use strict"; + +var callable = require("../../object/valid-callable") + , value = require("../../object/valid-value") + , forEach = Array.prototype.forEach + , apply = Function.prototype.apply; + +module.exports = function (cb /*, thisArg*/) { + var result; + + value(this); + callable(cb); + + result = Object.create(null); + forEach.call( + this, + function (item) { + var key = apply.call(cb, this, arguments); + if (!result[key]) result[key] = []; + result[key].push(item); + }, + arguments[1] + ); + return result; +}; diff --git a/node_modules/es5-ext/array/#/index.js b/node_modules/es5-ext/array/#/index.js new file mode 100644 index 000000000..596e83b5e --- /dev/null +++ b/node_modules/es5-ext/array/#/index.js @@ -0,0 +1,41 @@ +"use strict"; + +module.exports = { + "@@iterator": require("./@@iterator"), + "binarySearch": require("./binary-search"), + "clear": require("./clear"), + "compact": require("./compact"), + "concat": require("./concat"), + "contains": require("./contains"), + "copyWithin": require("./copy-within"), + "diff": require("./diff"), + "eIndexOf": require("./e-index-of"), + "eLastIndexOf": require("./e-last-index-of"), + "entries": require("./entries"), + "exclusion": require("./exclusion"), + "fill": require("./fill"), + "filter": require("./filter"), + "find": require("./find"), + "findIndex": require("./find-index"), + "first": require("./first"), + "firstIndex": require("./first-index"), + "flatten": require("./flatten"), + "forEachRight": require("./for-each-right"), + "keys": require("./keys"), + "group": require("./group"), + "indexesOf": require("./indexes-of"), + "intersection": require("./intersection"), + "isCopy": require("./is-copy"), + "isEmpty": require("./is-empty"), + "isUniq": require("./is-uniq"), + "last": require("./last"), + "lastIndex": require("./last-index"), + "map": require("./map"), + "remove": require("./remove"), + "separate": require("./separate"), + "slice": require("./slice"), + "someRight": require("./some-right"), + "splice": require("./splice"), + "uniq": require("./uniq"), + "values": require("./values") +}; diff --git a/node_modules/es5-ext/array/#/indexes-of.js b/node_modules/es5-ext/array/#/indexes-of.js new file mode 100644 index 000000000..6c39cd924 --- /dev/null +++ b/node_modules/es5-ext/array/#/indexes-of.js @@ -0,0 +1,12 @@ +"use strict"; + +var indexOf = require("./e-index-of"); + +module.exports = function (value /*, fromIndex*/) { + var result = [], i, fromIndex = arguments[1]; + while ((i = indexOf.call(this, value, fromIndex)) !== -1) { + result.push(i); + fromIndex = i + 1; + } + return result; +}; diff --git a/node_modules/es5-ext/array/#/intersection.js b/node_modules/es5-ext/array/#/intersection.js new file mode 100644 index 000000000..91261d5f8 --- /dev/null +++ b/node_modules/es5-ext/array/#/intersection.js @@ -0,0 +1,21 @@ +"use strict"; + +var value = require("../../object/valid-value") + , contains = require("./contains") + , byLength = require("./_compare-by-length") + , filter = Array.prototype.filter + , push = Array.prototype.push + , slice = Array.prototype.slice; + +module.exports = function (/* …list*/) { + var lists; + if (!arguments.length) slice.call(this); + push.apply(lists = [this], arguments); + lists.forEach(value); + lists.sort(byLength); + return lists.reduce(function (list1, list2) { + return filter.call(list1, function (item) { + return contains.call(list2, item); + }); + }); +}; diff --git a/node_modules/es5-ext/array/#/is-copy.js b/node_modules/es5-ext/array/#/is-copy.js new file mode 100644 index 000000000..1413b95df --- /dev/null +++ b/node_modules/es5-ext/array/#/is-copy.js @@ -0,0 +1,21 @@ +"use strict"; + +var toPosInt = require("../../number/to-pos-integer") + , eq = require("../../object/eq") + , value = require("../../object/valid-value") + , objHasOwnProperty = Object.prototype.hasOwnProperty; + +module.exports = function (other) { + var i, length; + value(this); + value(other); + length = toPosInt(this.length); + if (length !== toPosInt(other.length)) return false; + for (i = 0; i < length; ++i) { + if (objHasOwnProperty.call(this, i) !== objHasOwnProperty.call(other, i)) { + return false; + } + if (!eq(this[i], other[i])) return false; + } + return true; +}; diff --git a/node_modules/es5-ext/array/#/is-empty.js b/node_modules/es5-ext/array/#/is-empty.js new file mode 100644 index 000000000..80a306955 --- /dev/null +++ b/node_modules/es5-ext/array/#/is-empty.js @@ -0,0 +1,8 @@ +"use strict"; + +var ensureArray = require("../../object/ensure-array") + , firstIndex = require("./first-index"); + +module.exports = function () { + return firstIndex.call(ensureArray(this)) === null; +}; diff --git a/node_modules/es5-ext/array/#/is-uniq.js b/node_modules/es5-ext/array/#/is-uniq.js new file mode 100644 index 000000000..148a5a918 --- /dev/null +++ b/node_modules/es5-ext/array/#/is-uniq.js @@ -0,0 +1,14 @@ +"use strict"; + +var indexOf = require("./e-index-of") + + , every = Array.prototype.every + , isFirst; + +isFirst = function (value, index) { + return indexOf.call(this, value) === index; +}; + +module.exports = function () { + return every.call(this, isFirst, this); +}; diff --git a/node_modules/es5-ext/array/#/keys/implement.js b/node_modules/es5-ext/array/#/keys/implement.js new file mode 100644 index 000000000..40d0df011 --- /dev/null +++ b/node_modules/es5-ext/array/#/keys/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "keys", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/keys/index.js b/node_modules/es5-ext/array/#/keys/index.js new file mode 100644 index 000000000..50a18f197 --- /dev/null +++ b/node_modules/es5-ext/array/#/keys/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.keys : require("./shim"); diff --git a/node_modules/es5-ext/array/#/keys/is-implemented.js b/node_modules/es5-ext/array/#/keys/is-implemented.js new file mode 100644 index 000000000..70a171f67 --- /dev/null +++ b/node_modules/es5-ext/array/#/keys/is-implemented.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = function () { + var arr = [1, "foo"], iterator, result; + if (typeof arr.keys !== "function") return false; + iterator = arr.keys(); + if (!iterator) return false; + if (typeof iterator.next !== "function") return false; + result = iterator.next(); + if (!result) return false; + if (result.value !== 0) return false; + if (result.done !== false) return false; + return true; +}; diff --git a/node_modules/es5-ext/array/#/keys/shim.js b/node_modules/es5-ext/array/#/keys/shim.js new file mode 100644 index 000000000..c3c68c6d4 --- /dev/null +++ b/node_modules/es5-ext/array/#/keys/shim.js @@ -0,0 +1,6 @@ +"use strict"; + +var ArrayIterator = require("es6-iterator/array"); +module.exports = function () { + return new ArrayIterator(this, "key"); +}; diff --git a/node_modules/es5-ext/array/#/last-index.js b/node_modules/es5-ext/array/#/last-index.js new file mode 100644 index 000000000..74aaba46c --- /dev/null +++ b/node_modules/es5-ext/array/#/last-index.js @@ -0,0 +1,15 @@ +"use strict"; + +var toPosInt = require("../../number/to-pos-integer") + , value = require("../../object/valid-value") + , objHasOwnProperty = Object.prototype.hasOwnProperty; + +module.exports = function () { + var i, length; + if (!(length = toPosInt(value(this).length))) return null; + i = length - 1; + while (!objHasOwnProperty.call(this, i)) { + if (--i === -1) return null; + } + return i; +}; diff --git a/node_modules/es5-ext/array/#/last.js b/node_modules/es5-ext/array/#/last.js new file mode 100644 index 000000000..38bb359b3 --- /dev/null +++ b/node_modules/es5-ext/array/#/last.js @@ -0,0 +1,9 @@ +"use strict"; + +var lastIndex = require("./last-index"); + +module.exports = function () { + var i; + if ((i = lastIndex.call(this)) !== null) return this[i]; + return undefined; +}; diff --git a/node_modules/es5-ext/array/#/map/implement.js b/node_modules/es5-ext/array/#/map/implement.js new file mode 100644 index 000000000..a6d1d9001 --- /dev/null +++ b/node_modules/es5-ext/array/#/map/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "map", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/map/index.js b/node_modules/es5-ext/array/#/map/index.js new file mode 100644 index 000000000..101c0649e --- /dev/null +++ b/node_modules/es5-ext/array/#/map/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.map : require("./shim"); diff --git a/node_modules/es5-ext/array/#/map/is-implemented.js b/node_modules/es5-ext/array/#/map/is-implemented.js new file mode 100644 index 000000000..24ab9084f --- /dev/null +++ b/node_modules/es5-ext/array/#/map/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var identity = require("../../../function/identity") + , SubArray = require("../../_sub-array-dummy-safe"); + +module.exports = function () { + return (new SubArray()).map(identity) instanceof SubArray; +}; diff --git a/node_modules/es5-ext/array/#/map/shim.js b/node_modules/es5-ext/array/#/map/shim.js new file mode 100644 index 000000000..6d8cc1fb6 --- /dev/null +++ b/node_modules/es5-ext/array/#/map/shim.js @@ -0,0 +1,21 @@ +"use strict"; + +var isPlainArray = require("../../is-plain-array") + , callable = require("../../../object/valid-callable") + + , isArray = Array.isArray, map = Array.prototype.map + , forEach = Array.prototype.forEach, call = Function.prototype.call; + +module.exports = function (callbackFn/*, thisArg*/) { + var result, thisArg; + if (!this || !isArray(this) || isPlainArray(this)) { + return map.apply(this, arguments); + } + callable(callbackFn); + thisArg = arguments[1]; + result = new this.constructor(this.length); + forEach.call(this, function (val, i, self) { + result[i] = call.call(callbackFn, thisArg, val, i, self); + }); + return result; +}; diff --git a/node_modules/es5-ext/array/#/remove.js b/node_modules/es5-ext/array/#/remove.js new file mode 100644 index 000000000..6a8a08676 --- /dev/null +++ b/node_modules/es5-ext/array/#/remove.js @@ -0,0 +1,17 @@ +"use strict"; + +var indexOf = require("./e-index-of") + , forEach = Array.prototype.forEach + , splice = Array.prototype.splice; + +// eslint-disable-next-line no-unused-vars +module.exports = function (itemToRemove /*, …item*/) { + forEach.call( + arguments, + function (item) { + var index = indexOf.call(this, item); + if (index !== -1) splice.call(this, index, 1); + }, + this + ); +}; diff --git a/node_modules/es5-ext/array/#/separate.js b/node_modules/es5-ext/array/#/separate.js new file mode 100644 index 000000000..35e1cc5ac --- /dev/null +++ b/node_modules/es5-ext/array/#/separate.js @@ -0,0 +1,12 @@ +"use strict"; + +var forEach = Array.prototype.forEach; + +module.exports = function (sep) { + var result = []; + forEach.call(this, function (val) { + result.push(val, sep); + }); + result.pop(); + return result; +}; diff --git a/node_modules/es5-ext/array/#/slice/implement.js b/node_modules/es5-ext/array/#/slice/implement.js new file mode 100644 index 000000000..568e87a1d --- /dev/null +++ b/node_modules/es5-ext/array/#/slice/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "slice", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/slice/index.js b/node_modules/es5-ext/array/#/slice/index.js new file mode 100644 index 000000000..c80ee3595 --- /dev/null +++ b/node_modules/es5-ext/array/#/slice/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.slice : require("./shim"); diff --git a/node_modules/es5-ext/array/#/slice/is-implemented.js b/node_modules/es5-ext/array/#/slice/is-implemented.js new file mode 100644 index 000000000..47904c209 --- /dev/null +++ b/node_modules/es5-ext/array/#/slice/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +var SubArray = require("../../_sub-array-dummy-safe"); + +module.exports = function () { + return (new SubArray()).slice() instanceof SubArray; +}; diff --git a/node_modules/es5-ext/array/#/slice/shim.js b/node_modules/es5-ext/array/#/slice/shim.js new file mode 100644 index 000000000..ff13085b3 --- /dev/null +++ b/node_modules/es5-ext/array/#/slice/shim.js @@ -0,0 +1,36 @@ +"use strict"; + +var toInteger = require("../../../number/to-integer") + , toPosInt = require("../../../number/to-pos-integer") + , isPlainArray = require("../../is-plain-array") + , isArray = Array.isArray + , slice = Array.prototype.slice + , objHasOwnProperty = Object.prototype.hasOwnProperty + , max = Math.max; + +module.exports = function (start, end) { + var length, result, i; + if (!this || !isArray(this) || isPlainArray(this)) { + return slice.apply(this, arguments); + } + length = toPosInt(this.length); + start = toInteger(start); + if (start < 0) start = max(length + start, 0); + else if (start > length) start = length; + if (end === undefined) { + end = length; + } else { + end = toInteger(end); + if (end < 0) end = max(length + end, 0); + else if (end > length) end = length; + } + if (start > end) start = end; + result = new this.constructor(end - start); + i = 0; + while (start !== end) { + if (objHasOwnProperty.call(this, start)) result[i] = this[start]; + ++i; + ++start; + } + return result; +}; diff --git a/node_modules/es5-ext/array/#/some-right.js b/node_modules/es5-ext/array/#/some-right.js new file mode 100644 index 000000000..d9a665fc2 --- /dev/null +++ b/node_modules/es5-ext/array/#/some-right.js @@ -0,0 +1,21 @@ +"use strict"; + +var toPosInt = require("../../number/to-pos-integer") + , callable = require("../../object/valid-callable") + , value = require("../../object/valid-value") + , objHasOwnProperty = Object.prototype.hasOwnProperty + , call = Function.prototype.call; + +module.exports = function (cb /*, thisArg*/) { + var i, self, thisArg; + self = Object(value(this)); + callable(cb); + thisArg = arguments[1]; + + for (i = toPosInt(self.length) - 1; i >= 0; --i) { + if (objHasOwnProperty.call(self, i) && call.call(cb, thisArg, self[i], i, self)) { + return true; + } + } + return false; +}; diff --git a/node_modules/es5-ext/array/#/splice/implement.js b/node_modules/es5-ext/array/#/splice/implement.js new file mode 100644 index 000000000..1e1682b0c --- /dev/null +++ b/node_modules/es5-ext/array/#/splice/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "splice", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/splice/index.js b/node_modules/es5-ext/array/#/splice/index.js new file mode 100644 index 000000000..e5fda9512 --- /dev/null +++ b/node_modules/es5-ext/array/#/splice/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.prototype.splice : require("./shim"); diff --git a/node_modules/es5-ext/array/#/splice/is-implemented.js b/node_modules/es5-ext/array/#/splice/is-implemented.js new file mode 100644 index 000000000..afbb95a6d --- /dev/null +++ b/node_modules/es5-ext/array/#/splice/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +var SubArray = require("../../_sub-array-dummy-safe"); + +module.exports = function () { + return (new SubArray()).splice(0) instanceof SubArray; +}; diff --git a/node_modules/es5-ext/array/#/splice/shim.js b/node_modules/es5-ext/array/#/splice/shim.js new file mode 100644 index 000000000..dc8d837b8 --- /dev/null +++ b/node_modules/es5-ext/array/#/splice/shim.js @@ -0,0 +1,17 @@ +"use strict"; + +var isPlainArray = require("../../is-plain-array") + , isArray = Array.isArray + , splice = Array.prototype.splice + , forEach = Array.prototype.forEach; + +// eslint-disable-next-line no-unused-vars +module.exports = function (start, deleteCount /*, …items*/) { + var arr = splice.apply(this, arguments), result; + if (!this || !isArray(this) || isPlainArray(this)) return arr; + result = new this.constructor(arr.length); + forEach.call(arr, function (val, i) { + result[i] = val; + }); + return result; +}; diff --git a/node_modules/es5-ext/array/#/uniq.js b/node_modules/es5-ext/array/#/uniq.js new file mode 100644 index 000000000..944ce9334 --- /dev/null +++ b/node_modules/es5-ext/array/#/uniq.js @@ -0,0 +1,15 @@ +"use strict"; + +var indexOf = require("./e-index-of") + + , filter = Array.prototype.filter + + , isFirst; + +isFirst = function (value, index) { + return indexOf.call(this, value) === index; +}; + +module.exports = function () { + return filter.call(this, isFirst, this); +}; diff --git a/node_modules/es5-ext/array/#/values/implement.js b/node_modules/es5-ext/array/#/values/implement.js new file mode 100644 index 000000000..b43e9f646 --- /dev/null +++ b/node_modules/es5-ext/array/#/values/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array.prototype, "values", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/#/values/index.js b/node_modules/es5-ext/array/#/values/index.js new file mode 100644 index 000000000..30a50bae7 --- /dev/null +++ b/node_modules/es5-ext/array/#/values/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./is-implemented")() ? Array.prototype.values : require("./shim"); diff --git a/node_modules/es5-ext/array/#/values/is-implemented.js b/node_modules/es5-ext/array/#/values/is-implemented.js new file mode 100644 index 000000000..8b72568a1 --- /dev/null +++ b/node_modules/es5-ext/array/#/values/is-implemented.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = function () { + var arr = ["foo", 1], iterator, result; + if (typeof arr.values !== "function") return false; + iterator = arr.values(); + if (!iterator) return false; + if (typeof iterator.next !== "function") return false; + result = iterator.next(); + if (!result) return false; + if (result.value !== "foo") return false; + if (result.done !== false) return false; + return true; +}; diff --git a/node_modules/es5-ext/array/#/values/shim.js b/node_modules/es5-ext/array/#/values/shim.js new file mode 100644 index 000000000..e46a05261 --- /dev/null +++ b/node_modules/es5-ext/array/#/values/shim.js @@ -0,0 +1,6 @@ +"use strict"; + +var ArrayIterator = require("es6-iterator/array"); +module.exports = function () { + return new ArrayIterator(this, "value"); +}; diff --git a/node_modules/es5-ext/array/_is-extensible.js b/node_modules/es5-ext/array/_is-extensible.js new file mode 100644 index 000000000..a9e8ee794 --- /dev/null +++ b/node_modules/es5-ext/array/_is-extensible.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = (function () { + var SubArray = require("./_sub-array-dummy"), arr; + + if (!SubArray) return false; + arr = new SubArray(); + if (!Array.isArray(arr)) return false; + if (!(arr instanceof SubArray)) return false; + + arr[34] = "foo"; + return arr.length === 35; +}()); diff --git a/node_modules/es5-ext/array/_sub-array-dummy-safe.js b/node_modules/es5-ext/array/_sub-array-dummy-safe.js new file mode 100644 index 000000000..80e3b3c58 --- /dev/null +++ b/node_modules/es5-ext/array/_sub-array-dummy-safe.js @@ -0,0 +1,25 @@ +"use strict"; + +var setPrototypeOf = require("../object/set-prototype-of") + , isExtensible = require("./_is-extensible"); + +module.exports = (function () { + var SubArray; + + if (isExtensible) return require("./_sub-array-dummy"); + + if (!setPrototypeOf) return null; + SubArray = function () { + var arr = Array.apply(this, arguments); + setPrototypeOf(arr, SubArray.prototype); + return arr; + }; + setPrototypeOf(SubArray, Array); + SubArray.prototype = Object.create(Array.prototype, { + constructor: { value: SubArray, +enumerable: false, +writable: true, + configurable: true } + }); + return SubArray; +}()); diff --git a/node_modules/es5-ext/array/_sub-array-dummy.js b/node_modules/es5-ext/array/_sub-array-dummy.js new file mode 100644 index 000000000..cf1115222 --- /dev/null +++ b/node_modules/es5-ext/array/_sub-array-dummy.js @@ -0,0 +1,20 @@ +"use strict"; + +var setPrototypeOf = require("../object/set-prototype-of"); + +module.exports = (function () { + var SubArray; + + if (!setPrototypeOf) return null; + SubArray = function () { + Array.apply(this, arguments); +}; + setPrototypeOf(SubArray, Array); + SubArray.prototype = Object.create(Array.prototype, { + constructor: { value: SubArray, +enumerable: false, +writable: true, + configurable: true } + }); + return SubArray; +}()); diff --git a/node_modules/es5-ext/array/from/implement.js b/node_modules/es5-ext/array/from/implement.js new file mode 100644 index 000000000..41172242e --- /dev/null +++ b/node_modules/es5-ext/array/from/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array, "from", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/from/index.js b/node_modules/es5-ext/array/from/index.js new file mode 100644 index 000000000..ca4492d11 --- /dev/null +++ b/node_modules/es5-ext/array/from/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.from + : require("./shim"); diff --git a/node_modules/es5-ext/array/from/is-implemented.js b/node_modules/es5-ext/array/from/is-implemented.js new file mode 100644 index 000000000..3567c8766 --- /dev/null +++ b/node_modules/es5-ext/array/from/is-implemented.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function () { + var from = Array.from, arr, result; + if (typeof from !== "function") return false; + arr = ["raz", "dwa"]; + result = from(arr); + return Boolean(result && (result !== arr) && (result[1] === "dwa")); +}; diff --git a/node_modules/es5-ext/array/from/shim.js b/node_modules/es5-ext/array/from/shim.js new file mode 100644 index 000000000..8928181ef --- /dev/null +++ b/node_modules/es5-ext/array/from/shim.js @@ -0,0 +1,119 @@ +"use strict"; + +var iteratorSymbol = require("es6-symbol").iterator + , isArguments = require("../../function/is-arguments") + , isFunction = require("../../function/is-function") + , toPosInt = require("../../number/to-pos-integer") + , callable = require("../../object/valid-callable") + , validValue = require("../../object/valid-value") + , isValue = require("../../object/is-value") + , isString = require("../../string/is-string") + , isArray = Array.isArray + , call = Function.prototype.call + , desc = { configurable: true, enumerable: true, writable: true, value: null } + , defineProperty = Object.defineProperty; + +// eslint-disable-next-line complexity +module.exports = function (arrayLike /*, mapFn, thisArg*/) { + var mapFn = arguments[1] + , thisArg = arguments[2] + , Context + , i + , j + , arr + , length + , code + , iterator + , result + , getIterator + , value; + + arrayLike = Object(validValue(arrayLike)); + + if (isValue(mapFn)) callable(mapFn); + if (!this || this === Array || !isFunction(this)) { + // Result: Plain array + if (!mapFn) { + if (isArguments(arrayLike)) { + // Source: Arguments + length = arrayLike.length; + if (length !== 1) return Array.apply(null, arrayLike); + arr = new Array(1); + arr[0] = arrayLike[0]; + return arr; + } + if (isArray(arrayLike)) { + // Source: Array + arr = new Array(length = arrayLike.length); + for (i = 0; i < length; ++i) arr[i] = arrayLike[i]; + return arr; + } + } + arr = []; + } else { + // Result: Non plain array + Context = this; + } + + if (!isArray(arrayLike)) { + if ((getIterator = arrayLike[iteratorSymbol]) !== undefined) { + // Source: Iterator + iterator = callable(getIterator).call(arrayLike); + if (Context) arr = new Context(); + result = iterator.next(); + i = 0; + while (!result.done) { + value = mapFn ? call.call(mapFn, thisArg, result.value, i) : result.value; + if (Context) { + desc.value = value; + defineProperty(arr, i, desc); + } else { + arr[i] = value; + } + result = iterator.next(); + ++i; + } + length = i; + } else if (isString(arrayLike)) { + // Source: String + length = arrayLike.length; + if (Context) arr = new Context(); + for (i = 0, j = 0; i < length; ++i) { + value = arrayLike[i]; + if (i + 1 < length) { + code = value.charCodeAt(0); + // eslint-disable-next-line max-depth + if (code >= 0xd800 && code <= 0xdbff) value += arrayLike[++i]; + } + value = mapFn ? call.call(mapFn, thisArg, value, j) : value; + if (Context) { + desc.value = value; + defineProperty(arr, j, desc); + } else { + arr[j] = value; + } + ++j; + } + length = j; + } + } + if (length === undefined) { + // Source: array or array-like + length = toPosInt(arrayLike.length); + if (Context) arr = new Context(length); + for (i = 0; i < length; ++i) { + value = mapFn ? call.call(mapFn, thisArg, arrayLike[i], i) : arrayLike[i]; + if (Context) { + desc.value = value; + defineProperty(arr, i, desc); + } else { + arr[i] = value; + } + } + } + if (Context) { + desc.value = null; + arr.length = length; + } + return arr; +}; diff --git a/node_modules/es5-ext/array/generate.js b/node_modules/es5-ext/array/generate.js new file mode 100644 index 000000000..42b693035 --- /dev/null +++ b/node_modules/es5-ext/array/generate.js @@ -0,0 +1,18 @@ +"use strict"; + +var toPosInt = require("../number/to-pos-integer") + , value = require("../object/valid-value") + , slice = Array.prototype.slice; + +module.exports = function (length /*, …fill*/) { + var arr, currentLength; + length = toPosInt(value(length)); + if (length === 0) return []; + + arr = arguments.length < 2 ? [undefined] : slice.call(arguments, 1, 1 + length); + + while ((currentLength = arr.length) < length) { + arr = arr.concat(arr.slice(0, length - currentLength)); + } + return arr; +}; diff --git a/node_modules/es5-ext/array/index.js b/node_modules/es5-ext/array/index.js new file mode 100644 index 000000000..49ff58ee4 --- /dev/null +++ b/node_modules/es5-ext/array/index.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = { + "#": require("./#"), + "from": require("./from"), + "generate": require("./generate"), + "isPlainArray": require("./is-plain-array"), + "of": require("./of"), + "toArray": require("./to-array"), + "validArray": require("./valid-array") +}; diff --git a/node_modules/es5-ext/array/is-plain-array.js b/node_modules/es5-ext/array/is-plain-array.js new file mode 100644 index 000000000..ca3d25bb9 --- /dev/null +++ b/node_modules/es5-ext/array/is-plain-array.js @@ -0,0 +1,11 @@ +"use strict"; + +var isArray = Array.isArray, getPrototypeOf = Object.getPrototypeOf; + +module.exports = function (obj) { + var proto; + if (!obj || !isArray(obj)) return false; + proto = getPrototypeOf(obj); + if (!isArray(proto)) return false; + return !isArray(getPrototypeOf(proto)); +}; diff --git a/node_modules/es5-ext/array/of/implement.js b/node_modules/es5-ext/array/of/implement.js new file mode 100644 index 000000000..92f8f3e30 --- /dev/null +++ b/node_modules/es5-ext/array/of/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Array, "of", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/array/of/index.js b/node_modules/es5-ext/array/of/index.js new file mode 100644 index 000000000..43ab3f627 --- /dev/null +++ b/node_modules/es5-ext/array/of/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Array.of + : require("./shim"); diff --git a/node_modules/es5-ext/array/of/is-implemented.js b/node_modules/es5-ext/array/of/is-implemented.js new file mode 100644 index 000000000..20b80c207 --- /dev/null +++ b/node_modules/es5-ext/array/of/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = function () { + var of = Array.of, result; + if (typeof of !== "function") return false; + result = of("foo", "bar"); + return Boolean(result && (result[1] === "bar")); +}; diff --git a/node_modules/es5-ext/array/of/shim.js b/node_modules/es5-ext/array/of/shim.js new file mode 100644 index 000000000..6cc9c3833 --- /dev/null +++ b/node_modules/es5-ext/array/of/shim.js @@ -0,0 +1,19 @@ +"use strict"; + +var isFunction = require("../../function/is-function") + , slice = Array.prototype.slice + , defineProperty = Object.defineProperty + , desc = { configurable: true, enumerable: true, writable: true, value: null }; + +module.exports = function (/* …items*/) { + var result, i, length; + if (!this || this === Array || !isFunction(this)) return slice.call(arguments); + result = new this(length = arguments.length); + for (i = 0; i < length; ++i) { + desc.value = arguments[i]; + defineProperty(result, i, desc); + } + desc.value = null; + result.length = length; + return result; +}; diff --git a/node_modules/es5-ext/array/to-array.js b/node_modules/es5-ext/array/to-array.js new file mode 100644 index 000000000..2078b7a3a --- /dev/null +++ b/node_modules/es5-ext/array/to-array.js @@ -0,0 +1,9 @@ +"use strict"; + +var from = require("./from") + + , isArray = Array.isArray; + +module.exports = function (arrayLike) { + return isArray(arrayLike) ? arrayLike : from(arrayLike); +}; diff --git a/node_modules/es5-ext/array/valid-array.js b/node_modules/es5-ext/array/valid-array.js new file mode 100644 index 000000000..1e58c39a3 --- /dev/null +++ b/node_modules/es5-ext/array/valid-array.js @@ -0,0 +1,8 @@ +"use strict"; + +var isArray = Array.isArray; + +module.exports = function (value) { + if (isArray(value)) return value; + throw new TypeError(value + " is not an array"); +}; diff --git a/node_modules/es5-ext/boolean/index.js b/node_modules/es5-ext/boolean/index.js new file mode 100644 index 000000000..ffd3fd253 --- /dev/null +++ b/node_modules/es5-ext/boolean/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + isBoolean: require("./is-boolean") +}; diff --git a/node_modules/es5-ext/boolean/is-boolean.js b/node_modules/es5-ext/boolean/is-boolean.js new file mode 100644 index 000000000..394845f6c --- /dev/null +++ b/node_modules/es5-ext/boolean/is-boolean.js @@ -0,0 +1,10 @@ +"use strict"; + +var objToString = Object.prototype.toString, id = objToString.call(true); + +module.exports = function (value) { + return ( + typeof value === "boolean" || + (typeof value === "object" && (value instanceof Boolean || objToString.call(value) === id)) + ); +}; diff --git a/node_modules/es5-ext/circle.yml b/node_modules/es5-ext/circle.yml new file mode 100644 index 000000000..0f2ee9a44 --- /dev/null +++ b/node_modules/es5-ext/circle.yml @@ -0,0 +1,11 @@ +machine: + node: + version: 8 + +test: + override: + - npm test + - nvm use 6; npm test + - npm run lint + - nvm use 4; npm test + - nvm use 0.12; npm test diff --git a/node_modules/es5-ext/date/#/copy.js b/node_modules/es5-ext/date/#/copy.js new file mode 100644 index 000000000..9638a6539 --- /dev/null +++ b/node_modules/es5-ext/date/#/copy.js @@ -0,0 +1,7 @@ +"use strict"; + +var getTime = Date.prototype.getTime; + +module.exports = function () { + return new Date(getTime.call(this)); +}; diff --git a/node_modules/es5-ext/date/#/days-in-month.js b/node_modules/es5-ext/date/#/days-in-month.js new file mode 100644 index 000000000..8e8ca4d4f --- /dev/null +++ b/node_modules/es5-ext/date/#/days-in-month.js @@ -0,0 +1,17 @@ +"use strict"; + +var getMonth = Date.prototype.getMonth; + +module.exports = function () { + switch (getMonth.call(this)) { + case 1: + return this.getFullYear() % 4 ? 28 : 29; + case 3: + case 5: + case 8: + case 10: + return 30; + default: + return 31; + } +}; diff --git a/node_modules/es5-ext/date/#/floor-day.js b/node_modules/es5-ext/date/#/floor-day.js new file mode 100644 index 000000000..db696d38e --- /dev/null +++ b/node_modules/es5-ext/date/#/floor-day.js @@ -0,0 +1,8 @@ +"use strict"; + +var setHours = Date.prototype.setHours; + +module.exports = function () { + setHours.call(this, 0, 0, 0, 0); + return this; +}; diff --git a/node_modules/es5-ext/date/#/floor-month.js b/node_modules/es5-ext/date/#/floor-month.js new file mode 100644 index 000000000..c9c0460ba --- /dev/null +++ b/node_modules/es5-ext/date/#/floor-month.js @@ -0,0 +1,8 @@ +"use strict"; + +var floorDay = require("./floor-day"); + +module.exports = function () { + floorDay.call(this).setDate(1); + return this; +}; diff --git a/node_modules/es5-ext/date/#/floor-year.js b/node_modules/es5-ext/date/#/floor-year.js new file mode 100644 index 000000000..e9b6f0fe7 --- /dev/null +++ b/node_modules/es5-ext/date/#/floor-year.js @@ -0,0 +1,8 @@ +"use strict"; + +var floorMonth = require("./floor-month"); + +module.exports = function () { + floorMonth.call(this).setMonth(0); + return this; +}; diff --git a/node_modules/es5-ext/date/#/format.js b/node_modules/es5-ext/date/#/format.js new file mode 100644 index 000000000..519d77c4a --- /dev/null +++ b/node_modules/es5-ext/date/#/format.js @@ -0,0 +1,38 @@ +/* eslint id-length: "off" */ + +"use strict"; + +var pad = require("../../number/#/pad") + , date = require("../valid-date") + , format; + +format = require("../../string/format-method")({ + Y: function () { + return String(this.getFullYear()); + }, + y: function () { + return String(this.getFullYear()).slice(-2); + }, + m: function () { + return pad.call(this.getMonth() + 1, 2); + }, + d: function () { + return pad.call(this.getDate(), 2); + }, + H: function () { + return pad.call(this.getHours(), 2); + }, + M: function () { + return pad.call(this.getMinutes(), 2); + }, + S: function () { + return pad.call(this.getSeconds(), 2); + }, + L: function () { + return pad.call(this.getMilliseconds(), 3); + } +}); + +module.exports = function (pattern) { + return format.call(date(this), pattern); +}; diff --git a/node_modules/es5-ext/date/#/index.js b/node_modules/es5-ext/date/#/index.js new file mode 100644 index 000000000..1781e2180 --- /dev/null +++ b/node_modules/es5-ext/date/#/index.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + copy: require("./copy"), + daysInMonth: require("./days-in-month"), + floorDay: require("./floor-day"), + floorMonth: require("./floor-month"), + floorYear: require("./floor-year"), + format: require("./format") +}; diff --git a/node_modules/es5-ext/date/index.js b/node_modules/es5-ext/date/index.js new file mode 100644 index 000000000..507e5e69e --- /dev/null +++ b/node_modules/es5-ext/date/index.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + "#": require("./#"), + "isDate": require("./is-date"), + "validDate": require("./valid-date") +}; diff --git a/node_modules/es5-ext/date/is-date.js b/node_modules/es5-ext/date/is-date.js new file mode 100644 index 000000000..97582032d --- /dev/null +++ b/node_modules/es5-ext/date/is-date.js @@ -0,0 +1,7 @@ +"use strict"; + +var objToString = Object.prototype.toString, id = objToString.call(new Date()); + +module.exports = function (value) { + return (value && (value instanceof Date || objToString.call(value) === id)) || false; +}; diff --git a/node_modules/es5-ext/date/valid-date.js b/node_modules/es5-ext/date/valid-date.js new file mode 100644 index 000000000..c17125f0f --- /dev/null +++ b/node_modules/es5-ext/date/valid-date.js @@ -0,0 +1,8 @@ +"use strict"; + +var isDate = require("./is-date"); + +module.exports = function (value) { + if (!isDate(value) || isNaN(value)) throw new TypeError(value + " is not valid Date object"); + return value; +}; diff --git a/node_modules/es5-ext/error/#/index.js b/node_modules/es5-ext/error/#/index.js new file mode 100644 index 000000000..ac9a4306c --- /dev/null +++ b/node_modules/es5-ext/error/#/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + throw: require("./throw") +}; diff --git a/node_modules/es5-ext/error/#/throw.js b/node_modules/es5-ext/error/#/throw.js new file mode 100644 index 000000000..3fe6bb4c8 --- /dev/null +++ b/node_modules/es5-ext/error/#/throw.js @@ -0,0 +1,7 @@ +"use strict"; + +var error = require("../valid-error"); + +module.exports = function () { + throw error(this); +}; diff --git a/node_modules/es5-ext/error/custom.js b/node_modules/es5-ext/error/custom.js new file mode 100644 index 000000000..0e4c8cb1f --- /dev/null +++ b/node_modules/es5-ext/error/custom.js @@ -0,0 +1,20 @@ +"use strict"; + +var assign = require("../object/assign") + , isObject = require("../object/is-object") + , isValue = require("../object/is-value") + , captureStackTrace = Error.captureStackTrace; + +exports = module.exports = function (message /*, code, ext*/) { + var err = new Error(message), code = arguments[1], ext = arguments[2]; + if (!isValue(ext)) { + if (isObject(code)) { + ext = code; + code = null; + } + } + if (isValue(ext)) assign(err, ext); + if (isValue(code)) err.code = code; + if (captureStackTrace) captureStackTrace(err, exports); + return err; +}; diff --git a/node_modules/es5-ext/error/index.js b/node_modules/es5-ext/error/index.js new file mode 100644 index 000000000..cb7054a27 --- /dev/null +++ b/node_modules/es5-ext/error/index.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + "#": require("./#"), + "custom": require("./custom"), + "isError": require("./is-error"), + "validError": require("./valid-error") +}; diff --git a/node_modules/es5-ext/error/is-error.js b/node_modules/es5-ext/error/is-error.js new file mode 100644 index 000000000..aad67ed9a --- /dev/null +++ b/node_modules/es5-ext/error/is-error.js @@ -0,0 +1,7 @@ +"use strict"; + +var objToString = Object.prototype.toString, id = objToString.call(new Error()); + +module.exports = function (value) { + return (value && (value instanceof Error || objToString.call(value) === id)) || false; +}; diff --git a/node_modules/es5-ext/error/valid-error.js b/node_modules/es5-ext/error/valid-error.js new file mode 100644 index 000000000..432f7ba29 --- /dev/null +++ b/node_modules/es5-ext/error/valid-error.js @@ -0,0 +1,8 @@ +"use strict"; + +var isError = require("./is-error"); + +module.exports = function (value) { + if (!isError(value)) throw new TypeError(value + " is not an Error object"); + return value; +}; diff --git a/node_modules/es5-ext/function/#/compose.js b/node_modules/es5-ext/function/#/compose.js new file mode 100644 index 000000000..089751783 --- /dev/null +++ b/node_modules/es5-ext/function/#/compose.js @@ -0,0 +1,22 @@ +"use strict"; + +var callable = require("../../object/valid-callable") + , aFrom = require("../../array/from") + , apply = Function.prototype.apply + , call = Function.prototype.call + , callFn = function (arg, fn) { + return call.call(fn, this, arg); +}; + +module.exports = function (fn /*, …fnn*/) { + var fns, first; + if (!fn) callable(fn); + fns = [this].concat(aFrom(arguments)); + fns.forEach(callable); + fns = fns.reverse(); + first = fns[0]; + fns = fns.slice(1); + return function (argIgnored) { + return fns.reduce(callFn, apply.call(first, this, arguments)); + }; +}; diff --git a/node_modules/es5-ext/function/#/copy.js b/node_modules/es5-ext/function/#/copy.js new file mode 100644 index 000000000..f0403b304 --- /dev/null +++ b/node_modules/es5-ext/function/#/copy.js @@ -0,0 +1,23 @@ +"use strict"; + +var mixin = require("../../object/mixin") + , validFunction = require("../valid-function") + , re = /^\s*function\s*([\0-')-\uffff]+)*\s*\(([\0-(*-\uffff]*)\)\s*\{/; + +module.exports = function () { + var match = String(validFunction(this)).match(re), fn; + + // eslint-disable-next-line no-new-func + fn = new Function( + "fn", + "return function " + + match[1].trim() + + "(" + + match[2] + + ") { return fn.apply(this, arguments); };" + )(this); + try { + mixin(fn, this); + } catch (ignore) {} + return fn; +}; diff --git a/node_modules/es5-ext/function/#/curry.js b/node_modules/es5-ext/function/#/curry.js new file mode 100644 index 000000000..a9b17814d --- /dev/null +++ b/node_modules/es5-ext/function/#/curry.js @@ -0,0 +1,24 @@ +"use strict"; + +var toPosInt = require("../../number/to-pos-integer") + , callable = require("../../object/valid-callable") + , defineLength = require("../_define-length") + + , slice = Array.prototype.slice, apply = Function.prototype.apply + , curry; + +curry = function self (fn, length, preArgs) { + return defineLength(function () { + var args = preArgs + ? preArgs.concat(slice.call(arguments, 0, length - preArgs.length)) + : slice.call(arguments, 0, length); + return args.length === length ? apply.call(fn, this, args) + : self(fn, length, args); + }, preArgs ? length - preArgs.length : length); +}; + +module.exports = function (/* Length*/) { + var length = arguments[0]; + return curry(callable(this), + isNaN(length) ? toPosInt(this.length) : toPosInt(length)); +}; diff --git a/node_modules/es5-ext/function/#/index.js b/node_modules/es5-ext/function/#/index.js new file mode 100644 index 000000000..74c7f0171 --- /dev/null +++ b/node_modules/es5-ext/function/#/index.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = { + compose: require("./compose"), + copy: require("./copy"), + curry: require("./curry"), + lock: require("./lock"), + not: require("./not"), + partial: require("./partial"), + spread: require("./spread"), + toStringTokens: require("./to-string-tokens") +}; diff --git a/node_modules/es5-ext/function/#/lock.js b/node_modules/es5-ext/function/#/lock.js new file mode 100644 index 000000000..dcd93bb10 --- /dev/null +++ b/node_modules/es5-ext/function/#/lock.js @@ -0,0 +1,14 @@ +"use strict"; + +var callable = require("../../object/valid-callable") + + , apply = Function.prototype.apply; + +module.exports = function (/* …args*/) { + var fn = callable(this) + , args = arguments; + + return function () { + return apply.call(fn, this, args); +}; +}; diff --git a/node_modules/es5-ext/function/#/not.js b/node_modules/es5-ext/function/#/not.js new file mode 100644 index 000000000..82d64def7 --- /dev/null +++ b/node_modules/es5-ext/function/#/not.js @@ -0,0 +1,14 @@ +"use strict"; + +var callable = require("../../object/valid-callable") + , defineLength = require("../_define-length") + + , apply = Function.prototype.apply; + +module.exports = function () { + var fn = callable(this); + + return defineLength(function () { + return !apply.call(fn, this, arguments); + }, fn.length); +}; diff --git a/node_modules/es5-ext/function/#/partial.js b/node_modules/es5-ext/function/#/partial.js new file mode 100644 index 000000000..1734b1355 --- /dev/null +++ b/node_modules/es5-ext/function/#/partial.js @@ -0,0 +1,16 @@ +"use strict"; + +var callable = require("../../object/valid-callable") + , aFrom = require("../../array/from") + , defineLength = require("../_define-length") + + , apply = Function.prototype.apply; + +module.exports = function (/* …args*/) { + var fn = callable(this) + , args = aFrom(arguments); + + return defineLength(function () { + return apply.call(fn, this, args.concat(aFrom(arguments))); + }, fn.length - args.length); +}; diff --git a/node_modules/es5-ext/function/#/spread.js b/node_modules/es5-ext/function/#/spread.js new file mode 100644 index 000000000..755553b4e --- /dev/null +++ b/node_modules/es5-ext/function/#/spread.js @@ -0,0 +1,12 @@ +"use strict"; + +var callable = require("../../object/valid-callable") + + , apply = Function.prototype.apply; + +module.exports = function () { + var fn = callable(this); + return function (args) { + return apply.call(fn, this, args); +}; +}; diff --git a/node_modules/es5-ext/function/#/to-string-tokens.js b/node_modules/es5-ext/function/#/to-string-tokens.js new file mode 100644 index 000000000..4ce026a56 --- /dev/null +++ b/node_modules/es5-ext/function/#/to-string-tokens.js @@ -0,0 +1,17 @@ +"use strict"; + +var validFunction = require("../valid-function"); + +var re1 = /^\s*function[\0-')-\uffff]*\(([\0-(*-\uffff]*)\)\s*\{([\0-\uffff]*)\}\s*$/ + , re2 = /^\s*\(?([\0-'*-\uffff]*)\)?\s*=>\s*(\{?[\0-\uffff]*\}?)\s*$/; + +module.exports = function () { + var str = String(validFunction(this)), data = str.match(re1); + if (!data) { + data = str.match(re2); + if (!data) throw new Error("Unrecognized string format"); + data[1] = data[1].trim(); + if (data[2][0] === "{") data[2] = data[2].trim().slice(1, -1); + } + return { args: data[1], body: data[2] }; +}; diff --git a/node_modules/es5-ext/function/_define-length.js b/node_modules/es5-ext/function/_define-length.js new file mode 100644 index 000000000..13749d3bb --- /dev/null +++ b/node_modules/es5-ext/function/_define-length.js @@ -0,0 +1,56 @@ +"use strict"; + +var toPosInt = require("../number/to-pos-integer"); + +var test = function (arg1, arg2) { + return arg2; +}; + +var desc, defineProperty, generate, mixin; + +try { + Object.defineProperty(test, "length", { + configurable: true, + writable: false, + enumerable: false, + value: 1 + }); +} catch (ignore) {} + +if (test.length === 1) { + // ES6 + desc = { configurable: true, writable: false, enumerable: false }; + defineProperty = Object.defineProperty; + module.exports = function (fn, length) { + length = toPosInt(length); + if (fn.length === length) return fn; + desc.value = length; + return defineProperty(fn, "length", desc); + }; +} else { + mixin = require("../object/mixin"); + generate = (function () { + var cache = []; + return function (length) { + var args, i = 0; + if (cache[length]) return cache[length]; + args = []; + while (length--) args.push("a" + (++i).toString(36)); + // eslint-disable-next-line no-new-func + return new Function( + "fn", + "return function (" + args.join(", ") + ") { return fn.apply(this, arguments); };" + ); + }; + }()); + module.exports = function (src, length) { + var target; + length = toPosInt(length); + if (src.length === length) return src; + target = generate(length)(src); + try { + mixin(target, src); + } catch (ignore) {} + return target; + }; +} diff --git a/node_modules/es5-ext/function/constant.js b/node_modules/es5-ext/function/constant.js new file mode 100644 index 000000000..c41435d57 --- /dev/null +++ b/node_modules/es5-ext/function/constant.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (value) { + return function () { + return value; + }; +}; diff --git a/node_modules/es5-ext/function/identity.js b/node_modules/es5-ext/function/identity.js new file mode 100644 index 000000000..01a5aadf5 --- /dev/null +++ b/node_modules/es5-ext/function/identity.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (value) { + return value; +}; diff --git a/node_modules/es5-ext/function/index.js b/node_modules/es5-ext/function/index.js new file mode 100644 index 000000000..1574fbbbe --- /dev/null +++ b/node_modules/es5-ext/function/index.js @@ -0,0 +1,15 @@ +// Export all modules. + +"use strict"; + +module.exports = { + "#": require("./#"), + "constant": require("./constant"), + "identity": require("./identity"), + "invoke": require("./invoke"), + "isArguments": require("./is-arguments"), + "isFunction": require("./is-function"), + "noop": require("./noop"), + "pluck": require("./pluck"), + "validFunction": require("./valid-function") +}; diff --git a/node_modules/es5-ext/function/invoke.js b/node_modules/es5-ext/function/invoke.js new file mode 100644 index 000000000..c3d23f2d6 --- /dev/null +++ b/node_modules/es5-ext/function/invoke.js @@ -0,0 +1,15 @@ +"use strict"; + +var isCallable = require("../object/is-callable") + , value = require("../object/valid-value") + + , slice = Array.prototype.slice, apply = Function.prototype.apply; + +module.exports = function (name/*, …args*/) { + var args = slice.call(arguments, 1), isFn = isCallable(name); + return function (obj) { + value(obj); + return apply.call(isFn ? name : obj[name], obj, + args.concat(slice.call(arguments, 1))); + }; +}; diff --git a/node_modules/es5-ext/function/is-arguments.js b/node_modules/es5-ext/function/is-arguments.js new file mode 100644 index 000000000..f4bf40608 --- /dev/null +++ b/node_modules/es5-ext/function/is-arguments.js @@ -0,0 +1,12 @@ +"use strict"; + +var objToString = Object.prototype.toString + , id = objToString.call( + (function () { + return arguments; + })() +); + +module.exports = function (value) { + return objToString.call(value) === id; +}; diff --git a/node_modules/es5-ext/function/is-function.js b/node_modules/es5-ext/function/is-function.js new file mode 100644 index 000000000..d3d92f4ed --- /dev/null +++ b/node_modules/es5-ext/function/is-function.js @@ -0,0 +1,7 @@ +"use strict"; + +var objToString = Object.prototype.toString, id = objToString.call(require("./noop")); + +module.exports = function (value) { + return typeof value === "function" && objToString.call(value) === id; +}; diff --git a/node_modules/es5-ext/function/noop.js b/node_modules/es5-ext/function/noop.js new file mode 100644 index 000000000..6174f0331 --- /dev/null +++ b/node_modules/es5-ext/function/noop.js @@ -0,0 +1,4 @@ +"use strict"; + +// eslint-disable-next-line no-empty-function +module.exports = function () {}; diff --git a/node_modules/es5-ext/function/pluck.js b/node_modules/es5-ext/function/pluck.js new file mode 100644 index 000000000..8507128ac --- /dev/null +++ b/node_modules/es5-ext/function/pluck.js @@ -0,0 +1,9 @@ +"use strict"; + +var value = require("../object/valid-value"); + +module.exports = function (name) { + return function (obj) { + return value(obj)[name]; + }; +}; diff --git a/node_modules/es5-ext/function/valid-function.js b/node_modules/es5-ext/function/valid-function.js new file mode 100644 index 000000000..060bd6453 --- /dev/null +++ b/node_modules/es5-ext/function/valid-function.js @@ -0,0 +1,8 @@ +"use strict"; + +var isFunction = require("./is-function"); + +module.exports = function (value) { + if (!isFunction(value)) throw new TypeError(value + " is not a function"); + return value; +}; diff --git a/node_modules/es5-ext/global.js b/node_modules/es5-ext/global.js new file mode 100644 index 000000000..d77579c57 --- /dev/null +++ b/node_modules/es5-ext/global.js @@ -0,0 +1,5 @@ +/* eslint strict: "off" */ + +module.exports = (function () { + return this; +}()); diff --git a/node_modules/es5-ext/index.js b/node_modules/es5-ext/index.js new file mode 100644 index 000000000..a6b57ea7e --- /dev/null +++ b/node_modules/es5-ext/index.js @@ -0,0 +1,21 @@ +"use strict"; + +module.exports = { + global: require("./global"), + optionalChaining: require("./optional-chaining"), + safeToString: require("./safe-to-string"), + toShortStringRepresentation: require("./to-short-string-representation"), + + array: require("./array"), + boolean: require("./boolean"), + date: require("./date"), + error: require("./error"), + function: require("./function"), + iterable: require("./iterable"), + json: require("./json"), + math: require("./math"), + number: require("./number"), + object: require("./object"), + regExp: require("./reg-exp"), + string: require("./string") +}; diff --git a/node_modules/es5-ext/iterable/for-each.js b/node_modules/es5-ext/iterable/for-each.js new file mode 100644 index 000000000..2840e952d --- /dev/null +++ b/node_modules/es5-ext/iterable/for-each.js @@ -0,0 +1,12 @@ +"use strict"; + +var forOf = require("es6-iterator/for-of") + , isIterable = require("es6-iterator/is-iterable") + , iterable = require("./validate") + + , forEach = Array.prototype.forEach; + +module.exports = function (target, cb/*, thisArg*/) { + if (isIterable(iterable(target))) forOf(target, cb, arguments[2]); + else forEach.call(target, cb, arguments[2]); +}; diff --git a/node_modules/es5-ext/iterable/index.js b/node_modules/es5-ext/iterable/index.js new file mode 100644 index 000000000..4b898fc8c --- /dev/null +++ b/node_modules/es5-ext/iterable/index.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + forEach: require("./for-each"), + is: require("./is"), + validate: require("./validate"), + validateObject: require("./validate-object") +}; diff --git a/node_modules/es5-ext/iterable/is.js b/node_modules/es5-ext/iterable/is.js new file mode 100644 index 000000000..aa5a9b9e1 --- /dev/null +++ b/node_modules/es5-ext/iterable/is.js @@ -0,0 +1,11 @@ +"use strict"; + +var iteratorSymbol = require("es6-symbol").iterator + , isValue = require("../object/is-value") + , isArrayLike = require("../object/is-array-like"); + +module.exports = function (value) { + if (!isValue(value)) return false; + if (typeof value[iteratorSymbol] === "function") return true; + return isArrayLike(value); +}; diff --git a/node_modules/es5-ext/iterable/validate-object.js b/node_modules/es5-ext/iterable/validate-object.js new file mode 100644 index 000000000..26e622b57 --- /dev/null +++ b/node_modules/es5-ext/iterable/validate-object.js @@ -0,0 +1,9 @@ +"use strict"; + +var isObject = require("../object/is-object") + , is = require("./is"); + +module.exports = function (value) { + if (is(value) && isObject(value)) return value; + throw new TypeError(value + " is not an iterable or array-like object"); +}; diff --git a/node_modules/es5-ext/iterable/validate.js b/node_modules/es5-ext/iterable/validate.js new file mode 100644 index 000000000..94a91c471 --- /dev/null +++ b/node_modules/es5-ext/iterable/validate.js @@ -0,0 +1,8 @@ +"use strict"; + +var is = require("./is"); + +module.exports = function (value) { + if (is(value)) return value; + throw new TypeError(value + " is not an iterable or array-like"); +}; diff --git a/node_modules/es5-ext/json/index.js b/node_modules/es5-ext/json/index.js new file mode 100644 index 000000000..14b25cd64 --- /dev/null +++ b/node_modules/es5-ext/json/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + safeStringify: require("./safe-stringify") +}; diff --git a/node_modules/es5-ext/json/safe-stringify.js b/node_modules/es5-ext/json/safe-stringify.js new file mode 100644 index 000000000..f2562541a --- /dev/null +++ b/node_modules/es5-ext/json/safe-stringify.js @@ -0,0 +1,41 @@ +"use strict"; + +var compact = require("../array/#/compact") + , isObject = require("../object/is-object") + , toArray = require("../object/to-array") + , isArray = Array.isArray + , stringify = JSON.stringify; + +module.exports = function self (value /*, replacer, space*/) { + var replacer = arguments[1], space = arguments[2]; + try { + return stringify(value, replacer, space); + } catch (e) { + if (!isObject(value)) return null; + if (typeof value.toJSON === "function") return null; + if (isArray(value)) { + return ( + "[" + + compact.call( + value.map(function (item) { + return self(item, replacer, space); + }) + ) + + "]" + ); + } + return ( + "{" + + compact + .call( + toArray(value, function (item, key) { + item = self(item, replacer, space); + if (!item) return null; + return stringify(key) + ":" + item; + }) + ) + .join(",") + + "}" + ); + } +}; diff --git a/node_modules/es5-ext/math/_pack-ieee754.js b/node_modules/es5-ext/math/_pack-ieee754.js new file mode 100644 index 000000000..b77bc8d40 --- /dev/null +++ b/node_modules/es5-ext/math/_pack-ieee754.js @@ -0,0 +1,88 @@ +/* eslint no-bitwise: "off" */ +// Credit: https://github.com/paulmillr/es6-shim/ + +"use strict"; + +var abs = Math.abs + , floor = Math.floor + , log = Math.log + , min = Math.min + , pow = Math.pow + , LN2 = Math.LN2 + , roundToEven; + +roundToEven = function (num) { + var whole = floor(num), fraction = num - whole; + if (fraction < 0.5) return whole; + if (fraction > 0.5) return whole + 1; + return whole % 2 ? whole + 1 : whole; +}; + +// eslint-disable-next-line max-statements +module.exports = function (value, ebits, fbits) { + var bias = (1 << (ebits - 1)) - 1, sign, e, fraction, i, bits, str, bytes; + + // Compute sign, exponent, fraction + if (isNaN(value)) { + // NaN + // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping + e = (1 << ebits) - 1; + fraction = pow(2, fbits - 1); + sign = 0; + } else if (value === Infinity || value === -Infinity) { + e = (1 << ebits) - 1; + fraction = 0; + sign = value < 0 ? 1 : 0; + } else if (value === 0) { + e = 0; + fraction = 0; + sign = 1 / value === -Infinity ? 1 : 0; + } else { + sign = value < 0; + value = abs(value); + + if (value >= pow(2, 1 - bias)) { + e = min(floor(log(value) / LN2), 1023); + fraction = roundToEven(value / pow(2, e) * pow(2, fbits)); + if (fraction / pow(2, fbits) >= 2) { + e += 1; + fraction = 1; + } + if (e > bias) { + // Overflow + e = (1 << ebits) - 1; + fraction = 0; + } else { + // Normal + e += bias; + fraction -= pow(2, fbits); + } + } else { + // Subnormal + e = 0; + fraction = roundToEven(value / pow(2, 1 - bias - fbits)); + } + } + + // Pack sign, exponent, fraction + bits = []; + for (i = fbits; i; i -= 1) { + bits.push(fraction % 2 ? 1 : 0); + fraction = floor(fraction / 2); + } + for (i = ebits; i; i -= 1) { + bits.push(e % 2 ? 1 : 0); + e = floor(e / 2); + } + bits.push(sign ? 1 : 0); + bits.reverse(); + str = bits.join(""); + + // Bits to bytes + bytes = []; + while (str.length) { + bytes.push(parseInt(str.substring(0, 8), 2)); + str = str.substring(8); + } + return bytes; +}; diff --git a/node_modules/es5-ext/math/_unpack-ieee754.js b/node_modules/es5-ext/math/_unpack-ieee754.js new file mode 100644 index 000000000..83fa9475e --- /dev/null +++ b/node_modules/es5-ext/math/_unpack-ieee754.js @@ -0,0 +1,33 @@ +/* eslint no-bitwise: "off" */ +// Credit: https://github.com/paulmillr/es6-shim/ + +"use strict"; + +var pow = Math.pow; + +module.exports = function (bytes, ebits, fbits) { + // Bytes to bits + var bits = [], i, j, bit, str, bias, sign, e, fraction; + + for (i = bytes.length; i; i -= 1) { + bit = bytes[i - 1]; + for (j = 8; j; j -= 1) { + bits.push(bit % 2 ? 1 : 0); + bit >>= 1; + } + } + bits.reverse(); + str = bits.join(""); + + // Unpack sign, exponent, fraction + bias = (1 << (ebits - 1)) - 1; + sign = parseInt(str.substring(0, 1), 2) ? -1 : 1; + e = parseInt(str.substring(1, 1 + ebits), 2); + fraction = parseInt(str.substring(1 + ebits), 2); + + // Produce number + if (e === (1 << ebits) - 1) return fraction === 0 ? sign * Infinity : NaN; + if (e > 0) return sign * pow(2, e - bias) * (1 + fraction / pow(2, fbits)); + if (fraction !== 0) return sign * pow(2, -(bias - 1)) * (fraction / pow(2, fbits)); + return sign < 0 ? -0 : 0; +}; diff --git a/node_modules/es5-ext/math/acosh/implement.js b/node_modules/es5-ext/math/acosh/implement.js new file mode 100644 index 000000000..ea75c7d13 --- /dev/null +++ b/node_modules/es5-ext/math/acosh/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "acosh", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/acosh/index.js b/node_modules/es5-ext/math/acosh/index.js new file mode 100644 index 000000000..160f6b992 --- /dev/null +++ b/node_modules/es5-ext/math/acosh/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.acosh + : require("./shim"); diff --git a/node_modules/es5-ext/math/acosh/is-implemented.js b/node_modules/es5-ext/math/acosh/is-implemented.js new file mode 100644 index 000000000..2e9730136 --- /dev/null +++ b/node_modules/es5-ext/math/acosh/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var acosh = Math.acosh; + if (typeof acosh !== "function") return false; + return acosh(2) === 1.3169578969248166; +}; diff --git a/node_modules/es5-ext/math/acosh/shim.js b/node_modules/es5-ext/math/acosh/shim.js new file mode 100644 index 000000000..3e632ffba --- /dev/null +++ b/node_modules/es5-ext/math/acosh/shim.js @@ -0,0 +1,12 @@ +"use strict"; + +var log = Math.log, sqrt = Math.sqrt; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value < 1) return NaN; + if (value === 1) return 0; + if (value === Infinity) return value; + return log(value + sqrt(value * value - 1)); +}; diff --git a/node_modules/es5-ext/math/asinh/implement.js b/node_modules/es5-ext/math/asinh/implement.js new file mode 100644 index 000000000..efa6704ec --- /dev/null +++ b/node_modules/es5-ext/math/asinh/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "asinh", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/asinh/index.js b/node_modules/es5-ext/math/asinh/index.js new file mode 100644 index 000000000..b5fb120f2 --- /dev/null +++ b/node_modules/es5-ext/math/asinh/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.asinh + : require("./shim"); diff --git a/node_modules/es5-ext/math/asinh/is-implemented.js b/node_modules/es5-ext/math/asinh/is-implemented.js new file mode 100644 index 000000000..a7e0f20f8 --- /dev/null +++ b/node_modules/es5-ext/math/asinh/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var asinh = Math.asinh; + if (typeof asinh !== "function") return false; + return asinh(2) === 1.4436354751788103; +}; diff --git a/node_modules/es5-ext/math/asinh/shim.js b/node_modules/es5-ext/math/asinh/shim.js new file mode 100644 index 000000000..30ce2e4d6 --- /dev/null +++ b/node_modules/es5-ext/math/asinh/shim.js @@ -0,0 +1,15 @@ +"use strict"; + +var log = Math.log, sqrt = Math.sqrt; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value === 0) return value; + if (!isFinite(value)) return value; + if (value < 0) { + value = -value; + return -log(value + sqrt(value * value + 1)); + } + return log(value + sqrt(value * value + 1)); +}; diff --git a/node_modules/es5-ext/math/atanh/implement.js b/node_modules/es5-ext/math/atanh/implement.js new file mode 100644 index 000000000..47d5cc22a --- /dev/null +++ b/node_modules/es5-ext/math/atanh/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "atanh", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/atanh/index.js b/node_modules/es5-ext/math/atanh/index.js new file mode 100644 index 000000000..51fbcd66a --- /dev/null +++ b/node_modules/es5-ext/math/atanh/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.atanh + : require("./shim"); diff --git a/node_modules/es5-ext/math/atanh/is-implemented.js b/node_modules/es5-ext/math/atanh/is-implemented.js new file mode 100644 index 000000000..4787c4fa6 --- /dev/null +++ b/node_modules/es5-ext/math/atanh/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var atanh = Math.atanh; + if (typeof atanh !== "function") return false; + return Math.round(atanh(0.5) * 1e15) === 549306144334055; +}; diff --git a/node_modules/es5-ext/math/atanh/shim.js b/node_modules/es5-ext/math/atanh/shim.js new file mode 100644 index 000000000..9383e9714 --- /dev/null +++ b/node_modules/es5-ext/math/atanh/shim.js @@ -0,0 +1,14 @@ +"use strict"; + +var log = Math.log; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value < -1) return NaN; + if (value > 1) return NaN; + if (value === -1) return -Infinity; + if (value === 1) return Infinity; + if (value === 0) return value; + return 0.5 * log((1 + value) / (1 - value)); +}; diff --git a/node_modules/es5-ext/math/cbrt/implement.js b/node_modules/es5-ext/math/cbrt/implement.js new file mode 100644 index 000000000..f5adbab0d --- /dev/null +++ b/node_modules/es5-ext/math/cbrt/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "cbrt", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/cbrt/index.js b/node_modules/es5-ext/math/cbrt/index.js new file mode 100644 index 000000000..47806407c --- /dev/null +++ b/node_modules/es5-ext/math/cbrt/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.cbrt + : require("./shim"); diff --git a/node_modules/es5-ext/math/cbrt/is-implemented.js b/node_modules/es5-ext/math/cbrt/is-implemented.js new file mode 100644 index 000000000..a8ac0db26 --- /dev/null +++ b/node_modules/es5-ext/math/cbrt/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var cbrt = Math.cbrt; + if (typeof cbrt !== "function") return false; + return cbrt(2) === 1.2599210498948732; +}; diff --git a/node_modules/es5-ext/math/cbrt/shim.js b/node_modules/es5-ext/math/cbrt/shim.js new file mode 100644 index 000000000..8871c552f --- /dev/null +++ b/node_modules/es5-ext/math/cbrt/shim.js @@ -0,0 +1,12 @@ +"use strict"; + +var pow = Math.pow; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value === 0) return value; + if (!isFinite(value)) return value; + if (value < 0) return -pow(-value, 1 / 3); + return pow(value, 1 / 3); +}; diff --git a/node_modules/es5-ext/math/clz32/implement.js b/node_modules/es5-ext/math/clz32/implement.js new file mode 100644 index 000000000..10b4a41d0 --- /dev/null +++ b/node_modules/es5-ext/math/clz32/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "clz32", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/clz32/index.js b/node_modules/es5-ext/math/clz32/index.js new file mode 100644 index 000000000..a16ee33a5 --- /dev/null +++ b/node_modules/es5-ext/math/clz32/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.clz32 + : require("./shim"); diff --git a/node_modules/es5-ext/math/clz32/is-implemented.js b/node_modules/es5-ext/math/clz32/is-implemented.js new file mode 100644 index 000000000..ee6d88288 --- /dev/null +++ b/node_modules/es5-ext/math/clz32/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var clz32 = Math.clz32; + if (typeof clz32 !== "function") return false; + return clz32(1000) === 22; +}; diff --git a/node_modules/es5-ext/math/clz32/shim.js b/node_modules/es5-ext/math/clz32/shim.js new file mode 100644 index 000000000..2b526c2c2 --- /dev/null +++ b/node_modules/es5-ext/math/clz32/shim.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (value) { + // eslint-disable-next-line no-bitwise + value >>>= 0; + return value ? 32 - value.toString(2).length : 32; +}; diff --git a/node_modules/es5-ext/math/cosh/implement.js b/node_modules/es5-ext/math/cosh/implement.js new file mode 100644 index 000000000..6f42b3879 --- /dev/null +++ b/node_modules/es5-ext/math/cosh/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "cosh", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/cosh/index.js b/node_modules/es5-ext/math/cosh/index.js new file mode 100644 index 000000000..5ed349afc --- /dev/null +++ b/node_modules/es5-ext/math/cosh/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.cosh + : require("./shim"); diff --git a/node_modules/es5-ext/math/cosh/is-implemented.js b/node_modules/es5-ext/math/cosh/is-implemented.js new file mode 100644 index 000000000..7173054c7 --- /dev/null +++ b/node_modules/es5-ext/math/cosh/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var cosh = Math.cosh; + if (typeof cosh !== "function") return false; + return cosh(1) === 1.5430806348152437; +}; diff --git a/node_modules/es5-ext/math/cosh/shim.js b/node_modules/es5-ext/math/cosh/shim.js new file mode 100644 index 000000000..c762c84da --- /dev/null +++ b/node_modules/es5-ext/math/cosh/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +var exp = Math.exp; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value === 0) return 1; + if (!isFinite(value)) return Infinity; + return (exp(value) + exp(-value)) / 2; +}; diff --git a/node_modules/es5-ext/math/expm1/implement.js b/node_modules/es5-ext/math/expm1/implement.js new file mode 100644 index 000000000..8c9d81113 --- /dev/null +++ b/node_modules/es5-ext/math/expm1/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "expm1", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/expm1/index.js b/node_modules/es5-ext/math/expm1/index.js new file mode 100644 index 000000000..5b5dff6b2 --- /dev/null +++ b/node_modules/es5-ext/math/expm1/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.expm1 + : require("./shim"); diff --git a/node_modules/es5-ext/math/expm1/is-implemented.js b/node_modules/es5-ext/math/expm1/is-implemented.js new file mode 100644 index 000000000..dfd056e0a --- /dev/null +++ b/node_modules/es5-ext/math/expm1/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var expm1 = Math.expm1; + if (typeof expm1 !== "function") return false; + return expm1(1).toFixed(15) === "1.718281828459045"; +}; diff --git a/node_modules/es5-ext/math/expm1/shim.js b/node_modules/es5-ext/math/expm1/shim.js new file mode 100644 index 000000000..ce737b3bc --- /dev/null +++ b/node_modules/es5-ext/math/expm1/shim.js @@ -0,0 +1,16 @@ +// Thanks: https://github.com/monolithed/ECMAScript-6 + +"use strict"; + +var exp = Math.exp; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value === 0) return value; + if (value === Infinity) return Infinity; + if (value === -Infinity) return -1; + + if (value > -1.0e-6 && value < 1.0e-6) return value + value * value / 2; + return exp(value) - 1; +}; diff --git a/node_modules/es5-ext/math/fround/implement.js b/node_modules/es5-ext/math/fround/implement.js new file mode 100644 index 000000000..b54d2fca6 --- /dev/null +++ b/node_modules/es5-ext/math/fround/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "fround", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/fround/index.js b/node_modules/es5-ext/math/fround/index.js new file mode 100644 index 000000000..db409e837 --- /dev/null +++ b/node_modules/es5-ext/math/fround/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.fround + : require("./shim"); diff --git a/node_modules/es5-ext/math/fround/is-implemented.js b/node_modules/es5-ext/math/fround/is-implemented.js new file mode 100644 index 000000000..ad2b705df --- /dev/null +++ b/node_modules/es5-ext/math/fround/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var fround = Math.fround; + if (typeof fround !== "function") return false; + return fround(1.337) === 1.3370000123977661; +}; diff --git a/node_modules/es5-ext/math/fround/shim.js b/node_modules/es5-ext/math/fround/shim.js new file mode 100644 index 000000000..bfbc54c6c --- /dev/null +++ b/node_modules/es5-ext/math/fround/shim.js @@ -0,0 +1,35 @@ +/* global Float32Array */ + +// Credit: https://github.com/paulmillr/es6-shim/blob/master/es6-shim.js + +"use strict"; + +var toFloat32; + +if (typeof Float32Array === "undefined") { + toFloat32 = (function () { + var pack = require("../_pack-ieee754") + , unpack = require("../_unpack-ieee754"); + + return function (value) { + return unpack(pack(value, 8, 23), 8, 23); + }; + }()); +} else { + toFloat32 = (function () { + var float32Array = new Float32Array(1); + return function (num) { + float32Array[0] = num; + return float32Array[0]; + }; + }()); +} + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value === 0) return value; + if (!isFinite(value)) return value; + + return toFloat32(value); +}; diff --git a/node_modules/es5-ext/math/hypot/implement.js b/node_modules/es5-ext/math/hypot/implement.js new file mode 100644 index 000000000..e2b3928b3 --- /dev/null +++ b/node_modules/es5-ext/math/hypot/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "hypot", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/hypot/index.js b/node_modules/es5-ext/math/hypot/index.js new file mode 100644 index 000000000..a030a4198 --- /dev/null +++ b/node_modules/es5-ext/math/hypot/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.hypot + : require("./shim"); diff --git a/node_modules/es5-ext/math/hypot/is-implemented.js b/node_modules/es5-ext/math/hypot/is-implemented.js new file mode 100644 index 000000000..d317bc7e5 --- /dev/null +++ b/node_modules/es5-ext/math/hypot/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var hypot = Math.hypot; + if (typeof hypot !== "function") return false; + return hypot(3, 4) === 5; +}; diff --git a/node_modules/es5-ext/math/hypot/shim.js b/node_modules/es5-ext/math/hypot/shim.js new file mode 100644 index 000000000..2a92b1715 --- /dev/null +++ b/node_modules/es5-ext/math/hypot/shim.js @@ -0,0 +1,43 @@ +// Thanks for hints: https://github.com/paulmillr/es6-shim + +"use strict"; + +var some = Array.prototype.some + , abs = Math.abs + , sqrt = Math.sqrt + , compare = function (val1, val2) { + return val2 - val1; +} + , divide = function (value) { + return value / this; +} + , add = function (sum, number) { + return sum + number * number; +}; + +// eslint-disable-next-line no-unused-vars +module.exports = function (val1, val2 /*, …valn*/) { + var result, numbers; + if (!arguments.length) return 0; + some.call(arguments, function (val) { + if (isNaN(val)) { + result = NaN; + return false; + } + if (!isFinite(val)) { + result = Infinity; + return true; + } + if (result !== undefined) return false; + val = Number(val); + if (val === 0) return false; + if (numbers) numbers.push(abs(val)); + else numbers = [abs(val)]; + return false; + }); + if (result !== undefined) return result; + if (!numbers) return 0; + + numbers.sort(compare); + return numbers[0] * sqrt(numbers.map(divide, numbers[0]).reduce(add, 0)); +}; diff --git a/node_modules/es5-ext/math/imul/implement.js b/node_modules/es5-ext/math/imul/implement.js new file mode 100644 index 000000000..bff57735b --- /dev/null +++ b/node_modules/es5-ext/math/imul/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "imul", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/imul/index.js b/node_modules/es5-ext/math/imul/index.js new file mode 100644 index 000000000..a756d5949 --- /dev/null +++ b/node_modules/es5-ext/math/imul/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.imul + : require("./shim"); diff --git a/node_modules/es5-ext/math/imul/is-implemented.js b/node_modules/es5-ext/math/imul/is-implemented.js new file mode 100644 index 000000000..0f3291984 --- /dev/null +++ b/node_modules/es5-ext/math/imul/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var imul = Math.imul; + if (typeof imul !== "function") return false; + return imul(-1, 8) === -8; +}; diff --git a/node_modules/es5-ext/math/imul/shim.js b/node_modules/es5-ext/math/imul/shim.js new file mode 100644 index 000000000..a14e5895b --- /dev/null +++ b/node_modules/es5-ext/math/imul/shim.js @@ -0,0 +1,17 @@ +/* eslint no-bitwise: "off" */ + +// Thanks: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference +// /Global_Objects/Math/imul + +"use strict"; + +module.exports = function (val1, val2) { + var xh = (val1 >>> 16) & 0xffff + , xl = val1 & 0xffff + , yh = (val2 >>> 16) & 0xffff + , yl = val2 & 0xffff; + + // The shift by 0 fixes the sign on the high part + // the final |0 converts the unsigned value into a signed value + return (xl * yl + ((xh * yl + xl * yh) << 16 >>> 0)) | 0; +}; diff --git a/node_modules/es5-ext/math/index.js b/node_modules/es5-ext/math/index.js new file mode 100644 index 000000000..db86101ff --- /dev/null +++ b/node_modules/es5-ext/math/index.js @@ -0,0 +1,21 @@ +"use strict"; + +module.exports = { + acosh: require("./acosh"), + asinh: require("./asinh"), + atanh: require("./atanh"), + cbrt: require("./cbrt"), + clz32: require("./clz32"), + cosh: require("./cosh"), + expm1: require("./expm1"), + fround: require("./fround"), + hypot: require("./hypot"), + imul: require("./imul"), + log10: require("./log10"), + log2: require("./log2"), + log1p: require("./log1p"), + sign: require("./sign"), + sinh: require("./sinh"), + tanh: require("./tanh"), + trunc: require("./trunc") +}; diff --git a/node_modules/es5-ext/math/log10/implement.js b/node_modules/es5-ext/math/log10/implement.js new file mode 100644 index 000000000..669cee887 --- /dev/null +++ b/node_modules/es5-ext/math/log10/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "log10", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/log10/index.js b/node_modules/es5-ext/math/log10/index.js new file mode 100644 index 000000000..bc2ec4816 --- /dev/null +++ b/node_modules/es5-ext/math/log10/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.log10 + : require("./shim"); diff --git a/node_modules/es5-ext/math/log10/is-implemented.js b/node_modules/es5-ext/math/log10/is-implemented.js new file mode 100644 index 000000000..f2217597d --- /dev/null +++ b/node_modules/es5-ext/math/log10/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var log10 = Math.log10; + if (typeof log10 !== "function") return false; + return log10(2) === 0.3010299956639812; +}; diff --git a/node_modules/es5-ext/math/log10/shim.js b/node_modules/es5-ext/math/log10/shim.js new file mode 100644 index 000000000..e8599a260 --- /dev/null +++ b/node_modules/es5-ext/math/log10/shim.js @@ -0,0 +1,14 @@ +"use strict"; + +var log = Math.log, LOG10E = Math.LOG10E; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value < 0) return NaN; + if (value === 0) return -Infinity; + if (value === 1) return 0; + if (value === Infinity) return Infinity; + + return log(value) * LOG10E; +}; diff --git a/node_modules/es5-ext/math/log1p/implement.js b/node_modules/es5-ext/math/log1p/implement.js new file mode 100644 index 000000000..36fcee619 --- /dev/null +++ b/node_modules/es5-ext/math/log1p/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "log1p", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/log1p/index.js b/node_modules/es5-ext/math/log1p/index.js new file mode 100644 index 000000000..41c67364f --- /dev/null +++ b/node_modules/es5-ext/math/log1p/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.log1p + : require("./shim"); diff --git a/node_modules/es5-ext/math/log1p/is-implemented.js b/node_modules/es5-ext/math/log1p/is-implemented.js new file mode 100644 index 000000000..7626ab47e --- /dev/null +++ b/node_modules/es5-ext/math/log1p/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var log1p = Math.log1p; + if (typeof log1p !== "function") return false; + return log1p(1) === 0.6931471805599453; +}; diff --git a/node_modules/es5-ext/math/log1p/shim.js b/node_modules/es5-ext/math/log1p/shim.js new file mode 100644 index 000000000..7c6f22734 --- /dev/null +++ b/node_modules/es5-ext/math/log1p/shim.js @@ -0,0 +1,17 @@ +// Thanks: https://github.com/monolithed/ECMAScript-6/blob/master/ES6.js + +"use strict"; + +var log = Math.log; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value < -1) return NaN; + if (value === -1) return -Infinity; + if (value === 0) return value; + if (value === Infinity) return Infinity; + + if (value > -1.0e-8 && value < 1.0e-8) return value - value * value / 2; + return log(1 + value); +}; diff --git a/node_modules/es5-ext/math/log2/implement.js b/node_modules/es5-ext/math/log2/implement.js new file mode 100644 index 000000000..f1c04e096 --- /dev/null +++ b/node_modules/es5-ext/math/log2/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "log2", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/log2/index.js b/node_modules/es5-ext/math/log2/index.js new file mode 100644 index 000000000..d319caec4 --- /dev/null +++ b/node_modules/es5-ext/math/log2/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.log2 + : require("./shim"); diff --git a/node_modules/es5-ext/math/log2/is-implemented.js b/node_modules/es5-ext/math/log2/is-implemented.js new file mode 100644 index 000000000..c70963f66 --- /dev/null +++ b/node_modules/es5-ext/math/log2/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var log2 = Math.log2; + if (typeof log2 !== "function") return false; + return log2(3).toFixed(15) === "1.584962500721156"; +}; diff --git a/node_modules/es5-ext/math/log2/shim.js b/node_modules/es5-ext/math/log2/shim.js new file mode 100644 index 000000000..51fcdae90 --- /dev/null +++ b/node_modules/es5-ext/math/log2/shim.js @@ -0,0 +1,14 @@ +"use strict"; + +var log = Math.log, LOG2E = Math.LOG2E; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value < 0) return NaN; + if (value === 0) return -Infinity; + if (value === 1) return 0; + if (value === Infinity) return Infinity; + + return log(value) * LOG2E; +}; diff --git a/node_modules/es5-ext/math/sign/implement.js b/node_modules/es5-ext/math/sign/implement.js new file mode 100644 index 000000000..bc7da14d1 --- /dev/null +++ b/node_modules/es5-ext/math/sign/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "sign", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/sign/index.js b/node_modules/es5-ext/math/sign/index.js new file mode 100644 index 000000000..9f2865643 --- /dev/null +++ b/node_modules/es5-ext/math/sign/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.sign + : require("./shim"); diff --git a/node_modules/es5-ext/math/sign/is-implemented.js b/node_modules/es5-ext/math/sign/is-implemented.js new file mode 100644 index 000000000..23ff83a6c --- /dev/null +++ b/node_modules/es5-ext/math/sign/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var sign = Math.sign; + if (typeof sign !== "function") return false; + return (sign(10) === 1) && (sign(-20) === -1); +}; diff --git a/node_modules/es5-ext/math/sign/shim.js b/node_modules/es5-ext/math/sign/shim.js new file mode 100644 index 000000000..760c69d12 --- /dev/null +++ b/node_modules/es5-ext/math/sign/shim.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (value) { + value = Number(value); + if (isNaN(value) || (value === 0)) return value; + return value > 0 ? 1 : -1; +}; diff --git a/node_modules/es5-ext/math/sinh/implement.js b/node_modules/es5-ext/math/sinh/implement.js new file mode 100644 index 000000000..cc4c40bcb --- /dev/null +++ b/node_modules/es5-ext/math/sinh/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "sinh", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/sinh/index.js b/node_modules/es5-ext/math/sinh/index.js new file mode 100644 index 000000000..2c43dce17 --- /dev/null +++ b/node_modules/es5-ext/math/sinh/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.sinh + : require("./shim"); diff --git a/node_modules/es5-ext/math/sinh/is-implemented.js b/node_modules/es5-ext/math/sinh/is-implemented.js new file mode 100644 index 000000000..5e4ee40c3 --- /dev/null +++ b/node_modules/es5-ext/math/sinh/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var sinh = Math.sinh; + if (typeof sinh !== "function") return false; + return (sinh(1) === 1.1752011936438014) && (sinh(Number.MIN_VALUE) === 5e-324); +}; diff --git a/node_modules/es5-ext/math/sinh/shim.js b/node_modules/es5-ext/math/sinh/shim.js new file mode 100644 index 000000000..fc6a04776 --- /dev/null +++ b/node_modules/es5-ext/math/sinh/shim.js @@ -0,0 +1,18 @@ +// Parts of implementation taken from es6-shim project +// See: https://github.com/paulmillr/es6-shim/blob/master/es6-shim.js + +"use strict"; + +var expm1 = require("../expm1") + , abs = Math.abs + , exp = Math.exp + , e = Math.E; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value === 0) return value; + if (!isFinite(value)) return value; + if (abs(value) < 1) return (expm1(value) - expm1(-value)) / 2; + return (exp(value - 1) - exp(-value - 1)) * e / 2; +}; diff --git a/node_modules/es5-ext/math/tanh/implement.js b/node_modules/es5-ext/math/tanh/implement.js new file mode 100644 index 000000000..9e30d10d1 --- /dev/null +++ b/node_modules/es5-ext/math/tanh/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "tanh", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/tanh/index.js b/node_modules/es5-ext/math/tanh/index.js new file mode 100644 index 000000000..7c45d9887 --- /dev/null +++ b/node_modules/es5-ext/math/tanh/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.tanh + : require("./shim"); diff --git a/node_modules/es5-ext/math/tanh/is-implemented.js b/node_modules/es5-ext/math/tanh/is-implemented.js new file mode 100644 index 000000000..b17a1bc42 --- /dev/null +++ b/node_modules/es5-ext/math/tanh/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var tanh = Math.tanh; + if (typeof tanh !== "function") return false; + return (tanh(1) === 0.7615941559557649) && (tanh(Number.MAX_VALUE) === 1); +}; diff --git a/node_modules/es5-ext/math/tanh/shim.js b/node_modules/es5-ext/math/tanh/shim.js new file mode 100644 index 000000000..974dd7cda --- /dev/null +++ b/node_modules/es5-ext/math/tanh/shim.js @@ -0,0 +1,17 @@ +"use strict"; + +var exp = Math.exp; + +module.exports = function (value) { + var num1, num2; + if (isNaN(value)) return NaN; + value = Number(value); + if (value === 0) return value; + if (value === Infinity) return 1; + if (value === -Infinity) return -1; + num1 = exp(value); + if (num1 === Infinity) return 1; + num2 = exp(-value); + if (num2 === Infinity) return -1; + return (num1 - num2) / (num1 + num2); +}; diff --git a/node_modules/es5-ext/math/trunc/implement.js b/node_modules/es5-ext/math/trunc/implement.js new file mode 100644 index 000000000..1ecc124cd --- /dev/null +++ b/node_modules/es5-ext/math/trunc/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Math, "trunc", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/math/trunc/index.js b/node_modules/es5-ext/math/trunc/index.js new file mode 100644 index 000000000..94c02691a --- /dev/null +++ b/node_modules/es5-ext/math/trunc/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Math.trunc + : require("./shim"); diff --git a/node_modules/es5-ext/math/trunc/is-implemented.js b/node_modules/es5-ext/math/trunc/is-implemented.js new file mode 100644 index 000000000..b1507352e --- /dev/null +++ b/node_modules/es5-ext/math/trunc/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var trunc = Math.trunc; + if (typeof trunc !== "function") return false; + return (trunc(13.67) === 13) && (trunc(-13.67) === -13); +}; diff --git a/node_modules/es5-ext/math/trunc/shim.js b/node_modules/es5-ext/math/trunc/shim.js new file mode 100644 index 000000000..bf6ac8cce --- /dev/null +++ b/node_modules/es5-ext/math/trunc/shim.js @@ -0,0 +1,13 @@ +"use strict"; + +var floor = Math.floor; + +module.exports = function (value) { + if (isNaN(value)) return NaN; + value = Number(value); + if (value === 0) return value; + if (value === Infinity) return Infinity; + if (value === -Infinity) return -Infinity; + if (value > 0) return floor(value); + return -floor(-value); +}; diff --git a/node_modules/es5-ext/number/#/index.js b/node_modules/es5-ext/number/#/index.js new file mode 100644 index 000000000..e6e21c309 --- /dev/null +++ b/node_modules/es5-ext/number/#/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + pad: require("./pad") +}; diff --git a/node_modules/es5-ext/number/#/pad.js b/node_modules/es5-ext/number/#/pad.js new file mode 100644 index 000000000..26fe4b63a --- /dev/null +++ b/node_modules/es5-ext/number/#/pad.js @@ -0,0 +1,15 @@ +"use strict"; + +var pad = require("../../string/#/pad") + , toPosInt = require("../to-pos-integer") + + , toFixed = Number.prototype.toFixed; + +module.exports = function (length/*, precision*/) { + var precision; + length = toPosInt(length); + precision = toPosInt(arguments[1]); + + return pad.call(precision ? toFixed.call(this, precision) : this, + "0", length + (precision ? 1 + precision : 0)); +}; diff --git a/node_modules/es5-ext/number/epsilon/implement.js b/node_modules/es5-ext/number/epsilon/implement.js new file mode 100644 index 000000000..fa19131a8 --- /dev/null +++ b/node_modules/es5-ext/number/epsilon/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Number, "EPSILON", { value: require("./"), + configurable: false, +enumerable: false, +writable: false }); +} diff --git a/node_modules/es5-ext/number/epsilon/index.js b/node_modules/es5-ext/number/epsilon/index.js new file mode 100644 index 000000000..12e8a8d2c --- /dev/null +++ b/node_modules/es5-ext/number/epsilon/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = 2.220446049250313e-16; diff --git a/node_modules/es5-ext/number/epsilon/is-implemented.js b/node_modules/es5-ext/number/epsilon/is-implemented.js new file mode 100644 index 000000000..1cfbded21 --- /dev/null +++ b/node_modules/es5-ext/number/epsilon/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function () { + return typeof Number.EPSILON === "number"; +}; diff --git a/node_modules/es5-ext/number/index.js b/node_modules/es5-ext/number/index.js new file mode 100644 index 000000000..b57ff1505 --- /dev/null +++ b/node_modules/es5-ext/number/index.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = { + "#": require("./#"), + "EPSILON": require("./epsilon"), + "isFinite": require("./is-finite"), + "isInteger": require("./is-integer"), + "isNaN": require("./is-nan"), + "isNatural": require("./is-natural"), + "isNumber": require("./is-number"), + "isSafeInteger": require("./is-safe-integer"), + "MAX_SAFE_INTEGER": require("./max-safe-integer"), + "MIN_SAFE_INTEGER": require("./min-safe-integer"), + "toInteger": require("./to-integer"), + "toPosInteger": require("./to-pos-integer"), + "toUint32": require("./to-uint32") +}; diff --git a/node_modules/es5-ext/number/is-finite/implement.js b/node_modules/es5-ext/number/is-finite/implement.js new file mode 100644 index 000000000..17f67cbc4 --- /dev/null +++ b/node_modules/es5-ext/number/is-finite/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Number, "isFinite", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/number/is-finite/index.js b/node_modules/es5-ext/number/is-finite/index.js new file mode 100644 index 000000000..dbeaf7b85 --- /dev/null +++ b/node_modules/es5-ext/number/is-finite/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Number.isFinite + : require("./shim"); diff --git a/node_modules/es5-ext/number/is-finite/is-implemented.js b/node_modules/es5-ext/number/is-finite/is-implemented.js new file mode 100644 index 000000000..eadd05078 --- /dev/null +++ b/node_modules/es5-ext/number/is-finite/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var numberIsFinite = Number.isFinite; + if (typeof numberIsFinite !== "function") return false; + return !numberIsFinite("23") && numberIsFinite(34) && !numberIsFinite(Infinity); +}; diff --git a/node_modules/es5-ext/number/is-finite/shim.js b/node_modules/es5-ext/number/is-finite/shim.js new file mode 100644 index 000000000..72dd7aae6 --- /dev/null +++ b/node_modules/es5-ext/number/is-finite/shim.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (value) { + return (typeof value === "number") && isFinite(value); +}; diff --git a/node_modules/es5-ext/number/is-integer/implement.js b/node_modules/es5-ext/number/is-integer/implement.js new file mode 100644 index 000000000..dd1f3bd0e --- /dev/null +++ b/node_modules/es5-ext/number/is-integer/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Number, "isInteger", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/number/is-integer/index.js b/node_modules/es5-ext/number/is-integer/index.js new file mode 100644 index 000000000..71cde73a0 --- /dev/null +++ b/node_modules/es5-ext/number/is-integer/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Number.isInteger + : require("./shim"); diff --git a/node_modules/es5-ext/number/is-integer/is-implemented.js b/node_modules/es5-ext/number/is-integer/is-implemented.js new file mode 100644 index 000000000..f357c7178 --- /dev/null +++ b/node_modules/es5-ext/number/is-integer/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var isInteger = Number.isInteger; + if (typeof isInteger !== "function") return false; + return !isInteger("23") && isInteger(34) && !isInteger(32.34); +}; diff --git a/node_modules/es5-ext/number/is-integer/shim.js b/node_modules/es5-ext/number/is-integer/shim.js new file mode 100644 index 000000000..12058b5a4 --- /dev/null +++ b/node_modules/es5-ext/number/is-integer/shim.js @@ -0,0 +1,8 @@ +// Credit: http://www.2ality.com/2014/05/is-integer.html + +"use strict"; + +module.exports = function (value) { + if (typeof value !== "number") return false; + return value % 1 === 0; +}; diff --git a/node_modules/es5-ext/number/is-nan/implement.js b/node_modules/es5-ext/number/is-nan/implement.js new file mode 100644 index 000000000..2f9126c90 --- /dev/null +++ b/node_modules/es5-ext/number/is-nan/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Number, "isNaN", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/number/is-nan/index.js b/node_modules/es5-ext/number/is-nan/index.js new file mode 100644 index 000000000..9128d5c01 --- /dev/null +++ b/node_modules/es5-ext/number/is-nan/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Number.isNaN + : require("./shim"); diff --git a/node_modules/es5-ext/number/is-nan/is-implemented.js b/node_modules/es5-ext/number/is-nan/is-implemented.js new file mode 100644 index 000000000..756838a41 --- /dev/null +++ b/node_modules/es5-ext/number/is-nan/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var numberIsNaN = Number.isNaN; + if (typeof numberIsNaN !== "function") return false; + return !numberIsNaN({}) && numberIsNaN(NaN) && !numberIsNaN(34); +}; diff --git a/node_modules/es5-ext/number/is-nan/shim.js b/node_modules/es5-ext/number/is-nan/shim.js new file mode 100644 index 000000000..b5730d1d6 --- /dev/null +++ b/node_modules/es5-ext/number/is-nan/shim.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (value) { + // eslint-disable-next-line no-self-compare + return value !== value; +}; diff --git a/node_modules/es5-ext/number/is-natural.js b/node_modules/es5-ext/number/is-natural.js new file mode 100644 index 000000000..329966e32 --- /dev/null +++ b/node_modules/es5-ext/number/is-natural.js @@ -0,0 +1,7 @@ +"use strict"; + +var isInteger = require("./is-integer"); + +module.exports = function (num) { + return isInteger(num) && (num >= 0); +}; diff --git a/node_modules/es5-ext/number/is-number.js b/node_modules/es5-ext/number/is-number.js new file mode 100644 index 000000000..3da0712d2 --- /dev/null +++ b/node_modules/es5-ext/number/is-number.js @@ -0,0 +1,10 @@ +"use strict"; + +var objToString = Object.prototype.toString, id = objToString.call(1); + +module.exports = function (value) { + return ( + typeof value === "number" || + (value instanceof Number || (typeof value === "object" && objToString.call(value) === id)) + ); +}; diff --git a/node_modules/es5-ext/number/is-safe-integer/implement.js b/node_modules/es5-ext/number/is-safe-integer/implement.js new file mode 100644 index 000000000..6092db75f --- /dev/null +++ b/node_modules/es5-ext/number/is-safe-integer/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Number, "isSafeInteger", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/number/is-safe-integer/index.js b/node_modules/es5-ext/number/is-safe-integer/index.js new file mode 100644 index 000000000..d4314df15 --- /dev/null +++ b/node_modules/es5-ext/number/is-safe-integer/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Number.isSafeInteger + : require("./shim"); diff --git a/node_modules/es5-ext/number/is-safe-integer/is-implemented.js b/node_modules/es5-ext/number/is-safe-integer/is-implemented.js new file mode 100644 index 000000000..36b0db561 --- /dev/null +++ b/node_modules/es5-ext/number/is-safe-integer/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = function () { + var isSafeInteger = Number.isSafeInteger; + if (typeof isSafeInteger !== "function") return false; + return !isSafeInteger("23") && isSafeInteger(34232322323) && + !isSafeInteger(9007199254740992); +}; diff --git a/node_modules/es5-ext/number/is-safe-integer/shim.js b/node_modules/es5-ext/number/is-safe-integer/shim.js new file mode 100644 index 000000000..de7f22f37 --- /dev/null +++ b/node_modules/es5-ext/number/is-safe-integer/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +var isInteger = require("../is-integer/shim") + , maxValue = require("../max-safe-integer") + + , abs = Math.abs; + +module.exports = function (value) { + if (!isInteger(value)) return false; + return abs(value) <= maxValue; +}; diff --git a/node_modules/es5-ext/number/max-safe-integer/implement.js b/node_modules/es5-ext/number/max-safe-integer/implement.js new file mode 100644 index 000000000..be5a2933a --- /dev/null +++ b/node_modules/es5-ext/number/max-safe-integer/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Number, "MAX_SAFE_INTEGER", { value: require("./"), + configurable: false, +enumerable: false, +writable: false }); +} diff --git a/node_modules/es5-ext/number/max-safe-integer/index.js b/node_modules/es5-ext/number/max-safe-integer/index.js new file mode 100644 index 000000000..75a41e7c0 --- /dev/null +++ b/node_modules/es5-ext/number/max-safe-integer/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = Math.pow(2, 53) - 1; diff --git a/node_modules/es5-ext/number/max-safe-integer/is-implemented.js b/node_modules/es5-ext/number/max-safe-integer/is-implemented.js new file mode 100644 index 000000000..09a7da750 --- /dev/null +++ b/node_modules/es5-ext/number/max-safe-integer/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function () { + return typeof Number.MAX_SAFE_INTEGER === "number"; +}; diff --git a/node_modules/es5-ext/number/min-safe-integer/implement.js b/node_modules/es5-ext/number/min-safe-integer/implement.js new file mode 100644 index 000000000..77d027454 --- /dev/null +++ b/node_modules/es5-ext/number/min-safe-integer/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Number, "MIN_SAFE_INTEGER", { value: require("./"), + configurable: false, +enumerable: false, +writable: false }); +} diff --git a/node_modules/es5-ext/number/min-safe-integer/index.js b/node_modules/es5-ext/number/min-safe-integer/index.js new file mode 100644 index 000000000..cde451462 --- /dev/null +++ b/node_modules/es5-ext/number/min-safe-integer/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = -(Math.pow(2, 53) - 1); diff --git a/node_modules/es5-ext/number/min-safe-integer/is-implemented.js b/node_modules/es5-ext/number/min-safe-integer/is-implemented.js new file mode 100644 index 000000000..7b63253fc --- /dev/null +++ b/node_modules/es5-ext/number/min-safe-integer/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function () { + return typeof Number.MIN_SAFE_INTEGER === "number"; +}; diff --git a/node_modules/es5-ext/number/to-integer.js b/node_modules/es5-ext/number/to-integer.js new file mode 100644 index 000000000..524395ce7 --- /dev/null +++ b/node_modules/es5-ext/number/to-integer.js @@ -0,0 +1,12 @@ +"use strict"; + +var sign = require("../math/sign") + + , abs = Math.abs, floor = Math.floor; + +module.exports = function (value) { + if (isNaN(value)) return 0; + value = Number(value); + if ((value === 0) || !isFinite(value)) return value; + return sign(value) * floor(abs(value)); +}; diff --git a/node_modules/es5-ext/number/to-pos-integer.js b/node_modules/es5-ext/number/to-pos-integer.js new file mode 100644 index 000000000..fe2813da5 --- /dev/null +++ b/node_modules/es5-ext/number/to-pos-integer.js @@ -0,0 +1,9 @@ +"use strict"; + +var toInteger = require("./to-integer") + + , max = Math.max; + +module.exports = function (value) { + return max(0, toInteger(value)); +}; diff --git a/node_modules/es5-ext/number/to-uint32.js b/node_modules/es5-ext/number/to-uint32.js new file mode 100644 index 000000000..cb3590aa2 --- /dev/null +++ b/node_modules/es5-ext/number/to-uint32.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (value) { + // eslint-disable-next-line no-bitwise + return value >>> 0; +}; diff --git a/node_modules/es5-ext/object/_iterate.js b/node_modules/es5-ext/object/_iterate.js new file mode 100644 index 000000000..1f0c85fd4 --- /dev/null +++ b/node_modules/es5-ext/object/_iterate.js @@ -0,0 +1,30 @@ +// Internal method, used by iteration functions. +// Calls a function for each key-value pair found in object +// Optionally takes compareFn to iterate object in specific order + +"use strict"; + +var callable = require("./valid-callable") + , value = require("./valid-value") + , bind = Function.prototype.bind + , call = Function.prototype.call + , keys = Object.keys + , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable; + +module.exports = function (method, defVal) { + return function (obj, cb /*, thisArg, compareFn*/) { + var list, thisArg = arguments[2], compareFn = arguments[3]; + obj = Object(value(obj)); + callable(cb); + + list = keys(obj); + if (compareFn) { + list.sort(typeof compareFn === "function" ? bind.call(compareFn, obj) : undefined); + } + if (typeof method !== "function") method = list[method]; + return call.call(method, list, function (key, index) { + if (!objPropertyIsEnumerable.call(obj, key)) return defVal; + return call.call(cb, thisArg, obj[key], key, obj, index); + }); + }; +}; diff --git a/node_modules/es5-ext/object/assign/implement.js b/node_modules/es5-ext/object/assign/implement.js new file mode 100644 index 000000000..de3c92f14 --- /dev/null +++ b/node_modules/es5-ext/object/assign/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Object, "assign", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/object/assign/index.js b/node_modules/es5-ext/object/assign/index.js new file mode 100644 index 000000000..1dd31e640 --- /dev/null +++ b/node_modules/es5-ext/object/assign/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Object.assign + : require("./shim"); diff --git a/node_modules/es5-ext/object/assign/is-implemented.js b/node_modules/es5-ext/object/assign/is-implemented.js new file mode 100644 index 000000000..6b90ea969 --- /dev/null +++ b/node_modules/es5-ext/object/assign/is-implemented.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function () { + var assign = Object.assign, obj; + if (typeof assign !== "function") return false; + obj = { foo: "raz" }; + assign(obj, { bar: "dwa" }, { trzy: "trzy" }); + return (obj.foo + obj.bar + obj.trzy) === "razdwatrzy"; +}; diff --git a/node_modules/es5-ext/object/assign/shim.js b/node_modules/es5-ext/object/assign/shim.js new file mode 100644 index 000000000..afa58f2f9 --- /dev/null +++ b/node_modules/es5-ext/object/assign/shim.js @@ -0,0 +1,23 @@ +"use strict"; + +var keys = require("../keys") + , value = require("../valid-value") + , max = Math.max; + +module.exports = function (dest, src /*, …srcn*/) { + var error, i, length = max(arguments.length, 2), assign; + dest = Object(value(dest)); + assign = function (key) { + try { + dest[key] = src[key]; + } catch (e) { + if (!error) error = e; + } + }; + for (i = 1; i < length; ++i) { + src = arguments[i]; + keys(src).forEach(assign); + } + if (error !== undefined) throw error; + return dest; +}; diff --git a/node_modules/es5-ext/object/clear.js b/node_modules/es5-ext/object/clear.js new file mode 100644 index 000000000..268cc5b5d --- /dev/null +++ b/node_modules/es5-ext/object/clear.js @@ -0,0 +1,16 @@ +"use strict"; + +var keys = require("./keys"); + +module.exports = function (obj) { + var error; + keys(obj).forEach(function (key) { + try { + delete this[key]; + } catch (e) { + if (!error) error = e; + } + }, obj); + if (error !== undefined) throw error; + return obj; +}; diff --git a/node_modules/es5-ext/object/compact.js b/node_modules/es5-ext/object/compact.js new file mode 100644 index 000000000..9943aedc7 --- /dev/null +++ b/node_modules/es5-ext/object/compact.js @@ -0,0 +1,10 @@ +"use strict"; + +var filter = require("./filter") + , isValue = require("./is-value"); + +module.exports = function (obj) { + return filter(obj, function (val) { + return isValue(val); + }); +}; diff --git a/node_modules/es5-ext/object/compare.js b/node_modules/es5-ext/object/compare.js new file mode 100644 index 000000000..8d0785890 --- /dev/null +++ b/node_modules/es5-ext/object/compare.js @@ -0,0 +1,45 @@ +"use strict"; + +var strCompare = require("../string/#/case-insensitive-compare") + , isObject = require("./is-object") + , isValue = require("./is-value") + , numIsNaN = require("../number/is-nan") + , resolve + , typeMap; + +typeMap = { + undefined: 0, + object: 1, + boolean: 2, + string: 3, + number: 4 +}; + +resolve = function (a) { + if (isObject(a)) { + if (typeof a.valueOf !== "function") return NaN; + a = a.valueOf(); + if (isObject(a)) { + if (typeof a.toString !== "function") return NaN; + a = a.toString(); + if (typeof a !== "string") return NaN; + } + } + return a; +}; + +module.exports = function (val1, val2) { + if (val1 === val2) return 0; // Same + + val1 = resolve(val1); + val2 = resolve(val2); + // eslint-disable-next-line eqeqeq + if (val1 == val2) return typeMap[typeof val1] - typeMap[typeof val2]; + if (!isValue(val1)) return -1; + if (!isValue(val2)) return 1; + if (typeof val1 === "string" || typeof val2 === "string") { + return strCompare.call(val1, val2); + } + if (numIsNaN(val1) && numIsNaN(val2)) return 0; // Jslint: ignore + return Number(val1) - Number(val2); +}; diff --git a/node_modules/es5-ext/object/copy-deep.js b/node_modules/es5-ext/object/copy-deep.js new file mode 100644 index 000000000..d1d39c982 --- /dev/null +++ b/node_modules/es5-ext/object/copy-deep.js @@ -0,0 +1,42 @@ +"use strict"; + +var forEach = require("./for-each") + , isPlainObject = require("./is-plain-object") + , ensureValue = require("./valid-value") + , isArray = Array.isArray + , copy + , copyItem; + +copyItem = function (value) { + var index; + if (!isPlainObject(value) && !isArray(value)) return value; + index = this[0].indexOf(value); + if (index === -1) return copy.call(this, value); + return this[1][index]; +}; + +copy = function (source) { + var target = isArray(source) ? [] : {}; + this[0].push(source); + this[1].push(target); + if (isArray(source)) { + source.forEach(function (value, key) { + target[key] = copyItem.call(this, value, key); + }, this); + } else { + forEach( + source, + function (value, key) { + target[key] = copyItem.call(this, value, key); + }, + this + ); + } + return target; +}; + +module.exports = function (source) { + var obj = Object(ensureValue(source)); + if (obj !== source) return obj; + return copy.call([[], []], obj); +}; diff --git a/node_modules/es5-ext/object/copy.js b/node_modules/es5-ext/object/copy.js new file mode 100644 index 000000000..5368e4281 --- /dev/null +++ b/node_modules/es5-ext/object/copy.js @@ -0,0 +1,19 @@ +"use strict"; + +var aFrom = require("../array/from") + , assign = require("./assign") + , value = require("./valid-value"); + +module.exports = function (obj/*, propertyNames, options*/) { + var copy = Object(value(obj)), propertyNames = arguments[1], options = Object(arguments[2]); + if (copy !== obj && !propertyNames) return copy; + var result = {}; + if (propertyNames) { + aFrom(propertyNames, function (propertyName) { + if (options.ensure || propertyName in obj) result[propertyName] = obj[propertyName]; + }); + } else { + assign(result, obj); + } + return result; +}; diff --git a/node_modules/es5-ext/object/count.js b/node_modules/es5-ext/object/count.js new file mode 100644 index 000000000..8a2a71ef8 --- /dev/null +++ b/node_modules/es5-ext/object/count.js @@ -0,0 +1,7 @@ +"use strict"; + +var keys = require("./keys"); + +module.exports = function (obj) { + return keys(obj).length; +}; diff --git a/node_modules/es5-ext/object/create.js b/node_modules/es5-ext/object/create.js new file mode 100644 index 000000000..9e3e6e8d1 --- /dev/null +++ b/node_modules/es5-ext/object/create.js @@ -0,0 +1,48 @@ +// Workaround for http://code.google.com/p/v8/issues/detail?id=2804 + +"use strict"; + +var create = Object.create, shim; + +if (!require("./set-prototype-of/is-implemented")()) { + shim = require("./set-prototype-of/shim"); +} + +module.exports = (function () { + var nullObject, polyProps, desc; + if (!shim) return create; + if (shim.level !== 1) return create; + + nullObject = {}; + polyProps = {}; + desc = { + configurable: false, + enumerable: false, + writable: true, + value: undefined + }; + Object.getOwnPropertyNames(Object.prototype).forEach(function (name) { + if (name === "__proto__") { + polyProps[name] = { + configurable: true, + enumerable: false, + writable: true, + value: undefined + }; + return; + } + polyProps[name] = desc; + }); + Object.defineProperties(nullObject, polyProps); + + Object.defineProperty(shim, "nullPolyfill", { + configurable: false, + enumerable: false, + writable: false, + value: nullObject + }); + + return function (prototype, props) { + return create(prototype === null ? nullObject : prototype, props); + }; +}()); diff --git a/node_modules/es5-ext/object/ensure-array.js b/node_modules/es5-ext/object/ensure-array.js new file mode 100644 index 000000000..5ca7a9493 --- /dev/null +++ b/node_modules/es5-ext/object/ensure-array.js @@ -0,0 +1,9 @@ +"use strict"; + +var toShortString = require("../to-short-string-representation") + , isArray = require("./is-array-like"); + +module.exports = function (value) { + if (isArray(value)) return value; + throw new TypeError(toShortString(value) + " is not a array"); +}; diff --git a/node_modules/es5-ext/object/ensure-finite-number.js b/node_modules/es5-ext/object/ensure-finite-number.js new file mode 100644 index 000000000..4f6e4b4a8 --- /dev/null +++ b/node_modules/es5-ext/object/ensure-finite-number.js @@ -0,0 +1,9 @@ +"use strict"; + +var isFiniteNumber = require("./is-finite-number") + , safeToString = require("../safe-to-string"); + +module.exports = function (value) { + if (isFiniteNumber(value)) return Number(value); + throw new TypeError(safeToString(value) + " does not represent a finite number value"); +}; diff --git a/node_modules/es5-ext/object/ensure-natural-number-value.js b/node_modules/es5-ext/object/ensure-natural-number-value.js new file mode 100644 index 000000000..d47d5d149 --- /dev/null +++ b/node_modules/es5-ext/object/ensure-natural-number-value.js @@ -0,0 +1,9 @@ +"use strict"; + +var ensure = require("./ensure-natural-number") + , isValue = require("./is-value"); + +module.exports = function (arg) { + if (!isValue(arg)) throw new TypeError(arg + " is not a natural number"); + return ensure(arg); +}; diff --git a/node_modules/es5-ext/object/ensure-natural-number.js b/node_modules/es5-ext/object/ensure-natural-number.js new file mode 100644 index 000000000..5b35e4a13 --- /dev/null +++ b/node_modules/es5-ext/object/ensure-natural-number.js @@ -0,0 +1,9 @@ +"use strict"; + +var isNatural = require("../number/is-natural"); + +module.exports = function (arg) { + var num = Number(arg); + if (!isNatural(num)) throw new TypeError(arg + " is not a natural number"); + return num; +}; diff --git a/node_modules/es5-ext/object/ensure-promise.js b/node_modules/es5-ext/object/ensure-promise.js new file mode 100644 index 000000000..0a1119c4e --- /dev/null +++ b/node_modules/es5-ext/object/ensure-promise.js @@ -0,0 +1,9 @@ +"use strict"; + +var safeToString = require("../safe-to-string") + , isPromise = require("./is-promise"); + +module.exports = function (value) { + if (!isPromise(value)) throw new TypeError(safeToString(value) + " is not a thenable"); + return value; +}; diff --git a/node_modules/es5-ext/object/eq.js b/node_modules/es5-ext/object/eq.js new file mode 100644 index 000000000..031246800 --- /dev/null +++ b/node_modules/es5-ext/object/eq.js @@ -0,0 +1,7 @@ +"use strict"; + +var numIsNaN = require("../number/is-nan"); + +module.exports = function (val1, val2) { + return val1 === val2 || (numIsNaN(val1) && numIsNaN(val2)); +}; diff --git a/node_modules/es5-ext/object/every.js b/node_modules/es5-ext/object/every.js new file mode 100644 index 000000000..892b5485a --- /dev/null +++ b/node_modules/es5-ext/object/every.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./_iterate")("every", true); diff --git a/node_modules/es5-ext/object/filter.js b/node_modules/es5-ext/object/filter.js new file mode 100644 index 000000000..c7dd969b7 --- /dev/null +++ b/node_modules/es5-ext/object/filter.js @@ -0,0 +1,14 @@ +"use strict"; + +var callable = require("./valid-callable") + , forEach = require("./for-each") + , call = Function.prototype.call; + +module.exports = function (obj, cb /*, thisArg*/) { + var result = {}, thisArg = arguments[2]; + callable(cb); + forEach(obj, function (value, key, targetObj, index) { + if (call.call(cb, thisArg, value, key, targetObj, index)) result[key] = targetObj[key]; + }); + return result; +}; diff --git a/node_modules/es5-ext/object/find-key.js b/node_modules/es5-ext/object/find-key.js new file mode 100644 index 000000000..6da6ba6f4 --- /dev/null +++ b/node_modules/es5-ext/object/find-key.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./_iterate")(require("../array/#/find"), false); diff --git a/node_modules/es5-ext/object/find.js b/node_modules/es5-ext/object/find.js new file mode 100644 index 000000000..5960421a0 --- /dev/null +++ b/node_modules/es5-ext/object/find.js @@ -0,0 +1,10 @@ +"use strict"; + +var findKey = require("./find-key") + , isValue = require("./is-value"); + +// eslint-disable-next-line no-unused-vars +module.exports = function (obj, cb /*, thisArg, compareFn*/) { + var key = findKey.apply(this, arguments); + return isValue(key) ? obj[key] : key; +}; diff --git a/node_modules/es5-ext/object/first-key.js b/node_modules/es5-ext/object/first-key.js new file mode 100644 index 000000000..3666de57b --- /dev/null +++ b/node_modules/es5-ext/object/first-key.js @@ -0,0 +1,13 @@ +"use strict"; + +var value = require("./valid-value") + , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable; + +module.exports = function (obj) { + var i; + value(obj); + for (i in obj) { + if (objPropertyIsEnumerable.call(obj, i)) return i; + } + return null; +}; diff --git a/node_modules/es5-ext/object/flatten.js b/node_modules/es5-ext/object/flatten.js new file mode 100644 index 000000000..4895ed632 --- /dev/null +++ b/node_modules/es5-ext/object/flatten.js @@ -0,0 +1,17 @@ +"use strict"; + +var isPlainObject = require("./is-plain-object") + , forEach = require("./for-each") + + , process; + +process = function self (value, key) { + if (isPlainObject(value)) forEach(value, self, this); + else this[key] = value; +}; + +module.exports = function (obj) { + var flattened = {}; + forEach(obj, process, flattened); + return flattened; +}; diff --git a/node_modules/es5-ext/object/for-each.js b/node_modules/es5-ext/object/for-each.js new file mode 100644 index 000000000..d282956d0 --- /dev/null +++ b/node_modules/es5-ext/object/for-each.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./_iterate")("forEach"); diff --git a/node_modules/es5-ext/object/get-property-names.js b/node_modules/es5-ext/object/get-property-names.js new file mode 100644 index 000000000..7dfef2794 --- /dev/null +++ b/node_modules/es5-ext/object/get-property-names.js @@ -0,0 +1,17 @@ +"use strict"; + +var uniq = require("../array/#/uniq") + , value = require("./valid-value") + , push = Array.prototype.push + , getOwnPropertyNames = Object.getOwnPropertyNames + , getPrototypeOf = Object.getPrototypeOf; + +module.exports = function (obj) { + var keys; + obj = Object(value(obj)); + keys = getOwnPropertyNames(obj); + while ((obj = getPrototypeOf(obj))) { + push.apply(keys, getOwnPropertyNames(obj)); + } + return uniq.call(keys); +}; diff --git a/node_modules/es5-ext/object/index.js b/node_modules/es5-ext/object/index.js new file mode 100644 index 000000000..f2a2b0049 --- /dev/null +++ b/node_modules/es5-ext/object/index.js @@ -0,0 +1,59 @@ +"use strict"; + +module.exports = { + assign: require("./assign"), + clear: require("./clear"), + compact: require("./compact"), + compare: require("./compare"), + copy: require("./copy"), + copyDeep: require("./copy-deep"), + count: require("./count"), + create: require("./create"), + ensureArray: require("./ensure-array"), + ensureFiniteNumber: require("./ensure-finite-number"), + ensureNaturalNumber: require("./ensure-natural-number"), + ensureNaturalNumberValue: require("./ensure-natural-number-value"), + ensurePromise: require("./ensure-promise"), + eq: require("./eq"), + every: require("./every"), + filter: require("./filter"), + find: require("./find"), + findKey: require("./find-key"), + firstKey: require("./first-key"), + flatten: require("./flatten"), + forEach: require("./for-each"), + getPropertyNames: require("./get-property-names"), + is: require("./is"), + isArrayLike: require("./is-array-like"), + isCallable: require("./is-callable"), + isCopy: require("./is-copy"), + isCopyDeep: require("./is-copy-deep"), + isEmpty: require("./is-empty"), + isFiniteNumber: require("./is-finite-number"), + isNumberValue: require("./is-number-value"), + isObject: require("./is-object"), + isPlainObject: require("./is-plain-object"), + isPromise: require("./is-promise"), + isValue: require("./is-value"), + keyOf: require("./key-of"), + keys: require("./keys"), + map: require("./map"), + mapKeys: require("./map-keys"), + normalizeOptions: require("./normalize-options"), + mixin: require("./mixin"), + mixinPrototypes: require("./mixin-prototypes"), + primitiveSet: require("./primitive-set"), + safeTraverse: require("./safe-traverse"), + serialize: require("./serialize"), + setPrototypeOf: require("./set-prototype-of"), + some: require("./some"), + toArray: require("./to-array"), + unserialize: require("./unserialize"), + validateArrayLike: require("./validate-array-like"), + validateArrayLikeObject: require("./validate-array-like-object"), + validCallable: require("./valid-callable"), + validObject: require("./valid-object"), + validateStringifiable: require("./validate-stringifiable"), + validateStringifiableValue: require("./validate-stringifiable-value"), + validValue: require("./valid-value") +}; diff --git a/node_modules/es5-ext/object/is-array-like.js b/node_modules/es5-ext/object/is-array-like.js new file mode 100644 index 000000000..fcb9115d2 --- /dev/null +++ b/node_modules/es5-ext/object/is-array-like.js @@ -0,0 +1,17 @@ +"use strict"; + +var isFunction = require("../function/is-function") + , isObject = require("./is-object") + , isValue = require("./is-value"); + +module.exports = function (value) { + return ( + (isValue(value) && + typeof value.length === "number" && + // Just checking ((typeof x === 'object') && (typeof x !== 'function')) + // won't work right for some cases, e.g.: + // type of instance of NodeList in Safari is a 'function' + ((isObject(value) && !isFunction(value)) || typeof value === "string")) || + false + ); +}; diff --git a/node_modules/es5-ext/object/is-callable.js b/node_modules/es5-ext/object/is-callable.js new file mode 100644 index 000000000..c55915bc3 --- /dev/null +++ b/node_modules/es5-ext/object/is-callable.js @@ -0,0 +1,7 @@ +// Deprecated + +"use strict"; + +module.exports = function (obj) { + return typeof obj === "function"; +}; diff --git a/node_modules/es5-ext/object/is-copy-deep.js b/node_modules/es5-ext/object/is-copy-deep.js new file mode 100644 index 000000000..a1206aead --- /dev/null +++ b/node_modules/es5-ext/object/is-copy-deep.js @@ -0,0 +1,59 @@ +"use strict"; + +var eq = require("./eq") + , isPlainObject = require("./is-plain-object") + , value = require("./valid-value"); + +var isArray = Array.isArray + , keys = Object.keys + , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable + , objHasOwnProperty = Object.prototype.hasOwnProperty + , eqArr + , eqVal + , eqObj; + +eqArr = function (arr1, arr2, recMap) { + var i, length = arr1.length; + if (length !== arr2.length) return false; + for (i = 0; i < length; ++i) { + if (objHasOwnProperty.call(arr1, i) !== objHasOwnProperty.call(arr2, i)) return false; + if (!eqVal(arr1[i], arr2[i], recMap)) return false; + } + return true; +}; + +eqObj = function (obj1, obj2, recMap) { + var k1 = keys(obj1), k2 = keys(obj2); + if (k1.length !== k2.length) return false; + return k1.every(function (key) { + if (!objPropertyIsEnumerable.call(obj2, key)) return false; + return eqVal(obj1[key], obj2[key], recMap); + }); +}; + +eqVal = function (val1, val2, recMap) { + var i, eqX, c1, c2; + if (eq(val1, val2)) return true; + if (isPlainObject(val1)) { + if (!isPlainObject(val2)) return false; + eqX = eqObj; + } else if (isArray(val1) && isArray(val2)) { + eqX = eqArr; + } else { + return false; + } + c1 = recMap[0]; + c2 = recMap[1]; + i = c1.indexOf(val1); + if (i === -1) { + i = c1.push(val1) - 1; + c2[i] = []; + } else if (c2[i].indexOf(val2) !== -1) return true; + c2[i].push(val2); + return eqX(val1, val2, recMap); +}; + +module.exports = function (val1, val2) { + if (eq(value(val1), value(val2))) return true; + return eqVal(Object(val1), Object(val2), [[], []]); +}; diff --git a/node_modules/es5-ext/object/is-copy.js b/node_modules/es5-ext/object/is-copy.js new file mode 100644 index 000000000..8c6ae5e2c --- /dev/null +++ b/node_modules/es5-ext/object/is-copy.js @@ -0,0 +1,23 @@ +"use strict"; + +var eq = require("./eq") + , value = require("./valid-value") + , keys = Object.keys + , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable; + +module.exports = function (val1, val2) { + var k1, k2; + + if (eq(value(val1), value(val2))) return true; + + val1 = Object(val1); + val2 = Object(val2); + + k1 = keys(val1); + k2 = keys(val2); + if (k1.length !== k2.length) return false; + return k1.every(function (key) { + if (!objPropertyIsEnumerable.call(val2, key)) return false; + return eq(val1[key], val2[key]); + }); +}; diff --git a/node_modules/es5-ext/object/is-empty.js b/node_modules/es5-ext/object/is-empty.js new file mode 100644 index 000000000..dbc52d0cc --- /dev/null +++ b/node_modules/es5-ext/object/is-empty.js @@ -0,0 +1,14 @@ +"use strict"; + +var value = require("./valid-value") + , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable; + +module.exports = function (obj) { + var i; + value(obj); + for (i in obj) { + // Jslint: ignore + if (objPropertyIsEnumerable.call(obj, i)) return false; + } + return true; +}; diff --git a/node_modules/es5-ext/object/is-finite-number.js b/node_modules/es5-ext/object/is-finite-number.js new file mode 100644 index 000000000..78ed66920 --- /dev/null +++ b/node_modules/es5-ext/object/is-finite-number.js @@ -0,0 +1,7 @@ +"use strict"; + +var isNumber = require("./is-number-value"); + +module.exports = function (value) { + return isNumber(value) && isFinite(value); +}; diff --git a/node_modules/es5-ext/object/is-number-value.js b/node_modules/es5-ext/object/is-number-value.js new file mode 100644 index 000000000..e91527686 --- /dev/null +++ b/node_modules/es5-ext/object/is-number-value.js @@ -0,0 +1,12 @@ +"use strict"; + +var isValue = require("./is-value"); + +module.exports = function (value) { + if (!isValue(value)) return false; + try { + return !isNaN(value); + } catch (e) { + return false; + } +}; diff --git a/node_modules/es5-ext/object/is-object.js b/node_modules/es5-ext/object/is-object.js new file mode 100644 index 000000000..846ae2175 --- /dev/null +++ b/node_modules/es5-ext/object/is-object.js @@ -0,0 +1,9 @@ +"use strict"; + +var isValue = require("./is-value"); + +var map = { function: true, object: true }; + +module.exports = function (value) { + return (isValue(value) && map[typeof value]) || false; +}; diff --git a/node_modules/es5-ext/object/is-plain-object.js b/node_modules/es5-ext/object/is-plain-object.js new file mode 100644 index 000000000..ff1532896 --- /dev/null +++ b/node_modules/es5-ext/object/is-plain-object.js @@ -0,0 +1,20 @@ +"use strict"; + +var getPrototypeOf = Object.getPrototypeOf + , prototype = Object.prototype + , objToString = prototype.toString + , id = Object().toString(); + +module.exports = function (value) { + var proto, valueConstructor; + if (!value || typeof value !== "object" || objToString.call(value) !== id) { + return false; + } + proto = getPrototypeOf(value); + if (proto === null) { + valueConstructor = value.constructor; + if (typeof valueConstructor !== "function") return true; + return valueConstructor.prototype !== value; + } + return proto === prototype || getPrototypeOf(proto) === null; +}; diff --git a/node_modules/es5-ext/object/is-promise.js b/node_modules/es5-ext/object/is-promise.js new file mode 100644 index 000000000..3e5d20d16 --- /dev/null +++ b/node_modules/es5-ext/object/is-promise.js @@ -0,0 +1,8 @@ +"use strict"; + +var isCallable = require("./is-callable") + , isObject = require("./is-object"); + +module.exports = function (value) { + return isObject(value) && isCallable(value.then); +}; diff --git a/node_modules/es5-ext/object/is-value.js b/node_modules/es5-ext/object/is-value.js new file mode 100644 index 000000000..82af8f338 --- /dev/null +++ b/node_modules/es5-ext/object/is-value.js @@ -0,0 +1,7 @@ +"use strict"; + +var _undefined = require("../function/noop")(); // Support ES3 engines + +module.exports = function (val) { + return (val !== _undefined) && (val !== null); +}; diff --git a/node_modules/es5-ext/object/is.js b/node_modules/es5-ext/object/is.js new file mode 100644 index 000000000..54baadec8 --- /dev/null +++ b/node_modules/es5-ext/object/is.js @@ -0,0 +1,10 @@ +// Implementation credits go to: +// http://wiki.ecmascript.org/doku.php?id=harmony:egal + +"use strict"; + +var numIsNaN = require("../number/is-nan"); + +module.exports = function (val1, val2) { + return val1 === val2 ? val1 !== 0 || 1 / val1 === 1 / val2 : numIsNaN(val1) && numIsNaN(val2); +}; diff --git a/node_modules/es5-ext/object/key-of.js b/node_modules/es5-ext/object/key-of.js new file mode 100644 index 000000000..dc640e4dc --- /dev/null +++ b/node_modules/es5-ext/object/key-of.js @@ -0,0 +1,17 @@ +"use strict"; + +var eq = require("./eq") + , some = require("./some"); + +module.exports = function (obj, searchValue) { + var result; + return some(obj, function (value, name) { + if (eq(value, searchValue)) { + result = name; + return true; + } + return false; + }) + ? result + : null; +}; diff --git a/node_modules/es5-ext/object/keys/implement.js b/node_modules/es5-ext/object/keys/implement.js new file mode 100644 index 000000000..7119a706e --- /dev/null +++ b/node_modules/es5-ext/object/keys/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(Object, "keys", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/object/keys/index.js b/node_modules/es5-ext/object/keys/index.js new file mode 100644 index 000000000..b56b5347c --- /dev/null +++ b/node_modules/es5-ext/object/keys/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Object.keys + : require("./shim"); diff --git a/node_modules/es5-ext/object/keys/is-implemented.js b/node_modules/es5-ext/object/keys/is-implemented.js new file mode 100644 index 000000000..7abd33a88 --- /dev/null +++ b/node_modules/es5-ext/object/keys/is-implemented.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function () { + try { + Object.keys("primitive"); + return true; + } catch (e) { + return false; +} +}; diff --git a/node_modules/es5-ext/object/keys/shim.js b/node_modules/es5-ext/object/keys/shim.js new file mode 100644 index 000000000..bc802017e --- /dev/null +++ b/node_modules/es5-ext/object/keys/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +var isValue = require("../is-value"); + +var keys = Object.keys; + +module.exports = function (object) { + return keys(isValue(object) ? Object(object) : object); +}; diff --git a/node_modules/es5-ext/object/map-keys.js b/node_modules/es5-ext/object/map-keys.js new file mode 100644 index 000000000..72dada070 --- /dev/null +++ b/node_modules/es5-ext/object/map-keys.js @@ -0,0 +1,18 @@ +"use strict"; + +var callable = require("./valid-callable") + , forEach = require("./for-each") + , call = Function.prototype.call; + +module.exports = function (obj, cb /*, thisArg*/) { + var result = {}, thisArg = arguments[2]; + callable(cb); + forEach( + obj, + function (value, key, targetObj, index) { + result[call.call(cb, thisArg, key, value, this, index)] = value; + }, + obj + ); + return result; +}; diff --git a/node_modules/es5-ext/object/map.js b/node_modules/es5-ext/object/map.js new file mode 100644 index 000000000..7b718db17 --- /dev/null +++ b/node_modules/es5-ext/object/map.js @@ -0,0 +1,14 @@ +"use strict"; + +var callable = require("./valid-callable") + , forEach = require("./for-each") + , call = Function.prototype.call; + +module.exports = function (obj, cb /*, thisArg*/) { + var result = {}, thisArg = arguments[2]; + callable(cb); + forEach(obj, function (value, key, targetObj, index) { + result[key] = call.call(cb, thisArg, value, key, targetObj, index); + }); + return result; +}; diff --git a/node_modules/es5-ext/object/mixin-prototypes.js b/node_modules/es5-ext/object/mixin-prototypes.js new file mode 100644 index 000000000..9094aef1d --- /dev/null +++ b/node_modules/es5-ext/object/mixin-prototypes.js @@ -0,0 +1,37 @@ +"use strict"; + +var value = require("./valid-value") + , mixin = require("./mixin") + , defineProperty = Object.defineProperty + , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor + , getOwnPropertyNames = Object.getOwnPropertyNames + , getPrototypeOf = Object.getPrototypeOf + , objHasOwnProperty = Object.prototype.hasOwnProperty; + +module.exports = function (target, source) { + var error, end, define; + target = Object(value(target)); + source = Object(value(source)); + end = getPrototypeOf(target); + if (source === end) return target; + try { + mixin(target, source); + } catch (e) { + error = e; + } + source = getPrototypeOf(source); + define = function (name) { + if (objHasOwnProperty.call(target, name)) return; + try { + defineProperty(target, name, getOwnPropertyDescriptor(source, name)); + } catch (e) { + error = e; + } + }; + while (source && source !== end) { + getOwnPropertyNames(source).forEach(define); + source = getPrototypeOf(source); + } + if (error) throw error; + return target; +}; diff --git a/node_modules/es5-ext/object/mixin.js b/node_modules/es5-ext/object/mixin.js new file mode 100644 index 000000000..4da7cd519 --- /dev/null +++ b/node_modules/es5-ext/object/mixin.js @@ -0,0 +1,31 @@ +"use strict"; + +var value = require("./valid-value") + + , defineProperty = Object.defineProperty + , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor + , getOwnPropertyNames = Object.getOwnPropertyNames + , getOwnPropertySymbols = Object.getOwnPropertySymbols; + +module.exports = function (target, source) { + var error, sourceObject = Object(value(source)); + target = Object(value(target)); + getOwnPropertyNames(sourceObject).forEach(function (name) { + try { + defineProperty(target, name, getOwnPropertyDescriptor(source, name)); + } catch (e) { + error = e; +} + }); + if (typeof getOwnPropertySymbols === "function") { + getOwnPropertySymbols(sourceObject).forEach(function (symbol) { + try { + defineProperty(target, symbol, getOwnPropertyDescriptor(source, symbol)); + } catch (e) { + error = e; +} + }); + } + if (error !== undefined) throw error; + return target; +}; diff --git a/node_modules/es5-ext/object/normalize-options.js b/node_modules/es5-ext/object/normalize-options.js new file mode 100644 index 000000000..6c394fe9c --- /dev/null +++ b/node_modules/es5-ext/object/normalize-options.js @@ -0,0 +1,20 @@ +"use strict"; + +var isValue = require("./is-value"); + +var forEach = Array.prototype.forEach, create = Object.create; + +var process = function (src, obj) { + var key; + for (key in src) obj[key] = src[key]; +}; + +// eslint-disable-next-line no-unused-vars +module.exports = function (opts1 /*, …options*/) { + var result = create(null); + forEach.call(arguments, function (options) { + if (!isValue(options)) return; + process(Object(options), result); + }); + return result; +}; diff --git a/node_modules/es5-ext/object/primitive-set.js b/node_modules/es5-ext/object/primitive-set.js new file mode 100644 index 000000000..235eaa7fa --- /dev/null +++ b/node_modules/es5-ext/object/primitive-set.js @@ -0,0 +1,12 @@ +"use strict"; + +var forEach = Array.prototype.forEach, create = Object.create; + +// eslint-disable-next-line no-unused-vars +module.exports = function (arg /*, …args*/) { + var set = create(null); + forEach.call(arguments, function (name) { + set[name] = true; + }); + return set; +}; diff --git a/node_modules/es5-ext/object/safe-traverse.js b/node_modules/es5-ext/object/safe-traverse.js new file mode 100644 index 000000000..7b72d5550 --- /dev/null +++ b/node_modules/es5-ext/object/safe-traverse.js @@ -0,0 +1,16 @@ +"use strict"; + +var value = require("./valid-value") + , isValue = require("./is-value"); + +module.exports = function (obj /*, …names*/) { + var length, current = 1; + value(obj); + length = arguments.length - 1; + if (!length) return obj; + while (current < length) { + obj = obj[arguments[current++]]; + if (!isValue(obj)) return undefined; + } + return obj[arguments[current]]; +}; diff --git a/node_modules/es5-ext/object/serialize.js b/node_modules/es5-ext/object/serialize.js new file mode 100644 index 000000000..4be9aeb1b --- /dev/null +++ b/node_modules/es5-ext/object/serialize.js @@ -0,0 +1,41 @@ +"use strict"; + +var toArray = require("./to-array") + , isDate = require("../date/is-date") + , isValue = require("../object/is-value") + , isRegExp = require("../reg-exp/is-reg-exp"); + +var isArray = Array.isArray + , stringify = JSON.stringify + , objHasOwnProperty = Object.prototype.hasOwnProperty; +var keyValueToString = function (value, key) { + return stringify(key) + ":" + exports(value); +}; + +var sparseMap = function (arr) { + var i, length = arr.length, result = new Array(length); + for (i = 0; i < length; ++i) { + if (!objHasOwnProperty.call(arr, i)) continue; + result[i] = exports(arr[i]); + } + return result; +}; + +module.exports = exports = function (obj) { + if (!isValue(obj)) return String(obj); + switch (typeof obj) { + case "string": + return stringify(obj); + case "number": + case "boolean": + case "function": + return String(obj); + case "object": + if (isArray(obj)) return "[" + sparseMap(obj) + "]"; + if (isRegExp(obj)) return String(obj); + if (isDate(obj)) return "new Date(" + obj.valueOf() + ")"; + return "{" + toArray(obj, keyValueToString) + "}"; + default: + throw new TypeError("Serialization of " + String(obj) + "is unsupported"); + } +}; diff --git a/node_modules/es5-ext/object/set-prototype-of/implement.js b/node_modules/es5-ext/object/set-prototype-of/implement.js new file mode 100644 index 000000000..1b91aebaf --- /dev/null +++ b/node_modules/es5-ext/object/set-prototype-of/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +var shim; + +if (!require("./is-implemented")() && (shim = require("./shim"))) { + Object.defineProperty(Object, "setPrototypeOf", + { value: shim, configurable: true, enumerable: false, writable: true }); +} diff --git a/node_modules/es5-ext/object/set-prototype-of/index.js b/node_modules/es5-ext/object/set-prototype-of/index.js new file mode 100644 index 000000000..e035173f6 --- /dev/null +++ b/node_modules/es5-ext/object/set-prototype-of/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? Object.setPrototypeOf + : require("./shim"); diff --git a/node_modules/es5-ext/object/set-prototype-of/is-implemented.js b/node_modules/es5-ext/object/set-prototype-of/is-implemented.js new file mode 100644 index 000000000..1a00627b7 --- /dev/null +++ b/node_modules/es5-ext/object/set-prototype-of/is-implemented.js @@ -0,0 +1,9 @@ +"use strict"; + +var create = Object.create, getPrototypeOf = Object.getPrototypeOf, plainObject = {}; + +module.exports = function (/* CustomCreate*/) { + var setPrototypeOf = Object.setPrototypeOf, customCreate = arguments[0] || create; + if (typeof setPrototypeOf !== "function") return false; + return getPrototypeOf(setPrototypeOf(customCreate(null), plainObject)) === plainObject; +}; diff --git a/node_modules/es5-ext/object/set-prototype-of/shim.js b/node_modules/es5-ext/object/set-prototype-of/shim.js new file mode 100644 index 000000000..312341e02 --- /dev/null +++ b/node_modules/es5-ext/object/set-prototype-of/shim.js @@ -0,0 +1,86 @@ +/* eslint no-proto: "off" */ + +// Big thanks to @WebReflection for sorting this out +// https://gist.github.com/WebReflection/5593554 + +"use strict"; + +var isObject = require("../is-object") + , value = require("../valid-value") + , objIsPrototypOf = Object.prototype.isPrototypeOf + , defineProperty = Object.defineProperty + , nullDesc = { + configurable: true, + enumerable: false, + writable: true, + value: undefined +} + , validate; + +validate = function (obj, prototype) { + value(obj); + if (prototype === null || isObject(prototype)) return obj; + throw new TypeError("Prototype must be null or an object"); +}; + +module.exports = (function (status) { + var fn, set; + if (!status) return null; + if (status.level === 2) { + if (status.set) { + set = status.set; + fn = function (obj, prototype) { + set.call(validate(obj, prototype), prototype); + return obj; + }; + } else { + fn = function (obj, prototype) { + validate(obj, prototype).__proto__ = prototype; + return obj; + }; + } + } else { + fn = function self (obj, prototype) { + var isNullBase; + validate(obj, prototype); + isNullBase = objIsPrototypOf.call(self.nullPolyfill, obj); + if (isNullBase) delete self.nullPolyfill.__proto__; + if (prototype === null) prototype = self.nullPolyfill; + obj.__proto__ = prototype; + if (isNullBase) defineProperty(self.nullPolyfill, "__proto__", nullDesc); + return obj; + }; + } + return Object.defineProperty(fn, "level", { + configurable: false, + enumerable: false, + writable: false, + value: status.level + }); +}( + (function () { + var tmpObj1 = Object.create(null) + , tmpObj2 = {} + , set + , desc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"); + + if (desc) { + try { + set = desc.set; // Opera crashes at this point + set.call(tmpObj1, tmpObj2); + } catch (ignore) {} + if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { set: set, level: 2 }; + } + + tmpObj1.__proto__ = tmpObj2; + if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 2 }; + + tmpObj1 = {}; + tmpObj1.__proto__ = tmpObj2; + if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 1 }; + + return false; + })() +)); + +require("../create"); diff --git a/node_modules/es5-ext/object/some.js b/node_modules/es5-ext/object/some.js new file mode 100644 index 000000000..c919466b2 --- /dev/null +++ b/node_modules/es5-ext/object/some.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./_iterate")("some", false); diff --git a/node_modules/es5-ext/object/to-array.js b/node_modules/es5-ext/object/to-array.js new file mode 100644 index 000000000..6ed50a8eb --- /dev/null +++ b/node_modules/es5-ext/object/to-array.js @@ -0,0 +1,24 @@ +"use strict"; + +var callable = require("./valid-callable") + , isValue = require("./is-value") + , forEach = require("./for-each") + , call = Function.prototype.call + , defaultCb = function (value, key) { + return [key, value]; +}; + +module.exports = function (obj /*, cb, thisArg, compareFn*/) { + var a = [], cb = arguments[1], thisArg = arguments[2]; + cb = isValue(cb) ? callable(cb) : defaultCb; + + forEach( + obj, + function (value, key, targetObj, index) { + a.push(call.call(cb, thisArg, value, key, this, index)); + }, + obj, + arguments[3] + ); + return a; +}; diff --git a/node_modules/es5-ext/object/unserialize.js b/node_modules/es5-ext/object/unserialize.js new file mode 100644 index 000000000..757451439 --- /dev/null +++ b/node_modules/es5-ext/object/unserialize.js @@ -0,0 +1,8 @@ +"use strict"; + +var value = require("./valid-value"); + +module.exports = exports = function (code) { + // eslint-disable-next-line no-new-func + return new Function("return " + value(code))(); +}; diff --git a/node_modules/es5-ext/object/valid-callable.js b/node_modules/es5-ext/object/valid-callable.js new file mode 100644 index 000000000..a97fb3eaf --- /dev/null +++ b/node_modules/es5-ext/object/valid-callable.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (fn) { + if (typeof fn !== "function") throw new TypeError(fn + " is not a function"); + return fn; +}; diff --git a/node_modules/es5-ext/object/valid-object.js b/node_modules/es5-ext/object/valid-object.js new file mode 100644 index 000000000..74b5e5f27 --- /dev/null +++ b/node_modules/es5-ext/object/valid-object.js @@ -0,0 +1,8 @@ +"use strict"; + +var isObject = require("./is-object"); + +module.exports = function (value) { + if (!isObject(value)) throw new TypeError(value + " is not an Object"); + return value; +}; diff --git a/node_modules/es5-ext/object/valid-value.js b/node_modules/es5-ext/object/valid-value.js new file mode 100644 index 000000000..d0ced8a47 --- /dev/null +++ b/node_modules/es5-ext/object/valid-value.js @@ -0,0 +1,8 @@ +"use strict"; + +var isValue = require("./is-value"); + +module.exports = function (value) { + if (!isValue(value)) throw new TypeError("Cannot use null or undefined"); + return value; +}; diff --git a/node_modules/es5-ext/object/validate-array-like-object.js b/node_modules/es5-ext/object/validate-array-like-object.js new file mode 100644 index 000000000..d7c45b365 --- /dev/null +++ b/node_modules/es5-ext/object/validate-array-like-object.js @@ -0,0 +1,9 @@ +"use strict"; + +var isArrayLike = require("./is-array-like") + , isObject = require("./is-object"); + +module.exports = function (obj) { + if (isObject(obj) && isArrayLike(obj)) return obj; + throw new TypeError(obj + " is not array-like object"); +}; diff --git a/node_modules/es5-ext/object/validate-array-like.js b/node_modules/es5-ext/object/validate-array-like.js new file mode 100644 index 000000000..07aa79495 --- /dev/null +++ b/node_modules/es5-ext/object/validate-array-like.js @@ -0,0 +1,8 @@ +"use strict"; + +var isArrayLike = require("./is-array-like"); + +module.exports = function (obj) { + if (isArrayLike(obj)) return obj; + throw new TypeError(obj + " is not array-like value"); +}; diff --git a/node_modules/es5-ext/object/validate-stringifiable-value.js b/node_modules/es5-ext/object/validate-stringifiable-value.js new file mode 100644 index 000000000..5f4704281 --- /dev/null +++ b/node_modules/es5-ext/object/validate-stringifiable-value.js @@ -0,0 +1,8 @@ +"use strict"; + +var ensureValue = require("./valid-value") + , stringifiable = require("./validate-stringifiable"); + +module.exports = function (value) { + return stringifiable(ensureValue(value)); +}; diff --git a/node_modules/es5-ext/object/validate-stringifiable.js b/node_modules/es5-ext/object/validate-stringifiable.js new file mode 100644 index 000000000..2b1f12714 --- /dev/null +++ b/node_modules/es5-ext/object/validate-stringifiable.js @@ -0,0 +1,12 @@ +"use strict"; + +var isCallable = require("./is-callable"); + +module.exports = function (stringifiable) { + try { + if (stringifiable && isCallable(stringifiable.toString)) return stringifiable.toString(); + return String(stringifiable); + } catch (e) { + throw new TypeError("Passed argument cannot be stringifed"); + } +}; diff --git a/node_modules/es5-ext/optional-chaining.js b/node_modules/es5-ext/optional-chaining.js new file mode 100644 index 000000000..f1811279e --- /dev/null +++ b/node_modules/es5-ext/optional-chaining.js @@ -0,0 +1,12 @@ +"use strict"; + +var isValue = require("./object/is-value"); + +var slice = Array.prototype.slice; + +// eslint-disable-next-line no-unused-vars +module.exports = function (value, propertyName1 /*, …propertyNamen*/) { + var propertyNames = slice.call(arguments, 1), index = 0, length = propertyNames.length; + while (isValue(value) && index < length) value = value[propertyNames[index++]]; + return index === length ? value : undefined; +}; diff --git a/node_modules/es5-ext/package.json b/node_modules/es5-ext/package.json new file mode 100644 index 000000000..16c47a23c --- /dev/null +++ b/node_modules/es5-ext/package.json @@ -0,0 +1,88 @@ +{ + "_from": "es5-ext@~0.10.14", + "_id": "es5-ext@0.10.30", + "_inBundle": false, + "_integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", + "_location": "/es5-ext", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "es5-ext@~0.10.14", + "name": "es5-ext", + "escapedName": "es5-ext", + "rawSpec": "~0.10.14", + "saveSpec": null, + "fetchSpec": "~0.10.14" + }, + "_requiredBy": [ + "/d", + "/es6-iterator", + "/es6-map", + "/es6-set", + "/es6-symbol", + "/es6-weak-map", + "/event-emitter" + ], + "_resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "_shasum": "7141a16836697dbabfaaaeee41495ce29f52c939", + "_spec": "es5-ext@~0.10.14", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/es6-map", + "author": { + "name": "Mariusz Nowak", + "email": "medyk@medikoo.com", + "url": "http://www.medikoo.com/" + }, + "bugs": { + "url": "https://github.com/medikoo/es5-ext/issues" + }, + "bundleDependencies": false, + "dependencies": { + "es6-iterator": "2", + "es6-symbol": "~3.1" + }, + "deprecated": false, + "description": "ECMAScript extensions and shims", + "devDependencies": { + "eslint": "^4.2.0", + "eslint-config-medikoo-es5": "^1.4.1", + "tad": "~0.2.7" + }, + "eslintConfig": { + "extends": "medikoo-es5", + "root": true, + "rules": { + "no-extend-native": "off" + } + }, + "homepage": "https://github.com/medikoo/es5-ext#readme", + "keywords": [ + "ecmascript", + "ecmascript5", + "ecmascript6", + "es5", + "es6", + "extensions", + "ext", + "addons", + "extras", + "harmony", + "javascript", + "polyfill", + "shim", + "util", + "utils", + "utilities" + ], + "license": "MIT", + "name": "es5-ext", + "repository": { + "type": "git", + "url": "git://github.com/medikoo/es5-ext.git" + }, + "scripts": { + "lint": "eslint --ignore-path=.gitignore .", + "test": "node ./node_modules/tad/bin/tad" + }, + "version": "0.10.30" +} diff --git a/node_modules/es5-ext/reg-exp/#/index.js b/node_modules/es5-ext/reg-exp/#/index.js new file mode 100644 index 000000000..9b098e0e2 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/index.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + isSticky: require("./is-sticky"), + isUnicode: require("./is-unicode"), + match: require("./match"), + replace: require("./replace"), + search: require("./search"), + split: require("./split") +}; diff --git a/node_modules/es5-ext/reg-exp/#/is-sticky.js b/node_modules/es5-ext/reg-exp/#/is-sticky.js new file mode 100644 index 000000000..2d4bb2a65 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/is-sticky.js @@ -0,0 +1,9 @@ +"use strict"; + +var validRegExp = require("../valid-reg-exp") + + , re = /\/[a-xz]*y[a-xz]*$/; + +module.exports = function () { + return Boolean(String(validRegExp(this)).match(re)); +}; diff --git a/node_modules/es5-ext/reg-exp/#/is-unicode.js b/node_modules/es5-ext/reg-exp/#/is-unicode.js new file mode 100644 index 000000000..4c1ad9e2c --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/is-unicode.js @@ -0,0 +1,9 @@ +"use strict"; + +var validRegExp = require("../valid-reg-exp") + + , re = /\/[a-xz]*u[a-xz]*$/; + +module.exports = function () { + return Boolean(String(validRegExp(this)).match(re)); +}; diff --git a/node_modules/es5-ext/reg-exp/#/match/implement.js b/node_modules/es5-ext/reg-exp/#/match/implement.js new file mode 100644 index 000000000..ba89bcec1 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/match/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(RegExp.prototype, "match", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/reg-exp/#/match/index.js b/node_modules/es5-ext/reg-exp/#/match/index.js new file mode 100644 index 000000000..b74d2f295 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/match/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? RegExp.prototype.match + : require("./shim"); diff --git a/node_modules/es5-ext/reg-exp/#/match/is-implemented.js b/node_modules/es5-ext/reg-exp/#/match/is-implemented.js new file mode 100644 index 000000000..a5065fc72 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/match/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var re = /foo/; + +module.exports = function () { + if (typeof re.match !== "function") return false; + return re.match("barfoobar") && !re.match("elo"); +}; diff --git a/node_modules/es5-ext/reg-exp/#/match/shim.js b/node_modules/es5-ext/reg-exp/#/match/shim.js new file mode 100644 index 000000000..295582186 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/match/shim.js @@ -0,0 +1,8 @@ +"use strict"; + +var validRegExp = require("../../valid-reg-exp"); + +module.exports = function (string) { + validRegExp(this); + return String(string).match(this); +}; diff --git a/node_modules/es5-ext/reg-exp/#/replace/implement.js b/node_modules/es5-ext/reg-exp/#/replace/implement.js new file mode 100644 index 000000000..0db82917d --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/replace/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(RegExp.prototype, "replace", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/reg-exp/#/replace/index.js b/node_modules/es5-ext/reg-exp/#/replace/index.js new file mode 100644 index 000000000..41ff4ba0c --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/replace/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? RegExp.prototype.replace + : require("./shim"); diff --git a/node_modules/es5-ext/reg-exp/#/replace/is-implemented.js b/node_modules/es5-ext/reg-exp/#/replace/is-implemented.js new file mode 100644 index 000000000..0a2e7c2fe --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/replace/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var re = /foo/; + +module.exports = function () { + if (typeof re.replace !== "function") return false; + return re.replace("foobar", "mar") === "marbar"; +}; diff --git a/node_modules/es5-ext/reg-exp/#/replace/shim.js b/node_modules/es5-ext/reg-exp/#/replace/shim.js new file mode 100644 index 000000000..66f5d5b7c --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/replace/shim.js @@ -0,0 +1,8 @@ +"use strict"; + +var validRegExp = require("../../valid-reg-exp"); + +module.exports = function (string, replaceValue) { + validRegExp(this); + return String(string).replace(this, replaceValue); +}; diff --git a/node_modules/es5-ext/reg-exp/#/search/implement.js b/node_modules/es5-ext/reg-exp/#/search/implement.js new file mode 100644 index 000000000..34452615d --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/search/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(RegExp.prototype, "search", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/reg-exp/#/search/index.js b/node_modules/es5-ext/reg-exp/#/search/index.js new file mode 100644 index 000000000..a17213e4d --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/search/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? RegExp.prototype.search + : require("./shim"); diff --git a/node_modules/es5-ext/reg-exp/#/search/is-implemented.js b/node_modules/es5-ext/reg-exp/#/search/is-implemented.js new file mode 100644 index 000000000..7f38669f1 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/search/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var re = /foo/; + +module.exports = function () { + if (typeof re.search !== "function") return false; + return re.search("barfoo") === 3; +}; diff --git a/node_modules/es5-ext/reg-exp/#/search/shim.js b/node_modules/es5-ext/reg-exp/#/search/shim.js new file mode 100644 index 000000000..c97a78731 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/search/shim.js @@ -0,0 +1,8 @@ +"use strict"; + +var validRegExp = require("../../valid-reg-exp"); + +module.exports = function (string) { + validRegExp(this); + return String(string).search(this); +}; diff --git a/node_modules/es5-ext/reg-exp/#/split/implement.js b/node_modules/es5-ext/reg-exp/#/split/implement.js new file mode 100644 index 000000000..d94acdd85 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/split/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(RegExp.prototype, "split", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/reg-exp/#/split/index.js b/node_modules/es5-ext/reg-exp/#/split/index.js new file mode 100644 index 000000000..7942f452d --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/split/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? RegExp.prototype.split + : require("./shim"); diff --git a/node_modules/es5-ext/reg-exp/#/split/is-implemented.js b/node_modules/es5-ext/reg-exp/#/split/is-implemented.js new file mode 100644 index 000000000..90fca0cc8 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/split/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var re = /\|/; + +module.exports = function () { + if (typeof re.split !== "function") return false; + return re.split("bar|foo")[1] === "foo"; +}; diff --git a/node_modules/es5-ext/reg-exp/#/split/shim.js b/node_modules/es5-ext/reg-exp/#/split/shim.js new file mode 100644 index 000000000..c9c73cce2 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/split/shim.js @@ -0,0 +1,8 @@ +"use strict"; + +var validRegExp = require("../../valid-reg-exp"); + +module.exports = function (string) { + validRegExp(this); + return String(string).split(this); +}; diff --git a/node_modules/es5-ext/reg-exp/#/sticky/implement.js b/node_modules/es5-ext/reg-exp/#/sticky/implement.js new file mode 100644 index 000000000..f636890f4 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/sticky/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +var isSticky = require("../is-sticky"); + +if (!require("./is-implemented")()) { + Object.defineProperty(RegExp.prototype, "sticky", { configurable: true, + enumerable: false, +get: isSticky }); +} diff --git a/node_modules/es5-ext/reg-exp/#/sticky/is-implemented.js b/node_modules/es5-ext/reg-exp/#/sticky/is-implemented.js new file mode 100644 index 000000000..a1ade1114 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/sticky/is-implemented.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function () { + var dummyRegExp = /a/; + // We need to do check on instance and not on prototype due to how ES2015 spec evolved: + // https://github.com/tc39/ecma262/issues/262 + // https://github.com/tc39/ecma262/pull/263 + // https://bugs.chromium.org/p/v8/issues/detail?id=4617 + return "sticky" in dummyRegExp; +}; diff --git a/node_modules/es5-ext/reg-exp/#/unicode/implement.js b/node_modules/es5-ext/reg-exp/#/unicode/implement.js new file mode 100644 index 000000000..a5fb20365 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/unicode/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +var isUnicode = require("../is-unicode"); + +if (!require("./is-implemented")()) { + Object.defineProperty(RegExp.prototype, "unicode", { configurable: true, + enumerable: false, +get: isUnicode }); +} diff --git a/node_modules/es5-ext/reg-exp/#/unicode/is-implemented.js b/node_modules/es5-ext/reg-exp/#/unicode/is-implemented.js new file mode 100644 index 000000000..48605d72a --- /dev/null +++ b/node_modules/es5-ext/reg-exp/#/unicode/is-implemented.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function () { + var dummyRegExp = /a/; + // We need to do check on instance and not on prototype due to how ES2015 spec evolved: + // https://github.com/tc39/ecma262/issues/262 + // https://github.com/tc39/ecma262/pull/263 + // https://bugs.chromium.org/p/v8/issues/detail?id=4617 + return "unicode" in dummyRegExp; +}; diff --git a/node_modules/es5-ext/reg-exp/escape.js b/node_modules/es5-ext/reg-exp/escape.js new file mode 100644 index 000000000..964e3c61a --- /dev/null +++ b/node_modules/es5-ext/reg-exp/escape.js @@ -0,0 +1,11 @@ +// Thanks to Andrew Clover: +// http://stackoverflow.com/questions/3561493 +// /is-there-a-regexp-escape-function-in-javascript + +"use strict"; + +var re = /[-/\\^$*+?.()|[\]{}]/g; + +module.exports = function (str) { + return String(str).replace(re, "\\$&"); +}; diff --git a/node_modules/es5-ext/reg-exp/index.js b/node_modules/es5-ext/reg-exp/index.js new file mode 100644 index 000000000..f023fe039 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/index.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + "#": require("./#"), + "escape": require("./escape"), + "isRegExp": require("./is-reg-exp"), + "validRegExp": require("./valid-reg-exp") +}; diff --git a/node_modules/es5-ext/reg-exp/is-reg-exp.js b/node_modules/es5-ext/reg-exp/is-reg-exp.js new file mode 100644 index 000000000..b966b0f26 --- /dev/null +++ b/node_modules/es5-ext/reg-exp/is-reg-exp.js @@ -0,0 +1,7 @@ +"use strict"; + +var objToString = Object.prototype.toString, id = objToString.call(/a/); + +module.exports = function (value) { + return (value && (value instanceof RegExp || objToString.call(value) === id)) || false; +}; diff --git a/node_modules/es5-ext/reg-exp/valid-reg-exp.js b/node_modules/es5-ext/reg-exp/valid-reg-exp.js new file mode 100644 index 000000000..a05927a7e --- /dev/null +++ b/node_modules/es5-ext/reg-exp/valid-reg-exp.js @@ -0,0 +1,8 @@ +"use strict"; + +var isRegExp = require("./is-reg-exp"); + +module.exports = function (value) { + if (!isRegExp(value)) throw new TypeError(value + " is not a RegExp object"); + return value; +}; diff --git a/node_modules/es5-ext/safe-to-string.js b/node_modules/es5-ext/safe-to-string.js new file mode 100644 index 000000000..cc323d7c7 --- /dev/null +++ b/node_modules/es5-ext/safe-to-string.js @@ -0,0 +1,12 @@ +"use strict"; + +var isCallable = require("./object/is-callable"); + +module.exports = function (value) { + try { + if (value && isCallable(value.toString)) return value.toString(); + return String(value); + } catch (e) { + return ""; + } +}; diff --git a/node_modules/es5-ext/string/#/@@iterator/implement.js b/node_modules/es5-ext/string/#/@@iterator/implement.js new file mode 100644 index 000000000..ab85d7c7a --- /dev/null +++ b/node_modules/es5-ext/string/#/@@iterator/implement.js @@ -0,0 +1,6 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(String.prototype, require("es6-symbol").iterator, + { value: require("./shim"), configurable: true, enumerable: false, writable: true }); +} diff --git a/node_modules/es5-ext/string/#/@@iterator/index.js b/node_modules/es5-ext/string/#/@@iterator/index.js new file mode 100644 index 000000000..b2bd1e863 --- /dev/null +++ b/node_modules/es5-ext/string/#/@@iterator/index.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? String.prototype[require("es6-symbol").iterator] : require("./shim"); diff --git a/node_modules/es5-ext/string/#/@@iterator/is-implemented.js b/node_modules/es5-ext/string/#/@@iterator/is-implemented.js new file mode 100644 index 000000000..bb8a8d6ef --- /dev/null +++ b/node_modules/es5-ext/string/#/@@iterator/is-implemented.js @@ -0,0 +1,16 @@ +"use strict"; + +var iteratorSymbol = require("es6-symbol").iterator; + +module.exports = function () { + var str = "🙈f", iterator, result; + if (typeof str[iteratorSymbol] !== "function") return false; + iterator = str[iteratorSymbol](); + if (!iterator) return false; + if (typeof iterator.next !== "function") return false; + result = iterator.next(); + if (!result) return false; + if (result.value !== "🙈") return false; + if (result.done !== false) return false; + return true; +}; diff --git a/node_modules/es5-ext/string/#/@@iterator/shim.js b/node_modules/es5-ext/string/#/@@iterator/shim.js new file mode 100644 index 000000000..1eafee27f --- /dev/null +++ b/node_modules/es5-ext/string/#/@@iterator/shim.js @@ -0,0 +1,8 @@ +"use strict"; + +var StringIterator = require("es6-iterator/string") + , value = require("../../../object/valid-value"); + +module.exports = function () { + return new StringIterator(value(this)); +}; diff --git a/node_modules/es5-ext/string/#/at.js b/node_modules/es5-ext/string/#/at.js new file mode 100644 index 000000000..a8c291794 --- /dev/null +++ b/node_modules/es5-ext/string/#/at.js @@ -0,0 +1,35 @@ +// Based on: https://github.com/mathiasbynens/String.prototype.at +// Thanks @mathiasbynens ! + +"use strict"; + +var toInteger = require("../../number/to-integer") + , validValue = require("../../object/valid-value"); + +module.exports = function (pos) { + var str = String(validValue(this)), size = str.length, cuFirst, cuSecond, nextPos, len; + pos = toInteger(pos); + + // Account for out-of-bounds indices + // The odd lower bound is because the ToInteger operation is + // going to round `n` to `0` for `-1 < n <= 0`. + if (pos <= -1 || pos >= size) return ""; + + // Second half of `ToInteger` + // eslint-disable-next-line no-bitwise + pos |= 0; + // Get the first code unit and code unit value + cuFirst = str.charCodeAt(pos); + nextPos = pos + 1; + len = 1; + if ( + // Check if it’s the start of a surrogate pair + cuFirst >= 0xd800 && + cuFirst <= 0xdbff && // High surrogate + size > nextPos // There is a next code unit + ) { + cuSecond = str.charCodeAt(nextPos); + if (cuSecond >= 0xdc00 && cuSecond <= 0xdfff) len = 2; // Low surrogate + } + return str.slice(pos, pos + len); +}; diff --git a/node_modules/es5-ext/string/#/camel-to-hyphen.js b/node_modules/es5-ext/string/#/camel-to-hyphen.js new file mode 100644 index 000000000..002dfd0b2 --- /dev/null +++ b/node_modules/es5-ext/string/#/camel-to-hyphen.js @@ -0,0 +1,10 @@ +"use strict"; + +var replace = String.prototype.replace + , re = /([A-Z])/g; + +module.exports = function () { + var str = replace.call(this, re, "-$1").toLowerCase(); + if (str[0] === "-") str = str.slice(1); + return str; +}; diff --git a/node_modules/es5-ext/string/#/capitalize.js b/node_modules/es5-ext/string/#/capitalize.js new file mode 100644 index 000000000..fc92a9fb6 --- /dev/null +++ b/node_modules/es5-ext/string/#/capitalize.js @@ -0,0 +1,8 @@ +"use strict"; + +var value = require("../../object/valid-value"); + +module.exports = function () { + var str = String(value(this)); + return str.charAt(0).toUpperCase() + str.slice(1); +}; diff --git a/node_modules/es5-ext/string/#/case-insensitive-compare.js b/node_modules/es5-ext/string/#/case-insensitive-compare.js new file mode 100644 index 000000000..5d961a5e3 --- /dev/null +++ b/node_modules/es5-ext/string/#/case-insensitive-compare.js @@ -0,0 +1,7 @@ +"use strict"; + +var toLowerCase = String.prototype.toLowerCase; + +module.exports = function (other) { + return toLowerCase.call(this).localeCompare(toLowerCase.call(String(other))); +}; diff --git a/node_modules/es5-ext/string/#/code-point-at/implement.js b/node_modules/es5-ext/string/#/code-point-at/implement.js new file mode 100644 index 000000000..f1dc80a04 --- /dev/null +++ b/node_modules/es5-ext/string/#/code-point-at/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(String.prototype, "codePointAt", + { value: require("./shim"), +configurable: true, +enumerable: false, + writable: true }); +} diff --git a/node_modules/es5-ext/string/#/code-point-at/index.js b/node_modules/es5-ext/string/#/code-point-at/index.js new file mode 100644 index 000000000..33d45c9f2 --- /dev/null +++ b/node_modules/es5-ext/string/#/code-point-at/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? String.prototype.codePointAt + : require("./shim"); diff --git a/node_modules/es5-ext/string/#/code-point-at/is-implemented.js b/node_modules/es5-ext/string/#/code-point-at/is-implemented.js new file mode 100644 index 000000000..7da785f2c --- /dev/null +++ b/node_modules/es5-ext/string/#/code-point-at/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var str = "abc\uD834\uDF06def"; + +module.exports = function () { + if (typeof str.codePointAt !== "function") return false; + return str.codePointAt(3) === 0x1D306; +}; diff --git a/node_modules/es5-ext/string/#/code-point-at/shim.js b/node_modules/es5-ext/string/#/code-point-at/shim.js new file mode 100644 index 000000000..0f331c3f1 --- /dev/null +++ b/node_modules/es5-ext/string/#/code-point-at/shim.js @@ -0,0 +1,26 @@ +// Based on: https://github.com/mathiasbynens/String.prototype.codePointAt +// Thanks @mathiasbynens ! + +"use strict"; + +var toInteger = require("../../../number/to-integer") + , validValue = require("../../../object/valid-value"); + +module.exports = function (pos) { + var str = String(validValue(this)), length = str.length, first, second; + pos = toInteger(pos); + + // Account for out-of-bounds indices: + if (pos < 0 || pos >= length) return undefined; + + // Get the first code unit + first = str.charCodeAt(pos); + if (first >= 0xd800 && first <= 0xdbff && length > pos + 1) { + second = str.charCodeAt(pos + 1); + if (second >= 0xdc00 && second <= 0xdfff) { + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000; + } + } + return first; +}; diff --git a/node_modules/es5-ext/string/#/contains/implement.js b/node_modules/es5-ext/string/#/contains/implement.js new file mode 100644 index 000000000..395acea23 --- /dev/null +++ b/node_modules/es5-ext/string/#/contains/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(String.prototype, "contains", + { value: require("./shim"), +configurable: true, +enumerable: false, + writable: true }); +} diff --git a/node_modules/es5-ext/string/#/contains/index.js b/node_modules/es5-ext/string/#/contains/index.js new file mode 100644 index 000000000..4f6a07140 --- /dev/null +++ b/node_modules/es5-ext/string/#/contains/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? String.prototype.contains + : require("./shim"); diff --git a/node_modules/es5-ext/string/#/contains/is-implemented.js b/node_modules/es5-ext/string/#/contains/is-implemented.js new file mode 100644 index 000000000..c270bb1ad --- /dev/null +++ b/node_modules/es5-ext/string/#/contains/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var str = "razdwatrzy"; + +module.exports = function () { + if (typeof str.contains !== "function") return false; + return (str.contains("dwa") === true) && (str.contains("foo") === false); +}; diff --git a/node_modules/es5-ext/string/#/contains/shim.js b/node_modules/es5-ext/string/#/contains/shim.js new file mode 100644 index 000000000..a7219f2e9 --- /dev/null +++ b/node_modules/es5-ext/string/#/contains/shim.js @@ -0,0 +1,7 @@ +"use strict"; + +var indexOf = String.prototype.indexOf; + +module.exports = function (searchString/*, position*/) { + return indexOf.call(this, searchString, arguments[1]) > -1; +}; diff --git a/node_modules/es5-ext/string/#/count.js b/node_modules/es5-ext/string/#/count.js new file mode 100644 index 000000000..760701362 --- /dev/null +++ b/node_modules/es5-ext/string/#/count.js @@ -0,0 +1,15 @@ +"use strict"; + +var ensureString = require("../../object/validate-stringifiable-value"); + +module.exports = function (search) { + var string = ensureString(this), count = 0, index = 0; + + search = ensureString(search); + if (!search) throw new TypeError("Search string cannot be empty"); + while ((index = string.indexOf(search, index)) !== -1) { + ++count; + index += search.length; + } + return count; +}; diff --git a/node_modules/es5-ext/string/#/ends-with/implement.js b/node_modules/es5-ext/string/#/ends-with/implement.js new file mode 100644 index 000000000..19e5b86b8 --- /dev/null +++ b/node_modules/es5-ext/string/#/ends-with/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(String.prototype, "endsWith", + { value: require("./shim"), +configurable: true, +enumerable: false, + writable: true }); +} diff --git a/node_modules/es5-ext/string/#/ends-with/index.js b/node_modules/es5-ext/string/#/ends-with/index.js new file mode 100644 index 000000000..952ed0ce1 --- /dev/null +++ b/node_modules/es5-ext/string/#/ends-with/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? String.prototype.endsWith + : require("./shim"); diff --git a/node_modules/es5-ext/string/#/ends-with/is-implemented.js b/node_modules/es5-ext/string/#/ends-with/is-implemented.js new file mode 100644 index 000000000..fce38eb8e --- /dev/null +++ b/node_modules/es5-ext/string/#/ends-with/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var str = "razdwatrzy"; + +module.exports = function () { + if (typeof str.endsWith !== "function") return false; + return (str.endsWith("trzy") === true) && (str.endsWith("raz") === false); +}; diff --git a/node_modules/es5-ext/string/#/ends-with/shim.js b/node_modules/es5-ext/string/#/ends-with/shim.js new file mode 100644 index 000000000..c5371aa93 --- /dev/null +++ b/node_modules/es5-ext/string/#/ends-with/shim.js @@ -0,0 +1,18 @@ +"use strict"; + +var toInteger = require("../../../number/to-integer") + , value = require("../../../object/valid-value") + , isValue = require("../../../object/is-value") + , min = Math.min + , max = Math.max; + +module.exports = function (searchString /*, endPosition*/) { + var self, start, endPos; + self = String(value(this)); + searchString = String(searchString); + endPos = arguments[1]; + start = + (isValue(endPos) ? min(max(toInteger(endPos), 0), self.length) : self.length) - + searchString.length; + return start < 0 ? false : self.indexOf(searchString, start) === start; +}; diff --git a/node_modules/es5-ext/string/#/hyphen-to-camel.js b/node_modules/es5-ext/string/#/hyphen-to-camel.js new file mode 100644 index 000000000..20a5105cc --- /dev/null +++ b/node_modules/es5-ext/string/#/hyphen-to-camel.js @@ -0,0 +1,10 @@ +"use strict"; + +var replace = String.prototype.replace, re = /-([a-z0-9])/g; +var toUpperCase = function (ignored, a) { + return a.toUpperCase(); +}; + +module.exports = function () { + return replace.call(this, re, toUpperCase); +}; diff --git a/node_modules/es5-ext/string/#/indent.js b/node_modules/es5-ext/string/#/indent.js new file mode 100644 index 000000000..df8869dbc --- /dev/null +++ b/node_modules/es5-ext/string/#/indent.js @@ -0,0 +1,12 @@ +"use strict"; + +var isValue = require("../../object/is-value") + , repeat = require("./repeat") + , replace = String.prototype.replace + , re = /(\r\n|[\n\r\u2028\u2029])([\u0000-\u0009\u000b-\uffff]+)/g; + +module.exports = function (indent /*, count*/) { + var count = arguments[1]; + indent = repeat.call(String(indent), isValue(count) ? count : 1); + return indent + replace.call(this, re, "$1" + indent + "$2"); +}; diff --git a/node_modules/es5-ext/string/#/index.js b/node_modules/es5-ext/string/#/index.js new file mode 100644 index 000000000..234448974 --- /dev/null +++ b/node_modules/es5-ext/string/#/index.js @@ -0,0 +1,23 @@ +"use strict"; + +module.exports = { + "@@iterator": require("./@@iterator"), + "at": require("./at"), + "count": require("./count"), + "camelToHyphen": require("./camel-to-hyphen"), + "capitalize": require("./capitalize"), + "caseInsensitiveCompare": require("./case-insensitive-compare"), + "codePointAt": require("./code-point-at"), + "contains": require("./contains"), + "hyphenToCamel": require("./hyphen-to-camel"), + "endsWith": require("./ends-with"), + "indent": require("./indent"), + "last": require("./last"), + "normalize": require("./normalize"), + "pad": require("./pad"), + "plainReplace": require("./plain-replace"), + "plainReplaceAll": require("./plain-replace-all"), + "repeat": require("./repeat"), + "startsWith": require("./starts-with"), + "uncapitalize": require("./uncapitalize") +}; diff --git a/node_modules/es5-ext/string/#/last.js b/node_modules/es5-ext/string/#/last.js new file mode 100644 index 000000000..f5c957fca --- /dev/null +++ b/node_modules/es5-ext/string/#/last.js @@ -0,0 +1,8 @@ +"use strict"; + +var value = require("../../object/valid-value"); + +module.exports = function () { + var self = String(value(this)), length = self.length; + return length ? self[length - 1] : null; +}; diff --git a/node_modules/es5-ext/string/#/normalize/_data.js b/node_modules/es5-ext/string/#/normalize/_data.js new file mode 100644 index 000000000..356d5a6a5 --- /dev/null +++ b/node_modules/es5-ext/string/#/normalize/_data.js @@ -0,0 +1,7203 @@ +/* eslint max-lines: "off", no-sparse-arrays: "off", comma-style: "off" */ + +"use strict"; + +module.exports = { + 0: { + 60: [, , { 824: 8814 }], + 61: [, , { 824: 8800 }], + 62: [, , { 824: 8815 }], + 65: [ + , + , + { + 768: 192, + 769: 193, + 770: 194, + 771: 195, + 772: 256, + 774: 258, + 775: 550, + 776: 196, + 777: 7842, + 778: 197, + 780: 461, + 783: 512, + 785: 514, + 803: 7840, + 805: 7680, + 808: 260 + } + ], + 66: [, , { 775: 7682, 803: 7684, 817: 7686 }], + 67: [, , { 769: 262, 770: 264, 775: 266, 780: 268, 807: 199 }], + 68: [ + , + , + { 775: 7690, 780: 270, 803: 7692, 807: 7696, 813: 7698, 817: 7694 } + ], + 69: [ + , + , + { + 768: 200, + 769: 201, + 770: 202, + 771: 7868, + 772: 274, + 774: 276, + 775: 278, + 776: 203, + 777: 7866, + 780: 282, + 783: 516, + 785: 518, + 803: 7864, + 807: 552, + 808: 280, + 813: 7704, + 816: 7706 + } + ], + 70: [, , { 775: 7710 }], + 71: [ + , + , + { 769: 500, 770: 284, 772: 7712, 774: 286, 775: 288, 780: 486, 807: 290 } + ], + 72: [ + , + , + { + 770: 292, + 775: 7714, + 776: 7718, + 780: 542, + 803: 7716, + 807: 7720, + 814: 7722 + } + ], + 73: [ + , + , + { + 768: 204, + 769: 205, + 770: 206, + 771: 296, + 772: 298, + 774: 300, + 775: 304, + 776: 207, + 777: 7880, + 780: 463, + 783: 520, + 785: 522, + 803: 7882, + 808: 302, + 816: 7724 + } + ], + 74: [, , { 770: 308 }], + 75: [, , { 769: 7728, 780: 488, 803: 7730, 807: 310, 817: 7732 }], + 76: [, , { 769: 313, 780: 317, 803: 7734, 807: 315, 813: 7740, 817: 7738 }], + 77: [, , { 769: 7742, 775: 7744, 803: 7746 }], + 78: [ + , + , + { + 768: 504, + 769: 323, + 771: 209, + 775: 7748, + 780: 327, + 803: 7750, + 807: 325, + 813: 7754, + 817: 7752 + } + ], + 79: [ + , + , + { + 768: 210, + 769: 211, + 770: 212, + 771: 213, + 772: 332, + 774: 334, + 775: 558, + 776: 214, + 777: 7886, + 779: 336, + 780: 465, + 783: 524, + 785: 526, + 795: 416, + 803: 7884, + 808: 490 + } + ], + 80: [, , { 769: 7764, 775: 7766 }], + 82: [ + , + , + { + 769: 340, + 775: 7768, + 780: 344, + 783: 528, + 785: 530, + 803: 7770, + 807: 342, + 817: 7774 + } + ], + 83: [ + , + , + { 769: 346, 770: 348, 775: 7776, 780: 352, 803: 7778, 806: 536, 807: 350 } + ], + 84: [ + , + , + { + 775: 7786, + 780: 356, + 803: 7788, + 806: 538, + 807: 354, + 813: 7792, + 817: 7790 + } + ], + 85: [ + , + , + { + 768: 217, + 769: 218, + 770: 219, + 771: 360, + 772: 362, + 774: 364, + 776: 220, + 777: 7910, + 778: 366, + 779: 368, + 780: 467, + 783: 532, + 785: 534, + 795: 431, + 803: 7908, + 804: 7794, + 808: 370, + 813: 7798, + 816: 7796 + } + ], + 86: [, , { 771: 7804, 803: 7806 }], + 87: [ + , + , + { 768: 7808, 769: 7810, 770: 372, 775: 7814, 776: 7812, 803: 7816 } + ], + 88: [, , { 775: 7818, 776: 7820 }], + 89: [ + , + , + { + 768: 7922, + 769: 221, + 770: 374, + 771: 7928, + 772: 562, + 775: 7822, + 776: 376, + 777: 7926, + 803: 7924 + } + ], + 90: [, , { 769: 377, 770: 7824, 775: 379, 780: 381, 803: 7826, 817: 7828 }], + 97: [ + , + , + { + 768: 224, + 769: 225, + 770: 226, + 771: 227, + 772: 257, + 774: 259, + 775: 551, + 776: 228, + 777: 7843, + 778: 229, + 780: 462, + 783: 513, + 785: 515, + 803: 7841, + 805: 7681, + 808: 261 + } + ], + 98: [, , { 775: 7683, 803: 7685, 817: 7687 }], + 99: [, , { 769: 263, 770: 265, 775: 267, 780: 269, 807: 231 }], + 100: [ + , + , + { 775: 7691, 780: 271, 803: 7693, 807: 7697, 813: 7699, 817: 7695 } + ], + 101: [ + , + , + { + 768: 232, + 769: 233, + 770: 234, + 771: 7869, + 772: 275, + 774: 277, + 775: 279, + 776: 235, + 777: 7867, + 780: 283, + 783: 517, + 785: 519, + 803: 7865, + 807: 553, + 808: 281, + 813: 7705, + 816: 7707 + } + ], + 102: [, , { 775: 7711 }], + 103: [ + , + , + { 769: 501, 770: 285, 772: 7713, 774: 287, 775: 289, 780: 487, 807: 291 } + ], + 104: [ + , + , + { + 770: 293, + 775: 7715, + 776: 7719, + 780: 543, + 803: 7717, + 807: 7721, + 814: 7723, + 817: 7830 + } + ], + 105: [ + , + , + { + 768: 236, + 769: 237, + 770: 238, + 771: 297, + 772: 299, + 774: 301, + 776: 239, + 777: 7881, + 780: 464, + 783: 521, + 785: 523, + 803: 7883, + 808: 303, + 816: 7725 + } + ], + 106: [, , { 770: 309, 780: 496 }], + 107: [, , { 769: 7729, 780: 489, 803: 7731, 807: 311, 817: 7733 }], + 108: [ + , + , + { 769: 314, 780: 318, 803: 7735, 807: 316, 813: 7741, 817: 7739 } + ], + 109: [, , { 769: 7743, 775: 7745, 803: 7747 }], + 110: [ + , + , + { + 768: 505, + 769: 324, + 771: 241, + 775: 7749, + 780: 328, + 803: 7751, + 807: 326, + 813: 7755, + 817: 7753 + } + ], + 111: [ + , + , + { + 768: 242, + 769: 243, + 770: 244, + 771: 245, + 772: 333, + 774: 335, + 775: 559, + 776: 246, + 777: 7887, + 779: 337, + 780: 466, + 783: 525, + 785: 527, + 795: 417, + 803: 7885, + 808: 491 + } + ], + 112: [, , { 769: 7765, 775: 7767 }], + 114: [ + , + , + { + 769: 341, + 775: 7769, + 780: 345, + 783: 529, + 785: 531, + 803: 7771, + 807: 343, + 817: 7775 + } + ], + 115: [ + , + , + { 769: 347, 770: 349, 775: 7777, 780: 353, 803: 7779, 806: 537, 807: 351 } + ], + 116: [ + , + , + { + 775: 7787, + 776: 7831, + 780: 357, + 803: 7789, + 806: 539, + 807: 355, + 813: 7793, + 817: 7791 + } + ], + 117: [ + , + , + { + 768: 249, + 769: 250, + 770: 251, + 771: 361, + 772: 363, + 774: 365, + 776: 252, + 777: 7911, + 778: 367, + 779: 369, + 780: 468, + 783: 533, + 785: 535, + 795: 432, + 803: 7909, + 804: 7795, + 808: 371, + 813: 7799, + 816: 7797 + } + ], + 118: [, , { 771: 7805, 803: 7807 }], + 119: [ + , + , + { + 768: 7809, + 769: 7811, + 770: 373, + 775: 7815, + 776: 7813, + 778: 7832, + 803: 7817 + } + ], + 120: [, , { 775: 7819, 776: 7821 }], + 121: [ + , + , + { + 768: 7923, + 769: 253, + 770: 375, + 771: 7929, + 772: 563, + 775: 7823, + 776: 255, + 777: 7927, + 778: 7833, + 803: 7925 + } + ], + 122: [ + , + , + { 769: 378, 770: 7825, 775: 380, 780: 382, 803: 7827, 817: 7829 } + ], + 160: [[32], 256], + 168: [[32, 776], 256, { 768: 8173, 769: 901, 834: 8129 }], + 170: [[97], 256], + 175: [[32, 772], 256], + 178: [[50], 256], + 179: [[51], 256], + 180: [[32, 769], 256], + 181: [[956], 256], + 184: [[32, 807], 256], + 185: [[49], 256], + 186: [[111], 256], + 188: [[49, 8260, 52], 256], + 189: [[49, 8260, 50], 256], + 190: [[51, 8260, 52], 256], + 192: [[65, 768]], + 193: [[65, 769]], + 194: [[65, 770], , { 768: 7846, 769: 7844, 771: 7850, 777: 7848 }], + 195: [[65, 771]], + 196: [[65, 776], , { 772: 478 }], + 197: [[65, 778], , { 769: 506 }], + 198: [, , { 769: 508, 772: 482 }], + 199: [[67, 807], , { 769: 7688 }], + 200: [[69, 768]], + 201: [[69, 769]], + 202: [[69, 770], , { 768: 7872, 769: 7870, 771: 7876, 777: 7874 }], + 203: [[69, 776]], + 204: [[73, 768]], + 205: [[73, 769]], + 206: [[73, 770]], + 207: [[73, 776], , { 769: 7726 }], + 209: [[78, 771]], + 210: [[79, 768]], + 211: [[79, 769]], + 212: [[79, 770], , { 768: 7890, 769: 7888, 771: 7894, 777: 7892 }], + 213: [[79, 771], , { 769: 7756, 772: 556, 776: 7758 }], + 214: [[79, 776], , { 772: 554 }], + 216: [, , { 769: 510 }], + 217: [[85, 768]], + 218: [[85, 769]], + 219: [[85, 770]], + 220: [[85, 776], , { 768: 475, 769: 471, 772: 469, 780: 473 }], + 221: [[89, 769]], + 224: [[97, 768]], + 225: [[97, 769]], + 226: [[97, 770], , { 768: 7847, 769: 7845, 771: 7851, 777: 7849 }], + 227: [[97, 771]], + 228: [[97, 776], , { 772: 479 }], + 229: [[97, 778], , { 769: 507 }], + 230: [, , { 769: 509, 772: 483 }], + 231: [[99, 807], , { 769: 7689 }], + 232: [[101, 768]], + 233: [[101, 769]], + 234: [[101, 770], , { 768: 7873, 769: 7871, 771: 7877, 777: 7875 }], + 235: [[101, 776]], + 236: [[105, 768]], + 237: [[105, 769]], + 238: [[105, 770]], + 239: [[105, 776], , { 769: 7727 }], + 241: [[110, 771]], + 242: [[111, 768]], + 243: [[111, 769]], + 244: [[111, 770], , { 768: 7891, 769: 7889, 771: 7895, 777: 7893 }], + 245: [[111, 771], , { 769: 7757, 772: 557, 776: 7759 }], + 246: [[111, 776], , { 772: 555 }], + 248: [, , { 769: 511 }], + 249: [[117, 768]], + 250: [[117, 769]], + 251: [[117, 770]], + 252: [[117, 776], , { 768: 476, 769: 472, 772: 470, 780: 474 }], + 253: [[121, 769]], + 255: [[121, 776]] + }, + 256: { + 256: [[65, 772]], + 257: [[97, 772]], + 258: [[65, 774], , { 768: 7856, 769: 7854, 771: 7860, 777: 7858 }], + 259: [[97, 774], , { 768: 7857, 769: 7855, 771: 7861, 777: 7859 }], + 260: [[65, 808]], + 261: [[97, 808]], + 262: [[67, 769]], + 263: [[99, 769]], + 264: [[67, 770]], + 265: [[99, 770]], + 266: [[67, 775]], + 267: [[99, 775]], + 268: [[67, 780]], + 269: [[99, 780]], + 270: [[68, 780]], + 271: [[100, 780]], + 274: [[69, 772], , { 768: 7700, 769: 7702 }], + 275: [[101, 772], , { 768: 7701, 769: 7703 }], + 276: [[69, 774]], + 277: [[101, 774]], + 278: [[69, 775]], + 279: [[101, 775]], + 280: [[69, 808]], + 281: [[101, 808]], + 282: [[69, 780]], + 283: [[101, 780]], + 284: [[71, 770]], + 285: [[103, 770]], + 286: [[71, 774]], + 287: [[103, 774]], + 288: [[71, 775]], + 289: [[103, 775]], + 290: [[71, 807]], + 291: [[103, 807]], + 292: [[72, 770]], + 293: [[104, 770]], + 296: [[73, 771]], + 297: [[105, 771]], + 298: [[73, 772]], + 299: [[105, 772]], + 300: [[73, 774]], + 301: [[105, 774]], + 302: [[73, 808]], + 303: [[105, 808]], + 304: [[73, 775]], + 306: [[73, 74], 256], + 307: [[105, 106], 256], + 308: [[74, 770]], + 309: [[106, 770]], + 310: [[75, 807]], + 311: [[107, 807]], + 313: [[76, 769]], + 314: [[108, 769]], + 315: [[76, 807]], + 316: [[108, 807]], + 317: [[76, 780]], + 318: [[108, 780]], + 319: [[76, 183], 256], + 320: [[108, 183], 256], + 323: [[78, 769]], + 324: [[110, 769]], + 325: [[78, 807]], + 326: [[110, 807]], + 327: [[78, 780]], + 328: [[110, 780]], + 329: [[700, 110], 256], + 332: [[79, 772], , { 768: 7760, 769: 7762 }], + 333: [[111, 772], , { 768: 7761, 769: 7763 }], + 334: [[79, 774]], + 335: [[111, 774]], + 336: [[79, 779]], + 337: [[111, 779]], + 340: [[82, 769]], + 341: [[114, 769]], + 342: [[82, 807]], + 343: [[114, 807]], + 344: [[82, 780]], + 345: [[114, 780]], + 346: [[83, 769], , { 775: 7780 }], + 347: [[115, 769], , { 775: 7781 }], + 348: [[83, 770]], + 349: [[115, 770]], + 350: [[83, 807]], + 351: [[115, 807]], + 352: [[83, 780], , { 775: 7782 }], + 353: [[115, 780], , { 775: 7783 }], + 354: [[84, 807]], + 355: [[116, 807]], + 356: [[84, 780]], + 357: [[116, 780]], + 360: [[85, 771], , { 769: 7800 }], + 361: [[117, 771], , { 769: 7801 }], + 362: [[85, 772], , { 776: 7802 }], + 363: [[117, 772], , { 776: 7803 }], + 364: [[85, 774]], + 365: [[117, 774]], + 366: [[85, 778]], + 367: [[117, 778]], + 368: [[85, 779]], + 369: [[117, 779]], + 370: [[85, 808]], + 371: [[117, 808]], + 372: [[87, 770]], + 373: [[119, 770]], + 374: [[89, 770]], + 375: [[121, 770]], + 376: [[89, 776]], + 377: [[90, 769]], + 378: [[122, 769]], + 379: [[90, 775]], + 380: [[122, 775]], + 381: [[90, 780]], + 382: [[122, 780]], + 383: [[115], 256, { 775: 7835 }], + 416: [ + [79, 795], + , + { 768: 7900, 769: 7898, 771: 7904, 777: 7902, 803: 7906 } + ], + 417: [ + [111, 795], + , + { 768: 7901, 769: 7899, 771: 7905, 777: 7903, 803: 7907 } + ], + 431: [ + [85, 795], + , + { 768: 7914, 769: 7912, 771: 7918, 777: 7916, 803: 7920 } + ], + 432: [ + [117, 795], + , + { 768: 7915, 769: 7913, 771: 7919, 777: 7917, 803: 7921 } + ], + 439: [, , { 780: 494 }], + 452: [[68, 381], 256], + 453: [[68, 382], 256], + 454: [[100, 382], 256], + 455: [[76, 74], 256], + 456: [[76, 106], 256], + 457: [[108, 106], 256], + 458: [[78, 74], 256], + 459: [[78, 106], 256], + 460: [[110, 106], 256], + 461: [[65, 780]], + 462: [[97, 780]], + 463: [[73, 780]], + 464: [[105, 780]], + 465: [[79, 780]], + 466: [[111, 780]], + 467: [[85, 780]], + 468: [[117, 780]], + 469: [[220, 772]], + 470: [[252, 772]], + 471: [[220, 769]], + 472: [[252, 769]], + 473: [[220, 780]], + 474: [[252, 780]], + 475: [[220, 768]], + 476: [[252, 768]], + 478: [[196, 772]], + 479: [[228, 772]], + 480: [[550, 772]], + 481: [[551, 772]], + 482: [[198, 772]], + 483: [[230, 772]], + 486: [[71, 780]], + 487: [[103, 780]], + 488: [[75, 780]], + 489: [[107, 780]], + 490: [[79, 808], , { 772: 492 }], + 491: [[111, 808], , { 772: 493 }], + 492: [[490, 772]], + 493: [[491, 772]], + 494: [[439, 780]], + 495: [[658, 780]], + 496: [[106, 780]], + 497: [[68, 90], 256], + 498: [[68, 122], 256], + 499: [[100, 122], 256], + 500: [[71, 769]], + 501: [[103, 769]], + 504: [[78, 768]], + 505: [[110, 768]], + 506: [[197, 769]], + 507: [[229, 769]], + 508: [[198, 769]], + 509: [[230, 769]], + 510: [[216, 769]], + 511: [[248, 769]], + 66045: [, 220] + }, + 512: { + 512: [[65, 783]], + 513: [[97, 783]], + 514: [[65, 785]], + 515: [[97, 785]], + 516: [[69, 783]], + 517: [[101, 783]], + 518: [[69, 785]], + 519: [[101, 785]], + 520: [[73, 783]], + 521: [[105, 783]], + 522: [[73, 785]], + 523: [[105, 785]], + 524: [[79, 783]], + 525: [[111, 783]], + 526: [[79, 785]], + 527: [[111, 785]], + 528: [[82, 783]], + 529: [[114, 783]], + 530: [[82, 785]], + 531: [[114, 785]], + 532: [[85, 783]], + 533: [[117, 783]], + 534: [[85, 785]], + 535: [[117, 785]], + 536: [[83, 806]], + 537: [[115, 806]], + 538: [[84, 806]], + 539: [[116, 806]], + 542: [[72, 780]], + 543: [[104, 780]], + 550: [[65, 775], , { 772: 480 }], + 551: [[97, 775], , { 772: 481 }], + 552: [[69, 807], , { 774: 7708 }], + 553: [[101, 807], , { 774: 7709 }], + 554: [[214, 772]], + 555: [[246, 772]], + 556: [[213, 772]], + 557: [[245, 772]], + 558: [[79, 775], , { 772: 560 }], + 559: [[111, 775], , { 772: 561 }], + 560: [[558, 772]], + 561: [[559, 772]], + 562: [[89, 772]], + 563: [[121, 772]], + 658: [, , { 780: 495 }], + 688: [[104], 256], + 689: [[614], 256], + 690: [[106], 256], + 691: [[114], 256], + 692: [[633], 256], + 693: [[635], 256], + 694: [[641], 256], + 695: [[119], 256], + 696: [[121], 256], + 728: [[32, 774], 256], + 729: [[32, 775], 256], + 730: [[32, 778], 256], + 731: [[32, 808], 256], + 732: [[32, 771], 256], + 733: [[32, 779], 256], + 736: [[611], 256], + 737: [[108], 256], + 738: [[115], 256], + 739: [[120], 256], + 740: [[661], 256] + }, + 768: { + 768: [, 230], + 769: [, 230], + 770: [, 230], + 771: [, 230], + 772: [, 230], + 773: [, 230], + 774: [, 230], + 775: [, 230], + 776: [, 230, { 769: 836 }], + 777: [, 230], + 778: [, 230], + 779: [, 230], + 780: [, 230], + 781: [, 230], + 782: [, 230], + 783: [, 230], + 784: [, 230], + 785: [, 230], + 786: [, 230], + 787: [, 230], + 788: [, 230], + 789: [, 232], + 790: [, 220], + 791: [, 220], + 792: [, 220], + 793: [, 220], + 794: [, 232], + 795: [, 216], + 796: [, 220], + 797: [, 220], + 798: [, 220], + 799: [, 220], + 800: [, 220], + 801: [, 202], + 802: [, 202], + 803: [, 220], + 804: [, 220], + 805: [, 220], + 806: [, 220], + 807: [, 202], + 808: [, 202], + 809: [, 220], + 810: [, 220], + 811: [, 220], + 812: [, 220], + 813: [, 220], + 814: [, 220], + 815: [, 220], + 816: [, 220], + 817: [, 220], + 818: [, 220], + 819: [, 220], + 820: [, 1], + 821: [, 1], + 822: [, 1], + 823: [, 1], + 824: [, 1], + 825: [, 220], + 826: [, 220], + 827: [, 220], + 828: [, 220], + 829: [, 230], + 830: [, 230], + 831: [, 230], + 832: [[768], 230], + 833: [[769], 230], + 834: [, 230], + 835: [[787], 230], + 836: [[776, 769], 230], + 837: [, 240], + 838: [, 230], + 839: [, 220], + 840: [, 220], + 841: [, 220], + 842: [, 230], + 843: [, 230], + 844: [, 230], + 845: [, 220], + 846: [, 220], + 848: [, 230], + 849: [, 230], + 850: [, 230], + 851: [, 220], + 852: [, 220], + 853: [, 220], + 854: [, 220], + 855: [, 230], + 856: [, 232], + 857: [, 220], + 858: [, 220], + 859: [, 230], + 860: [, 233], + 861: [, 234], + 862: [, 234], + 863: [, 233], + 864: [, 234], + 865: [, 234], + 866: [, 233], + 867: [, 230], + 868: [, 230], + 869: [, 230], + 870: [, 230], + 871: [, 230], + 872: [, 230], + 873: [, 230], + 874: [, 230], + 875: [, 230], + 876: [, 230], + 877: [, 230], + 878: [, 230], + 879: [, 230], + 884: [[697]], + 890: [[32, 837], 256], + 894: [[59]], + 900: [[32, 769], 256], + 901: [[168, 769]], + 902: [[913, 769]], + 903: [[183]], + 904: [[917, 769]], + 905: [[919, 769]], + 906: [[921, 769]], + 908: [[927, 769]], + 910: [[933, 769]], + 911: [[937, 769]], + 912: [[970, 769]], + 913: [ + , + , + { + 768: 8122, + 769: 902, + 772: 8121, + 774: 8120, + 787: 7944, + 788: 7945, + 837: 8124 + } + ], + 917: [, , { 768: 8136, 769: 904, 787: 7960, 788: 7961 }], + 919: [, , { 768: 8138, 769: 905, 787: 7976, 788: 7977, 837: 8140 }], + 921: [ + , + , + { + 768: 8154, + 769: 906, + 772: 8153, + 774: 8152, + 776: 938, + 787: 7992, + 788: 7993 + } + ], + 927: [, , { 768: 8184, 769: 908, 787: 8008, 788: 8009 }], + 929: [, , { 788: 8172 }], + 933: [ + , + , + { 768: 8170, 769: 910, 772: 8169, 774: 8168, 776: 939, 788: 8025 } + ], + 937: [, , { 768: 8186, 769: 911, 787: 8040, 788: 8041, 837: 8188 }], + 938: [[921, 776]], + 939: [[933, 776]], + 940: [[945, 769], , { 837: 8116 }], + 941: [[949, 769]], + 942: [[951, 769], , { 837: 8132 }], + 943: [[953, 769]], + 944: [[971, 769]], + 945: [ + , + , + { + 768: 8048, + 769: 940, + 772: 8113, + 774: 8112, + 787: 7936, + 788: 7937, + 834: 8118, + 837: 8115 + } + ], + 949: [, , { 768: 8050, 769: 941, 787: 7952, 788: 7953 }], + 951: [ + , + , + { 768: 8052, 769: 942, 787: 7968, 788: 7969, 834: 8134, 837: 8131 } + ], + 953: [ + , + , + { + 768: 8054, + 769: 943, + 772: 8145, + 774: 8144, + 776: 970, + 787: 7984, + 788: 7985, + 834: 8150 + } + ], + 959: [, , { 768: 8056, 769: 972, 787: 8000, 788: 8001 }], + 961: [, , { 787: 8164, 788: 8165 }], + 965: [ + , + , + { + 768: 8058, + 769: 973, + 772: 8161, + 774: 8160, + 776: 971, + 787: 8016, + 788: 8017, + 834: 8166 + } + ], + 969: [ + , + , + { 768: 8060, 769: 974, 787: 8032, 788: 8033, 834: 8182, 837: 8179 } + ], + 970: [[953, 776], , { 768: 8146, 769: 912, 834: 8151 }], + 971: [[965, 776], , { 768: 8162, 769: 944, 834: 8167 }], + 972: [[959, 769]], + 973: [[965, 769]], + 974: [[969, 769], , { 837: 8180 }], + 976: [[946], 256], + 977: [[952], 256], + 978: [[933], 256, { 769: 979, 776: 980 }], + 979: [[978, 769]], + 980: [[978, 776]], + 981: [[966], 256], + 982: [[960], 256], + 1008: [[954], 256], + 1009: [[961], 256], + 1010: [[962], 256], + 1012: [[920], 256], + 1013: [[949], 256], + 1017: [[931], 256] + }, + 1024: { + 1024: [[1045, 768]], + 1025: [[1045, 776]], + 1027: [[1043, 769]], + 1030: [, , { 776: 1031 }], + 1031: [[1030, 776]], + 1036: [[1050, 769]], + 1037: [[1048, 768]], + 1038: [[1059, 774]], + 1040: [, , { 774: 1232, 776: 1234 }], + 1043: [, , { 769: 1027 }], + 1045: [, , { 768: 1024, 774: 1238, 776: 1025 }], + 1046: [, , { 774: 1217, 776: 1244 }], + 1047: [, , { 776: 1246 }], + 1048: [, , { 768: 1037, 772: 1250, 774: 1049, 776: 1252 }], + 1049: [[1048, 774]], + 1050: [, , { 769: 1036 }], + 1054: [, , { 776: 1254 }], + 1059: [, , { 772: 1262, 774: 1038, 776: 1264, 779: 1266 }], + 1063: [, , { 776: 1268 }], + 1067: [, , { 776: 1272 }], + 1069: [, , { 776: 1260 }], + 1072: [, , { 774: 1233, 776: 1235 }], + 1075: [, , { 769: 1107 }], + 1077: [, , { 768: 1104, 774: 1239, 776: 1105 }], + 1078: [, , { 774: 1218, 776: 1245 }], + 1079: [, , { 776: 1247 }], + 1080: [, , { 768: 1117, 772: 1251, 774: 1081, 776: 1253 }], + 1081: [[1080, 774]], + 1082: [, , { 769: 1116 }], + 1086: [, , { 776: 1255 }], + 1091: [, , { 772: 1263, 774: 1118, 776: 1265, 779: 1267 }], + 1095: [, , { 776: 1269 }], + 1099: [, , { 776: 1273 }], + 1101: [, , { 776: 1261 }], + 1104: [[1077, 768]], + 1105: [[1077, 776]], + 1107: [[1075, 769]], + 1110: [, , { 776: 1111 }], + 1111: [[1110, 776]], + 1116: [[1082, 769]], + 1117: [[1080, 768]], + 1118: [[1091, 774]], + 1140: [, , { 783: 1142 }], + 1141: [, , { 783: 1143 }], + 1142: [[1140, 783]], + 1143: [[1141, 783]], + 1155: [, 230], + 1156: [, 230], + 1157: [, 230], + 1158: [, 230], + 1159: [, 230], + 1217: [[1046, 774]], + 1218: [[1078, 774]], + 1232: [[1040, 774]], + 1233: [[1072, 774]], + 1234: [[1040, 776]], + 1235: [[1072, 776]], + 1238: [[1045, 774]], + 1239: [[1077, 774]], + 1240: [, , { 776: 1242 }], + 1241: [, , { 776: 1243 }], + 1242: [[1240, 776]], + 1243: [[1241, 776]], + 1244: [[1046, 776]], + 1245: [[1078, 776]], + 1246: [[1047, 776]], + 1247: [[1079, 776]], + 1250: [[1048, 772]], + 1251: [[1080, 772]], + 1252: [[1048, 776]], + 1253: [[1080, 776]], + 1254: [[1054, 776]], + 1255: [[1086, 776]], + 1256: [, , { 776: 1258 }], + 1257: [, , { 776: 1259 }], + 1258: [[1256, 776]], + 1259: [[1257, 776]], + 1260: [[1069, 776]], + 1261: [[1101, 776]], + 1262: [[1059, 772]], + 1263: [[1091, 772]], + 1264: [[1059, 776]], + 1265: [[1091, 776]], + 1266: [[1059, 779]], + 1267: [[1091, 779]], + 1268: [[1063, 776]], + 1269: [[1095, 776]], + 1272: [[1067, 776]], + 1273: [[1099, 776]] + }, + 1280: { + 1415: [[1381, 1410], 256], + 1425: [, 220], + 1426: [, 230], + 1427: [, 230], + 1428: [, 230], + 1429: [, 230], + 1430: [, 220], + 1431: [, 230], + 1432: [, 230], + 1433: [, 230], + 1434: [, 222], + 1435: [, 220], + 1436: [, 230], + 1437: [, 230], + 1438: [, 230], + 1439: [, 230], + 1440: [, 230], + 1441: [, 230], + 1442: [, 220], + 1443: [, 220], + 1444: [, 220], + 1445: [, 220], + 1446: [, 220], + 1447: [, 220], + 1448: [, 230], + 1449: [, 230], + 1450: [, 220], + 1451: [, 230], + 1452: [, 230], + 1453: [, 222], + 1454: [, 228], + 1455: [, 230], + 1456: [, 10], + 1457: [, 11], + 1458: [, 12], + 1459: [, 13], + 1460: [, 14], + 1461: [, 15], + 1462: [, 16], + 1463: [, 17], + 1464: [, 18], + 1465: [, 19], + 1466: [, 19], + 1467: [, 20], + 1468: [, 21], + 1469: [, 22], + 1471: [, 23], + 1473: [, 24], + 1474: [, 25], + 1476: [, 230], + 1477: [, 220], + 1479: [, 18] + }, + 1536: { + 1552: [, 230], + 1553: [, 230], + 1554: [, 230], + 1555: [, 230], + 1556: [, 230], + 1557: [, 230], + 1558: [, 230], + 1559: [, 230], + 1560: [, 30], + 1561: [, 31], + 1562: [, 32], + 1570: [[1575, 1619]], + 1571: [[1575, 1620]], + 1572: [[1608, 1620]], + 1573: [[1575, 1621]], + 1574: [[1610, 1620]], + 1575: [, , { 1619: 1570, 1620: 1571, 1621: 1573 }], + 1608: [, , { 1620: 1572 }], + 1610: [, , { 1620: 1574 }], + 1611: [, 27], + 1612: [, 28], + 1613: [, 29], + 1614: [, 30], + 1615: [, 31], + 1616: [, 32], + 1617: [, 33], + 1618: [, 34], + 1619: [, 230], + 1620: [, 230], + 1621: [, 220], + 1622: [, 220], + 1623: [, 230], + 1624: [, 230], + 1625: [, 230], + 1626: [, 230], + 1627: [, 230], + 1628: [, 220], + 1629: [, 230], + 1630: [, 230], + 1631: [, 220], + 1648: [, 35], + 1653: [[1575, 1652], 256], + 1654: [[1608, 1652], 256], + 1655: [[1735, 1652], 256], + 1656: [[1610, 1652], 256], + 1728: [[1749, 1620]], + 1729: [, , { 1620: 1730 }], + 1730: [[1729, 1620]], + 1746: [, , { 1620: 1747 }], + 1747: [[1746, 1620]], + 1749: [, , { 1620: 1728 }], + 1750: [, 230], + 1751: [, 230], + 1752: [, 230], + 1753: [, 230], + 1754: [, 230], + 1755: [, 230], + 1756: [, 230], + 1759: [, 230], + 1760: [, 230], + 1761: [, 230], + 1762: [, 230], + 1763: [, 220], + 1764: [, 230], + 1767: [, 230], + 1768: [, 230], + 1770: [, 220], + 1771: [, 230], + 1772: [, 230], + 1773: [, 220] + }, + 1792: { + 1809: [, 36], + 1840: [, 230], + 1841: [, 220], + 1842: [, 230], + 1843: [, 230], + 1844: [, 220], + 1845: [, 230], + 1846: [, 230], + 1847: [, 220], + 1848: [, 220], + 1849: [, 220], + 1850: [, 230], + 1851: [, 220], + 1852: [, 220], + 1853: [, 230], + 1854: [, 220], + 1855: [, 230], + 1856: [, 230], + 1857: [, 230], + 1858: [, 220], + 1859: [, 230], + 1860: [, 220], + 1861: [, 230], + 1862: [, 220], + 1863: [, 230], + 1864: [, 220], + 1865: [, 230], + 1866: [, 230], + 2027: [, 230], + 2028: [, 230], + 2029: [, 230], + 2030: [, 230], + 2031: [, 230], + 2032: [, 230], + 2033: [, 230], + 2034: [, 220], + 2035: [, 230] + }, + 2048: { + 2070: [, 230], + 2071: [, 230], + 2072: [, 230], + 2073: [, 230], + 2075: [, 230], + 2076: [, 230], + 2077: [, 230], + 2078: [, 230], + 2079: [, 230], + 2080: [, 230], + 2081: [, 230], + 2082: [, 230], + 2083: [, 230], + 2085: [, 230], + 2086: [, 230], + 2087: [, 230], + 2089: [, 230], + 2090: [, 230], + 2091: [, 230], + 2092: [, 230], + 2093: [, 230], + 2137: [, 220], + 2138: [, 220], + 2139: [, 220], + 2276: [, 230], + 2277: [, 230], + 2278: [, 220], + 2279: [, 230], + 2280: [, 230], + 2281: [, 220], + 2282: [, 230], + 2283: [, 230], + 2284: [, 230], + 2285: [, 220], + 2286: [, 220], + 2287: [, 220], + 2288: [, 27], + 2289: [, 28], + 2290: [, 29], + 2291: [, 230], + 2292: [, 230], + 2293: [, 230], + 2294: [, 220], + 2295: [, 230], + 2296: [, 230], + 2297: [, 220], + 2298: [, 220], + 2299: [, 230], + 2300: [, 230], + 2301: [, 230], + 2302: [, 230] + }, + 2304: { + 2344: [, , { 2364: 2345 }], + 2345: [[2344, 2364]], + 2352: [, , { 2364: 2353 }], + 2353: [[2352, 2364]], + 2355: [, , { 2364: 2356 }], + 2356: [[2355, 2364]], + 2364: [, 7], + 2381: [, 9], + 2385: [, 230], + 2386: [, 220], + 2387: [, 230], + 2388: [, 230], + 2392: [[2325, 2364], 512], + 2393: [[2326, 2364], 512], + 2394: [[2327, 2364], 512], + 2395: [[2332, 2364], 512], + 2396: [[2337, 2364], 512], + 2397: [[2338, 2364], 512], + 2398: [[2347, 2364], 512], + 2399: [[2351, 2364], 512], + 2492: [, 7], + 2503: [, , { 2494: 2507, 2519: 2508 }], + 2507: [[2503, 2494]], + 2508: [[2503, 2519]], + 2509: [, 9], + 2524: [[2465, 2492], 512], + 2525: [[2466, 2492], 512], + 2527: [[2479, 2492], 512] + }, + 2560: { + 2611: [[2610, 2620], 512], + 2614: [[2616, 2620], 512], + 2620: [, 7], + 2637: [, 9], + 2649: [[2582, 2620], 512], + 2650: [[2583, 2620], 512], + 2651: [[2588, 2620], 512], + 2654: [[2603, 2620], 512], + 2748: [, 7], + 2765: [, 9], + 68109: [, 220], + 68111: [, 230], + 68152: [, 230], + 68153: [, 1], + 68154: [, 220], + 68159: [, 9] + }, + 2816: { + 2876: [, 7], + 2887: [, , { 2878: 2891, 2902: 2888, 2903: 2892 }], + 2888: [[2887, 2902]], + 2891: [[2887, 2878]], + 2892: [[2887, 2903]], + 2893: [, 9], + 2908: [[2849, 2876], 512], + 2909: [[2850, 2876], 512], + 2962: [, , { 3031: 2964 }], + 2964: [[2962, 3031]], + 3014: [, , { 3006: 3018, 3031: 3020 }], + 3015: [, , { 3006: 3019 }], + 3018: [[3014, 3006]], + 3019: [[3015, 3006]], + 3020: [[3014, 3031]], + 3021: [, 9] + }, + 3072: { + 3142: [, , { 3158: 3144 }], + 3144: [[3142, 3158]], + 3149: [, 9], + 3157: [, 84], + 3158: [, 91], + 3260: [, 7], + 3263: [, , { 3285: 3264 }], + 3264: [[3263, 3285]], + 3270: [, , { 3266: 3274, 3285: 3271, 3286: 3272 }], + 3271: [[3270, 3285]], + 3272: [[3270, 3286]], + 3274: [[3270, 3266], , { 3285: 3275 }], + 3275: [[3274, 3285]], + 3277: [, 9] + }, + 3328: { + 3398: [, , { 3390: 3402, 3415: 3404 }], + 3399: [, , { 3390: 3403 }], + 3402: [[3398, 3390]], + 3403: [[3399, 3390]], + 3404: [[3398, 3415]], + 3405: [, 9], + 3530: [, 9], + 3545: [, , { 3530: 3546, 3535: 3548, 3551: 3550 }], + 3546: [[3545, 3530]], + 3548: [[3545, 3535], , { 3530: 3549 }], + 3549: [[3548, 3530]], + 3550: [[3545, 3551]] + }, + 3584: { + 3635: [[3661, 3634], 256], + 3640: [, 103], + 3641: [, 103], + 3642: [, 9], + 3656: [, 107], + 3657: [, 107], + 3658: [, 107], + 3659: [, 107], + 3763: [[3789, 3762], 256], + 3768: [, 118], + 3769: [, 118], + 3784: [, 122], + 3785: [, 122], + 3786: [, 122], + 3787: [, 122], + 3804: [[3755, 3737], 256], + 3805: [[3755, 3745], 256] + }, + 3840: { + 3852: [[3851], 256], + 3864: [, 220], + 3865: [, 220], + 3893: [, 220], + 3895: [, 220], + 3897: [, 216], + 3907: [[3906, 4023], 512], + 3917: [[3916, 4023], 512], + 3922: [[3921, 4023], 512], + 3927: [[3926, 4023], 512], + 3932: [[3931, 4023], 512], + 3945: [[3904, 4021], 512], + 3953: [, 129], + 3954: [, 130], + 3955: [[3953, 3954], 512], + 3956: [, 132], + 3957: [[3953, 3956], 512], + 3958: [[4018, 3968], 512], + 3959: [[4018, 3969], 256], + 3960: [[4019, 3968], 512], + 3961: [[4019, 3969], 256], + 3962: [, 130], + 3963: [, 130], + 3964: [, 130], + 3965: [, 130], + 3968: [, 130], + 3969: [[3953, 3968], 512], + 3970: [, 230], + 3971: [, 230], + 3972: [, 9], + 3974: [, 230], + 3975: [, 230], + 3987: [[3986, 4023], 512], + 3997: [[3996, 4023], 512], + 4002: [[4001, 4023], 512], + 4007: [[4006, 4023], 512], + 4012: [[4011, 4023], 512], + 4025: [[3984, 4021], 512], + 4038: [, 220] + }, + 4096: { + 4133: [, , { 4142: 4134 }], + 4134: [[4133, 4142]], + 4151: [, 7], + 4153: [, 9], + 4154: [, 9], + 4237: [, 220], + 4348: [[4316], 256], + 69702: [, 9], + 69785: [, , { 69818: 69786 }], + 69786: [[69785, 69818]], + 69787: [, , { 69818: 69788 }], + 69788: [[69787, 69818]], + 69797: [, , { 69818: 69803 }], + 69803: [[69797, 69818]], + 69817: [, 9], + 69818: [, 7] + }, + 4352: { + 69888: [, 230], + 69889: [, 230], + 69890: [, 230], + 69934: [[69937, 69927]], + 69935: [[69938, 69927]], + 69937: [, , { 69927: 69934 }], + 69938: [, , { 69927: 69935 }], + 69939: [, 9], + 69940: [, 9], + 70080: [, 9] + }, + 4864: { 4957: [, 230], 4958: [, 230], 4959: [, 230] }, + 5632: { 71350: [, 9], 71351: [, 7] }, + 5888: { 5908: [, 9], 5940: [, 9], 6098: [, 9], 6109: [, 230] }, + 6144: { 6313: [, 228] }, + 6400: { 6457: [, 222], 6458: [, 230], 6459: [, 220] }, + 6656: { + 6679: [, 230], + 6680: [, 220], + 6752: [, 9], + 6773: [, 230], + 6774: [, 230], + 6775: [, 230], + 6776: [, 230], + 6777: [, 230], + 6778: [, 230], + 6779: [, 230], + 6780: [, 230], + 6783: [, 220] + }, + 6912: { + 6917: [, , { 6965: 6918 }], + 6918: [[6917, 6965]], + 6919: [, , { 6965: 6920 }], + 6920: [[6919, 6965]], + 6921: [, , { 6965: 6922 }], + 6922: [[6921, 6965]], + 6923: [, , { 6965: 6924 }], + 6924: [[6923, 6965]], + 6925: [, , { 6965: 6926 }], + 6926: [[6925, 6965]], + 6929: [, , { 6965: 6930 }], + 6930: [[6929, 6965]], + 6964: [, 7], + 6970: [, , { 6965: 6971 }], + 6971: [[6970, 6965]], + 6972: [, , { 6965: 6973 }], + 6973: [[6972, 6965]], + 6974: [, , { 6965: 6976 }], + 6975: [, , { 6965: 6977 }], + 6976: [[6974, 6965]], + 6977: [[6975, 6965]], + 6978: [, , { 6965: 6979 }], + 6979: [[6978, 6965]], + 6980: [, 9], + 7019: [, 230], + 7020: [, 220], + 7021: [, 230], + 7022: [, 230], + 7023: [, 230], + 7024: [, 230], + 7025: [, 230], + 7026: [, 230], + 7027: [, 230], + 7082: [, 9], + 7083: [, 9], + 7142: [, 7], + 7154: [, 9], + 7155: [, 9] + }, + 7168: { + 7223: [, 7], + 7376: [, 230], + 7377: [, 230], + 7378: [, 230], + 7380: [, 1], + 7381: [, 220], + 7382: [, 220], + 7383: [, 220], + 7384: [, 220], + 7385: [, 220], + 7386: [, 230], + 7387: [, 230], + 7388: [, 220], + 7389: [, 220], + 7390: [, 220], + 7391: [, 220], + 7392: [, 230], + 7394: [, 1], + 7395: [, 1], + 7396: [, 1], + 7397: [, 1], + 7398: [, 1], + 7399: [, 1], + 7400: [, 1], + 7405: [, 220], + 7412: [, 230] + }, + 7424: { + 7468: [[65], 256], + 7469: [[198], 256], + 7470: [[66], 256], + 7472: [[68], 256], + 7473: [[69], 256], + 7474: [[398], 256], + 7475: [[71], 256], + 7476: [[72], 256], + 7477: [[73], 256], + 7478: [[74], 256], + 7479: [[75], 256], + 7480: [[76], 256], + 7481: [[77], 256], + 7482: [[78], 256], + 7484: [[79], 256], + 7485: [[546], 256], + 7486: [[80], 256], + 7487: [[82], 256], + 7488: [[84], 256], + 7489: [[85], 256], + 7490: [[87], 256], + 7491: [[97], 256], + 7492: [[592], 256], + 7493: [[593], 256], + 7494: [[7426], 256], + 7495: [[98], 256], + 7496: [[100], 256], + 7497: [[101], 256], + 7498: [[601], 256], + 7499: [[603], 256], + 7500: [[604], 256], + 7501: [[103], 256], + 7503: [[107], 256], + 7504: [[109], 256], + 7505: [[331], 256], + 7506: [[111], 256], + 7507: [[596], 256], + 7508: [[7446], 256], + 7509: [[7447], 256], + 7510: [[112], 256], + 7511: [[116], 256], + 7512: [[117], 256], + 7513: [[7453], 256], + 7514: [[623], 256], + 7515: [[118], 256], + 7516: [[7461], 256], + 7517: [[946], 256], + 7518: [[947], 256], + 7519: [[948], 256], + 7520: [[966], 256], + 7521: [[967], 256], + 7522: [[105], 256], + 7523: [[114], 256], + 7524: [[117], 256], + 7525: [[118], 256], + 7526: [[946], 256], + 7527: [[947], 256], + 7528: [[961], 256], + 7529: [[966], 256], + 7530: [[967], 256], + 7544: [[1085], 256], + 7579: [[594], 256], + 7580: [[99], 256], + 7581: [[597], 256], + 7582: [[240], 256], + 7583: [[604], 256], + 7584: [[102], 256], + 7585: [[607], 256], + 7586: [[609], 256], + 7587: [[613], 256], + 7588: [[616], 256], + 7589: [[617], 256], + 7590: [[618], 256], + 7591: [[7547], 256], + 7592: [[669], 256], + 7593: [[621], 256], + 7594: [[7557], 256], + 7595: [[671], 256], + 7596: [[625], 256], + 7597: [[624], 256], + 7598: [[626], 256], + 7599: [[627], 256], + 7600: [[628], 256], + 7601: [[629], 256], + 7602: [[632], 256], + 7603: [[642], 256], + 7604: [[643], 256], + 7605: [[427], 256], + 7606: [[649], 256], + 7607: [[650], 256], + 7608: [[7452], 256], + 7609: [[651], 256], + 7610: [[652], 256], + 7611: [[122], 256], + 7612: [[656], 256], + 7613: [[657], 256], + 7614: [[658], 256], + 7615: [[952], 256], + 7616: [, 230], + 7617: [, 230], + 7618: [, 220], + 7619: [, 230], + 7620: [, 230], + 7621: [, 230], + 7622: [, 230], + 7623: [, 230], + 7624: [, 230], + 7625: [, 230], + 7626: [, 220], + 7627: [, 230], + 7628: [, 230], + 7629: [, 234], + 7630: [, 214], + 7631: [, 220], + 7632: [, 202], + 7633: [, 230], + 7634: [, 230], + 7635: [, 230], + 7636: [, 230], + 7637: [, 230], + 7638: [, 230], + 7639: [, 230], + 7640: [, 230], + 7641: [, 230], + 7642: [, 230], + 7643: [, 230], + 7644: [, 230], + 7645: [, 230], + 7646: [, 230], + 7647: [, 230], + 7648: [, 230], + 7649: [, 230], + 7650: [, 230], + 7651: [, 230], + 7652: [, 230], + 7653: [, 230], + 7654: [, 230], + 7676: [, 233], + 7677: [, 220], + 7678: [, 230], + 7679: [, 220] + }, + 7680: { + 7680: [[65, 805]], + 7681: [[97, 805]], + 7682: [[66, 775]], + 7683: [[98, 775]], + 7684: [[66, 803]], + 7685: [[98, 803]], + 7686: [[66, 817]], + 7687: [[98, 817]], + 7688: [[199, 769]], + 7689: [[231, 769]], + 7690: [[68, 775]], + 7691: [[100, 775]], + 7692: [[68, 803]], + 7693: [[100, 803]], + 7694: [[68, 817]], + 7695: [[100, 817]], + 7696: [[68, 807]], + 7697: [[100, 807]], + 7698: [[68, 813]], + 7699: [[100, 813]], + 7700: [[274, 768]], + 7701: [[275, 768]], + 7702: [[274, 769]], + 7703: [[275, 769]], + 7704: [[69, 813]], + 7705: [[101, 813]], + 7706: [[69, 816]], + 7707: [[101, 816]], + 7708: [[552, 774]], + 7709: [[553, 774]], + 7710: [[70, 775]], + 7711: [[102, 775]], + 7712: [[71, 772]], + 7713: [[103, 772]], + 7714: [[72, 775]], + 7715: [[104, 775]], + 7716: [[72, 803]], + 7717: [[104, 803]], + 7718: [[72, 776]], + 7719: [[104, 776]], + 7720: [[72, 807]], + 7721: [[104, 807]], + 7722: [[72, 814]], + 7723: [[104, 814]], + 7724: [[73, 816]], + 7725: [[105, 816]], + 7726: [[207, 769]], + 7727: [[239, 769]], + 7728: [[75, 769]], + 7729: [[107, 769]], + 7730: [[75, 803]], + 7731: [[107, 803]], + 7732: [[75, 817]], + 7733: [[107, 817]], + 7734: [[76, 803], , { 772: 7736 }], + 7735: [[108, 803], , { 772: 7737 }], + 7736: [[7734, 772]], + 7737: [[7735, 772]], + 7738: [[76, 817]], + 7739: [[108, 817]], + 7740: [[76, 813]], + 7741: [[108, 813]], + 7742: [[77, 769]], + 7743: [[109, 769]], + 7744: [[77, 775]], + 7745: [[109, 775]], + 7746: [[77, 803]], + 7747: [[109, 803]], + 7748: [[78, 775]], + 7749: [[110, 775]], + 7750: [[78, 803]], + 7751: [[110, 803]], + 7752: [[78, 817]], + 7753: [[110, 817]], + 7754: [[78, 813]], + 7755: [[110, 813]], + 7756: [[213, 769]], + 7757: [[245, 769]], + 7758: [[213, 776]], + 7759: [[245, 776]], + 7760: [[332, 768]], + 7761: [[333, 768]], + 7762: [[332, 769]], + 7763: [[333, 769]], + 7764: [[80, 769]], + 7765: [[112, 769]], + 7766: [[80, 775]], + 7767: [[112, 775]], + 7768: [[82, 775]], + 7769: [[114, 775]], + 7770: [[82, 803], , { 772: 7772 }], + 7771: [[114, 803], , { 772: 7773 }], + 7772: [[7770, 772]], + 7773: [[7771, 772]], + 7774: [[82, 817]], + 7775: [[114, 817]], + 7776: [[83, 775]], + 7777: [[115, 775]], + 7778: [[83, 803], , { 775: 7784 }], + 7779: [[115, 803], , { 775: 7785 }], + 7780: [[346, 775]], + 7781: [[347, 775]], + 7782: [[352, 775]], + 7783: [[353, 775]], + 7784: [[7778, 775]], + 7785: [[7779, 775]], + 7786: [[84, 775]], + 7787: [[116, 775]], + 7788: [[84, 803]], + 7789: [[116, 803]], + 7790: [[84, 817]], + 7791: [[116, 817]], + 7792: [[84, 813]], + 7793: [[116, 813]], + 7794: [[85, 804]], + 7795: [[117, 804]], + 7796: [[85, 816]], + 7797: [[117, 816]], + 7798: [[85, 813]], + 7799: [[117, 813]], + 7800: [[360, 769]], + 7801: [[361, 769]], + 7802: [[362, 776]], + 7803: [[363, 776]], + 7804: [[86, 771]], + 7805: [[118, 771]], + 7806: [[86, 803]], + 7807: [[118, 803]], + 7808: [[87, 768]], + 7809: [[119, 768]], + 7810: [[87, 769]], + 7811: [[119, 769]], + 7812: [[87, 776]], + 7813: [[119, 776]], + 7814: [[87, 775]], + 7815: [[119, 775]], + 7816: [[87, 803]], + 7817: [[119, 803]], + 7818: [[88, 775]], + 7819: [[120, 775]], + 7820: [[88, 776]], + 7821: [[120, 776]], + 7822: [[89, 775]], + 7823: [[121, 775]], + 7824: [[90, 770]], + 7825: [[122, 770]], + 7826: [[90, 803]], + 7827: [[122, 803]], + 7828: [[90, 817]], + 7829: [[122, 817]], + 7830: [[104, 817]], + 7831: [[116, 776]], + 7832: [[119, 778]], + 7833: [[121, 778]], + 7834: [[97, 702], 256], + 7835: [[383, 775]], + 7840: [[65, 803], , { 770: 7852, 774: 7862 }], + 7841: [[97, 803], , { 770: 7853, 774: 7863 }], + 7842: [[65, 777]], + 7843: [[97, 777]], + 7844: [[194, 769]], + 7845: [[226, 769]], + 7846: [[194, 768]], + 7847: [[226, 768]], + 7848: [[194, 777]], + 7849: [[226, 777]], + 7850: [[194, 771]], + 7851: [[226, 771]], + 7852: [[7840, 770]], + 7853: [[7841, 770]], + 7854: [[258, 769]], + 7855: [[259, 769]], + 7856: [[258, 768]], + 7857: [[259, 768]], + 7858: [[258, 777]], + 7859: [[259, 777]], + 7860: [[258, 771]], + 7861: [[259, 771]], + 7862: [[7840, 774]], + 7863: [[7841, 774]], + 7864: [[69, 803], , { 770: 7878 }], + 7865: [[101, 803], , { 770: 7879 }], + 7866: [[69, 777]], + 7867: [[101, 777]], + 7868: [[69, 771]], + 7869: [[101, 771]], + 7870: [[202, 769]], + 7871: [[234, 769]], + 7872: [[202, 768]], + 7873: [[234, 768]], + 7874: [[202, 777]], + 7875: [[234, 777]], + 7876: [[202, 771]], + 7877: [[234, 771]], + 7878: [[7864, 770]], + 7879: [[7865, 770]], + 7880: [[73, 777]], + 7881: [[105, 777]], + 7882: [[73, 803]], + 7883: [[105, 803]], + 7884: [[79, 803], , { 770: 7896 }], + 7885: [[111, 803], , { 770: 7897 }], + 7886: [[79, 777]], + 7887: [[111, 777]], + 7888: [[212, 769]], + 7889: [[244, 769]], + 7890: [[212, 768]], + 7891: [[244, 768]], + 7892: [[212, 777]], + 7893: [[244, 777]], + 7894: [[212, 771]], + 7895: [[244, 771]], + 7896: [[7884, 770]], + 7897: [[7885, 770]], + 7898: [[416, 769]], + 7899: [[417, 769]], + 7900: [[416, 768]], + 7901: [[417, 768]], + 7902: [[416, 777]], + 7903: [[417, 777]], + 7904: [[416, 771]], + 7905: [[417, 771]], + 7906: [[416, 803]], + 7907: [[417, 803]], + 7908: [[85, 803]], + 7909: [[117, 803]], + 7910: [[85, 777]], + 7911: [[117, 777]], + 7912: [[431, 769]], + 7913: [[432, 769]], + 7914: [[431, 768]], + 7915: [[432, 768]], + 7916: [[431, 777]], + 7917: [[432, 777]], + 7918: [[431, 771]], + 7919: [[432, 771]], + 7920: [[431, 803]], + 7921: [[432, 803]], + 7922: [[89, 768]], + 7923: [[121, 768]], + 7924: [[89, 803]], + 7925: [[121, 803]], + 7926: [[89, 777]], + 7927: [[121, 777]], + 7928: [[89, 771]], + 7929: [[121, 771]] + }, + 7936: { + 7936: [[945, 787], , { 768: 7938, 769: 7940, 834: 7942, 837: 8064 }], + 7937: [[945, 788], , { 768: 7939, 769: 7941, 834: 7943, 837: 8065 }], + 7938: [[7936, 768], , { 837: 8066 }], + 7939: [[7937, 768], , { 837: 8067 }], + 7940: [[7936, 769], , { 837: 8068 }], + 7941: [[7937, 769], , { 837: 8069 }], + 7942: [[7936, 834], , { 837: 8070 }], + 7943: [[7937, 834], , { 837: 8071 }], + 7944: [[913, 787], , { 768: 7946, 769: 7948, 834: 7950, 837: 8072 }], + 7945: [[913, 788], , { 768: 7947, 769: 7949, 834: 7951, 837: 8073 }], + 7946: [[7944, 768], , { 837: 8074 }], + 7947: [[7945, 768], , { 837: 8075 }], + 7948: [[7944, 769], , { 837: 8076 }], + 7949: [[7945, 769], , { 837: 8077 }], + 7950: [[7944, 834], , { 837: 8078 }], + 7951: [[7945, 834], , { 837: 8079 }], + 7952: [[949, 787], , { 768: 7954, 769: 7956 }], + 7953: [[949, 788], , { 768: 7955, 769: 7957 }], + 7954: [[7952, 768]], + 7955: [[7953, 768]], + 7956: [[7952, 769]], + 7957: [[7953, 769]], + 7960: [[917, 787], , { 768: 7962, 769: 7964 }], + 7961: [[917, 788], , { 768: 7963, 769: 7965 }], + 7962: [[7960, 768]], + 7963: [[7961, 768]], + 7964: [[7960, 769]], + 7965: [[7961, 769]], + 7968: [[951, 787], , { 768: 7970, 769: 7972, 834: 7974, 837: 8080 }], + 7969: [[951, 788], , { 768: 7971, 769: 7973, 834: 7975, 837: 8081 }], + 7970: [[7968, 768], , { 837: 8082 }], + 7971: [[7969, 768], , { 837: 8083 }], + 7972: [[7968, 769], , { 837: 8084 }], + 7973: [[7969, 769], , { 837: 8085 }], + 7974: [[7968, 834], , { 837: 8086 }], + 7975: [[7969, 834], , { 837: 8087 }], + 7976: [[919, 787], , { 768: 7978, 769: 7980, 834: 7982, 837: 8088 }], + 7977: [[919, 788], , { 768: 7979, 769: 7981, 834: 7983, 837: 8089 }], + 7978: [[7976, 768], , { 837: 8090 }], + 7979: [[7977, 768], , { 837: 8091 }], + 7980: [[7976, 769], , { 837: 8092 }], + 7981: [[7977, 769], , { 837: 8093 }], + 7982: [[7976, 834], , { 837: 8094 }], + 7983: [[7977, 834], , { 837: 8095 }], + 7984: [[953, 787], , { 768: 7986, 769: 7988, 834: 7990 }], + 7985: [[953, 788], , { 768: 7987, 769: 7989, 834: 7991 }], + 7986: [[7984, 768]], + 7987: [[7985, 768]], + 7988: [[7984, 769]], + 7989: [[7985, 769]], + 7990: [[7984, 834]], + 7991: [[7985, 834]], + 7992: [[921, 787], , { 768: 7994, 769: 7996, 834: 7998 }], + 7993: [[921, 788], , { 768: 7995, 769: 7997, 834: 7999 }], + 7994: [[7992, 768]], + 7995: [[7993, 768]], + 7996: [[7992, 769]], + 7997: [[7993, 769]], + 7998: [[7992, 834]], + 7999: [[7993, 834]], + 8000: [[959, 787], , { 768: 8002, 769: 8004 }], + 8001: [[959, 788], , { 768: 8003, 769: 8005 }], + 8002: [[8000, 768]], + 8003: [[8001, 768]], + 8004: [[8000, 769]], + 8005: [[8001, 769]], + 8008: [[927, 787], , { 768: 8010, 769: 8012 }], + 8009: [[927, 788], , { 768: 8011, 769: 8013 }], + 8010: [[8008, 768]], + 8011: [[8009, 768]], + 8012: [[8008, 769]], + 8013: [[8009, 769]], + 8016: [[965, 787], , { 768: 8018, 769: 8020, 834: 8022 }], + 8017: [[965, 788], , { 768: 8019, 769: 8021, 834: 8023 }], + 8018: [[8016, 768]], + 8019: [[8017, 768]], + 8020: [[8016, 769]], + 8021: [[8017, 769]], + 8022: [[8016, 834]], + 8023: [[8017, 834]], + 8025: [[933, 788], , { 768: 8027, 769: 8029, 834: 8031 }], + 8027: [[8025, 768]], + 8029: [[8025, 769]], + 8031: [[8025, 834]], + 8032: [[969, 787], , { 768: 8034, 769: 8036, 834: 8038, 837: 8096 }], + 8033: [[969, 788], , { 768: 8035, 769: 8037, 834: 8039, 837: 8097 }], + 8034: [[8032, 768], , { 837: 8098 }], + 8035: [[8033, 768], , { 837: 8099 }], + 8036: [[8032, 769], , { 837: 8100 }], + 8037: [[8033, 769], , { 837: 8101 }], + 8038: [[8032, 834], , { 837: 8102 }], + 8039: [[8033, 834], , { 837: 8103 }], + 8040: [[937, 787], , { 768: 8042, 769: 8044, 834: 8046, 837: 8104 }], + 8041: [[937, 788], , { 768: 8043, 769: 8045, 834: 8047, 837: 8105 }], + 8042: [[8040, 768], , { 837: 8106 }], + 8043: [[8041, 768], , { 837: 8107 }], + 8044: [[8040, 769], , { 837: 8108 }], + 8045: [[8041, 769], , { 837: 8109 }], + 8046: [[8040, 834], , { 837: 8110 }], + 8047: [[8041, 834], , { 837: 8111 }], + 8048: [[945, 768], , { 837: 8114 }], + 8049: [[940]], + 8050: [[949, 768]], + 8051: [[941]], + 8052: [[951, 768], , { 837: 8130 }], + 8053: [[942]], + 8054: [[953, 768]], + 8055: [[943]], + 8056: [[959, 768]], + 8057: [[972]], + 8058: [[965, 768]], + 8059: [[973]], + 8060: [[969, 768], , { 837: 8178 }], + 8061: [[974]], + 8064: [[7936, 837]], + 8065: [[7937, 837]], + 8066: [[7938, 837]], + 8067: [[7939, 837]], + 8068: [[7940, 837]], + 8069: [[7941, 837]], + 8070: [[7942, 837]], + 8071: [[7943, 837]], + 8072: [[7944, 837]], + 8073: [[7945, 837]], + 8074: [[7946, 837]], + 8075: [[7947, 837]], + 8076: [[7948, 837]], + 8077: [[7949, 837]], + 8078: [[7950, 837]], + 8079: [[7951, 837]], + 8080: [[7968, 837]], + 8081: [[7969, 837]], + 8082: [[7970, 837]], + 8083: [[7971, 837]], + 8084: [[7972, 837]], + 8085: [[7973, 837]], + 8086: [[7974, 837]], + 8087: [[7975, 837]], + 8088: [[7976, 837]], + 8089: [[7977, 837]], + 8090: [[7978, 837]], + 8091: [[7979, 837]], + 8092: [[7980, 837]], + 8093: [[7981, 837]], + 8094: [[7982, 837]], + 8095: [[7983, 837]], + 8096: [[8032, 837]], + 8097: [[8033, 837]], + 8098: [[8034, 837]], + 8099: [[8035, 837]], + 8100: [[8036, 837]], + 8101: [[8037, 837]], + 8102: [[8038, 837]], + 8103: [[8039, 837]], + 8104: [[8040, 837]], + 8105: [[8041, 837]], + 8106: [[8042, 837]], + 8107: [[8043, 837]], + 8108: [[8044, 837]], + 8109: [[8045, 837]], + 8110: [[8046, 837]], + 8111: [[8047, 837]], + 8112: [[945, 774]], + 8113: [[945, 772]], + 8114: [[8048, 837]], + 8115: [[945, 837]], + 8116: [[940, 837]], + 8118: [[945, 834], , { 837: 8119 }], + 8119: [[8118, 837]], + 8120: [[913, 774]], + 8121: [[913, 772]], + 8122: [[913, 768]], + 8123: [[902]], + 8124: [[913, 837]], + 8125: [[32, 787], 256], + 8126: [[953]], + 8127: [[32, 787], 256, { 768: 8141, 769: 8142, 834: 8143 }], + 8128: [[32, 834], 256], + 8129: [[168, 834]], + 8130: [[8052, 837]], + 8131: [[951, 837]], + 8132: [[942, 837]], + 8134: [[951, 834], , { 837: 8135 }], + 8135: [[8134, 837]], + 8136: [[917, 768]], + 8137: [[904]], + 8138: [[919, 768]], + 8139: [[905]], + 8140: [[919, 837]], + 8141: [[8127, 768]], + 8142: [[8127, 769]], + 8143: [[8127, 834]], + 8144: [[953, 774]], + 8145: [[953, 772]], + 8146: [[970, 768]], + 8147: [[912]], + 8150: [[953, 834]], + 8151: [[970, 834]], + 8152: [[921, 774]], + 8153: [[921, 772]], + 8154: [[921, 768]], + 8155: [[906]], + 8157: [[8190, 768]], + 8158: [[8190, 769]], + 8159: [[8190, 834]], + 8160: [[965, 774]], + 8161: [[965, 772]], + 8162: [[971, 768]], + 8163: [[944]], + 8164: [[961, 787]], + 8165: [[961, 788]], + 8166: [[965, 834]], + 8167: [[971, 834]], + 8168: [[933, 774]], + 8169: [[933, 772]], + 8170: [[933, 768]], + 8171: [[910]], + 8172: [[929, 788]], + 8173: [[168, 768]], + 8174: [[901]], + 8175: [[96]], + 8178: [[8060, 837]], + 8179: [[969, 837]], + 8180: [[974, 837]], + 8182: [[969, 834], , { 837: 8183 }], + 8183: [[8182, 837]], + 8184: [[927, 768]], + 8185: [[908]], + 8186: [[937, 768]], + 8187: [[911]], + 8188: [[937, 837]], + 8189: [[180]], + 8190: [[32, 788], 256, { 768: 8157, 769: 8158, 834: 8159 }] + }, + 8192: { + 8192: [[8194]], + 8193: [[8195]], + 8194: [[32], 256], + 8195: [[32], 256], + 8196: [[32], 256], + 8197: [[32], 256], + 8198: [[32], 256], + 8199: [[32], 256], + 8200: [[32], 256], + 8201: [[32], 256], + 8202: [[32], 256], + 8209: [[8208], 256], + 8215: [[32, 819], 256], + 8228: [[46], 256], + 8229: [[46, 46], 256], + 8230: [[46, 46, 46], 256], + 8239: [[32], 256], + 8243: [[8242, 8242], 256], + 8244: [[8242, 8242, 8242], 256], + 8246: [[8245, 8245], 256], + 8247: [[8245, 8245, 8245], 256], + 8252: [[33, 33], 256], + 8254: [[32, 773], 256], + 8263: [[63, 63], 256], + 8264: [[63, 33], 256], + 8265: [[33, 63], 256], + 8279: [[8242, 8242, 8242, 8242], 256], + 8287: [[32], 256], + 8304: [[48], 256], + 8305: [[105], 256], + 8308: [[52], 256], + 8309: [[53], 256], + 8310: [[54], 256], + 8311: [[55], 256], + 8312: [[56], 256], + 8313: [[57], 256], + 8314: [[43], 256], + 8315: [[8722], 256], + 8316: [[61], 256], + 8317: [[40], 256], + 8318: [[41], 256], + 8319: [[110], 256], + 8320: [[48], 256], + 8321: [[49], 256], + 8322: [[50], 256], + 8323: [[51], 256], + 8324: [[52], 256], + 8325: [[53], 256], + 8326: [[54], 256], + 8327: [[55], 256], + 8328: [[56], 256], + 8329: [[57], 256], + 8330: [[43], 256], + 8331: [[8722], 256], + 8332: [[61], 256], + 8333: [[40], 256], + 8334: [[41], 256], + 8336: [[97], 256], + 8337: [[101], 256], + 8338: [[111], 256], + 8339: [[120], 256], + 8340: [[601], 256], + 8341: [[104], 256], + 8342: [[107], 256], + 8343: [[108], 256], + 8344: [[109], 256], + 8345: [[110], 256], + 8346: [[112], 256], + 8347: [[115], 256], + 8348: [[116], 256], + 8360: [[82, 115], 256], + 8400: [, 230], + 8401: [, 230], + 8402: [, 1], + 8403: [, 1], + 8404: [, 230], + 8405: [, 230], + 8406: [, 230], + 8407: [, 230], + 8408: [, 1], + 8409: [, 1], + 8410: [, 1], + 8411: [, 230], + 8412: [, 230], + 8417: [, 230], + 8421: [, 1], + 8422: [, 1], + 8423: [, 230], + 8424: [, 220], + 8425: [, 230], + 8426: [, 1], + 8427: [, 1], + 8428: [, 220], + 8429: [, 220], + 8430: [, 220], + 8431: [, 220], + 8432: [, 230] + }, + 8448: { + 8448: [[97, 47, 99], 256], + 8449: [[97, 47, 115], 256], + 8450: [[67], 256], + 8451: [[176, 67], 256], + 8453: [[99, 47, 111], 256], + 8454: [[99, 47, 117], 256], + 8455: [[400], 256], + 8457: [[176, 70], 256], + 8458: [[103], 256], + 8459: [[72], 256], + 8460: [[72], 256], + 8461: [[72], 256], + 8462: [[104], 256], + 8463: [[295], 256], + 8464: [[73], 256], + 8465: [[73], 256], + 8466: [[76], 256], + 8467: [[108], 256], + 8469: [[78], 256], + 8470: [[78, 111], 256], + 8473: [[80], 256], + 8474: [[81], 256], + 8475: [[82], 256], + 8476: [[82], 256], + 8477: [[82], 256], + 8480: [[83, 77], 256], + 8481: [[84, 69, 76], 256], + 8482: [[84, 77], 256], + 8484: [[90], 256], + 8486: [[937]], + 8488: [[90], 256], + 8490: [[75]], + 8491: [[197]], + 8492: [[66], 256], + 8493: [[67], 256], + 8495: [[101], 256], + 8496: [[69], 256], + 8497: [[70], 256], + 8499: [[77], 256], + 8500: [[111], 256], + 8501: [[1488], 256], + 8502: [[1489], 256], + 8503: [[1490], 256], + 8504: [[1491], 256], + 8505: [[105], 256], + 8507: [[70, 65, 88], 256], + 8508: [[960], 256], + 8509: [[947], 256], + 8510: [[915], 256], + 8511: [[928], 256], + 8512: [[8721], 256], + 8517: [[68], 256], + 8518: [[100], 256], + 8519: [[101], 256], + 8520: [[105], 256], + 8521: [[106], 256], + 8528: [[49, 8260, 55], 256], + 8529: [[49, 8260, 57], 256], + 8530: [[49, 8260, 49, 48], 256], + 8531: [[49, 8260, 51], 256], + 8532: [[50, 8260, 51], 256], + 8533: [[49, 8260, 53], 256], + 8534: [[50, 8260, 53], 256], + 8535: [[51, 8260, 53], 256], + 8536: [[52, 8260, 53], 256], + 8537: [[49, 8260, 54], 256], + 8538: [[53, 8260, 54], 256], + 8539: [[49, 8260, 56], 256], + 8540: [[51, 8260, 56], 256], + 8541: [[53, 8260, 56], 256], + 8542: [[55, 8260, 56], 256], + 8543: [[49, 8260], 256], + 8544: [[73], 256], + 8545: [[73, 73], 256], + 8546: [[73, 73, 73], 256], + 8547: [[73, 86], 256], + 8548: [[86], 256], + 8549: [[86, 73], 256], + 8550: [[86, 73, 73], 256], + 8551: [[86, 73, 73, 73], 256], + 8552: [[73, 88], 256], + 8553: [[88], 256], + 8554: [[88, 73], 256], + 8555: [[88, 73, 73], 256], + 8556: [[76], 256], + 8557: [[67], 256], + 8558: [[68], 256], + 8559: [[77], 256], + 8560: [[105], 256], + 8561: [[105, 105], 256], + 8562: [[105, 105, 105], 256], + 8563: [[105, 118], 256], + 8564: [[118], 256], + 8565: [[118, 105], 256], + 8566: [[118, 105, 105], 256], + 8567: [[118, 105, 105, 105], 256], + 8568: [[105, 120], 256], + 8569: [[120], 256], + 8570: [[120, 105], 256], + 8571: [[120, 105, 105], 256], + 8572: [[108], 256], + 8573: [[99], 256], + 8574: [[100], 256], + 8575: [[109], 256], + 8585: [[48, 8260, 51], 256], + 8592: [, , { 824: 8602 }], + 8594: [, , { 824: 8603 }], + 8596: [, , { 824: 8622 }], + 8602: [[8592, 824]], + 8603: [[8594, 824]], + 8622: [[8596, 824]], + 8653: [[8656, 824]], + 8654: [[8660, 824]], + 8655: [[8658, 824]], + 8656: [, , { 824: 8653 }], + 8658: [, , { 824: 8655 }], + 8660: [, , { 824: 8654 }] + }, + 8704: { + 8707: [, , { 824: 8708 }], + 8708: [[8707, 824]], + 8712: [, , { 824: 8713 }], + 8713: [[8712, 824]], + 8715: [, , { 824: 8716 }], + 8716: [[8715, 824]], + 8739: [, , { 824: 8740 }], + 8740: [[8739, 824]], + 8741: [, , { 824: 8742 }], + 8742: [[8741, 824]], + 8748: [[8747, 8747], 256], + 8749: [[8747, 8747, 8747], 256], + 8751: [[8750, 8750], 256], + 8752: [[8750, 8750, 8750], 256], + 8764: [, , { 824: 8769 }], + 8769: [[8764, 824]], + 8771: [, , { 824: 8772 }], + 8772: [[8771, 824]], + 8773: [, , { 824: 8775 }], + 8775: [[8773, 824]], + 8776: [, , { 824: 8777 }], + 8777: [[8776, 824]], + 8781: [, , { 824: 8813 }], + 8800: [[61, 824]], + 8801: [, , { 824: 8802 }], + 8802: [[8801, 824]], + 8804: [, , { 824: 8816 }], + 8805: [, , { 824: 8817 }], + 8813: [[8781, 824]], + 8814: [[60, 824]], + 8815: [[62, 824]], + 8816: [[8804, 824]], + 8817: [[8805, 824]], + 8818: [, , { 824: 8820 }], + 8819: [, , { 824: 8821 }], + 8820: [[8818, 824]], + 8821: [[8819, 824]], + 8822: [, , { 824: 8824 }], + 8823: [, , { 824: 8825 }], + 8824: [[8822, 824]], + 8825: [[8823, 824]], + 8826: [, , { 824: 8832 }], + 8827: [, , { 824: 8833 }], + 8828: [, , { 824: 8928 }], + 8829: [, , { 824: 8929 }], + 8832: [[8826, 824]], + 8833: [[8827, 824]], + 8834: [, , { 824: 8836 }], + 8835: [, , { 824: 8837 }], + 8836: [[8834, 824]], + 8837: [[8835, 824]], + 8838: [, , { 824: 8840 }], + 8839: [, , { 824: 8841 }], + 8840: [[8838, 824]], + 8841: [[8839, 824]], + 8849: [, , { 824: 8930 }], + 8850: [, , { 824: 8931 }], + 8866: [, , { 824: 8876 }], + 8872: [, , { 824: 8877 }], + 8873: [, , { 824: 8878 }], + 8875: [, , { 824: 8879 }], + 8876: [[8866, 824]], + 8877: [[8872, 824]], + 8878: [[8873, 824]], + 8879: [[8875, 824]], + 8882: [, , { 824: 8938 }], + 8883: [, , { 824: 8939 }], + 8884: [, , { 824: 8940 }], + 8885: [, , { 824: 8941 }], + 8928: [[8828, 824]], + 8929: [[8829, 824]], + 8930: [[8849, 824]], + 8931: [[8850, 824]], + 8938: [[8882, 824]], + 8939: [[8883, 824]], + 8940: [[8884, 824]], + 8941: [[8885, 824]] + }, + 8960: { 9001: [[12296]], 9002: [[12297]] }, + 9216: { + 9312: [[49], 256], + 9313: [[50], 256], + 9314: [[51], 256], + 9315: [[52], 256], + 9316: [[53], 256], + 9317: [[54], 256], + 9318: [[55], 256], + 9319: [[56], 256], + 9320: [[57], 256], + 9321: [[49, 48], 256], + 9322: [[49, 49], 256], + 9323: [[49, 50], 256], + 9324: [[49, 51], 256], + 9325: [[49, 52], 256], + 9326: [[49, 53], 256], + 9327: [[49, 54], 256], + 9328: [[49, 55], 256], + 9329: [[49, 56], 256], + 9330: [[49, 57], 256], + 9331: [[50, 48], 256], + 9332: [[40, 49, 41], 256], + 9333: [[40, 50, 41], 256], + 9334: [[40, 51, 41], 256], + 9335: [[40, 52, 41], 256], + 9336: [[40, 53, 41], 256], + 9337: [[40, 54, 41], 256], + 9338: [[40, 55, 41], 256], + 9339: [[40, 56, 41], 256], + 9340: [[40, 57, 41], 256], + 9341: [[40, 49, 48, 41], 256], + 9342: [[40, 49, 49, 41], 256], + 9343: [[40, 49, 50, 41], 256], + 9344: [[40, 49, 51, 41], 256], + 9345: [[40, 49, 52, 41], 256], + 9346: [[40, 49, 53, 41], 256], + 9347: [[40, 49, 54, 41], 256], + 9348: [[40, 49, 55, 41], 256], + 9349: [[40, 49, 56, 41], 256], + 9350: [[40, 49, 57, 41], 256], + 9351: [[40, 50, 48, 41], 256], + 9352: [[49, 46], 256], + 9353: [[50, 46], 256], + 9354: [[51, 46], 256], + 9355: [[52, 46], 256], + 9356: [[53, 46], 256], + 9357: [[54, 46], 256], + 9358: [[55, 46], 256], + 9359: [[56, 46], 256], + 9360: [[57, 46], 256], + 9361: [[49, 48, 46], 256], + 9362: [[49, 49, 46], 256], + 9363: [[49, 50, 46], 256], + 9364: [[49, 51, 46], 256], + 9365: [[49, 52, 46], 256], + 9366: [[49, 53, 46], 256], + 9367: [[49, 54, 46], 256], + 9368: [[49, 55, 46], 256], + 9369: [[49, 56, 46], 256], + 9370: [[49, 57, 46], 256], + 9371: [[50, 48, 46], 256], + 9372: [[40, 97, 41], 256], + 9373: [[40, 98, 41], 256], + 9374: [[40, 99, 41], 256], + 9375: [[40, 100, 41], 256], + 9376: [[40, 101, 41], 256], + 9377: [[40, 102, 41], 256], + 9378: [[40, 103, 41], 256], + 9379: [[40, 104, 41], 256], + 9380: [[40, 105, 41], 256], + 9381: [[40, 106, 41], 256], + 9382: [[40, 107, 41], 256], + 9383: [[40, 108, 41], 256], + 9384: [[40, 109, 41], 256], + 9385: [[40, 110, 41], 256], + 9386: [[40, 111, 41], 256], + 9387: [[40, 112, 41], 256], + 9388: [[40, 113, 41], 256], + 9389: [[40, 114, 41], 256], + 9390: [[40, 115, 41], 256], + 9391: [[40, 116, 41], 256], + 9392: [[40, 117, 41], 256], + 9393: [[40, 118, 41], 256], + 9394: [[40, 119, 41], 256], + 9395: [[40, 120, 41], 256], + 9396: [[40, 121, 41], 256], + 9397: [[40, 122, 41], 256], + 9398: [[65], 256], + 9399: [[66], 256], + 9400: [[67], 256], + 9401: [[68], 256], + 9402: [[69], 256], + 9403: [[70], 256], + 9404: [[71], 256], + 9405: [[72], 256], + 9406: [[73], 256], + 9407: [[74], 256], + 9408: [[75], 256], + 9409: [[76], 256], + 9410: [[77], 256], + 9411: [[78], 256], + 9412: [[79], 256], + 9413: [[80], 256], + 9414: [[81], 256], + 9415: [[82], 256], + 9416: [[83], 256], + 9417: [[84], 256], + 9418: [[85], 256], + 9419: [[86], 256], + 9420: [[87], 256], + 9421: [[88], 256], + 9422: [[89], 256], + 9423: [[90], 256], + 9424: [[97], 256], + 9425: [[98], 256], + 9426: [[99], 256], + 9427: [[100], 256], + 9428: [[101], 256], + 9429: [[102], 256], + 9430: [[103], 256], + 9431: [[104], 256], + 9432: [[105], 256], + 9433: [[106], 256], + 9434: [[107], 256], + 9435: [[108], 256], + 9436: [[109], 256], + 9437: [[110], 256], + 9438: [[111], 256], + 9439: [[112], 256], + 9440: [[113], 256], + 9441: [[114], 256], + 9442: [[115], 256], + 9443: [[116], 256], + 9444: [[117], 256], + 9445: [[118], 256], + 9446: [[119], 256], + 9447: [[120], 256], + 9448: [[121], 256], + 9449: [[122], 256], + 9450: [[48], 256] + }, + 10752: { + 10764: [[8747, 8747, 8747, 8747], 256], + 10868: [[58, 58, 61], 256], + 10869: [[61, 61], 256], + 10870: [[61, 61, 61], 256], + 10972: [[10973, 824], 512] + }, + 11264: { + 11388: [[106], 256], + 11389: [[86], 256], + 11503: [, 230], + 11504: [, 230], + 11505: [, 230] + }, + 11520: { + 11631: [[11617], 256], + 11647: [, 9], + 11744: [, 230], + 11745: [, 230], + 11746: [, 230], + 11747: [, 230], + 11748: [, 230], + 11749: [, 230], + 11750: [, 230], + 11751: [, 230], + 11752: [, 230], + 11753: [, 230], + 11754: [, 230], + 11755: [, 230], + 11756: [, 230], + 11757: [, 230], + 11758: [, 230], + 11759: [, 230], + 11760: [, 230], + 11761: [, 230], + 11762: [, 230], + 11763: [, 230], + 11764: [, 230], + 11765: [, 230], + 11766: [, 230], + 11767: [, 230], + 11768: [, 230], + 11769: [, 230], + 11770: [, 230], + 11771: [, 230], + 11772: [, 230], + 11773: [, 230], + 11774: [, 230], + 11775: [, 230] + }, + 11776: { 11935: [[27597], 256], 12019: [[40863], 256] }, + 12032: { + 12032: [[19968], 256], + 12033: [[20008], 256], + 12034: [[20022], 256], + 12035: [[20031], 256], + 12036: [[20057], 256], + 12037: [[20101], 256], + 12038: [[20108], 256], + 12039: [[20128], 256], + 12040: [[20154], 256], + 12041: [[20799], 256], + 12042: [[20837], 256], + 12043: [[20843], 256], + 12044: [[20866], 256], + 12045: [[20886], 256], + 12046: [[20907], 256], + 12047: [[20960], 256], + 12048: [[20981], 256], + 12049: [[20992], 256], + 12050: [[21147], 256], + 12051: [[21241], 256], + 12052: [[21269], 256], + 12053: [[21274], 256], + 12054: [[21304], 256], + 12055: [[21313], 256], + 12056: [[21340], 256], + 12057: [[21353], 256], + 12058: [[21378], 256], + 12059: [[21430], 256], + 12060: [[21448], 256], + 12061: [[21475], 256], + 12062: [[22231], 256], + 12063: [[22303], 256], + 12064: [[22763], 256], + 12065: [[22786], 256], + 12066: [[22794], 256], + 12067: [[22805], 256], + 12068: [[22823], 256], + 12069: [[22899], 256], + 12070: [[23376], 256], + 12071: [[23424], 256], + 12072: [[23544], 256], + 12073: [[23567], 256], + 12074: [[23586], 256], + 12075: [[23608], 256], + 12076: [[23662], 256], + 12077: [[23665], 256], + 12078: [[24027], 256], + 12079: [[24037], 256], + 12080: [[24049], 256], + 12081: [[24062], 256], + 12082: [[24178], 256], + 12083: [[24186], 256], + 12084: [[24191], 256], + 12085: [[24308], 256], + 12086: [[24318], 256], + 12087: [[24331], 256], + 12088: [[24339], 256], + 12089: [[24400], 256], + 12090: [[24417], 256], + 12091: [[24435], 256], + 12092: [[24515], 256], + 12093: [[25096], 256], + 12094: [[25142], 256], + 12095: [[25163], 256], + 12096: [[25903], 256], + 12097: [[25908], 256], + 12098: [[25991], 256], + 12099: [[26007], 256], + 12100: [[26020], 256], + 12101: [[26041], 256], + 12102: [[26080], 256], + 12103: [[26085], 256], + 12104: [[26352], 256], + 12105: [[26376], 256], + 12106: [[26408], 256], + 12107: [[27424], 256], + 12108: [[27490], 256], + 12109: [[27513], 256], + 12110: [[27571], 256], + 12111: [[27595], 256], + 12112: [[27604], 256], + 12113: [[27611], 256], + 12114: [[27663], 256], + 12115: [[27668], 256], + 12116: [[27700], 256], + 12117: [[28779], 256], + 12118: [[29226], 256], + 12119: [[29238], 256], + 12120: [[29243], 256], + 12121: [[29247], 256], + 12122: [[29255], 256], + 12123: [[29273], 256], + 12124: [[29275], 256], + 12125: [[29356], 256], + 12126: [[29572], 256], + 12127: [[29577], 256], + 12128: [[29916], 256], + 12129: [[29926], 256], + 12130: [[29976], 256], + 12131: [[29983], 256], + 12132: [[29992], 256], + 12133: [[30000], 256], + 12134: [[30091], 256], + 12135: [[30098], 256], + 12136: [[30326], 256], + 12137: [[30333], 256], + 12138: [[30382], 256], + 12139: [[30399], 256], + 12140: [[30446], 256], + 12141: [[30683], 256], + 12142: [[30690], 256], + 12143: [[30707], 256], + 12144: [[31034], 256], + 12145: [[31160], 256], + 12146: [[31166], 256], + 12147: [[31348], 256], + 12148: [[31435], 256], + 12149: [[31481], 256], + 12150: [[31859], 256], + 12151: [[31992], 256], + 12152: [[32566], 256], + 12153: [[32593], 256], + 12154: [[32650], 256], + 12155: [[32701], 256], + 12156: [[32769], 256], + 12157: [[32780], 256], + 12158: [[32786], 256], + 12159: [[32819], 256], + 12160: [[32895], 256], + 12161: [[32905], 256], + 12162: [[33251], 256], + 12163: [[33258], 256], + 12164: [[33267], 256], + 12165: [[33276], 256], + 12166: [[33292], 256], + 12167: [[33307], 256], + 12168: [[33311], 256], + 12169: [[33390], 256], + 12170: [[33394], 256], + 12171: [[33400], 256], + 12172: [[34381], 256], + 12173: [[34411], 256], + 12174: [[34880], 256], + 12175: [[34892], 256], + 12176: [[34915], 256], + 12177: [[35198], 256], + 12178: [[35211], 256], + 12179: [[35282], 256], + 12180: [[35328], 256], + 12181: [[35895], 256], + 12182: [[35910], 256], + 12183: [[35925], 256], + 12184: [[35960], 256], + 12185: [[35997], 256], + 12186: [[36196], 256], + 12187: [[36208], 256], + 12188: [[36275], 256], + 12189: [[36523], 256], + 12190: [[36554], 256], + 12191: [[36763], 256], + 12192: [[36784], 256], + 12193: [[36789], 256], + 12194: [[37009], 256], + 12195: [[37193], 256], + 12196: [[37318], 256], + 12197: [[37324], 256], + 12198: [[37329], 256], + 12199: [[38263], 256], + 12200: [[38272], 256], + 12201: [[38428], 256], + 12202: [[38582], 256], + 12203: [[38585], 256], + 12204: [[38632], 256], + 12205: [[38737], 256], + 12206: [[38750], 256], + 12207: [[38754], 256], + 12208: [[38761], 256], + 12209: [[38859], 256], + 12210: [[38893], 256], + 12211: [[38899], 256], + 12212: [[38913], 256], + 12213: [[39080], 256], + 12214: [[39131], 256], + 12215: [[39135], 256], + 12216: [[39318], 256], + 12217: [[39321], 256], + 12218: [[39340], 256], + 12219: [[39592], 256], + 12220: [[39640], 256], + 12221: [[39647], 256], + 12222: [[39717], 256], + 12223: [[39727], 256], + 12224: [[39730], 256], + 12225: [[39740], 256], + 12226: [[39770], 256], + 12227: [[40165], 256], + 12228: [[40565], 256], + 12229: [[40575], 256], + 12230: [[40613], 256], + 12231: [[40635], 256], + 12232: [[40643], 256], + 12233: [[40653], 256], + 12234: [[40657], 256], + 12235: [[40697], 256], + 12236: [[40701], 256], + 12237: [[40718], 256], + 12238: [[40723], 256], + 12239: [[40736], 256], + 12240: [[40763], 256], + 12241: [[40778], 256], + 12242: [[40786], 256], + 12243: [[40845], 256], + 12244: [[40860], 256], + 12245: [[40864], 256] + }, + 12288: { + 12288: [[32], 256], + 12330: [, 218], + 12331: [, 228], + 12332: [, 232], + 12333: [, 222], + 12334: [, 224], + 12335: [, 224], + 12342: [[12306], 256], + 12344: [[21313], 256], + 12345: [[21316], 256], + 12346: [[21317], 256], + 12358: [, , { 12441: 12436 }], + 12363: [, , { 12441: 12364 }], + 12364: [[12363, 12441]], + 12365: [, , { 12441: 12366 }], + 12366: [[12365, 12441]], + 12367: [, , { 12441: 12368 }], + 12368: [[12367, 12441]], + 12369: [, , { 12441: 12370 }], + 12370: [[12369, 12441]], + 12371: [, , { 12441: 12372 }], + 12372: [[12371, 12441]], + 12373: [, , { 12441: 12374 }], + 12374: [[12373, 12441]], + 12375: [, , { 12441: 12376 }], + 12376: [[12375, 12441]], + 12377: [, , { 12441: 12378 }], + 12378: [[12377, 12441]], + 12379: [, , { 12441: 12380 }], + 12380: [[12379, 12441]], + 12381: [, , { 12441: 12382 }], + 12382: [[12381, 12441]], + 12383: [, , { 12441: 12384 }], + 12384: [[12383, 12441]], + 12385: [, , { 12441: 12386 }], + 12386: [[12385, 12441]], + 12388: [, , { 12441: 12389 }], + 12389: [[12388, 12441]], + 12390: [, , { 12441: 12391 }], + 12391: [[12390, 12441]], + 12392: [, , { 12441: 12393 }], + 12393: [[12392, 12441]], + 12399: [, , { 12441: 12400, 12442: 12401 }], + 12400: [[12399, 12441]], + 12401: [[12399, 12442]], + 12402: [, , { 12441: 12403, 12442: 12404 }], + 12403: [[12402, 12441]], + 12404: [[12402, 12442]], + 12405: [, , { 12441: 12406, 12442: 12407 }], + 12406: [[12405, 12441]], + 12407: [[12405, 12442]], + 12408: [, , { 12441: 12409, 12442: 12410 }], + 12409: [[12408, 12441]], + 12410: [[12408, 12442]], + 12411: [, , { 12441: 12412, 12442: 12413 }], + 12412: [[12411, 12441]], + 12413: [[12411, 12442]], + 12436: [[12358, 12441]], + 12441: [, 8], + 12442: [, 8], + 12443: [[32, 12441], 256], + 12444: [[32, 12442], 256], + 12445: [, , { 12441: 12446 }], + 12446: [[12445, 12441]], + 12447: [[12424, 12426], 256], + 12454: [, , { 12441: 12532 }], + 12459: [, , { 12441: 12460 }], + 12460: [[12459, 12441]], + 12461: [, , { 12441: 12462 }], + 12462: [[12461, 12441]], + 12463: [, , { 12441: 12464 }], + 12464: [[12463, 12441]], + 12465: [, , { 12441: 12466 }], + 12466: [[12465, 12441]], + 12467: [, , { 12441: 12468 }], + 12468: [[12467, 12441]], + 12469: [, , { 12441: 12470 }], + 12470: [[12469, 12441]], + 12471: [, , { 12441: 12472 }], + 12472: [[12471, 12441]], + 12473: [, , { 12441: 12474 }], + 12474: [[12473, 12441]], + 12475: [, , { 12441: 12476 }], + 12476: [[12475, 12441]], + 12477: [, , { 12441: 12478 }], + 12478: [[12477, 12441]], + 12479: [, , { 12441: 12480 }], + 12480: [[12479, 12441]], + 12481: [, , { 12441: 12482 }], + 12482: [[12481, 12441]], + 12484: [, , { 12441: 12485 }], + 12485: [[12484, 12441]], + 12486: [, , { 12441: 12487 }], + 12487: [[12486, 12441]], + 12488: [, , { 12441: 12489 }], + 12489: [[12488, 12441]], + 12495: [, , { 12441: 12496, 12442: 12497 }], + 12496: [[12495, 12441]], + 12497: [[12495, 12442]], + 12498: [, , { 12441: 12499, 12442: 12500 }], + 12499: [[12498, 12441]], + 12500: [[12498, 12442]], + 12501: [, , { 12441: 12502, 12442: 12503 }], + 12502: [[12501, 12441]], + 12503: [[12501, 12442]], + 12504: [, , { 12441: 12505, 12442: 12506 }], + 12505: [[12504, 12441]], + 12506: [[12504, 12442]], + 12507: [, , { 12441: 12508, 12442: 12509 }], + 12508: [[12507, 12441]], + 12509: [[12507, 12442]], + 12527: [, , { 12441: 12535 }], + 12528: [, , { 12441: 12536 }], + 12529: [, , { 12441: 12537 }], + 12530: [, , { 12441: 12538 }], + 12532: [[12454, 12441]], + 12535: [[12527, 12441]], + 12536: [[12528, 12441]], + 12537: [[12529, 12441]], + 12538: [[12530, 12441]], + 12541: [, , { 12441: 12542 }], + 12542: [[12541, 12441]], + 12543: [[12467, 12488], 256] + }, + 12544: { + 12593: [[4352], 256], + 12594: [[4353], 256], + 12595: [[4522], 256], + 12596: [[4354], 256], + 12597: [[4524], 256], + 12598: [[4525], 256], + 12599: [[4355], 256], + 12600: [[4356], 256], + 12601: [[4357], 256], + 12602: [[4528], 256], + 12603: [[4529], 256], + 12604: [[4530], 256], + 12605: [[4531], 256], + 12606: [[4532], 256], + 12607: [[4533], 256], + 12608: [[4378], 256], + 12609: [[4358], 256], + 12610: [[4359], 256], + 12611: [[4360], 256], + 12612: [[4385], 256], + 12613: [[4361], 256], + 12614: [[4362], 256], + 12615: [[4363], 256], + 12616: [[4364], 256], + 12617: [[4365], 256], + 12618: [[4366], 256], + 12619: [[4367], 256], + 12620: [[4368], 256], + 12621: [[4369], 256], + 12622: [[4370], 256], + 12623: [[4449], 256], + 12624: [[4450], 256], + 12625: [[4451], 256], + 12626: [[4452], 256], + 12627: [[4453], 256], + 12628: [[4454], 256], + 12629: [[4455], 256], + 12630: [[4456], 256], + 12631: [[4457], 256], + 12632: [[4458], 256], + 12633: [[4459], 256], + 12634: [[4460], 256], + 12635: [[4461], 256], + 12636: [[4462], 256], + 12637: [[4463], 256], + 12638: [[4464], 256], + 12639: [[4465], 256], + 12640: [[4466], 256], + 12641: [[4467], 256], + 12642: [[4468], 256], + 12643: [[4469], 256], + 12644: [[4448], 256], + 12645: [[4372], 256], + 12646: [[4373], 256], + 12647: [[4551], 256], + 12648: [[4552], 256], + 12649: [[4556], 256], + 12650: [[4558], 256], + 12651: [[4563], 256], + 12652: [[4567], 256], + 12653: [[4569], 256], + 12654: [[4380], 256], + 12655: [[4573], 256], + 12656: [[4575], 256], + 12657: [[4381], 256], + 12658: [[4382], 256], + 12659: [[4384], 256], + 12660: [[4386], 256], + 12661: [[4387], 256], + 12662: [[4391], 256], + 12663: [[4393], 256], + 12664: [[4395], 256], + 12665: [[4396], 256], + 12666: [[4397], 256], + 12667: [[4398], 256], + 12668: [[4399], 256], + 12669: [[4402], 256], + 12670: [[4406], 256], + 12671: [[4416], 256], + 12672: [[4423], 256], + 12673: [[4428], 256], + 12674: [[4593], 256], + 12675: [[4594], 256], + 12676: [[4439], 256], + 12677: [[4440], 256], + 12678: [[4441], 256], + 12679: [[4484], 256], + 12680: [[4485], 256], + 12681: [[4488], 256], + 12682: [[4497], 256], + 12683: [[4498], 256], + 12684: [[4500], 256], + 12685: [[4510], 256], + 12686: [[4513], 256], + 12690: [[19968], 256], + 12691: [[20108], 256], + 12692: [[19977], 256], + 12693: [[22235], 256], + 12694: [[19978], 256], + 12695: [[20013], 256], + 12696: [[19979], 256], + 12697: [[30002], 256], + 12698: [[20057], 256], + 12699: [[19993], 256], + 12700: [[19969], 256], + 12701: [[22825], 256], + 12702: [[22320], 256], + 12703: [[20154], 256] + }, + 12800: { + 12800: [[40, 4352, 41], 256], + 12801: [[40, 4354, 41], 256], + 12802: [[40, 4355, 41], 256], + 12803: [[40, 4357, 41], 256], + 12804: [[40, 4358, 41], 256], + 12805: [[40, 4359, 41], 256], + 12806: [[40, 4361, 41], 256], + 12807: [[40, 4363, 41], 256], + 12808: [[40, 4364, 41], 256], + 12809: [[40, 4366, 41], 256], + 12810: [[40, 4367, 41], 256], + 12811: [[40, 4368, 41], 256], + 12812: [[40, 4369, 41], 256], + 12813: [[40, 4370, 41], 256], + 12814: [[40, 4352, 4449, 41], 256], + 12815: [[40, 4354, 4449, 41], 256], + 12816: [[40, 4355, 4449, 41], 256], + 12817: [[40, 4357, 4449, 41], 256], + 12818: [[40, 4358, 4449, 41], 256], + 12819: [[40, 4359, 4449, 41], 256], + 12820: [[40, 4361, 4449, 41], 256], + 12821: [[40, 4363, 4449, 41], 256], + 12822: [[40, 4364, 4449, 41], 256], + 12823: [[40, 4366, 4449, 41], 256], + 12824: [[40, 4367, 4449, 41], 256], + 12825: [[40, 4368, 4449, 41], 256], + 12826: [[40, 4369, 4449, 41], 256], + 12827: [[40, 4370, 4449, 41], 256], + 12828: [[40, 4364, 4462, 41], 256], + 12829: [[40, 4363, 4457, 4364, 4453, 4523, 41], 256], + 12830: [[40, 4363, 4457, 4370, 4462, 41], 256], + 12832: [[40, 19968, 41], 256], + 12833: [[40, 20108, 41], 256], + 12834: [[40, 19977, 41], 256], + 12835: [[40, 22235, 41], 256], + 12836: [[40, 20116, 41], 256], + 12837: [[40, 20845, 41], 256], + 12838: [[40, 19971, 41], 256], + 12839: [[40, 20843, 41], 256], + 12840: [[40, 20061, 41], 256], + 12841: [[40, 21313, 41], 256], + 12842: [[40, 26376, 41], 256], + 12843: [[40, 28779, 41], 256], + 12844: [[40, 27700, 41], 256], + 12845: [[40, 26408, 41], 256], + 12846: [[40, 37329, 41], 256], + 12847: [[40, 22303, 41], 256], + 12848: [[40, 26085, 41], 256], + 12849: [[40, 26666, 41], 256], + 12850: [[40, 26377, 41], 256], + 12851: [[40, 31038, 41], 256], + 12852: [[40, 21517, 41], 256], + 12853: [[40, 29305, 41], 256], + 12854: [[40, 36001, 41], 256], + 12855: [[40, 31069, 41], 256], + 12856: [[40, 21172, 41], 256], + 12857: [[40, 20195, 41], 256], + 12858: [[40, 21628, 41], 256], + 12859: [[40, 23398, 41], 256], + 12860: [[40, 30435, 41], 256], + 12861: [[40, 20225, 41], 256], + 12862: [[40, 36039, 41], 256], + 12863: [[40, 21332, 41], 256], + 12864: [[40, 31085, 41], 256], + 12865: [[40, 20241, 41], 256], + 12866: [[40, 33258, 41], 256], + 12867: [[40, 33267, 41], 256], + 12868: [[21839], 256], + 12869: [[24188], 256], + 12870: [[25991], 256], + 12871: [[31631], 256], + 12880: [[80, 84, 69], 256], + 12881: [[50, 49], 256], + 12882: [[50, 50], 256], + 12883: [[50, 51], 256], + 12884: [[50, 52], 256], + 12885: [[50, 53], 256], + 12886: [[50, 54], 256], + 12887: [[50, 55], 256], + 12888: [[50, 56], 256], + 12889: [[50, 57], 256], + 12890: [[51, 48], 256], + 12891: [[51, 49], 256], + 12892: [[51, 50], 256], + 12893: [[51, 51], 256], + 12894: [[51, 52], 256], + 12895: [[51, 53], 256], + 12896: [[4352], 256], + 12897: [[4354], 256], + 12898: [[4355], 256], + 12899: [[4357], 256], + 12900: [[4358], 256], + 12901: [[4359], 256], + 12902: [[4361], 256], + 12903: [[4363], 256], + 12904: [[4364], 256], + 12905: [[4366], 256], + 12906: [[4367], 256], + 12907: [[4368], 256], + 12908: [[4369], 256], + 12909: [[4370], 256], + 12910: [[4352, 4449], 256], + 12911: [[4354, 4449], 256], + 12912: [[4355, 4449], 256], + 12913: [[4357, 4449], 256], + 12914: [[4358, 4449], 256], + 12915: [[4359, 4449], 256], + 12916: [[4361, 4449], 256], + 12917: [[4363, 4449], 256], + 12918: [[4364, 4449], 256], + 12919: [[4366, 4449], 256], + 12920: [[4367, 4449], 256], + 12921: [[4368, 4449], 256], + 12922: [[4369, 4449], 256], + 12923: [[4370, 4449], 256], + 12924: [[4366, 4449, 4535, 4352, 4457], 256], + 12925: [[4364, 4462, 4363, 4468], 256], + 12926: [[4363, 4462], 256], + 12928: [[19968], 256], + 12929: [[20108], 256], + 12930: [[19977], 256], + 12931: [[22235], 256], + 12932: [[20116], 256], + 12933: [[20845], 256], + 12934: [[19971], 256], + 12935: [[20843], 256], + 12936: [[20061], 256], + 12937: [[21313], 256], + 12938: [[26376], 256], + 12939: [[28779], 256], + 12940: [[27700], 256], + 12941: [[26408], 256], + 12942: [[37329], 256], + 12943: [[22303], 256], + 12944: [[26085], 256], + 12945: [[26666], 256], + 12946: [[26377], 256], + 12947: [[31038], 256], + 12948: [[21517], 256], + 12949: [[29305], 256], + 12950: [[36001], 256], + 12951: [[31069], 256], + 12952: [[21172], 256], + 12953: [[31192], 256], + 12954: [[30007], 256], + 12955: [[22899], 256], + 12956: [[36969], 256], + 12957: [[20778], 256], + 12958: [[21360], 256], + 12959: [[27880], 256], + 12960: [[38917], 256], + 12961: [[20241], 256], + 12962: [[20889], 256], + 12963: [[27491], 256], + 12964: [[19978], 256], + 12965: [[20013], 256], + 12966: [[19979], 256], + 12967: [[24038], 256], + 12968: [[21491], 256], + 12969: [[21307], 256], + 12970: [[23447], 256], + 12971: [[23398], 256], + 12972: [[30435], 256], + 12973: [[20225], 256], + 12974: [[36039], 256], + 12975: [[21332], 256], + 12976: [[22812], 256], + 12977: [[51, 54], 256], + 12978: [[51, 55], 256], + 12979: [[51, 56], 256], + 12980: [[51, 57], 256], + 12981: [[52, 48], 256], + 12982: [[52, 49], 256], + 12983: [[52, 50], 256], + 12984: [[52, 51], 256], + 12985: [[52, 52], 256], + 12986: [[52, 53], 256], + 12987: [[52, 54], 256], + 12988: [[52, 55], 256], + 12989: [[52, 56], 256], + 12990: [[52, 57], 256], + 12991: [[53, 48], 256], + 12992: [[49, 26376], 256], + 12993: [[50, 26376], 256], + 12994: [[51, 26376], 256], + 12995: [[52, 26376], 256], + 12996: [[53, 26376], 256], + 12997: [[54, 26376], 256], + 12998: [[55, 26376], 256], + 12999: [[56, 26376], 256], + 13000: [[57, 26376], 256], + 13001: [[49, 48, 26376], 256], + 13002: [[49, 49, 26376], 256], + 13003: [[49, 50, 26376], 256], + 13004: [[72, 103], 256], + 13005: [[101, 114, 103], 256], + 13006: [[101, 86], 256], + 13007: [[76, 84, 68], 256], + 13008: [[12450], 256], + 13009: [[12452], 256], + 13010: [[12454], 256], + 13011: [[12456], 256], + 13012: [[12458], 256], + 13013: [[12459], 256], + 13014: [[12461], 256], + 13015: [[12463], 256], + 13016: [[12465], 256], + 13017: [[12467], 256], + 13018: [[12469], 256], + 13019: [[12471], 256], + 13020: [[12473], 256], + 13021: [[12475], 256], + 13022: [[12477], 256], + 13023: [[12479], 256], + 13024: [[12481], 256], + 13025: [[12484], 256], + 13026: [[12486], 256], + 13027: [[12488], 256], + 13028: [[12490], 256], + 13029: [[12491], 256], + 13030: [[12492], 256], + 13031: [[12493], 256], + 13032: [[12494], 256], + 13033: [[12495], 256], + 13034: [[12498], 256], + 13035: [[12501], 256], + 13036: [[12504], 256], + 13037: [[12507], 256], + 13038: [[12510], 256], + 13039: [[12511], 256], + 13040: [[12512], 256], + 13041: [[12513], 256], + 13042: [[12514], 256], + 13043: [[12516], 256], + 13044: [[12518], 256], + 13045: [[12520], 256], + 13046: [[12521], 256], + 13047: [[12522], 256], + 13048: [[12523], 256], + 13049: [[12524], 256], + 13050: [[12525], 256], + 13051: [[12527], 256], + 13052: [[12528], 256], + 13053: [[12529], 256], + 13054: [[12530], 256] + }, + 13056: { + 13056: [[12450, 12497, 12540, 12488], 256], + 13057: [[12450, 12523, 12501, 12449], 256], + 13058: [[12450, 12531, 12506, 12450], 256], + 13059: [[12450, 12540, 12523], 256], + 13060: [[12452, 12491, 12531, 12464], 256], + 13061: [[12452, 12531, 12481], 256], + 13062: [[12454, 12457, 12531], 256], + 13063: [[12456, 12473, 12463, 12540, 12489], 256], + 13064: [[12456, 12540, 12459, 12540], 256], + 13065: [[12458, 12531, 12473], 256], + 13066: [[12458, 12540, 12512], 256], + 13067: [[12459, 12452, 12522], 256], + 13068: [[12459, 12521, 12483, 12488], 256], + 13069: [[12459, 12525, 12522, 12540], 256], + 13070: [[12460, 12525, 12531], 256], + 13071: [[12460, 12531, 12510], 256], + 13072: [[12462, 12460], 256], + 13073: [[12462, 12491, 12540], 256], + 13074: [[12461, 12517, 12522, 12540], 256], + 13075: [[12462, 12523, 12480, 12540], 256], + 13076: [[12461, 12525], 256], + 13077: [[12461, 12525, 12464, 12521, 12512], 256], + 13078: [[12461, 12525, 12513, 12540, 12488, 12523], 256], + 13079: [[12461, 12525, 12527, 12483, 12488], 256], + 13080: [[12464, 12521, 12512], 256], + 13081: [[12464, 12521, 12512, 12488, 12531], 256], + 13082: [[12463, 12523, 12476, 12452, 12525], 256], + 13083: [[12463, 12525, 12540, 12493], 256], + 13084: [[12465, 12540, 12473], 256], + 13085: [[12467, 12523, 12490], 256], + 13086: [[12467, 12540, 12509], 256], + 13087: [[12469, 12452, 12463, 12523], 256], + 13088: [[12469, 12531, 12481, 12540, 12512], 256], + 13089: [[12471, 12522, 12531, 12464], 256], + 13090: [[12475, 12531, 12481], 256], + 13091: [[12475, 12531, 12488], 256], + 13092: [[12480, 12540, 12473], 256], + 13093: [[12487, 12471], 256], + 13094: [[12489, 12523], 256], + 13095: [[12488, 12531], 256], + 13096: [[12490, 12494], 256], + 13097: [[12494, 12483, 12488], 256], + 13098: [[12495, 12452, 12484], 256], + 13099: [[12497, 12540, 12475, 12531, 12488], 256], + 13100: [[12497, 12540, 12484], 256], + 13101: [[12496, 12540, 12524, 12523], 256], + 13102: [[12500, 12450, 12473, 12488, 12523], 256], + 13103: [[12500, 12463, 12523], 256], + 13104: [[12500, 12467], 256], + 13105: [[12499, 12523], 256], + 13106: [[12501, 12449, 12521, 12483, 12489], 256], + 13107: [[12501, 12451, 12540, 12488], 256], + 13108: [[12502, 12483, 12471, 12455, 12523], 256], + 13109: [[12501, 12521, 12531], 256], + 13110: [[12504, 12463, 12479, 12540, 12523], 256], + 13111: [[12506, 12477], 256], + 13112: [[12506, 12491, 12498], 256], + 13113: [[12504, 12523, 12484], 256], + 13114: [[12506, 12531, 12473], 256], + 13115: [[12506, 12540, 12472], 256], + 13116: [[12505, 12540, 12479], 256], + 13117: [[12509, 12452, 12531, 12488], 256], + 13118: [[12508, 12523, 12488], 256], + 13119: [[12507, 12531], 256], + 13120: [[12509, 12531, 12489], 256], + 13121: [[12507, 12540, 12523], 256], + 13122: [[12507, 12540, 12531], 256], + 13123: [[12510, 12452, 12463, 12525], 256], + 13124: [[12510, 12452, 12523], 256], + 13125: [[12510, 12483, 12495], 256], + 13126: [[12510, 12523, 12463], 256], + 13127: [[12510, 12531, 12471, 12519, 12531], 256], + 13128: [[12511, 12463, 12525, 12531], 256], + 13129: [[12511, 12522], 256], + 13130: [[12511, 12522, 12496, 12540, 12523], 256], + 13131: [[12513, 12460], 256], + 13132: [[12513, 12460, 12488, 12531], 256], + 13133: [[12513, 12540, 12488, 12523], 256], + 13134: [[12516, 12540, 12489], 256], + 13135: [[12516, 12540, 12523], 256], + 13136: [[12518, 12450, 12531], 256], + 13137: [[12522, 12483, 12488, 12523], 256], + 13138: [[12522, 12521], 256], + 13139: [[12523, 12500, 12540], 256], + 13140: [[12523, 12540, 12502, 12523], 256], + 13141: [[12524, 12512], 256], + 13142: [[12524, 12531, 12488, 12466, 12531], 256], + 13143: [[12527, 12483, 12488], 256], + 13144: [[48, 28857], 256], + 13145: [[49, 28857], 256], + 13146: [[50, 28857], 256], + 13147: [[51, 28857], 256], + 13148: [[52, 28857], 256], + 13149: [[53, 28857], 256], + 13150: [[54, 28857], 256], + 13151: [[55, 28857], 256], + 13152: [[56, 28857], 256], + 13153: [[57, 28857], 256], + 13154: [[49, 48, 28857], 256], + 13155: [[49, 49, 28857], 256], + 13156: [[49, 50, 28857], 256], + 13157: [[49, 51, 28857], 256], + 13158: [[49, 52, 28857], 256], + 13159: [[49, 53, 28857], 256], + 13160: [[49, 54, 28857], 256], + 13161: [[49, 55, 28857], 256], + 13162: [[49, 56, 28857], 256], + 13163: [[49, 57, 28857], 256], + 13164: [[50, 48, 28857], 256], + 13165: [[50, 49, 28857], 256], + 13166: [[50, 50, 28857], 256], + 13167: [[50, 51, 28857], 256], + 13168: [[50, 52, 28857], 256], + 13169: [[104, 80, 97], 256], + 13170: [[100, 97], 256], + 13171: [[65, 85], 256], + 13172: [[98, 97, 114], 256], + 13173: [[111, 86], 256], + 13174: [[112, 99], 256], + 13175: [[100, 109], 256], + 13176: [[100, 109, 178], 256], + 13177: [[100, 109, 179], 256], + 13178: [[73, 85], 256], + 13179: [[24179, 25104], 256], + 13180: [[26157, 21644], 256], + 13181: [[22823, 27491], 256], + 13182: [[26126, 27835], 256], + 13183: [[26666, 24335, 20250, 31038], 256], + 13184: [[112, 65], 256], + 13185: [[110, 65], 256], + 13186: [[956, 65], 256], + 13187: [[109, 65], 256], + 13188: [[107, 65], 256], + 13189: [[75, 66], 256], + 13190: [[77, 66], 256], + 13191: [[71, 66], 256], + 13192: [[99, 97, 108], 256], + 13193: [[107, 99, 97, 108], 256], + 13194: [[112, 70], 256], + 13195: [[110, 70], 256], + 13196: [[956, 70], 256], + 13197: [[956, 103], 256], + 13198: [[109, 103], 256], + 13199: [[107, 103], 256], + 13200: [[72, 122], 256], + 13201: [[107, 72, 122], 256], + 13202: [[77, 72, 122], 256], + 13203: [[71, 72, 122], 256], + 13204: [[84, 72, 122], 256], + 13205: [[956, 8467], 256], + 13206: [[109, 8467], 256], + 13207: [[100, 8467], 256], + 13208: [[107, 8467], 256], + 13209: [[102, 109], 256], + 13210: [[110, 109], 256], + 13211: [[956, 109], 256], + 13212: [[109, 109], 256], + 13213: [[99, 109], 256], + 13214: [[107, 109], 256], + 13215: [[109, 109, 178], 256], + 13216: [[99, 109, 178], 256], + 13217: [[109, 178], 256], + 13218: [[107, 109, 178], 256], + 13219: [[109, 109, 179], 256], + 13220: [[99, 109, 179], 256], + 13221: [[109, 179], 256], + 13222: [[107, 109, 179], 256], + 13223: [[109, 8725, 115], 256], + 13224: [[109, 8725, 115, 178], 256], + 13225: [[80, 97], 256], + 13226: [[107, 80, 97], 256], + 13227: [[77, 80, 97], 256], + 13228: [[71, 80, 97], 256], + 13229: [[114, 97, 100], 256], + 13230: [[114, 97, 100, 8725, 115], 256], + 13231: [[114, 97, 100, 8725, 115, 178], 256], + 13232: [[112, 115], 256], + 13233: [[110, 115], 256], + 13234: [[956, 115], 256], + 13235: [[109, 115], 256], + 13236: [[112, 86], 256], + 13237: [[110, 86], 256], + 13238: [[956, 86], 256], + 13239: [[109, 86], 256], + 13240: [[107, 86], 256], + 13241: [[77, 86], 256], + 13242: [[112, 87], 256], + 13243: [[110, 87], 256], + 13244: [[956, 87], 256], + 13245: [[109, 87], 256], + 13246: [[107, 87], 256], + 13247: [[77, 87], 256], + 13248: [[107, 937], 256], + 13249: [[77, 937], 256], + 13250: [[97, 46, 109, 46], 256], + 13251: [[66, 113], 256], + 13252: [[99, 99], 256], + 13253: [[99, 100], 256], + 13254: [[67, 8725, 107, 103], 256], + 13255: [[67, 111, 46], 256], + 13256: [[100, 66], 256], + 13257: [[71, 121], 256], + 13258: [[104, 97], 256], + 13259: [[72, 80], 256], + 13260: [[105, 110], 256], + 13261: [[75, 75], 256], + 13262: [[75, 77], 256], + 13263: [[107, 116], 256], + 13264: [[108, 109], 256], + 13265: [[108, 110], 256], + 13266: [[108, 111, 103], 256], + 13267: [[108, 120], 256], + 13268: [[109, 98], 256], + 13269: [[109, 105, 108], 256], + 13270: [[109, 111, 108], 256], + 13271: [[80, 72], 256], + 13272: [[112, 46, 109, 46], 256], + 13273: [[80, 80, 77], 256], + 13274: [[80, 82], 256], + 13275: [[115, 114], 256], + 13276: [[83, 118], 256], + 13277: [[87, 98], 256], + 13278: [[86, 8725, 109], 256], + 13279: [[65, 8725, 109], 256], + 13280: [[49, 26085], 256], + 13281: [[50, 26085], 256], + 13282: [[51, 26085], 256], + 13283: [[52, 26085], 256], + 13284: [[53, 26085], 256], + 13285: [[54, 26085], 256], + 13286: [[55, 26085], 256], + 13287: [[56, 26085], 256], + 13288: [[57, 26085], 256], + 13289: [[49, 48, 26085], 256], + 13290: [[49, 49, 26085], 256], + 13291: [[49, 50, 26085], 256], + 13292: [[49, 51, 26085], 256], + 13293: [[49, 52, 26085], 256], + 13294: [[49, 53, 26085], 256], + 13295: [[49, 54, 26085], 256], + 13296: [[49, 55, 26085], 256], + 13297: [[49, 56, 26085], 256], + 13298: [[49, 57, 26085], 256], + 13299: [[50, 48, 26085], 256], + 13300: [[50, 49, 26085], 256], + 13301: [[50, 50, 26085], 256], + 13302: [[50, 51, 26085], 256], + 13303: [[50, 52, 26085], 256], + 13304: [[50, 53, 26085], 256], + 13305: [[50, 54, 26085], 256], + 13306: [[50, 55, 26085], 256], + 13307: [[50, 56, 26085], 256], + 13308: [[50, 57, 26085], 256], + 13309: [[51, 48, 26085], 256], + 13310: [[51, 49, 26085], 256], + 13311: [[103, 97, 108], 256] + }, + 42496: { + 42607: [, 230], + 42612: [, 230], + 42613: [, 230], + 42614: [, 230], + 42615: [, 230], + 42616: [, 230], + 42617: [, 230], + 42618: [, 230], + 42619: [, 230], + 42620: [, 230], + 42621: [, 230], + 42655: [, 230], + 42736: [, 230], + 42737: [, 230] + }, + 42752: { 42864: [[42863], 256], 43000: [[294], 256], 43001: [[339], 256] }, + 43008: { + 43014: [, 9], + 43204: [, 9], + 43232: [, 230], + 43233: [, 230], + 43234: [, 230], + 43235: [, 230], + 43236: [, 230], + 43237: [, 230], + 43238: [, 230], + 43239: [, 230], + 43240: [, 230], + 43241: [, 230], + 43242: [, 230], + 43243: [, 230], + 43244: [, 230], + 43245: [, 230], + 43246: [, 230], + 43247: [, 230], + 43248: [, 230], + 43249: [, 230] + }, + 43264: { + 43307: [, 220], + 43308: [, 220], + 43309: [, 220], + 43347: [, 9], + 43443: [, 7], + 43456: [, 9] + }, + 43520: { + 43696: [, 230], + 43698: [, 230], + 43699: [, 230], + 43700: [, 220], + 43703: [, 230], + 43704: [, 230], + 43710: [, 230], + 43711: [, 230], + 43713: [, 230], + 43766: [, 9] + }, + 43776: { 44013: [, 9] }, + 53504: { + 119134: [[119127, 119141], 512], + 119135: [[119128, 119141], 512], + 119136: [[119135, 119150], 512], + 119137: [[119135, 119151], 512], + 119138: [[119135, 119152], 512], + 119139: [[119135, 119153], 512], + 119140: [[119135, 119154], 512], + 119141: [, 216], + 119142: [, 216], + 119143: [, 1], + 119144: [, 1], + 119145: [, 1], + 119149: [, 226], + 119150: [, 216], + 119151: [, 216], + 119152: [, 216], + 119153: [, 216], + 119154: [, 216], + 119163: [, 220], + 119164: [, 220], + 119165: [, 220], + 119166: [, 220], + 119167: [, 220], + 119168: [, 220], + 119169: [, 220], + 119170: [, 220], + 119173: [, 230], + 119174: [, 230], + 119175: [, 230], + 119176: [, 230], + 119177: [, 230], + 119178: [, 220], + 119179: [, 220], + 119210: [, 230], + 119211: [, 230], + 119212: [, 230], + 119213: [, 230], + 119227: [[119225, 119141], 512], + 119228: [[119226, 119141], 512], + 119229: [[119227, 119150], 512], + 119230: [[119228, 119150], 512], + 119231: [[119227, 119151], 512], + 119232: [[119228, 119151], 512] + }, + 53760: { 119362: [, 230], 119363: [, 230], 119364: [, 230] }, + 54272: { + 119808: [[65], 256], + 119809: [[66], 256], + 119810: [[67], 256], + 119811: [[68], 256], + 119812: [[69], 256], + 119813: [[70], 256], + 119814: [[71], 256], + 119815: [[72], 256], + 119816: [[73], 256], + 119817: [[74], 256], + 119818: [[75], 256], + 119819: [[76], 256], + 119820: [[77], 256], + 119821: [[78], 256], + 119822: [[79], 256], + 119823: [[80], 256], + 119824: [[81], 256], + 119825: [[82], 256], + 119826: [[83], 256], + 119827: [[84], 256], + 119828: [[85], 256], + 119829: [[86], 256], + 119830: [[87], 256], + 119831: [[88], 256], + 119832: [[89], 256], + 119833: [[90], 256], + 119834: [[97], 256], + 119835: [[98], 256], + 119836: [[99], 256], + 119837: [[100], 256], + 119838: [[101], 256], + 119839: [[102], 256], + 119840: [[103], 256], + 119841: [[104], 256], + 119842: [[105], 256], + 119843: [[106], 256], + 119844: [[107], 256], + 119845: [[108], 256], + 119846: [[109], 256], + 119847: [[110], 256], + 119848: [[111], 256], + 119849: [[112], 256], + 119850: [[113], 256], + 119851: [[114], 256], + 119852: [[115], 256], + 119853: [[116], 256], + 119854: [[117], 256], + 119855: [[118], 256], + 119856: [[119], 256], + 119857: [[120], 256], + 119858: [[121], 256], + 119859: [[122], 256], + 119860: [[65], 256], + 119861: [[66], 256], + 119862: [[67], 256], + 119863: [[68], 256], + 119864: [[69], 256], + 119865: [[70], 256], + 119866: [[71], 256], + 119867: [[72], 256], + 119868: [[73], 256], + 119869: [[74], 256], + 119870: [[75], 256], + 119871: [[76], 256], + 119872: [[77], 256], + 119873: [[78], 256], + 119874: [[79], 256], + 119875: [[80], 256], + 119876: [[81], 256], + 119877: [[82], 256], + 119878: [[83], 256], + 119879: [[84], 256], + 119880: [[85], 256], + 119881: [[86], 256], + 119882: [[87], 256], + 119883: [[88], 256], + 119884: [[89], 256], + 119885: [[90], 256], + 119886: [[97], 256], + 119887: [[98], 256], + 119888: [[99], 256], + 119889: [[100], 256], + 119890: [[101], 256], + 119891: [[102], 256], + 119892: [[103], 256], + 119894: [[105], 256], + 119895: [[106], 256], + 119896: [[107], 256], + 119897: [[108], 256], + 119898: [[109], 256], + 119899: [[110], 256], + 119900: [[111], 256], + 119901: [[112], 256], + 119902: [[113], 256], + 119903: [[114], 256], + 119904: [[115], 256], + 119905: [[116], 256], + 119906: [[117], 256], + 119907: [[118], 256], + 119908: [[119], 256], + 119909: [[120], 256], + 119910: [[121], 256], + 119911: [[122], 256], + 119912: [[65], 256], + 119913: [[66], 256], + 119914: [[67], 256], + 119915: [[68], 256], + 119916: [[69], 256], + 119917: [[70], 256], + 119918: [[71], 256], + 119919: [[72], 256], + 119920: [[73], 256], + 119921: [[74], 256], + 119922: [[75], 256], + 119923: [[76], 256], + 119924: [[77], 256], + 119925: [[78], 256], + 119926: [[79], 256], + 119927: [[80], 256], + 119928: [[81], 256], + 119929: [[82], 256], + 119930: [[83], 256], + 119931: [[84], 256], + 119932: [[85], 256], + 119933: [[86], 256], + 119934: [[87], 256], + 119935: [[88], 256], + 119936: [[89], 256], + 119937: [[90], 256], + 119938: [[97], 256], + 119939: [[98], 256], + 119940: [[99], 256], + 119941: [[100], 256], + 119942: [[101], 256], + 119943: [[102], 256], + 119944: [[103], 256], + 119945: [[104], 256], + 119946: [[105], 256], + 119947: [[106], 256], + 119948: [[107], 256], + 119949: [[108], 256], + 119950: [[109], 256], + 119951: [[110], 256], + 119952: [[111], 256], + 119953: [[112], 256], + 119954: [[113], 256], + 119955: [[114], 256], + 119956: [[115], 256], + 119957: [[116], 256], + 119958: [[117], 256], + 119959: [[118], 256], + 119960: [[119], 256], + 119961: [[120], 256], + 119962: [[121], 256], + 119963: [[122], 256], + 119964: [[65], 256], + 119966: [[67], 256], + 119967: [[68], 256], + 119970: [[71], 256], + 119973: [[74], 256], + 119974: [[75], 256], + 119977: [[78], 256], + 119978: [[79], 256], + 119979: [[80], 256], + 119980: [[81], 256], + 119982: [[83], 256], + 119983: [[84], 256], + 119984: [[85], 256], + 119985: [[86], 256], + 119986: [[87], 256], + 119987: [[88], 256], + 119988: [[89], 256], + 119989: [[90], 256], + 119990: [[97], 256], + 119991: [[98], 256], + 119992: [[99], 256], + 119993: [[100], 256], + 119995: [[102], 256], + 119997: [[104], 256], + 119998: [[105], 256], + 119999: [[106], 256], + 120000: [[107], 256], + 120001: [[108], 256], + 120002: [[109], 256], + 120003: [[110], 256], + 120005: [[112], 256], + 120006: [[113], 256], + 120007: [[114], 256], + 120008: [[115], 256], + 120009: [[116], 256], + 120010: [[117], 256], + 120011: [[118], 256], + 120012: [[119], 256], + 120013: [[120], 256], + 120014: [[121], 256], + 120015: [[122], 256], + 120016: [[65], 256], + 120017: [[66], 256], + 120018: [[67], 256], + 120019: [[68], 256], + 120020: [[69], 256], + 120021: [[70], 256], + 120022: [[71], 256], + 120023: [[72], 256], + 120024: [[73], 256], + 120025: [[74], 256], + 120026: [[75], 256], + 120027: [[76], 256], + 120028: [[77], 256], + 120029: [[78], 256], + 120030: [[79], 256], + 120031: [[80], 256], + 120032: [[81], 256], + 120033: [[82], 256], + 120034: [[83], 256], + 120035: [[84], 256], + 120036: [[85], 256], + 120037: [[86], 256], + 120038: [[87], 256], + 120039: [[88], 256], + 120040: [[89], 256], + 120041: [[90], 256], + 120042: [[97], 256], + 120043: [[98], 256], + 120044: [[99], 256], + 120045: [[100], 256], + 120046: [[101], 256], + 120047: [[102], 256], + 120048: [[103], 256], + 120049: [[104], 256], + 120050: [[105], 256], + 120051: [[106], 256], + 120052: [[107], 256], + 120053: [[108], 256], + 120054: [[109], 256], + 120055: [[110], 256], + 120056: [[111], 256], + 120057: [[112], 256], + 120058: [[113], 256], + 120059: [[114], 256], + 120060: [[115], 256], + 120061: [[116], 256], + 120062: [[117], 256], + 120063: [[118], 256] + }, + 54528: { + 120064: [[119], 256], + 120065: [[120], 256], + 120066: [[121], 256], + 120067: [[122], 256], + 120068: [[65], 256], + 120069: [[66], 256], + 120071: [[68], 256], + 120072: [[69], 256], + 120073: [[70], 256], + 120074: [[71], 256], + 120077: [[74], 256], + 120078: [[75], 256], + 120079: [[76], 256], + 120080: [[77], 256], + 120081: [[78], 256], + 120082: [[79], 256], + 120083: [[80], 256], + 120084: [[81], 256], + 120086: [[83], 256], + 120087: [[84], 256], + 120088: [[85], 256], + 120089: [[86], 256], + 120090: [[87], 256], + 120091: [[88], 256], + 120092: [[89], 256], + 120094: [[97], 256], + 120095: [[98], 256], + 120096: [[99], 256], + 120097: [[100], 256], + 120098: [[101], 256], + 120099: [[102], 256], + 120100: [[103], 256], + 120101: [[104], 256], + 120102: [[105], 256], + 120103: [[106], 256], + 120104: [[107], 256], + 120105: [[108], 256], + 120106: [[109], 256], + 120107: [[110], 256], + 120108: [[111], 256], + 120109: [[112], 256], + 120110: [[113], 256], + 120111: [[114], 256], + 120112: [[115], 256], + 120113: [[116], 256], + 120114: [[117], 256], + 120115: [[118], 256], + 120116: [[119], 256], + 120117: [[120], 256], + 120118: [[121], 256], + 120119: [[122], 256], + 120120: [[65], 256], + 120121: [[66], 256], + 120123: [[68], 256], + 120124: [[69], 256], + 120125: [[70], 256], + 120126: [[71], 256], + 120128: [[73], 256], + 120129: [[74], 256], + 120130: [[75], 256], + 120131: [[76], 256], + 120132: [[77], 256], + 120134: [[79], 256], + 120138: [[83], 256], + 120139: [[84], 256], + 120140: [[85], 256], + 120141: [[86], 256], + 120142: [[87], 256], + 120143: [[88], 256], + 120144: [[89], 256], + 120146: [[97], 256], + 120147: [[98], 256], + 120148: [[99], 256], + 120149: [[100], 256], + 120150: [[101], 256], + 120151: [[102], 256], + 120152: [[103], 256], + 120153: [[104], 256], + 120154: [[105], 256], + 120155: [[106], 256], + 120156: [[107], 256], + 120157: [[108], 256], + 120158: [[109], 256], + 120159: [[110], 256], + 120160: [[111], 256], + 120161: [[112], 256], + 120162: [[113], 256], + 120163: [[114], 256], + 120164: [[115], 256], + 120165: [[116], 256], + 120166: [[117], 256], + 120167: [[118], 256], + 120168: [[119], 256], + 120169: [[120], 256], + 120170: [[121], 256], + 120171: [[122], 256], + 120172: [[65], 256], + 120173: [[66], 256], + 120174: [[67], 256], + 120175: [[68], 256], + 120176: [[69], 256], + 120177: [[70], 256], + 120178: [[71], 256], + 120179: [[72], 256], + 120180: [[73], 256], + 120181: [[74], 256], + 120182: [[75], 256], + 120183: [[76], 256], + 120184: [[77], 256], + 120185: [[78], 256], + 120186: [[79], 256], + 120187: [[80], 256], + 120188: [[81], 256], + 120189: [[82], 256], + 120190: [[83], 256], + 120191: [[84], 256], + 120192: [[85], 256], + 120193: [[86], 256], + 120194: [[87], 256], + 120195: [[88], 256], + 120196: [[89], 256], + 120197: [[90], 256], + 120198: [[97], 256], + 120199: [[98], 256], + 120200: [[99], 256], + 120201: [[100], 256], + 120202: [[101], 256], + 120203: [[102], 256], + 120204: [[103], 256], + 120205: [[104], 256], + 120206: [[105], 256], + 120207: [[106], 256], + 120208: [[107], 256], + 120209: [[108], 256], + 120210: [[109], 256], + 120211: [[110], 256], + 120212: [[111], 256], + 120213: [[112], 256], + 120214: [[113], 256], + 120215: [[114], 256], + 120216: [[115], 256], + 120217: [[116], 256], + 120218: [[117], 256], + 120219: [[118], 256], + 120220: [[119], 256], + 120221: [[120], 256], + 120222: [[121], 256], + 120223: [[122], 256], + 120224: [[65], 256], + 120225: [[66], 256], + 120226: [[67], 256], + 120227: [[68], 256], + 120228: [[69], 256], + 120229: [[70], 256], + 120230: [[71], 256], + 120231: [[72], 256], + 120232: [[73], 256], + 120233: [[74], 256], + 120234: [[75], 256], + 120235: [[76], 256], + 120236: [[77], 256], + 120237: [[78], 256], + 120238: [[79], 256], + 120239: [[80], 256], + 120240: [[81], 256], + 120241: [[82], 256], + 120242: [[83], 256], + 120243: [[84], 256], + 120244: [[85], 256], + 120245: [[86], 256], + 120246: [[87], 256], + 120247: [[88], 256], + 120248: [[89], 256], + 120249: [[90], 256], + 120250: [[97], 256], + 120251: [[98], 256], + 120252: [[99], 256], + 120253: [[100], 256], + 120254: [[101], 256], + 120255: [[102], 256], + 120256: [[103], 256], + 120257: [[104], 256], + 120258: [[105], 256], + 120259: [[106], 256], + 120260: [[107], 256], + 120261: [[108], 256], + 120262: [[109], 256], + 120263: [[110], 256], + 120264: [[111], 256], + 120265: [[112], 256], + 120266: [[113], 256], + 120267: [[114], 256], + 120268: [[115], 256], + 120269: [[116], 256], + 120270: [[117], 256], + 120271: [[118], 256], + 120272: [[119], 256], + 120273: [[120], 256], + 120274: [[121], 256], + 120275: [[122], 256], + 120276: [[65], 256], + 120277: [[66], 256], + 120278: [[67], 256], + 120279: [[68], 256], + 120280: [[69], 256], + 120281: [[70], 256], + 120282: [[71], 256], + 120283: [[72], 256], + 120284: [[73], 256], + 120285: [[74], 256], + 120286: [[75], 256], + 120287: [[76], 256], + 120288: [[77], 256], + 120289: [[78], 256], + 120290: [[79], 256], + 120291: [[80], 256], + 120292: [[81], 256], + 120293: [[82], 256], + 120294: [[83], 256], + 120295: [[84], 256], + 120296: [[85], 256], + 120297: [[86], 256], + 120298: [[87], 256], + 120299: [[88], 256], + 120300: [[89], 256], + 120301: [[90], 256], + 120302: [[97], 256], + 120303: [[98], 256], + 120304: [[99], 256], + 120305: [[100], 256], + 120306: [[101], 256], + 120307: [[102], 256], + 120308: [[103], 256], + 120309: [[104], 256], + 120310: [[105], 256], + 120311: [[106], 256], + 120312: [[107], 256], + 120313: [[108], 256], + 120314: [[109], 256], + 120315: [[110], 256], + 120316: [[111], 256], + 120317: [[112], 256], + 120318: [[113], 256], + 120319: [[114], 256] + }, + 54784: { + 120320: [[115], 256], + 120321: [[116], 256], + 120322: [[117], 256], + 120323: [[118], 256], + 120324: [[119], 256], + 120325: [[120], 256], + 120326: [[121], 256], + 120327: [[122], 256], + 120328: [[65], 256], + 120329: [[66], 256], + 120330: [[67], 256], + 120331: [[68], 256], + 120332: [[69], 256], + 120333: [[70], 256], + 120334: [[71], 256], + 120335: [[72], 256], + 120336: [[73], 256], + 120337: [[74], 256], + 120338: [[75], 256], + 120339: [[76], 256], + 120340: [[77], 256], + 120341: [[78], 256], + 120342: [[79], 256], + 120343: [[80], 256], + 120344: [[81], 256], + 120345: [[82], 256], + 120346: [[83], 256], + 120347: [[84], 256], + 120348: [[85], 256], + 120349: [[86], 256], + 120350: [[87], 256], + 120351: [[88], 256], + 120352: [[89], 256], + 120353: [[90], 256], + 120354: [[97], 256], + 120355: [[98], 256], + 120356: [[99], 256], + 120357: [[100], 256], + 120358: [[101], 256], + 120359: [[102], 256], + 120360: [[103], 256], + 120361: [[104], 256], + 120362: [[105], 256], + 120363: [[106], 256], + 120364: [[107], 256], + 120365: [[108], 256], + 120366: [[109], 256], + 120367: [[110], 256], + 120368: [[111], 256], + 120369: [[112], 256], + 120370: [[113], 256], + 120371: [[114], 256], + 120372: [[115], 256], + 120373: [[116], 256], + 120374: [[117], 256], + 120375: [[118], 256], + 120376: [[119], 256], + 120377: [[120], 256], + 120378: [[121], 256], + 120379: [[122], 256], + 120380: [[65], 256], + 120381: [[66], 256], + 120382: [[67], 256], + 120383: [[68], 256], + 120384: [[69], 256], + 120385: [[70], 256], + 120386: [[71], 256], + 120387: [[72], 256], + 120388: [[73], 256], + 120389: [[74], 256], + 120390: [[75], 256], + 120391: [[76], 256], + 120392: [[77], 256], + 120393: [[78], 256], + 120394: [[79], 256], + 120395: [[80], 256], + 120396: [[81], 256], + 120397: [[82], 256], + 120398: [[83], 256], + 120399: [[84], 256], + 120400: [[85], 256], + 120401: [[86], 256], + 120402: [[87], 256], + 120403: [[88], 256], + 120404: [[89], 256], + 120405: [[90], 256], + 120406: [[97], 256], + 120407: [[98], 256], + 120408: [[99], 256], + 120409: [[100], 256], + 120410: [[101], 256], + 120411: [[102], 256], + 120412: [[103], 256], + 120413: [[104], 256], + 120414: [[105], 256], + 120415: [[106], 256], + 120416: [[107], 256], + 120417: [[108], 256], + 120418: [[109], 256], + 120419: [[110], 256], + 120420: [[111], 256], + 120421: [[112], 256], + 120422: [[113], 256], + 120423: [[114], 256], + 120424: [[115], 256], + 120425: [[116], 256], + 120426: [[117], 256], + 120427: [[118], 256], + 120428: [[119], 256], + 120429: [[120], 256], + 120430: [[121], 256], + 120431: [[122], 256], + 120432: [[65], 256], + 120433: [[66], 256], + 120434: [[67], 256], + 120435: [[68], 256], + 120436: [[69], 256], + 120437: [[70], 256], + 120438: [[71], 256], + 120439: [[72], 256], + 120440: [[73], 256], + 120441: [[74], 256], + 120442: [[75], 256], + 120443: [[76], 256], + 120444: [[77], 256], + 120445: [[78], 256], + 120446: [[79], 256], + 120447: [[80], 256], + 120448: [[81], 256], + 120449: [[82], 256], + 120450: [[83], 256], + 120451: [[84], 256], + 120452: [[85], 256], + 120453: [[86], 256], + 120454: [[87], 256], + 120455: [[88], 256], + 120456: [[89], 256], + 120457: [[90], 256], + 120458: [[97], 256], + 120459: [[98], 256], + 120460: [[99], 256], + 120461: [[100], 256], + 120462: [[101], 256], + 120463: [[102], 256], + 120464: [[103], 256], + 120465: [[104], 256], + 120466: [[105], 256], + 120467: [[106], 256], + 120468: [[107], 256], + 120469: [[108], 256], + 120470: [[109], 256], + 120471: [[110], 256], + 120472: [[111], 256], + 120473: [[112], 256], + 120474: [[113], 256], + 120475: [[114], 256], + 120476: [[115], 256], + 120477: [[116], 256], + 120478: [[117], 256], + 120479: [[118], 256], + 120480: [[119], 256], + 120481: [[120], 256], + 120482: [[121], 256], + 120483: [[122], 256], + 120484: [[305], 256], + 120485: [[567], 256], + 120488: [[913], 256], + 120489: [[914], 256], + 120490: [[915], 256], + 120491: [[916], 256], + 120492: [[917], 256], + 120493: [[918], 256], + 120494: [[919], 256], + 120495: [[920], 256], + 120496: [[921], 256], + 120497: [[922], 256], + 120498: [[923], 256], + 120499: [[924], 256], + 120500: [[925], 256], + 120501: [[926], 256], + 120502: [[927], 256], + 120503: [[928], 256], + 120504: [[929], 256], + 120505: [[1012], 256], + 120506: [[931], 256], + 120507: [[932], 256], + 120508: [[933], 256], + 120509: [[934], 256], + 120510: [[935], 256], + 120511: [[936], 256], + 120512: [[937], 256], + 120513: [[8711], 256], + 120514: [[945], 256], + 120515: [[946], 256], + 120516: [[947], 256], + 120517: [[948], 256], + 120518: [[949], 256], + 120519: [[950], 256], + 120520: [[951], 256], + 120521: [[952], 256], + 120522: [[953], 256], + 120523: [[954], 256], + 120524: [[955], 256], + 120525: [[956], 256], + 120526: [[957], 256], + 120527: [[958], 256], + 120528: [[959], 256], + 120529: [[960], 256], + 120530: [[961], 256], + 120531: [[962], 256], + 120532: [[963], 256], + 120533: [[964], 256], + 120534: [[965], 256], + 120535: [[966], 256], + 120536: [[967], 256], + 120537: [[968], 256], + 120538: [[969], 256], + 120539: [[8706], 256], + 120540: [[1013], 256], + 120541: [[977], 256], + 120542: [[1008], 256], + 120543: [[981], 256], + 120544: [[1009], 256], + 120545: [[982], 256], + 120546: [[913], 256], + 120547: [[914], 256], + 120548: [[915], 256], + 120549: [[916], 256], + 120550: [[917], 256], + 120551: [[918], 256], + 120552: [[919], 256], + 120553: [[920], 256], + 120554: [[921], 256], + 120555: [[922], 256], + 120556: [[923], 256], + 120557: [[924], 256], + 120558: [[925], 256], + 120559: [[926], 256], + 120560: [[927], 256], + 120561: [[928], 256], + 120562: [[929], 256], + 120563: [[1012], 256], + 120564: [[931], 256], + 120565: [[932], 256], + 120566: [[933], 256], + 120567: [[934], 256], + 120568: [[935], 256], + 120569: [[936], 256], + 120570: [[937], 256], + 120571: [[8711], 256], + 120572: [[945], 256], + 120573: [[946], 256], + 120574: [[947], 256], + 120575: [[948], 256] + }, + 55040: { + 120576: [[949], 256], + 120577: [[950], 256], + 120578: [[951], 256], + 120579: [[952], 256], + 120580: [[953], 256], + 120581: [[954], 256], + 120582: [[955], 256], + 120583: [[956], 256], + 120584: [[957], 256], + 120585: [[958], 256], + 120586: [[959], 256], + 120587: [[960], 256], + 120588: [[961], 256], + 120589: [[962], 256], + 120590: [[963], 256], + 120591: [[964], 256], + 120592: [[965], 256], + 120593: [[966], 256], + 120594: [[967], 256], + 120595: [[968], 256], + 120596: [[969], 256], + 120597: [[8706], 256], + 120598: [[1013], 256], + 120599: [[977], 256], + 120600: [[1008], 256], + 120601: [[981], 256], + 120602: [[1009], 256], + 120603: [[982], 256], + 120604: [[913], 256], + 120605: [[914], 256], + 120606: [[915], 256], + 120607: [[916], 256], + 120608: [[917], 256], + 120609: [[918], 256], + 120610: [[919], 256], + 120611: [[920], 256], + 120612: [[921], 256], + 120613: [[922], 256], + 120614: [[923], 256], + 120615: [[924], 256], + 120616: [[925], 256], + 120617: [[926], 256], + 120618: [[927], 256], + 120619: [[928], 256], + 120620: [[929], 256], + 120621: [[1012], 256], + 120622: [[931], 256], + 120623: [[932], 256], + 120624: [[933], 256], + 120625: [[934], 256], + 120626: [[935], 256], + 120627: [[936], 256], + 120628: [[937], 256], + 120629: [[8711], 256], + 120630: [[945], 256], + 120631: [[946], 256], + 120632: [[947], 256], + 120633: [[948], 256], + 120634: [[949], 256], + 120635: [[950], 256], + 120636: [[951], 256], + 120637: [[952], 256], + 120638: [[953], 256], + 120639: [[954], 256], + 120640: [[955], 256], + 120641: [[956], 256], + 120642: [[957], 256], + 120643: [[958], 256], + 120644: [[959], 256], + 120645: [[960], 256], + 120646: [[961], 256], + 120647: [[962], 256], + 120648: [[963], 256], + 120649: [[964], 256], + 120650: [[965], 256], + 120651: [[966], 256], + 120652: [[967], 256], + 120653: [[968], 256], + 120654: [[969], 256], + 120655: [[8706], 256], + 120656: [[1013], 256], + 120657: [[977], 256], + 120658: [[1008], 256], + 120659: [[981], 256], + 120660: [[1009], 256], + 120661: [[982], 256], + 120662: [[913], 256], + 120663: [[914], 256], + 120664: [[915], 256], + 120665: [[916], 256], + 120666: [[917], 256], + 120667: [[918], 256], + 120668: [[919], 256], + 120669: [[920], 256], + 120670: [[921], 256], + 120671: [[922], 256], + 120672: [[923], 256], + 120673: [[924], 256], + 120674: [[925], 256], + 120675: [[926], 256], + 120676: [[927], 256], + 120677: [[928], 256], + 120678: [[929], 256], + 120679: [[1012], 256], + 120680: [[931], 256], + 120681: [[932], 256], + 120682: [[933], 256], + 120683: [[934], 256], + 120684: [[935], 256], + 120685: [[936], 256], + 120686: [[937], 256], + 120687: [[8711], 256], + 120688: [[945], 256], + 120689: [[946], 256], + 120690: [[947], 256], + 120691: [[948], 256], + 120692: [[949], 256], + 120693: [[950], 256], + 120694: [[951], 256], + 120695: [[952], 256], + 120696: [[953], 256], + 120697: [[954], 256], + 120698: [[955], 256], + 120699: [[956], 256], + 120700: [[957], 256], + 120701: [[958], 256], + 120702: [[959], 256], + 120703: [[960], 256], + 120704: [[961], 256], + 120705: [[962], 256], + 120706: [[963], 256], + 120707: [[964], 256], + 120708: [[965], 256], + 120709: [[966], 256], + 120710: [[967], 256], + 120711: [[968], 256], + 120712: [[969], 256], + 120713: [[8706], 256], + 120714: [[1013], 256], + 120715: [[977], 256], + 120716: [[1008], 256], + 120717: [[981], 256], + 120718: [[1009], 256], + 120719: [[982], 256], + 120720: [[913], 256], + 120721: [[914], 256], + 120722: [[915], 256], + 120723: [[916], 256], + 120724: [[917], 256], + 120725: [[918], 256], + 120726: [[919], 256], + 120727: [[920], 256], + 120728: [[921], 256], + 120729: [[922], 256], + 120730: [[923], 256], + 120731: [[924], 256], + 120732: [[925], 256], + 120733: [[926], 256], + 120734: [[927], 256], + 120735: [[928], 256], + 120736: [[929], 256], + 120737: [[1012], 256], + 120738: [[931], 256], + 120739: [[932], 256], + 120740: [[933], 256], + 120741: [[934], 256], + 120742: [[935], 256], + 120743: [[936], 256], + 120744: [[937], 256], + 120745: [[8711], 256], + 120746: [[945], 256], + 120747: [[946], 256], + 120748: [[947], 256], + 120749: [[948], 256], + 120750: [[949], 256], + 120751: [[950], 256], + 120752: [[951], 256], + 120753: [[952], 256], + 120754: [[953], 256], + 120755: [[954], 256], + 120756: [[955], 256], + 120757: [[956], 256], + 120758: [[957], 256], + 120759: [[958], 256], + 120760: [[959], 256], + 120761: [[960], 256], + 120762: [[961], 256], + 120763: [[962], 256], + 120764: [[963], 256], + 120765: [[964], 256], + 120766: [[965], 256], + 120767: [[966], 256], + 120768: [[967], 256], + 120769: [[968], 256], + 120770: [[969], 256], + 120771: [[8706], 256], + 120772: [[1013], 256], + 120773: [[977], 256], + 120774: [[1008], 256], + 120775: [[981], 256], + 120776: [[1009], 256], + 120777: [[982], 256], + 120778: [[988], 256], + 120779: [[989], 256], + 120782: [[48], 256], + 120783: [[49], 256], + 120784: [[50], 256], + 120785: [[51], 256], + 120786: [[52], 256], + 120787: [[53], 256], + 120788: [[54], 256], + 120789: [[55], 256], + 120790: [[56], 256], + 120791: [[57], 256], + 120792: [[48], 256], + 120793: [[49], 256], + 120794: [[50], 256], + 120795: [[51], 256], + 120796: [[52], 256], + 120797: [[53], 256], + 120798: [[54], 256], + 120799: [[55], 256], + 120800: [[56], 256], + 120801: [[57], 256], + 120802: [[48], 256], + 120803: [[49], 256], + 120804: [[50], 256], + 120805: [[51], 256], + 120806: [[52], 256], + 120807: [[53], 256], + 120808: [[54], 256], + 120809: [[55], 256], + 120810: [[56], 256], + 120811: [[57], 256], + 120812: [[48], 256], + 120813: [[49], 256], + 120814: [[50], 256], + 120815: [[51], 256], + 120816: [[52], 256], + 120817: [[53], 256], + 120818: [[54], 256], + 120819: [[55], 256], + 120820: [[56], 256], + 120821: [[57], 256], + 120822: [[48], 256], + 120823: [[49], 256], + 120824: [[50], 256], + 120825: [[51], 256], + 120826: [[52], 256], + 120827: [[53], 256], + 120828: [[54], 256], + 120829: [[55], 256], + 120830: [[56], 256], + 120831: [[57], 256] + }, + 60928: { + 126464: [[1575], 256], + 126465: [[1576], 256], + 126466: [[1580], 256], + 126467: [[1583], 256], + 126469: [[1608], 256], + 126470: [[1586], 256], + 126471: [[1581], 256], + 126472: [[1591], 256], + 126473: [[1610], 256], + 126474: [[1603], 256], + 126475: [[1604], 256], + 126476: [[1605], 256], + 126477: [[1606], 256], + 126478: [[1587], 256], + 126479: [[1593], 256], + 126480: [[1601], 256], + 126481: [[1589], 256], + 126482: [[1602], 256], + 126483: [[1585], 256], + 126484: [[1588], 256], + 126485: [[1578], 256], + 126486: [[1579], 256], + 126487: [[1582], 256], + 126488: [[1584], 256], + 126489: [[1590], 256], + 126490: [[1592], 256], + 126491: [[1594], 256], + 126492: [[1646], 256], + 126493: [[1722], 256], + 126494: [[1697], 256], + 126495: [[1647], 256], + 126497: [[1576], 256], + 126498: [[1580], 256], + 126500: [[1607], 256], + 126503: [[1581], 256], + 126505: [[1610], 256], + 126506: [[1603], 256], + 126507: [[1604], 256], + 126508: [[1605], 256], + 126509: [[1606], 256], + 126510: [[1587], 256], + 126511: [[1593], 256], + 126512: [[1601], 256], + 126513: [[1589], 256], + 126514: [[1602], 256], + 126516: [[1588], 256], + 126517: [[1578], 256], + 126518: [[1579], 256], + 126519: [[1582], 256], + 126521: [[1590], 256], + 126523: [[1594], 256], + 126530: [[1580], 256], + 126535: [[1581], 256], + 126537: [[1610], 256], + 126539: [[1604], 256], + 126541: [[1606], 256], + 126542: [[1587], 256], + 126543: [[1593], 256], + 126545: [[1589], 256], + 126546: [[1602], 256], + 126548: [[1588], 256], + 126551: [[1582], 256], + 126553: [[1590], 256], + 126555: [[1594], 256], + 126557: [[1722], 256], + 126559: [[1647], 256], + 126561: [[1576], 256], + 126562: [[1580], 256], + 126564: [[1607], 256], + 126567: [[1581], 256], + 126568: [[1591], 256], + 126569: [[1610], 256], + 126570: [[1603], 256], + 126572: [[1605], 256], + 126573: [[1606], 256], + 126574: [[1587], 256], + 126575: [[1593], 256], + 126576: [[1601], 256], + 126577: [[1589], 256], + 126578: [[1602], 256], + 126580: [[1588], 256], + 126581: [[1578], 256], + 126582: [[1579], 256], + 126583: [[1582], 256], + 126585: [[1590], 256], + 126586: [[1592], 256], + 126587: [[1594], 256], + 126588: [[1646], 256], + 126590: [[1697], 256], + 126592: [[1575], 256], + 126593: [[1576], 256], + 126594: [[1580], 256], + 126595: [[1583], 256], + 126596: [[1607], 256], + 126597: [[1608], 256], + 126598: [[1586], 256], + 126599: [[1581], 256], + 126600: [[1591], 256], + 126601: [[1610], 256], + 126603: [[1604], 256], + 126604: [[1605], 256], + 126605: [[1606], 256], + 126606: [[1587], 256], + 126607: [[1593], 256], + 126608: [[1601], 256], + 126609: [[1589], 256], + 126610: [[1602], 256], + 126611: [[1585], 256], + 126612: [[1588], 256], + 126613: [[1578], 256], + 126614: [[1579], 256], + 126615: [[1582], 256], + 126616: [[1584], 256], + 126617: [[1590], 256], + 126618: [[1592], 256], + 126619: [[1594], 256], + 126625: [[1576], 256], + 126626: [[1580], 256], + 126627: [[1583], 256], + 126629: [[1608], 256], + 126630: [[1586], 256], + 126631: [[1581], 256], + 126632: [[1591], 256], + 126633: [[1610], 256], + 126635: [[1604], 256], + 126636: [[1605], 256], + 126637: [[1606], 256], + 126638: [[1587], 256], + 126639: [[1593], 256], + 126640: [[1601], 256], + 126641: [[1589], 256], + 126642: [[1602], 256], + 126643: [[1585], 256], + 126644: [[1588], 256], + 126645: [[1578], 256], + 126646: [[1579], 256], + 126647: [[1582], 256], + 126648: [[1584], 256], + 126649: [[1590], 256], + 126650: [[1592], 256], + 126651: [[1594], 256] + }, + 61696: { + 127232: [[48, 46], 256], + 127233: [[48, 44], 256], + 127234: [[49, 44], 256], + 127235: [[50, 44], 256], + 127236: [[51, 44], 256], + 127237: [[52, 44], 256], + 127238: [[53, 44], 256], + 127239: [[54, 44], 256], + 127240: [[55, 44], 256], + 127241: [[56, 44], 256], + 127242: [[57, 44], 256], + 127248: [[40, 65, 41], 256], + 127249: [[40, 66, 41], 256], + 127250: [[40, 67, 41], 256], + 127251: [[40, 68, 41], 256], + 127252: [[40, 69, 41], 256], + 127253: [[40, 70, 41], 256], + 127254: [[40, 71, 41], 256], + 127255: [[40, 72, 41], 256], + 127256: [[40, 73, 41], 256], + 127257: [[40, 74, 41], 256], + 127258: [[40, 75, 41], 256], + 127259: [[40, 76, 41], 256], + 127260: [[40, 77, 41], 256], + 127261: [[40, 78, 41], 256], + 127262: [[40, 79, 41], 256], + 127263: [[40, 80, 41], 256], + 127264: [[40, 81, 41], 256], + 127265: [[40, 82, 41], 256], + 127266: [[40, 83, 41], 256], + 127267: [[40, 84, 41], 256], + 127268: [[40, 85, 41], 256], + 127269: [[40, 86, 41], 256], + 127270: [[40, 87, 41], 256], + 127271: [[40, 88, 41], 256], + 127272: [[40, 89, 41], 256], + 127273: [[40, 90, 41], 256], + 127274: [[12308, 83, 12309], 256], + 127275: [[67], 256], + 127276: [[82], 256], + 127277: [[67, 68], 256], + 127278: [[87, 90], 256], + 127280: [[65], 256], + 127281: [[66], 256], + 127282: [[67], 256], + 127283: [[68], 256], + 127284: [[69], 256], + 127285: [[70], 256], + 127286: [[71], 256], + 127287: [[72], 256], + 127288: [[73], 256], + 127289: [[74], 256], + 127290: [[75], 256], + 127291: [[76], 256], + 127292: [[77], 256], + 127293: [[78], 256], + 127294: [[79], 256], + 127295: [[80], 256], + 127296: [[81], 256], + 127297: [[82], 256], + 127298: [[83], 256], + 127299: [[84], 256], + 127300: [[85], 256], + 127301: [[86], 256], + 127302: [[87], 256], + 127303: [[88], 256], + 127304: [[89], 256], + 127305: [[90], 256], + 127306: [[72, 86], 256], + 127307: [[77, 86], 256], + 127308: [[83, 68], 256], + 127309: [[83, 83], 256], + 127310: [[80, 80, 86], 256], + 127311: [[87, 67], 256], + 127338: [[77, 67], 256], + 127339: [[77, 68], 256], + 127376: [[68, 74], 256] + }, + 61952: { + 127488: [[12411, 12363], 256], + 127489: [[12467, 12467], 256], + 127490: [[12469], 256], + 127504: [[25163], 256], + 127505: [[23383], 256], + 127506: [[21452], 256], + 127507: [[12487], 256], + 127508: [[20108], 256], + 127509: [[22810], 256], + 127510: [[35299], 256], + 127511: [[22825], 256], + 127512: [[20132], 256], + 127513: [[26144], 256], + 127514: [[28961], 256], + 127515: [[26009], 256], + 127516: [[21069], 256], + 127517: [[24460], 256], + 127518: [[20877], 256], + 127519: [[26032], 256], + 127520: [[21021], 256], + 127521: [[32066], 256], + 127522: [[29983], 256], + 127523: [[36009], 256], + 127524: [[22768], 256], + 127525: [[21561], 256], + 127526: [[28436], 256], + 127527: [[25237], 256], + 127528: [[25429], 256], + 127529: [[19968], 256], + 127530: [[19977], 256], + 127531: [[36938], 256], + 127532: [[24038], 256], + 127533: [[20013], 256], + 127534: [[21491], 256], + 127535: [[25351], 256], + 127536: [[36208], 256], + 127537: [[25171], 256], + 127538: [[31105], 256], + 127539: [[31354], 256], + 127540: [[21512], 256], + 127541: [[28288], 256], + 127542: [[26377], 256], + 127543: [[26376], 256], + 127544: [[30003], 256], + 127545: [[21106], 256], + 127546: [[21942], 256], + 127552: [[12308, 26412, 12309], 256], + 127553: [[12308, 19977, 12309], 256], + 127554: [[12308, 20108, 12309], 256], + 127555: [[12308, 23433, 12309], 256], + 127556: [[12308, 28857, 12309], 256], + 127557: [[12308, 25171, 12309], 256], + 127558: [[12308, 30423, 12309], 256], + 127559: [[12308, 21213, 12309], 256], + 127560: [[12308, 25943, 12309], 256], + 127568: [[24471], 256], + 127569: [[21487], 256] + }, + 63488: { + 194560: [[20029]], + 194561: [[20024]], + 194562: [[20033]], + 194563: [[131362]], + 194564: [[20320]], + 194565: [[20398]], + 194566: [[20411]], + 194567: [[20482]], + 194568: [[20602]], + 194569: [[20633]], + 194570: [[20711]], + 194571: [[20687]], + 194572: [[13470]], + 194573: [[132666]], + 194574: [[20813]], + 194575: [[20820]], + 194576: [[20836]], + 194577: [[20855]], + 194578: [[132380]], + 194579: [[13497]], + 194580: [[20839]], + 194581: [[20877]], + 194582: [[132427]], + 194583: [[20887]], + 194584: [[20900]], + 194585: [[20172]], + 194586: [[20908]], + 194587: [[20917]], + 194588: [[168415]], + 194589: [[20981]], + 194590: [[20995]], + 194591: [[13535]], + 194592: [[21051]], + 194593: [[21062]], + 194594: [[21106]], + 194595: [[21111]], + 194596: [[13589]], + 194597: [[21191]], + 194598: [[21193]], + 194599: [[21220]], + 194600: [[21242]], + 194601: [[21253]], + 194602: [[21254]], + 194603: [[21271]], + 194604: [[21321]], + 194605: [[21329]], + 194606: [[21338]], + 194607: [[21363]], + 194608: [[21373]], + 194609: [[21375]], + 194610: [[21375]], + 194611: [[21375]], + 194612: [[133676]], + 194613: [[28784]], + 194614: [[21450]], + 194615: [[21471]], + 194616: [[133987]], + 194617: [[21483]], + 194618: [[21489]], + 194619: [[21510]], + 194620: [[21662]], + 194621: [[21560]], + 194622: [[21576]], + 194623: [[21608]], + 194624: [[21666]], + 194625: [[21750]], + 194626: [[21776]], + 194627: [[21843]], + 194628: [[21859]], + 194629: [[21892]], + 194630: [[21892]], + 194631: [[21913]], + 194632: [[21931]], + 194633: [[21939]], + 194634: [[21954]], + 194635: [[22294]], + 194636: [[22022]], + 194637: [[22295]], + 194638: [[22097]], + 194639: [[22132]], + 194640: [[20999]], + 194641: [[22766]], + 194642: [[22478]], + 194643: [[22516]], + 194644: [[22541]], + 194645: [[22411]], + 194646: [[22578]], + 194647: [[22577]], + 194648: [[22700]], + 194649: [[136420]], + 194650: [[22770]], + 194651: [[22775]], + 194652: [[22790]], + 194653: [[22810]], + 194654: [[22818]], + 194655: [[22882]], + 194656: [[136872]], + 194657: [[136938]], + 194658: [[23020]], + 194659: [[23067]], + 194660: [[23079]], + 194661: [[23000]], + 194662: [[23142]], + 194663: [[14062]], + 194664: [[14076]], + 194665: [[23304]], + 194666: [[23358]], + 194667: [[23358]], + 194668: [[137672]], + 194669: [[23491]], + 194670: [[23512]], + 194671: [[23527]], + 194672: [[23539]], + 194673: [[138008]], + 194674: [[23551]], + 194675: [[23558]], + 194676: [[24403]], + 194677: [[23586]], + 194678: [[14209]], + 194679: [[23648]], + 194680: [[23662]], + 194681: [[23744]], + 194682: [[23693]], + 194683: [[138724]], + 194684: [[23875]], + 194685: [[138726]], + 194686: [[23918]], + 194687: [[23915]], + 194688: [[23932]], + 194689: [[24033]], + 194690: [[24034]], + 194691: [[14383]], + 194692: [[24061]], + 194693: [[24104]], + 194694: [[24125]], + 194695: [[24169]], + 194696: [[14434]], + 194697: [[139651]], + 194698: [[14460]], + 194699: [[24240]], + 194700: [[24243]], + 194701: [[24246]], + 194702: [[24266]], + 194703: [[172946]], + 194704: [[24318]], + 194705: [[140081]], + 194706: [[140081]], + 194707: [[33281]], + 194708: [[24354]], + 194709: [[24354]], + 194710: [[14535]], + 194711: [[144056]], + 194712: [[156122]], + 194713: [[24418]], + 194714: [[24427]], + 194715: [[14563]], + 194716: [[24474]], + 194717: [[24525]], + 194718: [[24535]], + 194719: [[24569]], + 194720: [[24705]], + 194721: [[14650]], + 194722: [[14620]], + 194723: [[24724]], + 194724: [[141012]], + 194725: [[24775]], + 194726: [[24904]], + 194727: [[24908]], + 194728: [[24910]], + 194729: [[24908]], + 194730: [[24954]], + 194731: [[24974]], + 194732: [[25010]], + 194733: [[24996]], + 194734: [[25007]], + 194735: [[25054]], + 194736: [[25074]], + 194737: [[25078]], + 194738: [[25104]], + 194739: [[25115]], + 194740: [[25181]], + 194741: [[25265]], + 194742: [[25300]], + 194743: [[25424]], + 194744: [[142092]], + 194745: [[25405]], + 194746: [[25340]], + 194747: [[25448]], + 194748: [[25475]], + 194749: [[25572]], + 194750: [[142321]], + 194751: [[25634]], + 194752: [[25541]], + 194753: [[25513]], + 194754: [[14894]], + 194755: [[25705]], + 194756: [[25726]], + 194757: [[25757]], + 194758: [[25719]], + 194759: [[14956]], + 194760: [[25935]], + 194761: [[25964]], + 194762: [[143370]], + 194763: [[26083]], + 194764: [[26360]], + 194765: [[26185]], + 194766: [[15129]], + 194767: [[26257]], + 194768: [[15112]], + 194769: [[15076]], + 194770: [[20882]], + 194771: [[20885]], + 194772: [[26368]], + 194773: [[26268]], + 194774: [[32941]], + 194775: [[17369]], + 194776: [[26391]], + 194777: [[26395]], + 194778: [[26401]], + 194779: [[26462]], + 194780: [[26451]], + 194781: [[144323]], + 194782: [[15177]], + 194783: [[26618]], + 194784: [[26501]], + 194785: [[26706]], + 194786: [[26757]], + 194787: [[144493]], + 194788: [[26766]], + 194789: [[26655]], + 194790: [[26900]], + 194791: [[15261]], + 194792: [[26946]], + 194793: [[27043]], + 194794: [[27114]], + 194795: [[27304]], + 194796: [[145059]], + 194797: [[27355]], + 194798: [[15384]], + 194799: [[27425]], + 194800: [[145575]], + 194801: [[27476]], + 194802: [[15438]], + 194803: [[27506]], + 194804: [[27551]], + 194805: [[27578]], + 194806: [[27579]], + 194807: [[146061]], + 194808: [[138507]], + 194809: [[146170]], + 194810: [[27726]], + 194811: [[146620]], + 194812: [[27839]], + 194813: [[27853]], + 194814: [[27751]], + 194815: [[27926]] + }, + 63744: { + 63744: [[35912]], + 63745: [[26356]], + 63746: [[36554]], + 63747: [[36040]], + 63748: [[28369]], + 63749: [[20018]], + 63750: [[21477]], + 63751: [[40860]], + 63752: [[40860]], + 63753: [[22865]], + 63754: [[37329]], + 63755: [[21895]], + 63756: [[22856]], + 63757: [[25078]], + 63758: [[30313]], + 63759: [[32645]], + 63760: [[34367]], + 63761: [[34746]], + 63762: [[35064]], + 63763: [[37007]], + 63764: [[27138]], + 63765: [[27931]], + 63766: [[28889]], + 63767: [[29662]], + 63768: [[33853]], + 63769: [[37226]], + 63770: [[39409]], + 63771: [[20098]], + 63772: [[21365]], + 63773: [[27396]], + 63774: [[29211]], + 63775: [[34349]], + 63776: [[40478]], + 63777: [[23888]], + 63778: [[28651]], + 63779: [[34253]], + 63780: [[35172]], + 63781: [[25289]], + 63782: [[33240]], + 63783: [[34847]], + 63784: [[24266]], + 63785: [[26391]], + 63786: [[28010]], + 63787: [[29436]], + 63788: [[37070]], + 63789: [[20358]], + 63790: [[20919]], + 63791: [[21214]], + 63792: [[25796]], + 63793: [[27347]], + 63794: [[29200]], + 63795: [[30439]], + 63796: [[32769]], + 63797: [[34310]], + 63798: [[34396]], + 63799: [[36335]], + 63800: [[38706]], + 63801: [[39791]], + 63802: [[40442]], + 63803: [[30860]], + 63804: [[31103]], + 63805: [[32160]], + 63806: [[33737]], + 63807: [[37636]], + 63808: [[40575]], + 63809: [[35542]], + 63810: [[22751]], + 63811: [[24324]], + 63812: [[31840]], + 63813: [[32894]], + 63814: [[29282]], + 63815: [[30922]], + 63816: [[36034]], + 63817: [[38647]], + 63818: [[22744]], + 63819: [[23650]], + 63820: [[27155]], + 63821: [[28122]], + 63822: [[28431]], + 63823: [[32047]], + 63824: [[32311]], + 63825: [[38475]], + 63826: [[21202]], + 63827: [[32907]], + 63828: [[20956]], + 63829: [[20940]], + 63830: [[31260]], + 63831: [[32190]], + 63832: [[33777]], + 63833: [[38517]], + 63834: [[35712]], + 63835: [[25295]], + 63836: [[27138]], + 63837: [[35582]], + 63838: [[20025]], + 63839: [[23527]], + 63840: [[24594]], + 63841: [[29575]], + 63842: [[30064]], + 63843: [[21271]], + 63844: [[30971]], + 63845: [[20415]], + 63846: [[24489]], + 63847: [[19981]], + 63848: [[27852]], + 63849: [[25976]], + 63850: [[32034]], + 63851: [[21443]], + 63852: [[22622]], + 63853: [[30465]], + 63854: [[33865]], + 63855: [[35498]], + 63856: [[27578]], + 63857: [[36784]], + 63858: [[27784]], + 63859: [[25342]], + 63860: [[33509]], + 63861: [[25504]], + 63862: [[30053]], + 63863: [[20142]], + 63864: [[20841]], + 63865: [[20937]], + 63866: [[26753]], + 63867: [[31975]], + 63868: [[33391]], + 63869: [[35538]], + 63870: [[37327]], + 63871: [[21237]], + 63872: [[21570]], + 63873: [[22899]], + 63874: [[24300]], + 63875: [[26053]], + 63876: [[28670]], + 63877: [[31018]], + 63878: [[38317]], + 63879: [[39530]], + 63880: [[40599]], + 63881: [[40654]], + 63882: [[21147]], + 63883: [[26310]], + 63884: [[27511]], + 63885: [[36706]], + 63886: [[24180]], + 63887: [[24976]], + 63888: [[25088]], + 63889: [[25754]], + 63890: [[28451]], + 63891: [[29001]], + 63892: [[29833]], + 63893: [[31178]], + 63894: [[32244]], + 63895: [[32879]], + 63896: [[36646]], + 63897: [[34030]], + 63898: [[36899]], + 63899: [[37706]], + 63900: [[21015]], + 63901: [[21155]], + 63902: [[21693]], + 63903: [[28872]], + 63904: [[35010]], + 63905: [[35498]], + 63906: [[24265]], + 63907: [[24565]], + 63908: [[25467]], + 63909: [[27566]], + 63910: [[31806]], + 63911: [[29557]], + 63912: [[20196]], + 63913: [[22265]], + 63914: [[23527]], + 63915: [[23994]], + 63916: [[24604]], + 63917: [[29618]], + 63918: [[29801]], + 63919: [[32666]], + 63920: [[32838]], + 63921: [[37428]], + 63922: [[38646]], + 63923: [[38728]], + 63924: [[38936]], + 63925: [[20363]], + 63926: [[31150]], + 63927: [[37300]], + 63928: [[38584]], + 63929: [[24801]], + 63930: [[20102]], + 63931: [[20698]], + 63932: [[23534]], + 63933: [[23615]], + 63934: [[26009]], + 63935: [[27138]], + 63936: [[29134]], + 63937: [[30274]], + 63938: [[34044]], + 63939: [[36988]], + 63940: [[40845]], + 63941: [[26248]], + 63942: [[38446]], + 63943: [[21129]], + 63944: [[26491]], + 63945: [[26611]], + 63946: [[27969]], + 63947: [[28316]], + 63948: [[29705]], + 63949: [[30041]], + 63950: [[30827]], + 63951: [[32016]], + 63952: [[39006]], + 63953: [[20845]], + 63954: [[25134]], + 63955: [[38520]], + 63956: [[20523]], + 63957: [[23833]], + 63958: [[28138]], + 63959: [[36650]], + 63960: [[24459]], + 63961: [[24900]], + 63962: [[26647]], + 63963: [[29575]], + 63964: [[38534]], + 63965: [[21033]], + 63966: [[21519]], + 63967: [[23653]], + 63968: [[26131]], + 63969: [[26446]], + 63970: [[26792]], + 63971: [[27877]], + 63972: [[29702]], + 63973: [[30178]], + 63974: [[32633]], + 63975: [[35023]], + 63976: [[35041]], + 63977: [[37324]], + 63978: [[38626]], + 63979: [[21311]], + 63980: [[28346]], + 63981: [[21533]], + 63982: [[29136]], + 63983: [[29848]], + 63984: [[34298]], + 63985: [[38563]], + 63986: [[40023]], + 63987: [[40607]], + 63988: [[26519]], + 63989: [[28107]], + 63990: [[33256]], + 63991: [[31435]], + 63992: [[31520]], + 63993: [[31890]], + 63994: [[29376]], + 63995: [[28825]], + 63996: [[35672]], + 63997: [[20160]], + 63998: [[33590]], + 63999: [[21050]], + 194816: [[27966]], + 194817: [[28023]], + 194818: [[27969]], + 194819: [[28009]], + 194820: [[28024]], + 194821: [[28037]], + 194822: [[146718]], + 194823: [[27956]], + 194824: [[28207]], + 194825: [[28270]], + 194826: [[15667]], + 194827: [[28363]], + 194828: [[28359]], + 194829: [[147153]], + 194830: [[28153]], + 194831: [[28526]], + 194832: [[147294]], + 194833: [[147342]], + 194834: [[28614]], + 194835: [[28729]], + 194836: [[28702]], + 194837: [[28699]], + 194838: [[15766]], + 194839: [[28746]], + 194840: [[28797]], + 194841: [[28791]], + 194842: [[28845]], + 194843: [[132389]], + 194844: [[28997]], + 194845: [[148067]], + 194846: [[29084]], + 194847: [[148395]], + 194848: [[29224]], + 194849: [[29237]], + 194850: [[29264]], + 194851: [[149000]], + 194852: [[29312]], + 194853: [[29333]], + 194854: [[149301]], + 194855: [[149524]], + 194856: [[29562]], + 194857: [[29579]], + 194858: [[16044]], + 194859: [[29605]], + 194860: [[16056]], + 194861: [[16056]], + 194862: [[29767]], + 194863: [[29788]], + 194864: [[29809]], + 194865: [[29829]], + 194866: [[29898]], + 194867: [[16155]], + 194868: [[29988]], + 194869: [[150582]], + 194870: [[30014]], + 194871: [[150674]], + 194872: [[30064]], + 194873: [[139679]], + 194874: [[30224]], + 194875: [[151457]], + 194876: [[151480]], + 194877: [[151620]], + 194878: [[16380]], + 194879: [[16392]], + 194880: [[30452]], + 194881: [[151795]], + 194882: [[151794]], + 194883: [[151833]], + 194884: [[151859]], + 194885: [[30494]], + 194886: [[30495]], + 194887: [[30495]], + 194888: [[30538]], + 194889: [[16441]], + 194890: [[30603]], + 194891: [[16454]], + 194892: [[16534]], + 194893: [[152605]], + 194894: [[30798]], + 194895: [[30860]], + 194896: [[30924]], + 194897: [[16611]], + 194898: [[153126]], + 194899: [[31062]], + 194900: [[153242]], + 194901: [[153285]], + 194902: [[31119]], + 194903: [[31211]], + 194904: [[16687]], + 194905: [[31296]], + 194906: [[31306]], + 194907: [[31311]], + 194908: [[153980]], + 194909: [[154279]], + 194910: [[154279]], + 194911: [[31470]], + 194912: [[16898]], + 194913: [[154539]], + 194914: [[31686]], + 194915: [[31689]], + 194916: [[16935]], + 194917: [[154752]], + 194918: [[31954]], + 194919: [[17056]], + 194920: [[31976]], + 194921: [[31971]], + 194922: [[32000]], + 194923: [[155526]], + 194924: [[32099]], + 194925: [[17153]], + 194926: [[32199]], + 194927: [[32258]], + 194928: [[32325]], + 194929: [[17204]], + 194930: [[156200]], + 194931: [[156231]], + 194932: [[17241]], + 194933: [[156377]], + 194934: [[32634]], + 194935: [[156478]], + 194936: [[32661]], + 194937: [[32762]], + 194938: [[32773]], + 194939: [[156890]], + 194940: [[156963]], + 194941: [[32864]], + 194942: [[157096]], + 194943: [[32880]], + 194944: [[144223]], + 194945: [[17365]], + 194946: [[32946]], + 194947: [[33027]], + 194948: [[17419]], + 194949: [[33086]], + 194950: [[23221]], + 194951: [[157607]], + 194952: [[157621]], + 194953: [[144275]], + 194954: [[144284]], + 194955: [[33281]], + 194956: [[33284]], + 194957: [[36766]], + 194958: [[17515]], + 194959: [[33425]], + 194960: [[33419]], + 194961: [[33437]], + 194962: [[21171]], + 194963: [[33457]], + 194964: [[33459]], + 194965: [[33469]], + 194966: [[33510]], + 194967: [[158524]], + 194968: [[33509]], + 194969: [[33565]], + 194970: [[33635]], + 194971: [[33709]], + 194972: [[33571]], + 194973: [[33725]], + 194974: [[33767]], + 194975: [[33879]], + 194976: [[33619]], + 194977: [[33738]], + 194978: [[33740]], + 194979: [[33756]], + 194980: [[158774]], + 194981: [[159083]], + 194982: [[158933]], + 194983: [[17707]], + 194984: [[34033]], + 194985: [[34035]], + 194986: [[34070]], + 194987: [[160714]], + 194988: [[34148]], + 194989: [[159532]], + 194990: [[17757]], + 194991: [[17761]], + 194992: [[159665]], + 194993: [[159954]], + 194994: [[17771]], + 194995: [[34384]], + 194996: [[34396]], + 194997: [[34407]], + 194998: [[34409]], + 194999: [[34473]], + 195000: [[34440]], + 195001: [[34574]], + 195002: [[34530]], + 195003: [[34681]], + 195004: [[34600]], + 195005: [[34667]], + 195006: [[34694]], + 195007: [[17879]], + 195008: [[34785]], + 195009: [[34817]], + 195010: [[17913]], + 195011: [[34912]], + 195012: [[34915]], + 195013: [[161383]], + 195014: [[35031]], + 195015: [[35038]], + 195016: [[17973]], + 195017: [[35066]], + 195018: [[13499]], + 195019: [[161966]], + 195020: [[162150]], + 195021: [[18110]], + 195022: [[18119]], + 195023: [[35488]], + 195024: [[35565]], + 195025: [[35722]], + 195026: [[35925]], + 195027: [[162984]], + 195028: [[36011]], + 195029: [[36033]], + 195030: [[36123]], + 195031: [[36215]], + 195032: [[163631]], + 195033: [[133124]], + 195034: [[36299]], + 195035: [[36284]], + 195036: [[36336]], + 195037: [[133342]], + 195038: [[36564]], + 195039: [[36664]], + 195040: [[165330]], + 195041: [[165357]], + 195042: [[37012]], + 195043: [[37105]], + 195044: [[37137]], + 195045: [[165678]], + 195046: [[37147]], + 195047: [[37432]], + 195048: [[37591]], + 195049: [[37592]], + 195050: [[37500]], + 195051: [[37881]], + 195052: [[37909]], + 195053: [[166906]], + 195054: [[38283]], + 195055: [[18837]], + 195056: [[38327]], + 195057: [[167287]], + 195058: [[18918]], + 195059: [[38595]], + 195060: [[23986]], + 195061: [[38691]], + 195062: [[168261]], + 195063: [[168474]], + 195064: [[19054]], + 195065: [[19062]], + 195066: [[38880]], + 195067: [[168970]], + 195068: [[19122]], + 195069: [[169110]], + 195070: [[38923]], + 195071: [[38923]] + }, + 64000: { + 64000: [[20999]], + 64001: [[24230]], + 64002: [[25299]], + 64003: [[31958]], + 64004: [[23429]], + 64005: [[27934]], + 64006: [[26292]], + 64007: [[36667]], + 64008: [[34892]], + 64009: [[38477]], + 64010: [[35211]], + 64011: [[24275]], + 64012: [[20800]], + 64013: [[21952]], + 64016: [[22618]], + 64018: [[26228]], + 64021: [[20958]], + 64022: [[29482]], + 64023: [[30410]], + 64024: [[31036]], + 64025: [[31070]], + 64026: [[31077]], + 64027: [[31119]], + 64028: [[38742]], + 64029: [[31934]], + 64030: [[32701]], + 64032: [[34322]], + 64034: [[35576]], + 64037: [[36920]], + 64038: [[37117]], + 64042: [[39151]], + 64043: [[39164]], + 64044: [[39208]], + 64045: [[40372]], + 64046: [[37086]], + 64047: [[38583]], + 64048: [[20398]], + 64049: [[20711]], + 64050: [[20813]], + 64051: [[21193]], + 64052: [[21220]], + 64053: [[21329]], + 64054: [[21917]], + 64055: [[22022]], + 64056: [[22120]], + 64057: [[22592]], + 64058: [[22696]], + 64059: [[23652]], + 64060: [[23662]], + 64061: [[24724]], + 64062: [[24936]], + 64063: [[24974]], + 64064: [[25074]], + 64065: [[25935]], + 64066: [[26082]], + 64067: [[26257]], + 64068: [[26757]], + 64069: [[28023]], + 64070: [[28186]], + 64071: [[28450]], + 64072: [[29038]], + 64073: [[29227]], + 64074: [[29730]], + 64075: [[30865]], + 64076: [[31038]], + 64077: [[31049]], + 64078: [[31048]], + 64079: [[31056]], + 64080: [[31062]], + 64081: [[31069]], + 64082: [[31117]], + 64083: [[31118]], + 64084: [[31296]], + 64085: [[31361]], + 64086: [[31680]], + 64087: [[32244]], + 64088: [[32265]], + 64089: [[32321]], + 64090: [[32626]], + 64091: [[32773]], + 64092: [[33261]], + 64093: [[33401]], + 64094: [[33401]], + 64095: [[33879]], + 64096: [[35088]], + 64097: [[35222]], + 64098: [[35585]], + 64099: [[35641]], + 64100: [[36051]], + 64101: [[36104]], + 64102: [[36790]], + 64103: [[36920]], + 64104: [[38627]], + 64105: [[38911]], + 64106: [[38971]], + 64107: [[24693]], + 64108: [[148206]], + 64109: [[33304]], + 64112: [[20006]], + 64113: [[20917]], + 64114: [[20840]], + 64115: [[20352]], + 64116: [[20805]], + 64117: [[20864]], + 64118: [[21191]], + 64119: [[21242]], + 64120: [[21917]], + 64121: [[21845]], + 64122: [[21913]], + 64123: [[21986]], + 64124: [[22618]], + 64125: [[22707]], + 64126: [[22852]], + 64127: [[22868]], + 64128: [[23138]], + 64129: [[23336]], + 64130: [[24274]], + 64131: [[24281]], + 64132: [[24425]], + 64133: [[24493]], + 64134: [[24792]], + 64135: [[24910]], + 64136: [[24840]], + 64137: [[24974]], + 64138: [[24928]], + 64139: [[25074]], + 64140: [[25140]], + 64141: [[25540]], + 64142: [[25628]], + 64143: [[25682]], + 64144: [[25942]], + 64145: [[26228]], + 64146: [[26391]], + 64147: [[26395]], + 64148: [[26454]], + 64149: [[27513]], + 64150: [[27578]], + 64151: [[27969]], + 64152: [[28379]], + 64153: [[28363]], + 64154: [[28450]], + 64155: [[28702]], + 64156: [[29038]], + 64157: [[30631]], + 64158: [[29237]], + 64159: [[29359]], + 64160: [[29482]], + 64161: [[29809]], + 64162: [[29958]], + 64163: [[30011]], + 64164: [[30237]], + 64165: [[30239]], + 64166: [[30410]], + 64167: [[30427]], + 64168: [[30452]], + 64169: [[30538]], + 64170: [[30528]], + 64171: [[30924]], + 64172: [[31409]], + 64173: [[31680]], + 64174: [[31867]], + 64175: [[32091]], + 64176: [[32244]], + 64177: [[32574]], + 64178: [[32773]], + 64179: [[33618]], + 64180: [[33775]], + 64181: [[34681]], + 64182: [[35137]], + 64183: [[35206]], + 64184: [[35222]], + 64185: [[35519]], + 64186: [[35576]], + 64187: [[35531]], + 64188: [[35585]], + 64189: [[35582]], + 64190: [[35565]], + 64191: [[35641]], + 64192: [[35722]], + 64193: [[36104]], + 64194: [[36664]], + 64195: [[36978]], + 64196: [[37273]], + 64197: [[37494]], + 64198: [[38524]], + 64199: [[38627]], + 64200: [[38742]], + 64201: [[38875]], + 64202: [[38911]], + 64203: [[38923]], + 64204: [[38971]], + 64205: [[39698]], + 64206: [[40860]], + 64207: [[141386]], + 64208: [[141380]], + 64209: [[144341]], + 64210: [[15261]], + 64211: [[16408]], + 64212: [[16441]], + 64213: [[152137]], + 64214: [[154832]], + 64215: [[163539]], + 64216: [[40771]], + 64217: [[40846]], + 195072: [[38953]], + 195073: [[169398]], + 195074: [[39138]], + 195075: [[19251]], + 195076: [[39209]], + 195077: [[39335]], + 195078: [[39362]], + 195079: [[39422]], + 195080: [[19406]], + 195081: [[170800]], + 195082: [[39698]], + 195083: [[40000]], + 195084: [[40189]], + 195085: [[19662]], + 195086: [[19693]], + 195087: [[40295]], + 195088: [[172238]], + 195089: [[19704]], + 195090: [[172293]], + 195091: [[172558]], + 195092: [[172689]], + 195093: [[40635]], + 195094: [[19798]], + 195095: [[40697]], + 195096: [[40702]], + 195097: [[40709]], + 195098: [[40719]], + 195099: [[40726]], + 195100: [[40763]], + 195101: [[173568]] + }, + 64256: { + 64256: [[102, 102], 256], + 64257: [[102, 105], 256], + 64258: [[102, 108], 256], + 64259: [[102, 102, 105], 256], + 64260: [[102, 102, 108], 256], + 64261: [[383, 116], 256], + 64262: [[115, 116], 256], + 64275: [[1396, 1398], 256], + 64276: [[1396, 1381], 256], + 64277: [[1396, 1387], 256], + 64278: [[1406, 1398], 256], + 64279: [[1396, 1389], 256], + 64285: [[1497, 1460], 512], + 64286: [, 26], + 64287: [[1522, 1463], 512], + 64288: [[1506], 256], + 64289: [[1488], 256], + 64290: [[1491], 256], + 64291: [[1492], 256], + 64292: [[1499], 256], + 64293: [[1500], 256], + 64294: [[1501], 256], + 64295: [[1512], 256], + 64296: [[1514], 256], + 64297: [[43], 256], + 64298: [[1513, 1473], 512], + 64299: [[1513, 1474], 512], + 64300: [[64329, 1473], 512], + 64301: [[64329, 1474], 512], + 64302: [[1488, 1463], 512], + 64303: [[1488, 1464], 512], + 64304: [[1488, 1468], 512], + 64305: [[1489, 1468], 512], + 64306: [[1490, 1468], 512], + 64307: [[1491, 1468], 512], + 64308: [[1492, 1468], 512], + 64309: [[1493, 1468], 512], + 64310: [[1494, 1468], 512], + 64312: [[1496, 1468], 512], + 64313: [[1497, 1468], 512], + 64314: [[1498, 1468], 512], + 64315: [[1499, 1468], 512], + 64316: [[1500, 1468], 512], + 64318: [[1502, 1468], 512], + 64320: [[1504, 1468], 512], + 64321: [[1505, 1468], 512], + 64323: [[1507, 1468], 512], + 64324: [[1508, 1468], 512], + 64326: [[1510, 1468], 512], + 64327: [[1511, 1468], 512], + 64328: [[1512, 1468], 512], + 64329: [[1513, 1468], 512], + 64330: [[1514, 1468], 512], + 64331: [[1493, 1465], 512], + 64332: [[1489, 1471], 512], + 64333: [[1499, 1471], 512], + 64334: [[1508, 1471], 512], + 64335: [[1488, 1500], 256], + 64336: [[1649], 256], + 64337: [[1649], 256], + 64338: [[1659], 256], + 64339: [[1659], 256], + 64340: [[1659], 256], + 64341: [[1659], 256], + 64342: [[1662], 256], + 64343: [[1662], 256], + 64344: [[1662], 256], + 64345: [[1662], 256], + 64346: [[1664], 256], + 64347: [[1664], 256], + 64348: [[1664], 256], + 64349: [[1664], 256], + 64350: [[1658], 256], + 64351: [[1658], 256], + 64352: [[1658], 256], + 64353: [[1658], 256], + 64354: [[1663], 256], + 64355: [[1663], 256], + 64356: [[1663], 256], + 64357: [[1663], 256], + 64358: [[1657], 256], + 64359: [[1657], 256], + 64360: [[1657], 256], + 64361: [[1657], 256], + 64362: [[1700], 256], + 64363: [[1700], 256], + 64364: [[1700], 256], + 64365: [[1700], 256], + 64366: [[1702], 256], + 64367: [[1702], 256], + 64368: [[1702], 256], + 64369: [[1702], 256], + 64370: [[1668], 256], + 64371: [[1668], 256], + 64372: [[1668], 256], + 64373: [[1668], 256], + 64374: [[1667], 256], + 64375: [[1667], 256], + 64376: [[1667], 256], + 64377: [[1667], 256], + 64378: [[1670], 256], + 64379: [[1670], 256], + 64380: [[1670], 256], + 64381: [[1670], 256], + 64382: [[1671], 256], + 64383: [[1671], 256], + 64384: [[1671], 256], + 64385: [[1671], 256], + 64386: [[1677], 256], + 64387: [[1677], 256], + 64388: [[1676], 256], + 64389: [[1676], 256], + 64390: [[1678], 256], + 64391: [[1678], 256], + 64392: [[1672], 256], + 64393: [[1672], 256], + 64394: [[1688], 256], + 64395: [[1688], 256], + 64396: [[1681], 256], + 64397: [[1681], 256], + 64398: [[1705], 256], + 64399: [[1705], 256], + 64400: [[1705], 256], + 64401: [[1705], 256], + 64402: [[1711], 256], + 64403: [[1711], 256], + 64404: [[1711], 256], + 64405: [[1711], 256], + 64406: [[1715], 256], + 64407: [[1715], 256], + 64408: [[1715], 256], + 64409: [[1715], 256], + 64410: [[1713], 256], + 64411: [[1713], 256], + 64412: [[1713], 256], + 64413: [[1713], 256], + 64414: [[1722], 256], + 64415: [[1722], 256], + 64416: [[1723], 256], + 64417: [[1723], 256], + 64418: [[1723], 256], + 64419: [[1723], 256], + 64420: [[1728], 256], + 64421: [[1728], 256], + 64422: [[1729], 256], + 64423: [[1729], 256], + 64424: [[1729], 256], + 64425: [[1729], 256], + 64426: [[1726], 256], + 64427: [[1726], 256], + 64428: [[1726], 256], + 64429: [[1726], 256], + 64430: [[1746], 256], + 64431: [[1746], 256], + 64432: [[1747], 256], + 64433: [[1747], 256], + 64467: [[1709], 256], + 64468: [[1709], 256], + 64469: [[1709], 256], + 64470: [[1709], 256], + 64471: [[1735], 256], + 64472: [[1735], 256], + 64473: [[1734], 256], + 64474: [[1734], 256], + 64475: [[1736], 256], + 64476: [[1736], 256], + 64477: [[1655], 256], + 64478: [[1739], 256], + 64479: [[1739], 256], + 64480: [[1733], 256], + 64481: [[1733], 256], + 64482: [[1737], 256], + 64483: [[1737], 256], + 64484: [[1744], 256], + 64485: [[1744], 256], + 64486: [[1744], 256], + 64487: [[1744], 256], + 64488: [[1609], 256], + 64489: [[1609], 256], + 64490: [[1574, 1575], 256], + 64491: [[1574, 1575], 256], + 64492: [[1574, 1749], 256], + 64493: [[1574, 1749], 256], + 64494: [[1574, 1608], 256], + 64495: [[1574, 1608], 256], + 64496: [[1574, 1735], 256], + 64497: [[1574, 1735], 256], + 64498: [[1574, 1734], 256], + 64499: [[1574, 1734], 256], + 64500: [[1574, 1736], 256], + 64501: [[1574, 1736], 256], + 64502: [[1574, 1744], 256], + 64503: [[1574, 1744], 256], + 64504: [[1574, 1744], 256], + 64505: [[1574, 1609], 256], + 64506: [[1574, 1609], 256], + 64507: [[1574, 1609], 256], + 64508: [[1740], 256], + 64509: [[1740], 256], + 64510: [[1740], 256], + 64511: [[1740], 256] + }, + 64512: { + 64512: [[1574, 1580], 256], + 64513: [[1574, 1581], 256], + 64514: [[1574, 1605], 256], + 64515: [[1574, 1609], 256], + 64516: [[1574, 1610], 256], + 64517: [[1576, 1580], 256], + 64518: [[1576, 1581], 256], + 64519: [[1576, 1582], 256], + 64520: [[1576, 1605], 256], + 64521: [[1576, 1609], 256], + 64522: [[1576, 1610], 256], + 64523: [[1578, 1580], 256], + 64524: [[1578, 1581], 256], + 64525: [[1578, 1582], 256], + 64526: [[1578, 1605], 256], + 64527: [[1578, 1609], 256], + 64528: [[1578, 1610], 256], + 64529: [[1579, 1580], 256], + 64530: [[1579, 1605], 256], + 64531: [[1579, 1609], 256], + 64532: [[1579, 1610], 256], + 64533: [[1580, 1581], 256], + 64534: [[1580, 1605], 256], + 64535: [[1581, 1580], 256], + 64536: [[1581, 1605], 256], + 64537: [[1582, 1580], 256], + 64538: [[1582, 1581], 256], + 64539: [[1582, 1605], 256], + 64540: [[1587, 1580], 256], + 64541: [[1587, 1581], 256], + 64542: [[1587, 1582], 256], + 64543: [[1587, 1605], 256], + 64544: [[1589, 1581], 256], + 64545: [[1589, 1605], 256], + 64546: [[1590, 1580], 256], + 64547: [[1590, 1581], 256], + 64548: [[1590, 1582], 256], + 64549: [[1590, 1605], 256], + 64550: [[1591, 1581], 256], + 64551: [[1591, 1605], 256], + 64552: [[1592, 1605], 256], + 64553: [[1593, 1580], 256], + 64554: [[1593, 1605], 256], + 64555: [[1594, 1580], 256], + 64556: [[1594, 1605], 256], + 64557: [[1601, 1580], 256], + 64558: [[1601, 1581], 256], + 64559: [[1601, 1582], 256], + 64560: [[1601, 1605], 256], + 64561: [[1601, 1609], 256], + 64562: [[1601, 1610], 256], + 64563: [[1602, 1581], 256], + 64564: [[1602, 1605], 256], + 64565: [[1602, 1609], 256], + 64566: [[1602, 1610], 256], + 64567: [[1603, 1575], 256], + 64568: [[1603, 1580], 256], + 64569: [[1603, 1581], 256], + 64570: [[1603, 1582], 256], + 64571: [[1603, 1604], 256], + 64572: [[1603, 1605], 256], + 64573: [[1603, 1609], 256], + 64574: [[1603, 1610], 256], + 64575: [[1604, 1580], 256], + 64576: [[1604, 1581], 256], + 64577: [[1604, 1582], 256], + 64578: [[1604, 1605], 256], + 64579: [[1604, 1609], 256], + 64580: [[1604, 1610], 256], + 64581: [[1605, 1580], 256], + 64582: [[1605, 1581], 256], + 64583: [[1605, 1582], 256], + 64584: [[1605, 1605], 256], + 64585: [[1605, 1609], 256], + 64586: [[1605, 1610], 256], + 64587: [[1606, 1580], 256], + 64588: [[1606, 1581], 256], + 64589: [[1606, 1582], 256], + 64590: [[1606, 1605], 256], + 64591: [[1606, 1609], 256], + 64592: [[1606, 1610], 256], + 64593: [[1607, 1580], 256], + 64594: [[1607, 1605], 256], + 64595: [[1607, 1609], 256], + 64596: [[1607, 1610], 256], + 64597: [[1610, 1580], 256], + 64598: [[1610, 1581], 256], + 64599: [[1610, 1582], 256], + 64600: [[1610, 1605], 256], + 64601: [[1610, 1609], 256], + 64602: [[1610, 1610], 256], + 64603: [[1584, 1648], 256], + 64604: [[1585, 1648], 256], + 64605: [[1609, 1648], 256], + 64606: [[32, 1612, 1617], 256], + 64607: [[32, 1613, 1617], 256], + 64608: [[32, 1614, 1617], 256], + 64609: [[32, 1615, 1617], 256], + 64610: [[32, 1616, 1617], 256], + 64611: [[32, 1617, 1648], 256], + 64612: [[1574, 1585], 256], + 64613: [[1574, 1586], 256], + 64614: [[1574, 1605], 256], + 64615: [[1574, 1606], 256], + 64616: [[1574, 1609], 256], + 64617: [[1574, 1610], 256], + 64618: [[1576, 1585], 256], + 64619: [[1576, 1586], 256], + 64620: [[1576, 1605], 256], + 64621: [[1576, 1606], 256], + 64622: [[1576, 1609], 256], + 64623: [[1576, 1610], 256], + 64624: [[1578, 1585], 256], + 64625: [[1578, 1586], 256], + 64626: [[1578, 1605], 256], + 64627: [[1578, 1606], 256], + 64628: [[1578, 1609], 256], + 64629: [[1578, 1610], 256], + 64630: [[1579, 1585], 256], + 64631: [[1579, 1586], 256], + 64632: [[1579, 1605], 256], + 64633: [[1579, 1606], 256], + 64634: [[1579, 1609], 256], + 64635: [[1579, 1610], 256], + 64636: [[1601, 1609], 256], + 64637: [[1601, 1610], 256], + 64638: [[1602, 1609], 256], + 64639: [[1602, 1610], 256], + 64640: [[1603, 1575], 256], + 64641: [[1603, 1604], 256], + 64642: [[1603, 1605], 256], + 64643: [[1603, 1609], 256], + 64644: [[1603, 1610], 256], + 64645: [[1604, 1605], 256], + 64646: [[1604, 1609], 256], + 64647: [[1604, 1610], 256], + 64648: [[1605, 1575], 256], + 64649: [[1605, 1605], 256], + 64650: [[1606, 1585], 256], + 64651: [[1606, 1586], 256], + 64652: [[1606, 1605], 256], + 64653: [[1606, 1606], 256], + 64654: [[1606, 1609], 256], + 64655: [[1606, 1610], 256], + 64656: [[1609, 1648], 256], + 64657: [[1610, 1585], 256], + 64658: [[1610, 1586], 256], + 64659: [[1610, 1605], 256], + 64660: [[1610, 1606], 256], + 64661: [[1610, 1609], 256], + 64662: [[1610, 1610], 256], + 64663: [[1574, 1580], 256], + 64664: [[1574, 1581], 256], + 64665: [[1574, 1582], 256], + 64666: [[1574, 1605], 256], + 64667: [[1574, 1607], 256], + 64668: [[1576, 1580], 256], + 64669: [[1576, 1581], 256], + 64670: [[1576, 1582], 256], + 64671: [[1576, 1605], 256], + 64672: [[1576, 1607], 256], + 64673: [[1578, 1580], 256], + 64674: [[1578, 1581], 256], + 64675: [[1578, 1582], 256], + 64676: [[1578, 1605], 256], + 64677: [[1578, 1607], 256], + 64678: [[1579, 1605], 256], + 64679: [[1580, 1581], 256], + 64680: [[1580, 1605], 256], + 64681: [[1581, 1580], 256], + 64682: [[1581, 1605], 256], + 64683: [[1582, 1580], 256], + 64684: [[1582, 1605], 256], + 64685: [[1587, 1580], 256], + 64686: [[1587, 1581], 256], + 64687: [[1587, 1582], 256], + 64688: [[1587, 1605], 256], + 64689: [[1589, 1581], 256], + 64690: [[1589, 1582], 256], + 64691: [[1589, 1605], 256], + 64692: [[1590, 1580], 256], + 64693: [[1590, 1581], 256], + 64694: [[1590, 1582], 256], + 64695: [[1590, 1605], 256], + 64696: [[1591, 1581], 256], + 64697: [[1592, 1605], 256], + 64698: [[1593, 1580], 256], + 64699: [[1593, 1605], 256], + 64700: [[1594, 1580], 256], + 64701: [[1594, 1605], 256], + 64702: [[1601, 1580], 256], + 64703: [[1601, 1581], 256], + 64704: [[1601, 1582], 256], + 64705: [[1601, 1605], 256], + 64706: [[1602, 1581], 256], + 64707: [[1602, 1605], 256], + 64708: [[1603, 1580], 256], + 64709: [[1603, 1581], 256], + 64710: [[1603, 1582], 256], + 64711: [[1603, 1604], 256], + 64712: [[1603, 1605], 256], + 64713: [[1604, 1580], 256], + 64714: [[1604, 1581], 256], + 64715: [[1604, 1582], 256], + 64716: [[1604, 1605], 256], + 64717: [[1604, 1607], 256], + 64718: [[1605, 1580], 256], + 64719: [[1605, 1581], 256], + 64720: [[1605, 1582], 256], + 64721: [[1605, 1605], 256], + 64722: [[1606, 1580], 256], + 64723: [[1606, 1581], 256], + 64724: [[1606, 1582], 256], + 64725: [[1606, 1605], 256], + 64726: [[1606, 1607], 256], + 64727: [[1607, 1580], 256], + 64728: [[1607, 1605], 256], + 64729: [[1607, 1648], 256], + 64730: [[1610, 1580], 256], + 64731: [[1610, 1581], 256], + 64732: [[1610, 1582], 256], + 64733: [[1610, 1605], 256], + 64734: [[1610, 1607], 256], + 64735: [[1574, 1605], 256], + 64736: [[1574, 1607], 256], + 64737: [[1576, 1605], 256], + 64738: [[1576, 1607], 256], + 64739: [[1578, 1605], 256], + 64740: [[1578, 1607], 256], + 64741: [[1579, 1605], 256], + 64742: [[1579, 1607], 256], + 64743: [[1587, 1605], 256], + 64744: [[1587, 1607], 256], + 64745: [[1588, 1605], 256], + 64746: [[1588, 1607], 256], + 64747: [[1603, 1604], 256], + 64748: [[1603, 1605], 256], + 64749: [[1604, 1605], 256], + 64750: [[1606, 1605], 256], + 64751: [[1606, 1607], 256], + 64752: [[1610, 1605], 256], + 64753: [[1610, 1607], 256], + 64754: [[1600, 1614, 1617], 256], + 64755: [[1600, 1615, 1617], 256], + 64756: [[1600, 1616, 1617], 256], + 64757: [[1591, 1609], 256], + 64758: [[1591, 1610], 256], + 64759: [[1593, 1609], 256], + 64760: [[1593, 1610], 256], + 64761: [[1594, 1609], 256], + 64762: [[1594, 1610], 256], + 64763: [[1587, 1609], 256], + 64764: [[1587, 1610], 256], + 64765: [[1588, 1609], 256], + 64766: [[1588, 1610], 256], + 64767: [[1581, 1609], 256] + }, + 64768: { + 64768: [[1581, 1610], 256], + 64769: [[1580, 1609], 256], + 64770: [[1580, 1610], 256], + 64771: [[1582, 1609], 256], + 64772: [[1582, 1610], 256], + 64773: [[1589, 1609], 256], + 64774: [[1589, 1610], 256], + 64775: [[1590, 1609], 256], + 64776: [[1590, 1610], 256], + 64777: [[1588, 1580], 256], + 64778: [[1588, 1581], 256], + 64779: [[1588, 1582], 256], + 64780: [[1588, 1605], 256], + 64781: [[1588, 1585], 256], + 64782: [[1587, 1585], 256], + 64783: [[1589, 1585], 256], + 64784: [[1590, 1585], 256], + 64785: [[1591, 1609], 256], + 64786: [[1591, 1610], 256], + 64787: [[1593, 1609], 256], + 64788: [[1593, 1610], 256], + 64789: [[1594, 1609], 256], + 64790: [[1594, 1610], 256], + 64791: [[1587, 1609], 256], + 64792: [[1587, 1610], 256], + 64793: [[1588, 1609], 256], + 64794: [[1588, 1610], 256], + 64795: [[1581, 1609], 256], + 64796: [[1581, 1610], 256], + 64797: [[1580, 1609], 256], + 64798: [[1580, 1610], 256], + 64799: [[1582, 1609], 256], + 64800: [[1582, 1610], 256], + 64801: [[1589, 1609], 256], + 64802: [[1589, 1610], 256], + 64803: [[1590, 1609], 256], + 64804: [[1590, 1610], 256], + 64805: [[1588, 1580], 256], + 64806: [[1588, 1581], 256], + 64807: [[1588, 1582], 256], + 64808: [[1588, 1605], 256], + 64809: [[1588, 1585], 256], + 64810: [[1587, 1585], 256], + 64811: [[1589, 1585], 256], + 64812: [[1590, 1585], 256], + 64813: [[1588, 1580], 256], + 64814: [[1588, 1581], 256], + 64815: [[1588, 1582], 256], + 64816: [[1588, 1605], 256], + 64817: [[1587, 1607], 256], + 64818: [[1588, 1607], 256], + 64819: [[1591, 1605], 256], + 64820: [[1587, 1580], 256], + 64821: [[1587, 1581], 256], + 64822: [[1587, 1582], 256], + 64823: [[1588, 1580], 256], + 64824: [[1588, 1581], 256], + 64825: [[1588, 1582], 256], + 64826: [[1591, 1605], 256], + 64827: [[1592, 1605], 256], + 64828: [[1575, 1611], 256], + 64829: [[1575, 1611], 256], + 64848: [[1578, 1580, 1605], 256], + 64849: [[1578, 1581, 1580], 256], + 64850: [[1578, 1581, 1580], 256], + 64851: [[1578, 1581, 1605], 256], + 64852: [[1578, 1582, 1605], 256], + 64853: [[1578, 1605, 1580], 256], + 64854: [[1578, 1605, 1581], 256], + 64855: [[1578, 1605, 1582], 256], + 64856: [[1580, 1605, 1581], 256], + 64857: [[1580, 1605, 1581], 256], + 64858: [[1581, 1605, 1610], 256], + 64859: [[1581, 1605, 1609], 256], + 64860: [[1587, 1581, 1580], 256], + 64861: [[1587, 1580, 1581], 256], + 64862: [[1587, 1580, 1609], 256], + 64863: [[1587, 1605, 1581], 256], + 64864: [[1587, 1605, 1581], 256], + 64865: [[1587, 1605, 1580], 256], + 64866: [[1587, 1605, 1605], 256], + 64867: [[1587, 1605, 1605], 256], + 64868: [[1589, 1581, 1581], 256], + 64869: [[1589, 1581, 1581], 256], + 64870: [[1589, 1605, 1605], 256], + 64871: [[1588, 1581, 1605], 256], + 64872: [[1588, 1581, 1605], 256], + 64873: [[1588, 1580, 1610], 256], + 64874: [[1588, 1605, 1582], 256], + 64875: [[1588, 1605, 1582], 256], + 64876: [[1588, 1605, 1605], 256], + 64877: [[1588, 1605, 1605], 256], + 64878: [[1590, 1581, 1609], 256], + 64879: [[1590, 1582, 1605], 256], + 64880: [[1590, 1582, 1605], 256], + 64881: [[1591, 1605, 1581], 256], + 64882: [[1591, 1605, 1581], 256], + 64883: [[1591, 1605, 1605], 256], + 64884: [[1591, 1605, 1610], 256], + 64885: [[1593, 1580, 1605], 256], + 64886: [[1593, 1605, 1605], 256], + 64887: [[1593, 1605, 1605], 256], + 64888: [[1593, 1605, 1609], 256], + 64889: [[1594, 1605, 1605], 256], + 64890: [[1594, 1605, 1610], 256], + 64891: [[1594, 1605, 1609], 256], + 64892: [[1601, 1582, 1605], 256], + 64893: [[1601, 1582, 1605], 256], + 64894: [[1602, 1605, 1581], 256], + 64895: [[1602, 1605, 1605], 256], + 64896: [[1604, 1581, 1605], 256], + 64897: [[1604, 1581, 1610], 256], + 64898: [[1604, 1581, 1609], 256], + 64899: [[1604, 1580, 1580], 256], + 64900: [[1604, 1580, 1580], 256], + 64901: [[1604, 1582, 1605], 256], + 64902: [[1604, 1582, 1605], 256], + 64903: [[1604, 1605, 1581], 256], + 64904: [[1604, 1605, 1581], 256], + 64905: [[1605, 1581, 1580], 256], + 64906: [[1605, 1581, 1605], 256], + 64907: [[1605, 1581, 1610], 256], + 64908: [[1605, 1580, 1581], 256], + 64909: [[1605, 1580, 1605], 256], + 64910: [[1605, 1582, 1580], 256], + 64911: [[1605, 1582, 1605], 256], + 64914: [[1605, 1580, 1582], 256], + 64915: [[1607, 1605, 1580], 256], + 64916: [[1607, 1605, 1605], 256], + 64917: [[1606, 1581, 1605], 256], + 64918: [[1606, 1581, 1609], 256], + 64919: [[1606, 1580, 1605], 256], + 64920: [[1606, 1580, 1605], 256], + 64921: [[1606, 1580, 1609], 256], + 64922: [[1606, 1605, 1610], 256], + 64923: [[1606, 1605, 1609], 256], + 64924: [[1610, 1605, 1605], 256], + 64925: [[1610, 1605, 1605], 256], + 64926: [[1576, 1582, 1610], 256], + 64927: [[1578, 1580, 1610], 256], + 64928: [[1578, 1580, 1609], 256], + 64929: [[1578, 1582, 1610], 256], + 64930: [[1578, 1582, 1609], 256], + 64931: [[1578, 1605, 1610], 256], + 64932: [[1578, 1605, 1609], 256], + 64933: [[1580, 1605, 1610], 256], + 64934: [[1580, 1581, 1609], 256], + 64935: [[1580, 1605, 1609], 256], + 64936: [[1587, 1582, 1609], 256], + 64937: [[1589, 1581, 1610], 256], + 64938: [[1588, 1581, 1610], 256], + 64939: [[1590, 1581, 1610], 256], + 64940: [[1604, 1580, 1610], 256], + 64941: [[1604, 1605, 1610], 256], + 64942: [[1610, 1581, 1610], 256], + 64943: [[1610, 1580, 1610], 256], + 64944: [[1610, 1605, 1610], 256], + 64945: [[1605, 1605, 1610], 256], + 64946: [[1602, 1605, 1610], 256], + 64947: [[1606, 1581, 1610], 256], + 64948: [[1602, 1605, 1581], 256], + 64949: [[1604, 1581, 1605], 256], + 64950: [[1593, 1605, 1610], 256], + 64951: [[1603, 1605, 1610], 256], + 64952: [[1606, 1580, 1581], 256], + 64953: [[1605, 1582, 1610], 256], + 64954: [[1604, 1580, 1605], 256], + 64955: [[1603, 1605, 1605], 256], + 64956: [[1604, 1580, 1605], 256], + 64957: [[1606, 1580, 1581], 256], + 64958: [[1580, 1581, 1610], 256], + 64959: [[1581, 1580, 1610], 256], + 64960: [[1605, 1580, 1610], 256], + 64961: [[1601, 1605, 1610], 256], + 64962: [[1576, 1581, 1610], 256], + 64963: [[1603, 1605, 1605], 256], + 64964: [[1593, 1580, 1605], 256], + 64965: [[1589, 1605, 1605], 256], + 64966: [[1587, 1582, 1610], 256], + 64967: [[1606, 1580, 1610], 256], + 65008: [[1589, 1604, 1746], 256], + 65009: [[1602, 1604, 1746], 256], + 65010: [[1575, 1604, 1604, 1607], 256], + 65011: [[1575, 1603, 1576, 1585], 256], + 65012: [[1605, 1581, 1605, 1583], 256], + 65013: [[1589, 1604, 1593, 1605], 256], + 65014: [[1585, 1587, 1608, 1604], 256], + 65015: [[1593, 1604, 1610, 1607], 256], + 65016: [[1608, 1587, 1604, 1605], 256], + 65017: [[1589, 1604, 1609], 256], + 65018: [ + [ + 1589, + 1604, + 1609, + 32, + 1575, + 1604, + 1604, + 1607, + 32, + 1593, + 1604, + 1610, + 1607, + 32, + 1608, + 1587, + 1604, + 1605 + ], + 256 + ], + 65019: [[1580, 1604, 32, 1580, 1604, 1575, 1604, 1607], 256], + 65020: [[1585, 1740, 1575, 1604], 256] + }, + 65024: { + 65040: [[44], 256], + 65041: [[12289], 256], + 65042: [[12290], 256], + 65043: [[58], 256], + 65044: [[59], 256], + 65045: [[33], 256], + 65046: [[63], 256], + 65047: [[12310], 256], + 65048: [[12311], 256], + 65049: [[8230], 256], + 65056: [, 230], + 65057: [, 230], + 65058: [, 230], + 65059: [, 230], + 65060: [, 230], + 65061: [, 230], + 65062: [, 230], + 65072: [[8229], 256], + 65073: [[8212], 256], + 65074: [[8211], 256], + 65075: [[95], 256], + 65076: [[95], 256], + 65077: [[40], 256], + 65078: [[41], 256], + 65079: [[123], 256], + 65080: [[125], 256], + 65081: [[12308], 256], + 65082: [[12309], 256], + 65083: [[12304], 256], + 65084: [[12305], 256], + 65085: [[12298], 256], + 65086: [[12299], 256], + 65087: [[12296], 256], + 65088: [[12297], 256], + 65089: [[12300], 256], + 65090: [[12301], 256], + 65091: [[12302], 256], + 65092: [[12303], 256], + 65095: [[91], 256], + 65096: [[93], 256], + 65097: [[8254], 256], + 65098: [[8254], 256], + 65099: [[8254], 256], + 65100: [[8254], 256], + 65101: [[95], 256], + 65102: [[95], 256], + 65103: [[95], 256], + 65104: [[44], 256], + 65105: [[12289], 256], + 65106: [[46], 256], + 65108: [[59], 256], + 65109: [[58], 256], + 65110: [[63], 256], + 65111: [[33], 256], + 65112: [[8212], 256], + 65113: [[40], 256], + 65114: [[41], 256], + 65115: [[123], 256], + 65116: [[125], 256], + 65117: [[12308], 256], + 65118: [[12309], 256], + 65119: [[35], 256], + 65120: [[38], 256], + 65121: [[42], 256], + 65122: [[43], 256], + 65123: [[45], 256], + 65124: [[60], 256], + 65125: [[62], 256], + 65126: [[61], 256], + 65128: [[92], 256], + 65129: [[36], 256], + 65130: [[37], 256], + 65131: [[64], 256], + 65136: [[32, 1611], 256], + 65137: [[1600, 1611], 256], + 65138: [[32, 1612], 256], + 65140: [[32, 1613], 256], + 65142: [[32, 1614], 256], + 65143: [[1600, 1614], 256], + 65144: [[32, 1615], 256], + 65145: [[1600, 1615], 256], + 65146: [[32, 1616], 256], + 65147: [[1600, 1616], 256], + 65148: [[32, 1617], 256], + 65149: [[1600, 1617], 256], + 65150: [[32, 1618], 256], + 65151: [[1600, 1618], 256], + 65152: [[1569], 256], + 65153: [[1570], 256], + 65154: [[1570], 256], + 65155: [[1571], 256], + 65156: [[1571], 256], + 65157: [[1572], 256], + 65158: [[1572], 256], + 65159: [[1573], 256], + 65160: [[1573], 256], + 65161: [[1574], 256], + 65162: [[1574], 256], + 65163: [[1574], 256], + 65164: [[1574], 256], + 65165: [[1575], 256], + 65166: [[1575], 256], + 65167: [[1576], 256], + 65168: [[1576], 256], + 65169: [[1576], 256], + 65170: [[1576], 256], + 65171: [[1577], 256], + 65172: [[1577], 256], + 65173: [[1578], 256], + 65174: [[1578], 256], + 65175: [[1578], 256], + 65176: [[1578], 256], + 65177: [[1579], 256], + 65178: [[1579], 256], + 65179: [[1579], 256], + 65180: [[1579], 256], + 65181: [[1580], 256], + 65182: [[1580], 256], + 65183: [[1580], 256], + 65184: [[1580], 256], + 65185: [[1581], 256], + 65186: [[1581], 256], + 65187: [[1581], 256], + 65188: [[1581], 256], + 65189: [[1582], 256], + 65190: [[1582], 256], + 65191: [[1582], 256], + 65192: [[1582], 256], + 65193: [[1583], 256], + 65194: [[1583], 256], + 65195: [[1584], 256], + 65196: [[1584], 256], + 65197: [[1585], 256], + 65198: [[1585], 256], + 65199: [[1586], 256], + 65200: [[1586], 256], + 65201: [[1587], 256], + 65202: [[1587], 256], + 65203: [[1587], 256], + 65204: [[1587], 256], + 65205: [[1588], 256], + 65206: [[1588], 256], + 65207: [[1588], 256], + 65208: [[1588], 256], + 65209: [[1589], 256], + 65210: [[1589], 256], + 65211: [[1589], 256], + 65212: [[1589], 256], + 65213: [[1590], 256], + 65214: [[1590], 256], + 65215: [[1590], 256], + 65216: [[1590], 256], + 65217: [[1591], 256], + 65218: [[1591], 256], + 65219: [[1591], 256], + 65220: [[1591], 256], + 65221: [[1592], 256], + 65222: [[1592], 256], + 65223: [[1592], 256], + 65224: [[1592], 256], + 65225: [[1593], 256], + 65226: [[1593], 256], + 65227: [[1593], 256], + 65228: [[1593], 256], + 65229: [[1594], 256], + 65230: [[1594], 256], + 65231: [[1594], 256], + 65232: [[1594], 256], + 65233: [[1601], 256], + 65234: [[1601], 256], + 65235: [[1601], 256], + 65236: [[1601], 256], + 65237: [[1602], 256], + 65238: [[1602], 256], + 65239: [[1602], 256], + 65240: [[1602], 256], + 65241: [[1603], 256], + 65242: [[1603], 256], + 65243: [[1603], 256], + 65244: [[1603], 256], + 65245: [[1604], 256], + 65246: [[1604], 256], + 65247: [[1604], 256], + 65248: [[1604], 256], + 65249: [[1605], 256], + 65250: [[1605], 256], + 65251: [[1605], 256], + 65252: [[1605], 256], + 65253: [[1606], 256], + 65254: [[1606], 256], + 65255: [[1606], 256], + 65256: [[1606], 256], + 65257: [[1607], 256], + 65258: [[1607], 256], + 65259: [[1607], 256], + 65260: [[1607], 256], + 65261: [[1608], 256], + 65262: [[1608], 256], + 65263: [[1609], 256], + 65264: [[1609], 256], + 65265: [[1610], 256], + 65266: [[1610], 256], + 65267: [[1610], 256], + 65268: [[1610], 256], + 65269: [[1604, 1570], 256], + 65270: [[1604, 1570], 256], + 65271: [[1604, 1571], 256], + 65272: [[1604, 1571], 256], + 65273: [[1604, 1573], 256], + 65274: [[1604, 1573], 256], + 65275: [[1604, 1575], 256], + 65276: [[1604, 1575], 256] + }, + 65280: { + 65281: [[33], 256], + 65282: [[34], 256], + 65283: [[35], 256], + 65284: [[36], 256], + 65285: [[37], 256], + 65286: [[38], 256], + 65287: [[39], 256], + 65288: [[40], 256], + 65289: [[41], 256], + 65290: [[42], 256], + 65291: [[43], 256], + 65292: [[44], 256], + 65293: [[45], 256], + 65294: [[46], 256], + 65295: [[47], 256], + 65296: [[48], 256], + 65297: [[49], 256], + 65298: [[50], 256], + 65299: [[51], 256], + 65300: [[52], 256], + 65301: [[53], 256], + 65302: [[54], 256], + 65303: [[55], 256], + 65304: [[56], 256], + 65305: [[57], 256], + 65306: [[58], 256], + 65307: [[59], 256], + 65308: [[60], 256], + 65309: [[61], 256], + 65310: [[62], 256], + 65311: [[63], 256], + 65312: [[64], 256], + 65313: [[65], 256], + 65314: [[66], 256], + 65315: [[67], 256], + 65316: [[68], 256], + 65317: [[69], 256], + 65318: [[70], 256], + 65319: [[71], 256], + 65320: [[72], 256], + 65321: [[73], 256], + 65322: [[74], 256], + 65323: [[75], 256], + 65324: [[76], 256], + 65325: [[77], 256], + 65326: [[78], 256], + 65327: [[79], 256], + 65328: [[80], 256], + 65329: [[81], 256], + 65330: [[82], 256], + 65331: [[83], 256], + 65332: [[84], 256], + 65333: [[85], 256], + 65334: [[86], 256], + 65335: [[87], 256], + 65336: [[88], 256], + 65337: [[89], 256], + 65338: [[90], 256], + 65339: [[91], 256], + 65340: [[92], 256], + 65341: [[93], 256], + 65342: [[94], 256], + 65343: [[95], 256], + 65344: [[96], 256], + 65345: [[97], 256], + 65346: [[98], 256], + 65347: [[99], 256], + 65348: [[100], 256], + 65349: [[101], 256], + 65350: [[102], 256], + 65351: [[103], 256], + 65352: [[104], 256], + 65353: [[105], 256], + 65354: [[106], 256], + 65355: [[107], 256], + 65356: [[108], 256], + 65357: [[109], 256], + 65358: [[110], 256], + 65359: [[111], 256], + 65360: [[112], 256], + 65361: [[113], 256], + 65362: [[114], 256], + 65363: [[115], 256], + 65364: [[116], 256], + 65365: [[117], 256], + 65366: [[118], 256], + 65367: [[119], 256], + 65368: [[120], 256], + 65369: [[121], 256], + 65370: [[122], 256], + 65371: [[123], 256], + 65372: [[124], 256], + 65373: [[125], 256], + 65374: [[126], 256], + 65375: [[10629], 256], + 65376: [[10630], 256], + 65377: [[12290], 256], + 65378: [[12300], 256], + 65379: [[12301], 256], + 65380: [[12289], 256], + 65381: [[12539], 256], + 65382: [[12530], 256], + 65383: [[12449], 256], + 65384: [[12451], 256], + 65385: [[12453], 256], + 65386: [[12455], 256], + 65387: [[12457], 256], + 65388: [[12515], 256], + 65389: [[12517], 256], + 65390: [[12519], 256], + 65391: [[12483], 256], + 65392: [[12540], 256], + 65393: [[12450], 256], + 65394: [[12452], 256], + 65395: [[12454], 256], + 65396: [[12456], 256], + 65397: [[12458], 256], + 65398: [[12459], 256], + 65399: [[12461], 256], + 65400: [[12463], 256], + 65401: [[12465], 256], + 65402: [[12467], 256], + 65403: [[12469], 256], + 65404: [[12471], 256], + 65405: [[12473], 256], + 65406: [[12475], 256], + 65407: [[12477], 256], + 65408: [[12479], 256], + 65409: [[12481], 256], + 65410: [[12484], 256], + 65411: [[12486], 256], + 65412: [[12488], 256], + 65413: [[12490], 256], + 65414: [[12491], 256], + 65415: [[12492], 256], + 65416: [[12493], 256], + 65417: [[12494], 256], + 65418: [[12495], 256], + 65419: [[12498], 256], + 65420: [[12501], 256], + 65421: [[12504], 256], + 65422: [[12507], 256], + 65423: [[12510], 256], + 65424: [[12511], 256], + 65425: [[12512], 256], + 65426: [[12513], 256], + 65427: [[12514], 256], + 65428: [[12516], 256], + 65429: [[12518], 256], + 65430: [[12520], 256], + 65431: [[12521], 256], + 65432: [[12522], 256], + 65433: [[12523], 256], + 65434: [[12524], 256], + 65435: [[12525], 256], + 65436: [[12527], 256], + 65437: [[12531], 256], + 65438: [[12441], 256], + 65439: [[12442], 256], + 65440: [[12644], 256], + 65441: [[12593], 256], + 65442: [[12594], 256], + 65443: [[12595], 256], + 65444: [[12596], 256], + 65445: [[12597], 256], + 65446: [[12598], 256], + 65447: [[12599], 256], + 65448: [[12600], 256], + 65449: [[12601], 256], + 65450: [[12602], 256], + 65451: [[12603], 256], + 65452: [[12604], 256], + 65453: [[12605], 256], + 65454: [[12606], 256], + 65455: [[12607], 256], + 65456: [[12608], 256], + 65457: [[12609], 256], + 65458: [[12610], 256], + 65459: [[12611], 256], + 65460: [[12612], 256], + 65461: [[12613], 256], + 65462: [[12614], 256], + 65463: [[12615], 256], + 65464: [[12616], 256], + 65465: [[12617], 256], + 65466: [[12618], 256], + 65467: [[12619], 256], + 65468: [[12620], 256], + 65469: [[12621], 256], + 65470: [[12622], 256], + 65474: [[12623], 256], + 65475: [[12624], 256], + 65476: [[12625], 256], + 65477: [[12626], 256], + 65478: [[12627], 256], + 65479: [[12628], 256], + 65482: [[12629], 256], + 65483: [[12630], 256], + 65484: [[12631], 256], + 65485: [[12632], 256], + 65486: [[12633], 256], + 65487: [[12634], 256], + 65490: [[12635], 256], + 65491: [[12636], 256], + 65492: [[12637], 256], + 65493: [[12638], 256], + 65494: [[12639], 256], + 65495: [[12640], 256], + 65498: [[12641], 256], + 65499: [[12642], 256], + 65500: [[12643], 256], + 65504: [[162], 256], + 65505: [[163], 256], + 65506: [[172], 256], + 65507: [[175], 256], + 65508: [[166], 256], + 65509: [[165], 256], + 65510: [[8361], 256], + 65512: [[9474], 256], + 65513: [[8592], 256], + 65514: [[8593], 256], + 65515: [[8594], 256], + 65516: [[8595], 256], + 65517: [[9632], 256], + 65518: [[9675], 256] + } +}; diff --git a/node_modules/es5-ext/string/#/normalize/implement.js b/node_modules/es5-ext/string/#/normalize/implement.js new file mode 100644 index 000000000..ad11739e4 --- /dev/null +++ b/node_modules/es5-ext/string/#/normalize/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(String.prototype, "normalize", + { value: require("./shim"), +configurable: true, +enumerable: false, + writable: true }); +} diff --git a/node_modules/es5-ext/string/#/normalize/index.js b/node_modules/es5-ext/string/#/normalize/index.js new file mode 100644 index 000000000..7e91b08ba --- /dev/null +++ b/node_modules/es5-ext/string/#/normalize/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? String.prototype.normalize + : require("./shim"); diff --git a/node_modules/es5-ext/string/#/normalize/is-implemented.js b/node_modules/es5-ext/string/#/normalize/is-implemented.js new file mode 100644 index 000000000..01b48a9d6 --- /dev/null +++ b/node_modules/es5-ext/string/#/normalize/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var str = "æøåäüö"; + +module.exports = function () { + if (typeof str.normalize !== "function") return false; + return str.normalize("NFKD") === "æøåäüö"; +}; diff --git a/node_modules/es5-ext/string/#/normalize/shim.js b/node_modules/es5-ext/string/#/normalize/shim.js new file mode 100644 index 000000000..aba37f55d --- /dev/null +++ b/node_modules/es5-ext/string/#/normalize/shim.js @@ -0,0 +1,317 @@ +/* eslint no-bitwise: "off", max-statements: "off", max-lines: "off" */ + +// Taken from: https://github.com/walling/unorm/blob/master/lib/unorm.js + +/* + * UnicodeNormalizer 1.0.0 + * Copyright (c) 2008 Matsuza + * Dual licensed under the MIT (MIT-LICENSE.txt) and + * GPL (GPL-LICENSE.txt) licenses. + * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $ + * $Rev: 13309 $ +*/ + +"use strict"; + +var primitiveSet = require("../../../object/primitive-set") + , validValue = require("../../../object/valid-value") + , data = require("./_data"); + +var floor = Math.floor + , forms = primitiveSet("NFC", "NFD", "NFKC", "NFKD") + , DEFAULT_FEATURE = [null, 0, {}] + , CACHE_THRESHOLD = 10 + , SBase = 0xac00 + , LBase = 0x1100 + , VBase = 0x1161 + , TBase = 0x11a7 + , LCount = 19 + , VCount = 21 + , TCount = 28 + , NCount = VCount * TCount + , SCount = LCount * NCount + , UChar + , cache = {} + , cacheCounter = [] + , fromCache + , fromData + , fromCpOnly + , fromRuleBasedJamo + , fromCpFilter + , strategies + , UCharIterator + , RecursDecompIterator + , DecompIterator + , CompIterator + , createIterator + , normalize; + +UChar = function (cp, feature) { + this.codepoint = cp; + this.feature = feature; +}; + +// Strategies +(function () { + for (var i = 0; i <= 0xff; ++i) cacheCounter[i] = 0; +}()); + +fromCache = function (nextStep, cp, needFeature) { + var ret = cache[cp]; + if (!ret) { + ret = nextStep(cp, needFeature); + if (Boolean(ret.feature) && ++cacheCounter[(cp >> 8) & 0xff] > CACHE_THRESHOLD) { + cache[cp] = ret; + } + } + return ret; +}; + +fromData = function (next, cp) { + var hash = cp & 0xff00, dunit = UChar.udata[hash] || {}, feature = dunit[cp]; + return feature ? new UChar(cp, feature) : new UChar(cp, DEFAULT_FEATURE); +}; +fromCpOnly = function (next, cp, needFeature) { + return needFeature ? next(cp, needFeature) : new UChar(cp, null); +}; + +fromRuleBasedJamo = function (next, cp, needFeature) { + var char, base, i, arr, SIndex, TIndex, feature, j; + if (cp < LBase || (LBase + LCount <= cp && cp < SBase) || SBase + SCount < cp) { + return next(cp, needFeature); + } + if (LBase <= cp && cp < LBase + LCount) { + char = {}; + base = (cp - LBase) * VCount; + for (i = 0; i < VCount; ++i) { + char[VBase + i] = SBase + TCount * (i + base); + } + arr = new Array(3); + arr[2] = char; + return new UChar(cp, arr); + } + + SIndex = cp - SBase; + TIndex = SIndex % TCount; + feature = []; + if (TIndex === 0) { + feature[0] = [LBase + floor(SIndex / NCount), VBase + floor(SIndex % NCount / TCount)]; + feature[2] = {}; + for (j = 1; j < TCount; ++j) { + feature[2][TBase + j] = cp + j; + } + } else { + feature[0] = [SBase + SIndex - TIndex, TBase + TIndex]; + } + return new UChar(cp, feature); +}; + +fromCpFilter = function (next, cp, needFeature) { + return cp < 60 || (cp > 13311 && cp < 42607) + ? new UChar(cp, DEFAULT_FEATURE) + : next(cp, needFeature); +}; + +strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData]; + +UChar.fromCharCode = strategies.reduceRight(function (next, strategy) { + return function (cp, needFeature) { + return strategy(next, cp, needFeature); + }; +}, null); + +UChar.isHighSurrogate = function (cp) { + return cp >= 0xd800 && cp <= 0xdbff; +}; +UChar.isLowSurrogate = function (cp) { + return cp >= 0xdc00 && cp <= 0xdfff; +}; + +UChar.prototype.prepFeature = function () { + if (!this.feature) { + this.feature = UChar.fromCharCode(this.codepoint, true).feature; + } +}; + +UChar.prototype.toString = function () { + var num; + if (this.codepoint < 0x10000) return String.fromCharCode(this.codepoint); + num = this.codepoint - 0x10000; + return String.fromCharCode(floor(num / 0x400) + 0xd800, num % 0x400 + 0xdc00); +}; + +UChar.prototype.getDecomp = function () { + this.prepFeature(); + return this.feature[0] || null; +}; + +UChar.prototype.isCompatibility = function () { + this.prepFeature(); + return Boolean(this.feature[1]) && this.feature[1] & (1 << 8); +}; +UChar.prototype.isExclude = function () { + this.prepFeature(); + return Boolean(this.feature[1]) && this.feature[1] & (1 << 9); +}; +UChar.prototype.getCanonicalClass = function () { + this.prepFeature(); + return this.feature[1] ? this.feature[1] & 0xff : 0; +}; +UChar.prototype.getComposite = function (following) { + var cp; + this.prepFeature(); + if (!this.feature[2]) return null; + cp = this.feature[2][following.codepoint]; + return cp ? UChar.fromCharCode(cp) : null; +}; + +UCharIterator = function (str) { + this.str = str; + this.cursor = 0; +}; +UCharIterator.prototype.next = function () { + if (Boolean(this.str) && this.cursor < this.str.length) { + var cp = this.str.charCodeAt(this.cursor++), d; + if ( + UChar.isHighSurrogate(cp) && + this.cursor < this.str.length && + UChar.isLowSurrogate(d = this.str.charCodeAt(this.cursor)) + ) { + cp = (cp - 0xd800) * 0x400 + (d - 0xdc00) + 0x10000; + ++this.cursor; + } + return UChar.fromCharCode(cp); + } + this.str = null; + return null; +}; + +RecursDecompIterator = function (it, cano) { + this.it = it; + this.canonical = cano; + this.resBuf = []; +}; + +RecursDecompIterator.prototype.next = function () { + var recursiveDecomp, uchar; + recursiveDecomp = function (cano, ucharLoc) { + var decomp = ucharLoc.getDecomp(), ret, i, a, j; + if (Boolean(decomp) && !(cano && ucharLoc.isCompatibility())) { + ret = []; + for (i = 0; i < decomp.length; ++i) { + a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i])); + // Ret.concat(a); //<-why does not this work? + // following block is a workaround. + for (j = 0; j < a.length; ++j) ret.push(a[j]); + } + return ret; + } + return [ucharLoc]; + }; + if (this.resBuf.length === 0) { + uchar = this.it.next(); + if (!uchar) return null; + this.resBuf = recursiveDecomp(this.canonical, uchar); + } + return this.resBuf.shift(); +}; + +DecompIterator = function (it) { + this.it = it; + this.resBuf = []; +}; + +DecompIterator.prototype.next = function () { + var cc, uchar, inspt, uchar2, cc2; + if (this.resBuf.length === 0) { + do { + uchar = this.it.next(); + if (!uchar) break; + cc = uchar.getCanonicalClass(); + inspt = this.resBuf.length; + if (cc !== 0) { + for (inspt; inspt > 0; --inspt) { + uchar2 = this.resBuf[inspt - 1]; + cc2 = uchar2.getCanonicalClass(); + // eslint-disable-next-line max-depth + if (cc2 <= cc) break; + } + } + this.resBuf.splice(inspt, 0, uchar); + } while (cc !== 0); + } + return this.resBuf.shift(); +}; + +CompIterator = function (it) { + this.it = it; + this.procBuf = []; + this.resBuf = []; + this.lastClass = null; +}; + +CompIterator.prototype.next = function () { + var uchar, starter, composite, cc; + while (this.resBuf.length === 0) { + uchar = this.it.next(); + if (!uchar) { + this.resBuf = this.procBuf; + this.procBuf = []; + break; + } + if (this.procBuf.length === 0) { + this.lastClass = uchar.getCanonicalClass(); + this.procBuf.push(uchar); + } else { + starter = this.procBuf[0]; + composite = starter.getComposite(uchar); + cc = uchar.getCanonicalClass(); + if (Boolean(composite) && (this.lastClass < cc || this.lastClass === 0)) { + this.procBuf[0] = composite; + } else { + if (cc === 0) { + this.resBuf = this.procBuf; + this.procBuf = []; + } + this.lastClass = cc; + this.procBuf.push(uchar); + } + } + } + return this.resBuf.shift(); +}; + +createIterator = function (mode, str) { + switch (mode) { + case "NFD": + return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)); + case "NFKD": + return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)); + case "NFC": + return new CompIterator( + new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)) + ); + case "NFKC": + return new CompIterator( + new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)) + ); + default: + throw new Error(mode + " is invalid"); + } +}; +normalize = function (mode, str) { + var it = createIterator(mode, str), ret = "", uchar; + while ((uchar = it.next())) ret += uchar.toString(); + return ret; +}; + +/* Unicode data */ +UChar.udata = data; + +module.exports = function (/* Form*/) { + var str = String(validValue(this)), form = arguments[0]; + if (form === undefined) form = "NFC"; + else form = String(form); + if (!forms[form]) throw new RangeError("Invalid normalization form: " + form); + return normalize(form, str); +}; diff --git a/node_modules/es5-ext/string/#/pad.js b/node_modules/es5-ext/string/#/pad.js new file mode 100644 index 000000000..159f89519 --- /dev/null +++ b/node_modules/es5-ext/string/#/pad.js @@ -0,0 +1,18 @@ +"use strict"; + +var toInteger = require("../../number/to-integer") + , value = require("../../object/valid-value") + , repeat = require("./repeat") + + , abs = Math.abs, max = Math.max; + +module.exports = function (fill/*, length*/) { + var self = String(value(this)) + , sLength = self.length + , length = arguments[1]; + + length = isNaN(length) ? 1 : toInteger(length); + fill = repeat.call(String(fill), abs(length)); + if (length >= 0) return fill.slice(0, max(0, length - sLength)) + self; + return self + ((sLength + length) >= 0 ? "" : fill.slice(length + sLength)); +}; diff --git a/node_modules/es5-ext/string/#/plain-replace-all.js b/node_modules/es5-ext/string/#/plain-replace-all.js new file mode 100644 index 000000000..9334fe09d --- /dev/null +++ b/node_modules/es5-ext/string/#/plain-replace-all.js @@ -0,0 +1,16 @@ +"use strict"; + +var value = require("../../object/valid-value"); + +module.exports = function (search, replace) { + var index, pos = 0, str = String(value(this)), sl, rl; + search = String(search); + replace = String(replace); + sl = search.length; + rl = replace.length; + while ((index = str.indexOf(search, pos)) !== -1) { + str = str.slice(0, index) + replace + str.slice(index + sl); + pos = index + rl; + } + return str; +}; diff --git a/node_modules/es5-ext/string/#/plain-replace.js b/node_modules/es5-ext/string/#/plain-replace.js new file mode 100644 index 000000000..f24f5215c --- /dev/null +++ b/node_modules/es5-ext/string/#/plain-replace.js @@ -0,0 +1,10 @@ +"use strict"; + +var indexOf = String.prototype.indexOf, slice = String.prototype.slice; + +module.exports = function (search, replace) { + var index = indexOf.call(this, search); + if (index === -1) return String(this); + return slice.call(this, 0, index) + replace + + slice.call(this, index + String(search).length); +}; diff --git a/node_modules/es5-ext/string/#/repeat/implement.js b/node_modules/es5-ext/string/#/repeat/implement.js new file mode 100644 index 000000000..7066b7b49 --- /dev/null +++ b/node_modules/es5-ext/string/#/repeat/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(String.prototype, "repeat", + { value: require("./shim"), +configurable: true, +enumerable: false, + writable: true }); +} diff --git a/node_modules/es5-ext/string/#/repeat/index.js b/node_modules/es5-ext/string/#/repeat/index.js new file mode 100644 index 000000000..99d44b2ef --- /dev/null +++ b/node_modules/es5-ext/string/#/repeat/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? String.prototype.repeat + : require("./shim"); diff --git a/node_modules/es5-ext/string/#/repeat/is-implemented.js b/node_modules/es5-ext/string/#/repeat/is-implemented.js new file mode 100644 index 000000000..e8e02409c --- /dev/null +++ b/node_modules/es5-ext/string/#/repeat/is-implemented.js @@ -0,0 +1,8 @@ +"use strict"; + +var str = "foo"; + +module.exports = function () { + if (typeof str.repeat !== "function") return false; + return str.repeat(2) === "foofoo"; +}; diff --git a/node_modules/es5-ext/string/#/repeat/shim.js b/node_modules/es5-ext/string/#/repeat/shim.js new file mode 100644 index 000000000..ac259a83b --- /dev/null +++ b/node_modules/es5-ext/string/#/repeat/shim.js @@ -0,0 +1,24 @@ +// Thanks +// @rauchma http://www.2ality.com/2014/01/efficient-string-repeat.html +// @mathiasbynens https://github.com/mathiasbynens/String.prototype.repeat/blob/4a4b567def/repeat.js + +"use strict"; + +var value = require("../../../object/valid-value") + , toInteger = require("../../../number/to-integer"); + +module.exports = function (count) { + var str = String(value(this)), result; + count = toInteger(count); + if (count < 0) throw new RangeError("Count must be >= 0"); + if (!isFinite(count)) throw new RangeError("Count must be < ∞"); + + result = ""; + while (count) { + if (count % 2) result += str; + if (count > 1) str += str; + // eslint-disable-next-line no-bitwise + count >>= 1; + } + return result; +}; diff --git a/node_modules/es5-ext/string/#/starts-with/implement.js b/node_modules/es5-ext/string/#/starts-with/implement.js new file mode 100644 index 000000000..11613da22 --- /dev/null +++ b/node_modules/es5-ext/string/#/starts-with/implement.js @@ -0,0 +1,9 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(String.prototype, "startsWith", + { value: require("./shim"), +configurable: true, +enumerable: false, + writable: true }); +} diff --git a/node_modules/es5-ext/string/#/starts-with/index.js b/node_modules/es5-ext/string/#/starts-with/index.js new file mode 100644 index 000000000..9a6c3743d --- /dev/null +++ b/node_modules/es5-ext/string/#/starts-with/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? String.prototype.startsWith + : require("./shim"); diff --git a/node_modules/es5-ext/string/#/starts-with/is-implemented.js b/node_modules/es5-ext/string/#/starts-with/is-implemented.js new file mode 100644 index 000000000..f6b6e2960 --- /dev/null +++ b/node_modules/es5-ext/string/#/starts-with/is-implemented.js @@ -0,0 +1,9 @@ +"use strict"; + +var str = "razdwatrzy"; + +module.exports = function () { + if (typeof str.startsWith !== "function") return false; + return (str.startsWith("trzy") === false) && + (str.startsWith("raz") === true); +}; diff --git a/node_modules/es5-ext/string/#/starts-with/shim.js b/node_modules/es5-ext/string/#/starts-with/shim.js new file mode 100644 index 000000000..d45547799 --- /dev/null +++ b/node_modules/es5-ext/string/#/starts-with/shim.js @@ -0,0 +1,12 @@ +"use strict"; + +var value = require("../../../object/valid-value") + , toInteger = require("../../../number/to-integer") + + , max = Math.max, min = Math.min; + +module.exports = function (searchString/*, position*/) { + var start, self = String(value(this)); + start = min(max(toInteger(arguments[1]), 0), self.length); + return self.indexOf(searchString, start) === start; +}; diff --git a/node_modules/es5-ext/string/#/uncapitalize.js b/node_modules/es5-ext/string/#/uncapitalize.js new file mode 100644 index 000000000..202dbb738 --- /dev/null +++ b/node_modules/es5-ext/string/#/uncapitalize.js @@ -0,0 +1,8 @@ +"use strict"; + +var ensureStringifiable = require("../../object/validate-stringifiable-value"); + +module.exports = function () { + var str = ensureStringifiable(this); + return str.charAt(0).toLowerCase() + str.slice(1); +}; diff --git a/node_modules/es5-ext/string/format-method.js b/node_modules/es5-ext/string/format-method.js new file mode 100644 index 000000000..28956fea2 --- /dev/null +++ b/node_modules/es5-ext/string/format-method.js @@ -0,0 +1,27 @@ +"use strict"; + +var isCallable = require("../object/is-callable") + , value = require("../object/valid-value") + , call = Function.prototype.call; + +module.exports = function (fmap) { + fmap = Object(value(fmap)); + return function (pattern) { + var context = this; + value(context); + pattern = String(pattern); + return pattern.replace(/%([a-zA-Z]+)|\\([\u0000-\uffff])/g, function ( + match, + token, + escapeChar + ) { + var t, result; + if (escapeChar) return escapeChar; + t = token; + while (t && !(result = fmap[t])) t = t.slice(0, -1); + if (!result) return match; + if (isCallable(result)) result = call.call(result, context); + return result + token.slice(t.length); + }); + }; +}; diff --git a/node_modules/es5-ext/string/from-code-point/implement.js b/node_modules/es5-ext/string/from-code-point/implement.js new file mode 100644 index 000000000..4f815d6be --- /dev/null +++ b/node_modules/es5-ext/string/from-code-point/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(String, "fromCodePoint", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/string/from-code-point/index.js b/node_modules/es5-ext/string/from-code-point/index.js new file mode 100644 index 000000000..d5a811221 --- /dev/null +++ b/node_modules/es5-ext/string/from-code-point/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? String.fromCodePoint + : require("./shim"); diff --git a/node_modules/es5-ext/string/from-code-point/is-implemented.js b/node_modules/es5-ext/string/from-code-point/is-implemented.js new file mode 100644 index 000000000..e6ccfa7fa --- /dev/null +++ b/node_modules/es5-ext/string/from-code-point/is-implemented.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function () { + var fromCodePoint = String.fromCodePoint; + if (typeof fromCodePoint !== "function") return false; + return fromCodePoint(0x1D306, 0x61, 0x1D307) === "\ud834\udf06a\ud834\udf07"; +}; diff --git a/node_modules/es5-ext/string/from-code-point/shim.js b/node_modules/es5-ext/string/from-code-point/shim.js new file mode 100644 index 000000000..55824f573 --- /dev/null +++ b/node_modules/es5-ext/string/from-code-point/shim.js @@ -0,0 +1,37 @@ +// Based on: +// http://norbertlindenberg.com/2012/05/ecmascript-supplementary-characters/ +// and: +// https://github.com/mathiasbynens/String.fromCodePoint/blob/master +// /fromcodepoint.js + +"use strict"; + +var floor = Math.floor, fromCharCode = String.fromCharCode; + +// eslint-disable-next-line no-unused-vars +module.exports = function (codePoint1 /*, …codePoints*/) { + var chars = [], length = arguments.length, i, codePoint, result = ""; + for (i = 0; i < length; ++i) { + codePoint = Number(arguments[i]); + if ( + !isFinite(codePoint) || + codePoint < 0 || + codePoint > 0x10ffff || + floor(codePoint) !== codePoint + ) { + throw new RangeError("Invalid code point " + codePoint); + } + + if (codePoint < 0x10000) { + chars.push(codePoint); + } else { + codePoint -= 0x10000; + // eslint-disable-next-line no-bitwise + chars.push((codePoint >> 10) + 0xd800, codePoint % 0x400 + 0xdc00); + } + if (i + 1 !== length && chars.length <= 0x4000) continue; + result += fromCharCode.apply(null, chars); + chars.length = 0; + } + return result; +}; diff --git a/node_modules/es5-ext/string/index.js b/node_modules/es5-ext/string/index.js new file mode 100644 index 000000000..b2e7e6229 --- /dev/null +++ b/node_modules/es5-ext/string/index.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + "#": require("./#"), + "formatMethod": require("./format-method"), + "fromCodePoint": require("./from-code-point"), + "isString": require("./is-string"), + "randomUniq": require("./random-uniq"), + "raw": require("./raw") +}; diff --git a/node_modules/es5-ext/string/is-string.js b/node_modules/es5-ext/string/is-string.js new file mode 100644 index 000000000..1b1e86309 --- /dev/null +++ b/node_modules/es5-ext/string/is-string.js @@ -0,0 +1,13 @@ +"use strict"; + +var objToString = Object.prototype.toString, id = objToString.call(""); + +module.exports = function (value) { + return ( + typeof value === "string" || + (value && + typeof value === "object" && + (value instanceof String || objToString.call(value) === id)) || + false + ); +}; diff --git a/node_modules/es5-ext/string/random-uniq.js b/node_modules/es5-ext/string/random-uniq.js new file mode 100644 index 000000000..ef549d3f6 --- /dev/null +++ b/node_modules/es5-ext/string/random-uniq.js @@ -0,0 +1,13 @@ +"use strict"; + +var generated = Object.create(null) + + , random = Math.random; + +module.exports = function () { + var str; + do { + str = random().toString(36).slice(2); +} while (generated[str]); + return str; +}; diff --git a/node_modules/es5-ext/string/raw/implement.js b/node_modules/es5-ext/string/raw/implement.js new file mode 100644 index 000000000..0f17df3f1 --- /dev/null +++ b/node_modules/es5-ext/string/raw/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +if (!require("./is-implemented")()) { + Object.defineProperty(String, "raw", { value: require("./shim"), + configurable: true, +enumerable: false, +writable: true }); +} diff --git a/node_modules/es5-ext/string/raw/index.js b/node_modules/es5-ext/string/raw/index.js new file mode 100644 index 000000000..e818dd56d --- /dev/null +++ b/node_modules/es5-ext/string/raw/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = require("./is-implemented")() + ? String.raw + : require("./shim"); diff --git a/node_modules/es5-ext/string/raw/is-implemented.js b/node_modules/es5-ext/string/raw/is-implemented.js new file mode 100644 index 000000000..8758108c0 --- /dev/null +++ b/node_modules/es5-ext/string/raw/is-implemented.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function () { + var raw = String.raw, test; + if (typeof raw !== "function") return false; + test = ["foo\nbar", "marko\n"]; + test.raw = ["foo\\nbar", "marko\\n"]; + return raw(test, "INSE\nRT") === "foo\\nbarINSE\nRTmarko\\n"; +}; diff --git a/node_modules/es5-ext/string/raw/shim.js b/node_modules/es5-ext/string/raw/shim.js new file mode 100644 index 000000000..8c52bb552 --- /dev/null +++ b/node_modules/es5-ext/string/raw/shim.js @@ -0,0 +1,14 @@ +"use strict"; + +var toPosInt = require("../../number/to-pos-integer") + , validValue = require("../../object/valid-value") + , reduce = Array.prototype.reduce; + +module.exports = function (callSite /*, …substitutions*/) { + var args, rawValue = Object(validValue(Object(validValue(callSite)).raw)); + if (!toPosInt(rawValue.length)) return ""; + args = arguments; + return reduce.call(rawValue, function (str1, str2, i) { + return str1 + String(args[i]) + str2; + }); +}; diff --git a/node_modules/es5-ext/test/.eslintrc.json b/node_modules/es5-ext/test/.eslintrc.json new file mode 100644 index 000000000..3e9128d4c --- /dev/null +++ b/node_modules/es5-ext/test/.eslintrc.json @@ -0,0 +1,13 @@ +{ + "globals": { + "Symbol": true + }, + "rules": { + "consistent-this": "off", + "id-length": "off", + "no-empty-function": "off", + "no-new-wrappers": "off", + "no-prototype-builtins": "off", + "no-shadow": "off" + } +} diff --git a/node_modules/es5-ext/test/__tad.js b/node_modules/es5-ext/test/__tad.js new file mode 100644 index 000000000..883c37928 --- /dev/null +++ b/node_modules/es5-ext/test/__tad.js @@ -0,0 +1,3 @@ +"use strict"; + +exports.context = null; diff --git a/node_modules/es5-ext/test/array/#/@@iterator/implement.js b/node_modules/es5-ext/test/array/#/@@iterator/implement.js new file mode 100644 index 000000000..1a20aa82e --- /dev/null +++ b/node_modules/es5-ext/test/array/#/@@iterator/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/@@iterator/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/@@iterator/index.js b/node_modules/es5-ext/test/array/#/@@iterator/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/@@iterator/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/@@iterator/is-implemented.js b/node_modules/es5-ext/test/array/#/@@iterator/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/@@iterator/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/@@iterator/shim.js b/node_modules/es5-ext/test/array/#/@@iterator/shim.js new file mode 100644 index 000000000..71b71d58a --- /dev/null +++ b/node_modules/es5-ext/test/array/#/@@iterator/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +exports.__generic = function (t, a) { + var iterator = t.call(this); + a.deep(iterator.next(), { value: "1", done: false }); + a.deep(iterator.next(), { value: "2", done: false }); + a.deep(iterator.next(), { value: "3", done: false }); + a.deep(iterator.next(), { value: undefined, done: true }); +}; diff --git a/node_modules/es5-ext/test/array/#/_compare-by-length.js b/node_modules/es5-ext/test/array/#/_compare-by-length.js new file mode 100644 index 000000000..a53d8470f --- /dev/null +++ b/node_modules/es5-ext/test/array/#/_compare-by-length.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + var arr = [4, 5, 6], obj1 = { length: 8 }, obj2 = {}, obj3 = { length: 1 }; + + a.deep([arr, obj1, obj2, obj3].sort(t), [obj2, obj3, arr, obj1]); +}; diff --git a/node_modules/es5-ext/test/array/#/binary-search.js b/node_modules/es5-ext/test/array/#/binary-search.js new file mode 100644 index 000000000..04dfaefa4 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/binary-search.js @@ -0,0 +1,17 @@ +"use strict"; + +var compare = function (value) { + return this - value; +}; + +module.exports = function (t, a) { + var arr; + arr = [2, 5, 5, 8, 34, 67, 98, 345, 678]; + + // Highest, equal match + a(t.call(arr, compare.bind(1)), 0, "All higher"); + a(t.call(arr, compare.bind(679)), arr.length - 1, "All lower"); + a(t.call(arr, compare.bind(4)), 0, "Mid"); + a(t.call(arr, compare.bind(5)), 2, "Match"); + a(t.call(arr, compare.bind(6)), 2, "Above"); +}; diff --git a/node_modules/es5-ext/test/array/#/clear.js b/node_modules/es5-ext/test/array/#/clear.js new file mode 100644 index 000000000..640cc1926 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/clear.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + var arr = [1, 2, {}, 4]; + a(t.call(arr), arr, "Returns same array"); + a.deep(arr, [], "Empties array"); +}; diff --git a/node_modules/es5-ext/test/array/#/compact.js b/node_modules/es5-ext/test/array/#/compact.js new file mode 100644 index 000000000..05160844e --- /dev/null +++ b/node_modules/es5-ext/test/array/#/compact.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = { + "__generic": function (t, a) { + a(t.call(this).length, 3); + }, + "": function (t, a) { + var o, x, y, z; + o = {}; + x = [0, 1, "", null, o, false, undefined, true]; + y = x.slice(0); + + a.not(z = t.call(x), x, "Returns different object"); + a.deep(x, y, "Origin not changed"); + a.deep(z, [0, 1, "", o, false, true], "Result"); + } +}; diff --git a/node_modules/es5-ext/test/array/#/concat/implement.js b/node_modules/es5-ext/test/array/#/concat/implement.js new file mode 100644 index 000000000..c4dc41fa7 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/concat/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/concat/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/concat/index.js b/node_modules/es5-ext/test/array/#/concat/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/concat/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/concat/is-implemented.js b/node_modules/es5-ext/test/array/#/concat/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/concat/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/concat/shim.js b/node_modules/es5-ext/test/array/#/concat/shim.js new file mode 100644 index 000000000..30a9b0c62 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/concat/shim.js @@ -0,0 +1,26 @@ +"use strict"; + +var isConcatSpreadable = require("es6-symbol").isConcatSpreadable + , SubArray = require("../../../../array/_sub-array-dummy-safe"); + +module.exports = function (t, a) { + var arr = [1, 3, 45], x = {}, subArr, subArr2, result; + + a.deep(t.call(arr, "2d", x, ["ere", "fe", x], false, null), + [1, 3, 45, "2d", x, "ere", "fe", x, false, null], "Plain array"); + + subArr = new SubArray("lol", "miszko"); + subArr2 = new SubArray("elo", "fol"); + + result = t.call(subArr, "df", arr, "fef", subArr2, null); + a(result instanceof SubArray, true, "Instance of subclass"); + a.deep(result, ["lol", "miszko", "df", 1, 3, 45, "fef", "elo", "fol", null], + "Spreable by default"); + + SubArray.prototype[isConcatSpreadable] = false; + + result = t.call(subArr, "df", arr, "fef", subArr2, null); + a.deep(result, [subArr, "df", 1, 3, 45, "fef", subArr2, null], "Non spreadable"); + + delete SubArray.prototype[isConcatSpreadable]; +}; diff --git a/node_modules/es5-ext/test/array/#/contains.js b/node_modules/es5-ext/test/array/#/contains.js new file mode 100644 index 000000000..fb0f96ce8 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/contains.js @@ -0,0 +1,21 @@ +"use strict"; + +module.exports = { + "__generic": function (t, a) { + a(t.call(this, this[1]), true, "Contains"); + a(t.call(this, {}), false, "Does Not contain"); + }, + "": function (t, a) { + var o, x = {}, y = {}; + + o = [1, "raz", x]; + + a(t.call(o, 1), true, "First"); + a(t.call(o, "1"), false, "Type coercion"); + a(t.call(o, "raz"), true, "Primitive"); + a(t.call(o, "foo"), false, "Primitive not found"); + a(t.call(o, x), true, "Object found"); + a(t.call(o, y), false, "Object not found"); + a(t.call(o, 1, 1), false, "Position"); + } +}; diff --git a/node_modules/es5-ext/test/array/#/copy-within/implement.js b/node_modules/es5-ext/test/array/#/copy-within/implement.js new file mode 100644 index 000000000..87272ac0f --- /dev/null +++ b/node_modules/es5-ext/test/array/#/copy-within/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/copy-within/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/copy-within/index.js b/node_modules/es5-ext/test/array/#/copy-within/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/copy-within/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/copy-within/is-implemented.js b/node_modules/es5-ext/test/array/#/copy-within/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/copy-within/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/copy-within/shim.js b/node_modules/es5-ext/test/array/#/copy-within/shim.js new file mode 100644 index 000000000..03a631fe2 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/copy-within/shim.js @@ -0,0 +1,29 @@ +"use strict"; + +module.exports = function (t, a) { + var args, x; + + a.h1("2 args"); + x = [1, 2, 3, 4, 5]; + t.call(x, 0, 3); + a.deep(x, [4, 5, 3, 4, 5]); + a.deep(t.call([1, 2, 3, 4, 5], 1, 3), [1, 4, 5, 4, 5]); + a.deep(t.call([1, 2, 3, 4, 5], 1, 2), [1, 3, 4, 5, 5]); + a.deep(t.call([1, 2, 3, 4, 5], 2, 2), [1, 2, 3, 4, 5]); + + a.h1("3 args"); + a.deep(t.call([1, 2, 3, 4, 5], 0, 3, 4), [4, 2, 3, 4, 5]); + a.deep(t.call([1, 2, 3, 4, 5], 1, 3, 4), [1, 4, 3, 4, 5]); + a.deep(t.call([1, 2, 3, 4, 5], 1, 2, 4), [1, 3, 4, 4, 5]); + + a.h1("Negative args"); + a.deep(t.call([1, 2, 3, 4, 5], 0, -2), [4, 5, 3, 4, 5]); + a.deep(t.call([1, 2, 3, 4, 5], 0, -2, -1), [4, 2, 3, 4, 5]); + a.deep(t.call([1, 2, 3, 4, 5], -4, -3, -2), [1, 3, 3, 4, 5]); + a.deep(t.call([1, 2, 3, 4, 5], -4, -3, -1), [1, 3, 4, 4, 5]); + a.deep(t.call([1, 2, 3, 4, 5], -4, -3), [1, 3, 4, 5, 5]); + + a.h1("Array-likes"); + args = { 0: 1, 1: 2, 2: 3, length: 3 }; + a.deep(t.call(args, -2, 0), { 0: 1, 1: 1, 2: 2, length: 3 }); +}; diff --git a/node_modules/es5-ext/test/array/#/diff.js b/node_modules/es5-ext/test/array/#/diff.js new file mode 100644 index 000000000..397c5ddfe --- /dev/null +++ b/node_modules/es5-ext/test/array/#/diff.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = { + "__generic": function (t, a) { + a.deep(t.call(this, this), []); + }, + "": function (t, a) { + var x = {}, y = {}; + + a.deep(t.call([1, "raz", x, 2, "trzy", y], [x, 2, "trzy"]), [1, "raz", y], + "Scope longer"); + a.deep(t.call([1, "raz", x], [x, 2, "trzy", 1, y]), ["raz"], + "Arg longer"); + a.deep(t.call([1, "raz", x], []), [1, "raz", x], "Empty arg"); + a.deep(t.call([], [1, y, "sdfs"]), [], "Empty scope"); + } +}; diff --git a/node_modules/es5-ext/test/array/#/e-index-of.js b/node_modules/es5-ext/test/array/#/e-index-of.js new file mode 100644 index 000000000..1e42cbd73 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/e-index-of.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + var x = {}; + a(t.call([3, "raz", {}, x, {}], x), 3, "Regular"); + a(t.call([3, "raz", NaN, {}, NaN], NaN), 2, "NaN"); + a(t.call([3, "raz", 0, {}, -0], -0), 2, "-0"); + a(t.call([3, "raz", -0, {}, 0], +0), 2, "+0"); + a(t.call([3, "raz", NaN, {}, NaN], NaN, 3), 4, "fromIndex"); + a(t.call([3, "raz", NaN, {}, NaN], NaN, -1), 4, "fromIndex negative #1"); + a(t.call([3, "raz", NaN, {}, NaN], NaN, -2), 4, "fromIndex negative #2"); + a(t.call([3, "raz", NaN, {}, NaN], NaN, -3), 2, "fromIndex negative #3"); +}; diff --git a/node_modules/es5-ext/test/array/#/e-last-index-of.js b/node_modules/es5-ext/test/array/#/e-last-index-of.js new file mode 100644 index 000000000..2c7fff9fc --- /dev/null +++ b/node_modules/es5-ext/test/array/#/e-last-index-of.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + var x = {}; + a(t.call([3, "raz", {}, x, {}, x], x), 5, "Regular"); + a(t.call([3, "raz", NaN, {}, x], NaN), 2, "NaN"); + a(t.call([3, "raz", 0, {}, -0], -0), 4, "-0"); + a(t.call([3, "raz", -0, {}, 0], +0), 4, "+0"); + a(t.call([3, "raz", NaN, {}, NaN], NaN, 3), 2, "fromIndex"); + a(t.call([3, "raz", NaN, 2, NaN], NaN, -1), 4, "Negative fromIndex #1"); + a(t.call([3, "raz", NaN, 2, NaN], NaN, -2), 2, "Negative fromIndex #2"); +}; diff --git a/node_modules/es5-ext/test/array/#/entries/implement.js b/node_modules/es5-ext/test/array/#/entries/implement.js new file mode 100644 index 000000000..fa16930c3 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/entries/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/entries/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/entries/index.js b/node_modules/es5-ext/test/array/#/entries/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/entries/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/entries/is-implemented.js b/node_modules/es5-ext/test/array/#/entries/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/entries/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/entries/shim.js b/node_modules/es5-ext/test/array/#/entries/shim.js new file mode 100644 index 000000000..87ac25a98 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/entries/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +exports.__generic = function (t, a) { + var iterator = t.call(this); + a.deep(iterator.next(), { value: [0, "1"], done: false }); + a.deep(iterator.next(), { value: [1, "2"], done: false }); + a.deep(iterator.next(), { value: [2, "3"], done: false }); + a.deep(iterator.next(), { value: undefined, done: true }); +}; diff --git a/node_modules/es5-ext/test/array/#/exclusion.js b/node_modules/es5-ext/test/array/#/exclusion.js new file mode 100644 index 000000000..827c037a3 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/exclusion.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = { + "__generic": function (t, a) { + var x = {}; + a.deep(t.call(this, this, [this[0], this[2], x]), [x]); + }, + "": function (t, a) { + var x = {}, y = {}; + + a.deep(t.call([x, y]), [x, y], "No arguments"); + a.deep(t.call([x, 1], [], []), [x, 1], "Empty arguments"); + a.deep(t.call([1, "raz", x], [2, "raz", y], [2, "raz", x]), [1, y]); + } +}; diff --git a/node_modules/es5-ext/test/array/#/fill/implement.js b/node_modules/es5-ext/test/array/#/fill/implement.js new file mode 100644 index 000000000..fe806a6bf --- /dev/null +++ b/node_modules/es5-ext/test/array/#/fill/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/fill/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/fill/index.js b/node_modules/es5-ext/test/array/#/fill/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/fill/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/fill/is-implemented.js b/node_modules/es5-ext/test/array/#/fill/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/fill/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/fill/shim.js b/node_modules/es5-ext/test/array/#/fill/shim.js new file mode 100644 index 000000000..c752e10b8 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/fill/shim.js @@ -0,0 +1,18 @@ +// Taken from https://github.com/paulmillr/es6-shim/blob/master/test/array.js + +"use strict"; + +module.exports = function (t, a) { + var x; + + x = [1, 2, 3, 4, 5, 6]; + a(t.call(x, -1), x, "Returns self object"); + a.deep(x, [-1, -1, -1, -1, -1, -1], "Value"); + + a.deep(t.call([1, 2, 3, 4, 5, 6], -1, 3), [1, 2, 3, -1, -1, -1], + "Positive start"); + a.deep(t.call([1, 2, 3, 4, 5, 6], -1, -3), [1, 2, 3, -1, -1, -1], + "Negative start"); + a.deep(t.call([1, 2, 3, 4, 5, 6], -1, 9), [1, 2, 3, 4, 5, 6], + "Large start"); +}; diff --git a/node_modules/es5-ext/test/array/#/filter/implement.js b/node_modules/es5-ext/test/array/#/filter/implement.js new file mode 100644 index 000000000..cac92c83a --- /dev/null +++ b/node_modules/es5-ext/test/array/#/filter/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/filter/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/filter/index.js b/node_modules/es5-ext/test/array/#/filter/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/filter/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/filter/is-implemented.js b/node_modules/es5-ext/test/array/#/filter/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/filter/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/filter/shim.js b/node_modules/es5-ext/test/array/#/filter/shim.js new file mode 100644 index 000000000..e20a6511f --- /dev/null +++ b/node_modules/es5-ext/test/array/#/filter/shim.js @@ -0,0 +1,17 @@ +"use strict"; + +var SubArray = require("../../../../array/_sub-array-dummy-safe"); + +module.exports = function (t, a) { + var arr, x = {}, subArr, result; + + arr = ["foo", undefined, 0, "2d", false, x, null]; + + a.deep(t.call(arr, Boolean), ["foo", "2d", x], "Plain array"); + + subArr = new SubArray("foo", undefined, 0, "2d", false, x, null); + + result = t.call(subArr, Boolean); + a(result instanceof SubArray, true, "Instance of subclass"); + a.deep(result, ["foo", "2d", x], "Result of subclass"); +}; diff --git a/node_modules/es5-ext/test/array/#/find-index/implement.js b/node_modules/es5-ext/test/array/#/find-index/implement.js new file mode 100644 index 000000000..341bedef4 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/find-index/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/find-index/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/find-index/index.js b/node_modules/es5-ext/test/array/#/find-index/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/find-index/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/find-index/is-implemented.js b/node_modules/es5-ext/test/array/#/find-index/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/find-index/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/find-index/shim.js b/node_modules/es5-ext/test/array/#/find-index/shim.js new file mode 100644 index 000000000..0a6fe1135 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/find-index/shim.js @@ -0,0 +1,17 @@ +"use strict"; + +exports.__generic = function (t, a) { + var count = 0, o = {}, self = Object(this); + a(t.call(self, function (value, i, scope) { + a(value, this[i], "Value"); + a(i, count++, "Index"); + a(scope, this, "Scope"); + }, self), -1, "Falsy result"); + a(count, 3); + + count = -1; + a(t.call(this, function () { + return ++count ? o : null; + }, this), 1, "Truthy result"); + a(count, 1); +}; diff --git a/node_modules/es5-ext/test/array/#/find/implement.js b/node_modules/es5-ext/test/array/#/find/implement.js new file mode 100644 index 000000000..9333b25fb --- /dev/null +++ b/node_modules/es5-ext/test/array/#/find/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/find/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/find/index.js b/node_modules/es5-ext/test/array/#/find/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/find/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/find/is-implemented.js b/node_modules/es5-ext/test/array/#/find/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/find/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/find/shim.js b/node_modules/es5-ext/test/array/#/find/shim.js new file mode 100644 index 000000000..b8fd9f060 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/find/shim.js @@ -0,0 +1,17 @@ +"use strict"; + +exports.__generic = function (t, a) { + var count = 0, o = {}, self = Object(this); + a(t.call(self, function (value, i, scope) { + a(value, this[i], "Value"); + a(i, count++, "Index"); + a(scope, this, "Scope"); + }, self), undefined, "Falsy result"); + a(count, 3); + + count = -1; + a(t.call(this, function () { + return ++count ? o : null; + }, this), this[1], "Truthy result"); + a(count, 1); +}; diff --git a/node_modules/es5-ext/test/array/#/first-index.js b/node_modules/es5-ext/test/array/#/first-index.js new file mode 100644 index 000000000..af3388b55 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/first-index.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = function (t, a) { + var x; + a(t.call([]), null, "Empty"); + a(t.call([null]), 0, "One value"); + a(t.call([1, 2, 3]), 0, "Many values"); + a(t.call(new Array(1000)), null, "Sparse empty"); + x = []; + x[883] = undefined; + x[890] = null; + a(t.call(x), 883, "Manual sparse, distant value"); + x = new Array(1000); + x[657] = undefined; + x[700] = null; + a(t.call(x), 657, "Sparse, distant value"); +}; diff --git a/node_modules/es5-ext/test/array/#/first.js b/node_modules/es5-ext/test/array/#/first.js new file mode 100644 index 000000000..5e9c1ae84 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/first.js @@ -0,0 +1,13 @@ +"use strict"; + +exports.__generic = function (t, a) { + a(t.call(this), this[0]); +}; +exports[""] = function (t, a) { + var x; + a(t.call([]), undefined, "Empty"); + a(t.call(new Array(234), undefined, "Sparse empty")); + x = new Array(2342); + x[434] = {}; + a(t.call(x), x[434], "Sparse"); +}; diff --git a/node_modules/es5-ext/test/array/#/flatten.js b/node_modules/es5-ext/test/array/#/flatten.js new file mode 100644 index 000000000..c1234c3ab --- /dev/null +++ b/node_modules/es5-ext/test/array/#/flatten.js @@ -0,0 +1,14 @@ +"use strict"; + +var o = [1, 2, [3, 4, [5, 6], 7, 8], 9, 10, [11, 12, [13, 14]], 15]; + +module.exports = { + "__generic": function (t, a) { + a(t.call(this).length, 3); + }, + "Nested Arrays": function (t, a) { + var result = t.call(o); + a.not(o, result); + a.deep(result, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]); + } +}; diff --git a/node_modules/es5-ext/test/array/#/for-each-right.js b/node_modules/es5-ext/test/array/#/for-each-right.js new file mode 100644 index 000000000..109101f8b --- /dev/null +++ b/node_modules/es5-ext/test/array/#/for-each-right.js @@ -0,0 +1,47 @@ +"use strict"; + +module.exports = { + "__generic": function (t, a) { + var count = 0, first, last, x, icount = this.length; + t.call(this, function (item, index, col) { + ++count; + if (!first) { + first = item; + } + last = item; + x = col; + a(index, --icount, "Index"); + }); + a(count, this.length, "Iterated"); + a(first, this[this.length - 1], "First is last"); + a(last, this[0], "Last is first"); + a.deep(x, Object(this), "Collection as third argument"); // Jslint: skip + }, + "": function (t, a) { + var x = {}, y, count; + t.call( + [1], + function () { + y = this; + }, + x + ); + a(y, x, "Scope"); + y = 0; + t.call([3, 4, 4], function (a, i) { + y += i; + }); + a(y, 3, "Indexes"); + + x = [1, 3]; + x[5] = "x"; + y = 0; + count = 0; + t.call(x, function (a, i) { + ++count; + y += i; + }); + a(y, 6, "Misssing Indexes"); + a(count, 3, "Misssing Indexes, count"); + } +}; diff --git a/node_modules/es5-ext/test/array/#/group.js b/node_modules/es5-ext/test/array/#/group.js new file mode 100644 index 000000000..12667de98 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/group.js @@ -0,0 +1,24 @@ +"use strict"; + +module.exports = { + "__generic": function (t, a) { + var count = 0, self; + + self = Object(this); + a.deep(t.call(self, function (v, i, scope) { + a(v, this[i], "Value"); + a(i, count++, "Index"); + a(scope, this, "Scope"); + return i; + }, self), { 0: [this[0]], 1: [this[1]], 2: [this[2]] }); + }, + "": function (t, a) { + var r; + r = t.call([2, 3, 3, 4, 5, 6, 7, 7, 23, 45, 34, 56], + function (v) { + return v % 2 ? "odd" : "even"; + }); + a.deep(r.odd, [3, 3, 5, 7, 7, 23, 45]); + a.deep(r.even, [2, 4, 6, 34, 56]); + } +}; diff --git a/node_modules/es5-ext/test/array/#/indexes-of.js b/node_modules/es5-ext/test/array/#/indexes-of.js new file mode 100644 index 000000000..1463417d4 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/indexes-of.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = { + "__generic": function (t, a) { + a.deep(t.call(this, this[1]), [1]); + }, + "": function (t, a) { + var x = {}; + a.deep(t.call([1, 3, 5, 3, 5], 6), [], "No result"); + a.deep(t.call([1, 3, 5, 1, 3, 5, 1], 1), [0, 3, 6], "Some results"); + a.deep(t.call([], x), [], "Empty array"); + a.deep(t.call([x, 3, {}, x, 3, 5, x], x), [0, 3, 6], "Search for object"); + } +}; diff --git a/node_modules/es5-ext/test/array/#/intersection.js b/node_modules/es5-ext/test/array/#/intersection.js new file mode 100644 index 000000000..bb1097d1e --- /dev/null +++ b/node_modules/es5-ext/test/array/#/intersection.js @@ -0,0 +1,24 @@ +"use strict"; + +var toArray = require("../../../array/to-array"); + +module.exports = { + "__generic": function (t, a) { + a.deep(t.call(this, this, this), toArray(this)); + }, + "": function (t, a) { + var x = {}, y = {}, p, r; + a.deep(t.call([], [2, 3, 4]), [], "Empty #1"); + a.deep(t.call([2, 3, 4], []), [], "Empty #2"); + a.deep(t.call([2, 3, x], [y, 5, 7]), [], "Different"); + p = t.call([3, 5, "raz", {}, "dwa", x], [1, 3, "raz", "dwa", "trzy", x, {}], + [3, "raz", x, 65]); + r = [3, "raz", x]; + p.sort(); + r.sort(); + a.deep(p, r, "Same parts"); + a.deep(t.call(r, r), r, "Same"); + a.deep(t.call([1, 2, x, 4, 5, y, 7], [7, y, 5, 4, x, 2, 1]), + [1, 2, x, 4, 5, y, 7], "Long reverse same"); + } +}; diff --git a/node_modules/es5-ext/test/array/#/is-copy.js b/node_modules/es5-ext/test/array/#/is-copy.js new file mode 100644 index 000000000..b090c2acd --- /dev/null +++ b/node_modules/es5-ext/test/array/#/is-copy.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + var x = {}; + a(t.call([], []), true, "Empty"); + a(t.call([], {}), true, "Empty lists"); + a(t.call([1, x, "raz"], [1, x, "raz"]), true, "Same"); + a(t.call([1, x, "raz"], { 0: 1, 1: x, 2: "raz", length: 3 }), true, + "Same lists"); + a(t.call([1, x, "raz"], [x, 1, "raz"]), false, "Diff order"); + a(t.call([1, x], [1, x, "raz"]), false, "Diff length #1"); + a(t.call([1, x, "raz"], [1, x]), false, "Diff length #2"); +}; diff --git a/node_modules/es5-ext/test/array/#/is-empty.js b/node_modules/es5-ext/test/array/#/is-empty.js new file mode 100644 index 000000000..1e1c097b3 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/is-empty.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = function (t, a) { + var x = {}; + a(t.call([]), true, "Empty"); + a(t.call({ length: 0 }), true, "Empty lists"); + a(t.call([1, x, "raz"]), false, "Non empty"); +}; diff --git a/node_modules/es5-ext/test/array/#/is-uniq.js b/node_modules/es5-ext/test/array/#/is-uniq.js new file mode 100644 index 000000000..ab531ac51 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/is-uniq.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + var x = {}; + a(t.call([]), true, "Empty"); + a(t.call({}), true, "Empty lists"); + a(t.call([1, x, "raz"]), true, "Uniq"); + a(t.call([1, x, 1, "raz"]), false, "Not Uniq: primitive"); + a(t.call([1, x, "1", "raz"]), true, "Uniq: primitive"); + a(t.call([1, x, 1, {}, "raz"]), false, "Not Uniq: Obj"); +}; diff --git a/node_modules/es5-ext/test/array/#/keys/implement.js b/node_modules/es5-ext/test/array/#/keys/implement.js new file mode 100644 index 000000000..cc1f9316a --- /dev/null +++ b/node_modules/es5-ext/test/array/#/keys/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/keys/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/keys/index.js b/node_modules/es5-ext/test/array/#/keys/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/keys/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/keys/is-implemented.js b/node_modules/es5-ext/test/array/#/keys/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/keys/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/keys/shim.js b/node_modules/es5-ext/test/array/#/keys/shim.js new file mode 100644 index 000000000..9be9a8f09 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/keys/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +exports.__generic = function (t, a) { + var iterator = t.call(this); + a.deep(iterator.next(), { value: 0, done: false }); + a.deep(iterator.next(), { value: 1, done: false }); + a.deep(iterator.next(), { value: 2, done: false }); + a.deep(iterator.next(), { value: undefined, done: true }); +}; diff --git a/node_modules/es5-ext/test/array/#/last-index.js b/node_modules/es5-ext/test/array/#/last-index.js new file mode 100644 index 000000000..e66d16f14 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/last-index.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = function (t, a) { + var x; + a(t.call([]), null, "Empty"); + a(t.call([null]), 0, "One value"); + a(t.call([1, 2, 3]), 2, "Many values"); + a(t.call(new Array(1000)), null, "Sparse empty"); + x = []; + x[883] = null; + x[890] = undefined; + a(t.call(x), 890, "Manual sparse, distant value"); + x = new Array(1000); + x[657] = null; + x[700] = undefined; + a(t.call(x), 700, "Sparse, distant value"); +}; diff --git a/node_modules/es5-ext/test/array/#/last.js b/node_modules/es5-ext/test/array/#/last.js new file mode 100644 index 000000000..6ca5d0539 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/last.js @@ -0,0 +1,15 @@ +"use strict"; + +exports.__generic = function (t, a) { + a(t.call(this), this[this.length - 1]); +}; + +exports[""] = function (t, a) { + var x; + a(t.call([]), undefined, "Empty"); + a(t.call(new Array(234), undefined, "Sparse empty")); + x = new Array(2342); + x[434] = {}; + x[450] = {}; + a(t.call(x), x[450], "Sparse"); +}; diff --git a/node_modules/es5-ext/test/array/#/map/implement.js b/node_modules/es5-ext/test/array/#/map/implement.js new file mode 100644 index 000000000..26bb41158 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/map/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/map/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/map/index.js b/node_modules/es5-ext/test/array/#/map/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/map/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/map/is-implemented.js b/node_modules/es5-ext/test/array/#/map/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/map/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/map/shim.js b/node_modules/es5-ext/test/array/#/map/shim.js new file mode 100644 index 000000000..02a5af250 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/map/shim.js @@ -0,0 +1,19 @@ +"use strict"; + +var SubArray = require("../../../../array/_sub-array-dummy-safe"); + +module.exports = function (t, a) { + var arr, x = {}, subArr, result; + + arr = ["foo", undefined, 0, "2d", false, x, null]; + + a.deep(t.call(arr, Boolean), [true, false, false, true, false, true, false], + "Plain array"); + + subArr = new SubArray("foo", undefined, 0, "2d", false, x, null); + + result = t.call(subArr, Boolean); + a(result instanceof SubArray, true, "Instance of subclass"); + a.deep(result, [true, false, false, true, false, true, false], + "Result of subclass"); +}; diff --git a/node_modules/es5-ext/test/array/#/remove.js b/node_modules/es5-ext/test/array/#/remove.js new file mode 100644 index 000000000..d67457ea9 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/remove.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = function (t, a) { + var y = {}, z = {}, x = [9, z, 5, y, "foo"]; + t.call(x, y); + a.deep(x, [9, z, 5, "foo"]); + t.call(x, {}); + a.deep(x, [9, z, 5, "foo"], "Not existing"); + t.call(x, 5); + a.deep(x, [9, z, "foo"], "Primitive"); + x = [9, z, 5, y, "foo"]; + t.call(x, z, 5, "foo"); + a.deep(x, [9, y], "More than one argument"); +}; diff --git a/node_modules/es5-ext/test/array/#/separate.js b/node_modules/es5-ext/test/array/#/separate.js new file mode 100644 index 000000000..9792637f3 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/separate.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = function (t, a) { + var x = [], y = {}, z = {}; + a.deep(t.call(x, y), [], "Empty"); + a.not(t.call(x), x, "Returns copy"); + a.deep(t.call([1], y), [1], "One"); + a.deep(t.call([1, "raz"], y), [1, y, "raz"], "One"); + a.deep(t.call([1, "raz", x], y), [1, y, "raz", y, x], "More"); + x = new Array(1000); + x[23] = 2; + x[3453] = "raz"; + x[500] = z; + a.deep(t.call(x, y), [2, y, z, y, "raz"], "Sparse"); +}; diff --git a/node_modules/es5-ext/test/array/#/slice/implement.js b/node_modules/es5-ext/test/array/#/slice/implement.js new file mode 100644 index 000000000..8c9b9be63 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/slice/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/slice/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/slice/index.js b/node_modules/es5-ext/test/array/#/slice/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/slice/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/slice/is-implemented.js b/node_modules/es5-ext/test/array/#/slice/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/slice/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/slice/shim.js b/node_modules/es5-ext/test/array/#/slice/shim.js new file mode 100644 index 000000000..f09ad13cf --- /dev/null +++ b/node_modules/es5-ext/test/array/#/slice/shim.js @@ -0,0 +1,17 @@ +"use strict"; + +var SubArray = require("../../../../array/_sub-array-dummy-safe"); + +module.exports = function (t, a) { + var arr, x = {}, subArr, result; + + arr = ["foo", undefined, 0, "2d", false, x, null]; + + a.deep(t.call(arr, 2, 4), [0, "2d"], "Plain array: result"); + + subArr = new SubArray("foo", undefined, 0, "2d", false, x, null); + + result = t.call(subArr, 2, 4); + a(result instanceof SubArray, true, "Instance of subclass"); + a.deep(result, [0, "2d"], "Subclass: result"); +}; diff --git a/node_modules/es5-ext/test/array/#/some-right.js b/node_modules/es5-ext/test/array/#/some-right.js new file mode 100644 index 000000000..1e0f407e6 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/some-right.js @@ -0,0 +1,62 @@ +"use strict"; + +module.exports = { + "__generic": function (t, a) { + var count = 0, first, last, x, icount = this.length; + t.call(this, function (item, index, col) { + ++count; + if (!first) { + first = item; + } + last = item; + x = col; + a(index, --icount, "Index"); + }); + a(count, this.length, "Iterated"); + a(first, this[this.length - 1], "First is last"); + a(last, this[0], "Last is first"); + a.deep(x, Object(this), "Collection as third argument"); // Jslint: skip + }, + "": function (t, a) { + var x = {}, y, count; + t.call( + [1], + function () { + y = this; + }, + x + ); + a(y, x, "Scope"); + y = 0; + t.call([3, 4, 4], function (a, i) { + y += i; + }); + a(y, 3, "Indexes"); + + x = [1, 3]; + x[5] = "x"; + y = 0; + count = 0; + a( + t.call(x, function (a, i) { + ++count; + y += i; + }), + false, + "Return" + ); + a(y, 6, "Misssing Indexes"); + a(count, 3, "Misssing Indexes, count"); + + count = 0; + a( + t.call([-2, -3, -4, 2, -5], function (item) { + ++count; + return item > 0; + }), + true, + "Return" + ); + a(count, 2, "Break after true is returned"); + } +}; diff --git a/node_modules/es5-ext/test/array/#/splice/implement.js b/node_modules/es5-ext/test/array/#/splice/implement.js new file mode 100644 index 000000000..f09257a43 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/splice/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/splice/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/splice/index.js b/node_modules/es5-ext/test/array/#/splice/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/splice/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/splice/is-implemented.js b/node_modules/es5-ext/test/array/#/splice/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/splice/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/splice/shim.js b/node_modules/es5-ext/test/array/#/splice/shim.js new file mode 100644 index 000000000..480200784 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/splice/shim.js @@ -0,0 +1,19 @@ +"use strict"; + +var SubArray = require("../../../../array/_sub-array-dummy-safe"); + +module.exports = function (t, a) { + var arr, x = {}, subArr, result; + + arr = ["foo", undefined, 0, "2d", false, x, null]; + + a.deep(t.call(arr, 2, 2, "bar"), [0, "2d"], "Plain array: result"); + a.deep(arr, ["foo", undefined, "bar", false, x, null], "Plain array: change"); + + subArr = new SubArray("foo", undefined, 0, "2d", false, x, null); + + result = t.call(subArr, 2, 2, "bar"); + a(result instanceof SubArray, true, "Instance of subclass"); + a.deep(result, [0, "2d"], "Subclass: result"); + a.deep(subArr, ["foo", undefined, "bar", false, x, null], "Subclass: change"); +}; diff --git a/node_modules/es5-ext/test/array/#/uniq.js b/node_modules/es5-ext/test/array/#/uniq.js new file mode 100644 index 000000000..c7223b26e --- /dev/null +++ b/node_modules/es5-ext/test/array/#/uniq.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = { + "__generic": function (t, a) { + a(t.call(this).length, 3); + }, + "": function (t, a) { + var o, x = {}, y = {}, z = {}, w; + o = [1, 2, x, 3, 1, "raz", "1", y, x, "trzy", z, "raz"]; + + a.not(w = t.call(o), o, "Returns different object"); + a.deep(w, [1, 2, x, 3, "raz", "1", y, "trzy", z], "Result"); + } +}; diff --git a/node_modules/es5-ext/test/array/#/values/implement.js b/node_modules/es5-ext/test/array/#/values/implement.js new file mode 100644 index 000000000..4ba7613af --- /dev/null +++ b/node_modules/es5-ext/test/array/#/values/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../array/#/values/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/#/values/index.js b/node_modules/es5-ext/test/array/#/values/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/#/values/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/#/values/is-implemented.js b/node_modules/es5-ext/test/array/#/values/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/#/values/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/#/values/shim.js b/node_modules/es5-ext/test/array/#/values/shim.js new file mode 100644 index 000000000..71b71d58a --- /dev/null +++ b/node_modules/es5-ext/test/array/#/values/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +exports.__generic = function (t, a) { + var iterator = t.call(this); + a.deep(iterator.next(), { value: "1", done: false }); + a.deep(iterator.next(), { value: "2", done: false }); + a.deep(iterator.next(), { value: "3", done: false }); + a.deep(iterator.next(), { value: undefined, done: true }); +}; diff --git a/node_modules/es5-ext/test/array/__scopes.js b/node_modules/es5-ext/test/array/__scopes.js new file mode 100644 index 000000000..bf47389f7 --- /dev/null +++ b/node_modules/es5-ext/test/array/__scopes.js @@ -0,0 +1,11 @@ +"use strict"; + +exports.Array = ["1", "2", "3"]; + +exports.Arguments = (function () { + return arguments; +}("1", "2", "3")); + +exports.String = "123"; + +exports.Object = { 0: "1", 1: "2", 2: "3", 3: "4", length: 3 }; diff --git a/node_modules/es5-ext/test/array/_is-extensible.js b/node_modules/es5-ext/test/array/_is-extensible.js new file mode 100644 index 000000000..87881863b --- /dev/null +++ b/node_modules/es5-ext/test/array/_is-extensible.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t, "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/_sub-array-dummy-safe.js b/node_modules/es5-ext/test/array/_sub-array-dummy-safe.js new file mode 100644 index 000000000..6b42f4d15 --- /dev/null +++ b/node_modules/es5-ext/test/array/_sub-array-dummy-safe.js @@ -0,0 +1,7 @@ +"use strict"; + +var isArray = Array.isArray; + +module.exports = function (t) { + t(t === null || isArray(t.prototype), true); +}; diff --git a/node_modules/es5-ext/test/array/_sub-array-dummy.js b/node_modules/es5-ext/test/array/_sub-array-dummy.js new file mode 100644 index 000000000..6b42f4d15 --- /dev/null +++ b/node_modules/es5-ext/test/array/_sub-array-dummy.js @@ -0,0 +1,7 @@ +"use strict"; + +var isArray = Array.isArray; + +module.exports = function (t) { + t(t === null || isArray(t.prototype), true); +}; diff --git a/node_modules/es5-ext/test/array/from/implement.js b/node_modules/es5-ext/test/array/from/implement.js new file mode 100644 index 000000000..2ed3788f9 --- /dev/null +++ b/node_modules/es5-ext/test/array/from/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../array/from/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/from/index.js b/node_modules/es5-ext/test/array/from/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/from/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/from/is-implemented.js b/node_modules/es5-ext/test/array/from/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/from/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/from/shim.js b/node_modules/es5-ext/test/array/from/shim.js new file mode 100644 index 000000000..17974c4be --- /dev/null +++ b/node_modules/es5-ext/test/array/from/shim.js @@ -0,0 +1,138 @@ +// Some tests taken from: https://github.com/mathiasbynens/Array.from/blob/master/tests/tests.js + +"use strict"; + +module.exports = function (t, a) { + var o = [1, 2, 3], MyType; + a.not(t(o), o, "Array"); + a.deep(t(o), o, "Array: same content"); + a.deep(t("12r3v"), ["1", "2", "r", "3", "v"], "String"); + a.deep( + t( + (function () { + return arguments; + })(3, o, "raz") + ), + [3, o, "raz"], + "Arguments" + ); + a.deep( + t( + (function () { + return arguments; + })(3) + ), + [3], + "Arguments with one numeric value" + ); + + a.deep(t({ 0: "raz", 1: "dwa", length: 2 }), ["raz", "dwa"], "Other"); + + a.deep( + t( + o, + function (val) { + return (val + 2) * 10; + }, + 10 + ), + [30, 40, 50], + "Mapping" + ); + + a.throws( + function () { + t(); + }, + TypeError, + "Undefined" + ); + a.deep(t(3), [], "Primitive"); + + a(t.length, 1, "Length"); + a.deep(t({ length: 0 }), [], "No values Array-like"); + a.deep(t({ length: -1 }), [], "Invalid length Array-like"); + a.deep(t({ length: -Infinity }), [], "Invalid length Array-like #2"); + a.throws( + function () { + t(undefined); + }, + TypeError, + "Undefined" + ); + a.throws( + function () { + t(null); + }, + TypeError, + "Null" + ); + a.deep(t(false), [], "Boolean"); + a.deep(t(-Infinity), [], "Inifity"); + a.deep(t(-0), [], "-0"); + a.deep(t(+0), [], "+0"); + a.deep(t(1), [], "1"); + a.deep(t(Number(Infinity)), [], "+Infinity"); + a.deep(t({}), [], "Plain object"); + a.deep(t({ length: 1 }), [undefined], "Sparse array-like"); + a.deep( + t({ 0: "a", 1: "b", length: 2 }, function (x) { + return x + x; + }), + ["aa", "bb"], + "Map" + ); + a.deep( + t( + { 0: "a", 1: "b", length: 2 }, + function () { + return String(this); + }, + undefined + ), + ["undefined", "undefined"], + "Map context" + ); + a.deep( + t( + { 0: "a", 1: "b", length: 2 }, + function () { + return String(this); + }, + "x" + ), + ["x", "x"], + "Map primitive context" + ); + a.throws( + function () { + t({}, "foo", "x"); + }, + TypeError, + "Non callable for map" + ); + + a.deep(t({ length: 1, 0: "a" }), ["a"], "Null context"); + + a(t({ __proto__: { 0: "abc", length: 1 } })[0], "abc", "Values on prototype"); + + a.throws( + function () { + t.call(function () { + return Object.freeze({}); + }, {}); + }, + TypeError, + "Contructor producing freezed objects" + ); + + // Ensure no setters are called for the indexes + // Ensure no setters are called for the indexes + MyType = function () {}; + Object.defineProperty(MyType.prototype, "0", { + set: function (x) { + throw new Error("Setter called: " + x); + } + }); + a.deep(t.call(MyType, { 0: "abc", length: 1 }), { 0: "abc", length: 1 }, "Defined not set"); +}; diff --git a/node_modules/es5-ext/test/array/generate.js b/node_modules/es5-ext/test/array/generate.js new file mode 100644 index 000000000..efd5f7c8c --- /dev/null +++ b/node_modules/es5-ext/test/array/generate.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + var x = {}, y = {}; + a.deep(t(3), [undefined, undefined, undefined], "Just length"); + a.deep(t(0, "x"), [], "No repeat"); + a.deep(t(1, x, y), [x], "Arguments length larger than repeat number"); + a.deep(t(3, x), [x, x, x], "Single argument"); + a.deep(t(5, x, y), [x, y, x, y, x], "Many arguments"); +}; diff --git a/node_modules/es5-ext/test/array/is-plain-array.js b/node_modules/es5-ext/test/array/is-plain-array.js new file mode 100644 index 000000000..2cfd50d3b --- /dev/null +++ b/node_modules/es5-ext/test/array/is-plain-array.js @@ -0,0 +1,18 @@ +"use strict"; + +var SubArray = require("../../array/_sub-array-dummy-safe"); + +module.exports = function (t, a) { + var arr = [1, 2, 3]; + a(t(arr), true, "Array"); + a(t(null), false, "Null"); + a(t(), false, "Undefined"); + a(t("234"), false, "String"); + a(t(23), false, "Number"); + a(t({}), false, "Plain object"); + a(t({ length: 1, 0: "raz" }), false, "Array-like"); + a(t(Object.create(arr)), false, "Array extension"); + if (!SubArray) return; + a(t(new SubArray(23)), false, "Subclass instance"); + a(t(Array.prototype), false, "Array.prototype"); +}; diff --git a/node_modules/es5-ext/test/array/of/implement.js b/node_modules/es5-ext/test/array/of/implement.js new file mode 100644 index 000000000..0b1f5c8f8 --- /dev/null +++ b/node_modules/es5-ext/test/array/of/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../array/of/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/array/of/index.js b/node_modules/es5-ext/test/array/of/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/array/of/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/array/of/is-implemented.js b/node_modules/es5-ext/test/array/of/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/array/of/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/array/of/shim.js b/node_modules/es5-ext/test/array/of/shim.js new file mode 100644 index 000000000..7d18859af --- /dev/null +++ b/node_modules/es5-ext/test/array/of/shim.js @@ -0,0 +1,89 @@ +/* eslint no-useless-call: "off" */ +// Most tests taken from https://github.com/mathiasbynens/Array.of/blob/master/tests/tests.js +// Thanks @mathiasbynens + +"use strict"; + +var defineProperty = Object.defineProperty; + +module.exports = function (t, a) { + var x = {}, testObject, MyType; + + a.deep(t(), [], "No arguments"); + a.deep(t(3), [3], "One numeric argument"); + a.deep(t(3, "raz", null, x, undefined), [3, "raz", null, x, undefined], "Many arguments"); + + a(t.length, 0, "Length"); + + a.deep(t("abc"), ["abc"], "String"); + a.deep(t(undefined), [undefined], "Undefined"); + a.deep(t(null), [null], "Null"); + a.deep(t(false), [false], "Boolean"); + a.deep(t(-Infinity), [-Infinity], "Infinity"); + a.deep(t(-0), [-0], "-0"); + a.deep(t(+0), [+0], "+0"); + a.deep(t(1), [1], "1"); + a.deep(t(1, 2, 3), [1, 2, 3], "Numeric args"); + a.deep(t(Number(Infinity)), [Number(Infinity)], "+Infinity"); + a.deep( + t({ 0: "a", 1: "b", 2: "c", length: 3 }), + [{ 0: "a", 1: "b", 2: "c", length: 3 }], + "Array like" + ); + a.deep( + t(undefined, null, false, -Infinity, -0, +0, 1, 2, Number(Infinity)), + [undefined, null, false, -Infinity, -0, +0, 1, 2, Number(Infinity)], + "Falsy arguments" + ); + + a.h1("Null context"); + a.deep(t.call(null, "abc"), ["abc"], "String"); + a.deep(t.call(null, undefined), [undefined], "Undefined"); + a.deep(t.call(null, null), [null], "Null"); + a.deep(t.call(null, false), [false], "Boolean"); + a.deep(t.call(null, -Infinity), [-Infinity], "-Infinity"); + a.deep(t.call(null, -0), [-0], "-0"); + a.deep(t.call(null, +0), [+0], "+0"); + a.deep(t.call(null, 1), [1], "1"); + a.deep(t.call(null, 1, 2, 3), [1, 2, 3], "Numeric"); + a.deep(t.call(null, Number(Infinity)), [Number(Infinity)], "+Infinity"); + a.deep( + t.call(null, { 0: "a", 1: "b", 2: "c", length: 3 }), + [{ 0: "a", 1: "b", 2: "c", length: 3 }], + "Array-like" + ); + a.deep( + t.call(null, undefined, null, false, -Infinity, -0, +0, 1, 2, Number(Infinity)), + [undefined, null, false, -Infinity, -0, +0, 1, 2, Number(Infinity)], + "Falsy" + ); + + a.h1("Other constructor context"); + a.deep(t.call(Object, 1, 2, 3), { 0: 1, 1: 2, 2: 3, length: 3 }, "Many arguments"); + + testObject = Object(3); + testObject[0] = 1; + testObject[1] = 2; + testObject[2] = 3; + testObject.length = 3; + a.deep(t.call(Object, 1, 2, 3), testObject, "Test object"); + a(t.call(Object).length, 0, "No arguments"); + a.throws( + function () { + t.call(function () { + return Object.freeze({}); + }); + }, + TypeError, + "Frozen instance" + ); + + // Ensure no setters are called for the indexes + MyType = function () {}; + defineProperty(MyType.prototype, "0", { + set: function (x) { + throw new Error("Setter called: " + x); + } + }); + a.deep(t.call(MyType, "abc"), { 0: "abc", length: 1 }, "Define, not set"); +}; diff --git a/node_modules/es5-ext/test/array/to-array.js b/node_modules/es5-ext/test/array/to-array.js new file mode 100644 index 000000000..4e93ad5db --- /dev/null +++ b/node_modules/es5-ext/test/array/to-array.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = function (t, a) { + var o = [1, 2, 3]; + a(t(o), o, "Array"); + a.deep(t("12r3v"), ["1", "2", "r", "3", "v"], "String"); + a.deep(t((function () { + return arguments; +}(3, o, "raz"))), + [3, o, "raz"], "Arguments"); + a.deep(t((function () { + return arguments; +}(3))), [3], + "Arguments with one numeric value"); + + a.deep(t({ 0: "raz", 1: "dwa", length: 2 }), ["raz", "dwa"], "Other"); +}; diff --git a/node_modules/es5-ext/test/array/valid-array.js b/node_modules/es5-ext/test/array/valid-array.js new file mode 100644 index 000000000..a3708b22d --- /dev/null +++ b/node_modules/es5-ext/test/array/valid-array.js @@ -0,0 +1,30 @@ +"use strict"; + +module.exports = function (t, a) { + var x; + a.throws(function () { + t(); +}, TypeError, "Undefined"); + a.throws(function () { + t(null); +}, TypeError, "Null"); + a.throws(function () { + t(0); +}, TypeError, "Number"); + a.throws(function () { + t(true); +}, TypeError, "Boolean"); + a.throws(function () { + t("raz"); +}, TypeError, "String"); + a.throws(function () { + t(function () {}); +}, TypeError, "Function"); + a.throws(function () { + t({}); +}, TypeError, "Object"); + a.throws(function () { + t({ length: 0 }); +}, TypeError, "Array-like"); + a(t(x = []), x, "Array"); +}; diff --git a/node_modules/es5-ext/test/boolean/is-boolean.js b/node_modules/es5-ext/test/boolean/is-boolean.js new file mode 100644 index 000000000..e36b3f34e --- /dev/null +++ b/node_modules/es5-ext/test/boolean/is-boolean.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + a(t("arar"), false, "String"); + a(t(12), false, "Number"); + a(t(false), true, "Boolean"); + a(t(new Boolean(false)), true, "Boolean object"); + a(t(new Date()), false, "Date"); + a(t(new String("raz")), false, "String object"); + a(t({}), false, "Plain object"); + a(t(/a/), false, "Regular expression"); +}; diff --git a/node_modules/es5-ext/test/date/#/copy.js b/node_modules/es5-ext/test/date/#/copy.js new file mode 100644 index 000000000..27c996bba --- /dev/null +++ b/node_modules/es5-ext/test/date/#/copy.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + var o = new Date(), o2; + + o2 = t.call(o); + a.not(o, o2, "Different objects"); + a.ok(o2 instanceof Date, "Instance of Date"); + a(o.getTime(), o2.getTime(), "Same time"); +}; diff --git a/node_modules/es5-ext/test/date/#/days-in-month.js b/node_modules/es5-ext/test/date/#/days-in-month.js new file mode 100644 index 000000000..ce2dd7754 --- /dev/null +++ b/node_modules/es5-ext/test/date/#/days-in-month.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call(new Date(2001, 0, 1)), 31, "January"); + a(t.call(new Date(2001, 1, 1)), 28, "February"); + a(t.call(new Date(2000, 1, 1)), 29, "February (leap)"); + a(t.call(new Date(2001, 2, 1)), 31, "March"); + a(t.call(new Date(2001, 3, 1)), 30, "April"); + a(t.call(new Date(2001, 4, 1)), 31, "May"); + a(t.call(new Date(2001, 5, 1)), 30, "June"); + a(t.call(new Date(2001, 6, 1)), 31, "July"); + a(t.call(new Date(2001, 7, 1)), 31, "August"); + a(t.call(new Date(2001, 8, 1)), 30, "September"); + a(t.call(new Date(2001, 9, 1)), 31, "October"); + a(t.call(new Date(2001, 10, 1)), 30, "November"); + a(t.call(new Date(2001, 11, 1)), 31, "December"); +}; diff --git a/node_modules/es5-ext/test/date/#/floor-day.js b/node_modules/es5-ext/test/date/#/floor-day.js new file mode 100644 index 000000000..fa929d683 --- /dev/null +++ b/node_modules/es5-ext/test/date/#/floor-day.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call(new Date(2000, 0, 1, 13, 32, 34, 234)).valueOf(), + new Date(2000, 0, 1).valueOf()); +}; diff --git a/node_modules/es5-ext/test/date/#/floor-month.js b/node_modules/es5-ext/test/date/#/floor-month.js new file mode 100644 index 000000000..1df4ddbeb --- /dev/null +++ b/node_modules/es5-ext/test/date/#/floor-month.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call(new Date(2000, 0, 15, 13, 32, 34, 234)).valueOf(), + new Date(2000, 0, 1).valueOf()); +}; diff --git a/node_modules/es5-ext/test/date/#/floor-year.js b/node_modules/es5-ext/test/date/#/floor-year.js new file mode 100644 index 000000000..5b78b7dcf --- /dev/null +++ b/node_modules/es5-ext/test/date/#/floor-year.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call(new Date(2000, 5, 13, 13, 32, 34, 234)).valueOf(), + new Date(2000, 0, 1).valueOf()); +}; diff --git a/node_modules/es5-ext/test/date/#/format.js b/node_modules/es5-ext/test/date/#/format.js new file mode 100644 index 000000000..510b26b44 --- /dev/null +++ b/node_modules/es5-ext/test/date/#/format.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (t, a) { + var dt = new Date(2011, 2, 3, 3, 5, 5, 32); + a(t.call(dt, " %Y.%y.%m.%d.%H.%M.%S.%L "), " 2011.11.03.03.03.05.05.032 "); +}; diff --git a/node_modules/es5-ext/test/date/is-date.js b/node_modules/es5-ext/test/date/is-date.js new file mode 100644 index 000000000..90ae8ad70 --- /dev/null +++ b/node_modules/es5-ext/test/date/is-date.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + a(t("arar"), false, "String"); + a(t(12), false, "Number"); + a(t(true), false, "Boolean"); + a(t(new Date()), true, "Date"); + a(t(new String("raz")), false, "String object"); + a(t({}), false, "Plain object"); +}; diff --git a/node_modules/es5-ext/test/date/valid-date.js b/node_modules/es5-ext/test/date/valid-date.js new file mode 100644 index 000000000..2856cb6a8 --- /dev/null +++ b/node_modules/es5-ext/test/date/valid-date.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = function (t, a) { + var d = new Date(); + a(t(d), d, "Date"); + a.throws(function () { + t({}); + }, "Object"); + a.throws(function () { + t({ valueOf: function () { + return 20; +} }); + }, "Number object"); +}; diff --git a/node_modules/es5-ext/test/error/#/throw.js b/node_modules/es5-ext/test/error/#/throw.js new file mode 100644 index 000000000..8c5d04eea --- /dev/null +++ b/node_modules/es5-ext/test/error/#/throw.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + var e = new Error(); + try { + t.call(e); + } catch (e2) { + a(e2, e); + } +}; diff --git a/node_modules/es5-ext/test/error/custom.js b/node_modules/es5-ext/test/error/custom.js new file mode 100644 index 000000000..ca35c7666 --- /dev/null +++ b/node_modules/es5-ext/test/error/custom.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + var T = t, err = new T("My Error", "MY_ERROR", { errno: 123 }); + a(err instanceof Error, true, "Instance of error"); + a(err.constructor, Error, "Constructor"); + a(err.name, "Error", "Name"); + a(String(err), "Error: My Error", "String representation"); + a(err.code, "MY_ERROR", "Code"); + a(err.errno, 123, "Errno"); + a(typeof err.stack, "string", "Stack trace"); +}; diff --git a/node_modules/es5-ext/test/error/is-error.js b/node_modules/es5-ext/test/error/is-error.js new file mode 100644 index 000000000..423c7359e --- /dev/null +++ b/node_modules/es5-ext/test/error/is-error.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(), false, "Undefined"); + a(t(1), false, "Primitive"); + a(t({}), false, "Objectt"); + a(t({ toString: function () { + return "[object Error]"; +} }), false, + "Fake error"); + a(t(new Error()), true, "Error"); + a(t(new EvalError()), true, "EvalError"); + a(t(new RangeError()), true, "RangeError"); + a(t(new ReferenceError()), true, "ReferenceError"); + a(t(new SyntaxError()), true, "SyntaxError"); + a(t(new TypeError()), true, "TypeError"); + a(t(new URIError()), true, "URIError"); +}; diff --git a/node_modules/es5-ext/test/error/valid-error.js b/node_modules/es5-ext/test/error/valid-error.js new file mode 100644 index 000000000..7d032bf23 --- /dev/null +++ b/node_modules/es5-ext/test/error/valid-error.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + var e = new Error(); + a(t(e), e, "Error"); + a.throws(function () { + t({}); + }, "Other"); +}; diff --git a/node_modules/es5-ext/test/function/#/compose.js b/node_modules/es5-ext/test/function/#/compose.js new file mode 100644 index 000000000..433f3b4b1 --- /dev/null +++ b/node_modules/es5-ext/test/function/#/compose.js @@ -0,0 +1,15 @@ +"use strict"; + +var f = function (a, b) { + return ["a", arguments.length, a, b]; +} + , g = function (a) { + return ["b", arguments.length].concat(a); +} + , h = function (a) { + return ["c", arguments.length].concat(a); +}; + +module.exports = function (t, a) { + a.deep(t.call(h, g, f)(1, 2), ["c", 1, "b", 1, "a", 2, 1, 2]); +}; diff --git a/node_modules/es5-ext/test/function/#/copy.js b/node_modules/es5-ext/test/function/#/copy.js new file mode 100644 index 000000000..9948f1183 --- /dev/null +++ b/node_modules/es5-ext/test/function/#/copy.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = function (t, a) { + var foo = "raz", bar = "dwa"; + // eslint-disable-next-line func-names + var fn = function marko (a, b) { + return this + a + b + foo + bar; + }; + var result, o = {}; + + fn.prototype = o; + + fn.foo = "raz"; + + result = t.call(fn); + + a(result.length, fn.length, "Length"); + a(result.name, fn.name, "Length"); + a(result.call("marko", "el", "fe"), "markoelferazdwa", "Body"); + a(result.prototype, fn.prototype, "Prototype"); + a(result.foo, fn.foo, "Custom property"); +}; diff --git a/node_modules/es5-ext/test/function/#/curry.js b/node_modules/es5-ext/test/function/#/curry.js new file mode 100644 index 000000000..c30313a0d --- /dev/null +++ b/node_modules/es5-ext/test/function/#/curry.js @@ -0,0 +1,20 @@ +"use strict"; + +var toArray = require("../../../array/to-array") + + , f = function () { + return toArray(arguments); +}; + +module.exports = function (t, a) { + var x, y = {}, z; + a.deep(t.call(f, 0, 1, 2)(3), [], "0 arguments"); + x = t.call(f, 5, {}); + a(x.length, 5, "Length #1"); + z = x(1, 2); + a(z.length, 3, "Length #2"); + z = z(3, 4); + a(z.length, 1, "Length #1"); + a.deep(z(5, 6), [1, 2, 3, 4, 5], "Many arguments"); + a.deep(x(8, 3)(y, 45)("raz", 6), [8, 3, y, 45, "raz"], "Many arguments #2"); +}; diff --git a/node_modules/es5-ext/test/function/#/lock.js b/node_modules/es5-ext/test/function/#/lock.js new file mode 100644 index 000000000..08ea9505c --- /dev/null +++ b/node_modules/es5-ext/test/function/#/lock.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call(function () { + return arguments.length; + })(1, 2, 3), 0); +}; diff --git a/node_modules/es5-ext/test/function/#/not.js b/node_modules/es5-ext/test/function/#/not.js new file mode 100644 index 000000000..64fff7150 --- /dev/null +++ b/node_modules/es5-ext/test/function/#/not.js @@ -0,0 +1,11 @@ +"use strict"; + +var identity = require("../../../function/identity") + , noop = require("../../../function/noop"); + +module.exports = function (t, a) { + a(t.call(identity)(""), true, "Falsy"); + a(t.call(noop)(), true, "Undefined"); + a(t.call(identity)({}), false, "Any object"); + a(t.call(identity)(true), false, "True"); +}; diff --git a/node_modules/es5-ext/test/function/#/partial.js b/node_modules/es5-ext/test/function/#/partial.js new file mode 100644 index 000000000..7e9428fa9 --- /dev/null +++ b/node_modules/es5-ext/test/function/#/partial.js @@ -0,0 +1,11 @@ +"use strict"; + +var toArray = require("../../../array/to-array") + + , f = function () { + return toArray(arguments); +}; + +module.exports = function (t, a) { + a.deep(t.call(f, 1)(2, 3), [1, 2, 3]); +}; diff --git a/node_modules/es5-ext/test/function/#/spread.js b/node_modules/es5-ext/test/function/#/spread.js new file mode 100644 index 000000000..d082fcabc --- /dev/null +++ b/node_modules/es5-ext/test/function/#/spread.js @@ -0,0 +1,10 @@ +"use strict"; + +var f = function (a, b) { + return this[a] + this[b]; +} + , o = { a: 3, b: 4 }; + +module.exports = function (t, a) { + a(t.call(f).call(o, ["a", "b"]), 7); +}; diff --git a/node_modules/es5-ext/test/function/#/to-string-tokens.js b/node_modules/es5-ext/test/function/#/to-string-tokens.js new file mode 100644 index 000000000..0691cc394 --- /dev/null +++ b/node_modules/es5-ext/test/function/#/to-string-tokens.js @@ -0,0 +1,33 @@ +/* eslint no-eval: "off" */ + +"use strict"; + +module.exports = function (t, a) { + a.deep( + t.call(function (a, b) { + return this[a] + this[b]; + }), + { args: "a, b", body: "\n\t\t\treturn this[a] + this[b];\n\t\t" } + ); + a.deep(t.call(function () {}), { args: "", body: "" }); + // eslint-disable-next-line no-unused-vars + a.deep(t.call(function (raz) {}), { args: "raz", body: "" }); + a.deep( + t.call(function () { + Object(); + }), + { args: "", body: "\n\t\t\tObject();\n\t\t" } + ); + + try { + eval("(() => {})"); + } catch (e) { + // Non ES2015 env + return; + } + + a.deep(t.call(eval("(() => {})")), { args: "", body: "" }); + a.deep(t.call(eval("((elo) => foo)")), { args: "elo", body: "foo" }); + a.deep(t.call(eval("(elo => foo)")), { args: "elo", body: "foo" }); + a.deep(t.call(eval("((elo, bar) => foo())")), { args: "elo, bar", body: "foo()" }); +}; diff --git a/node_modules/es5-ext/test/function/_define-length.js b/node_modules/es5-ext/test/function/_define-length.js new file mode 100644 index 000000000..324e273c0 --- /dev/null +++ b/node_modules/es5-ext/test/function/_define-length.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = function (t, a) { + var foo = "raz", bar = "dwa" + , fn = function (a, b) { + return this + a + b + foo + bar; +} + , result; + + result = t(fn, 3); + a(result.call("marko", "el", "fe"), "markoelferazdwa", "Content"); + a(result.length, 3, "Length"); + a(result.prototype, fn.prototype, "Prototype"); +}; diff --git a/node_modules/es5-ext/test/function/constant.js b/node_modules/es5-ext/test/function/constant.js new file mode 100644 index 000000000..4ba2d8983 --- /dev/null +++ b/node_modules/es5-ext/test/function/constant.js @@ -0,0 +1,7 @@ +"use strict"; + +var o = {}; + +module.exports = function (t, a) { + a(t(o)(), o); +}; diff --git a/node_modules/es5-ext/test/function/identity.js b/node_modules/es5-ext/test/function/identity.js new file mode 100644 index 000000000..a5b0b1bc9 --- /dev/null +++ b/node_modules/es5-ext/test/function/identity.js @@ -0,0 +1,7 @@ +"use strict"; + +var o = {}; + +module.exports = function (t, a) { + a(t(o), o); +}; diff --git a/node_modules/es5-ext/test/function/invoke.js b/node_modules/es5-ext/test/function/invoke.js new file mode 100644 index 000000000..6268f47e9 --- /dev/null +++ b/node_modules/es5-ext/test/function/invoke.js @@ -0,0 +1,9 @@ +"use strict"; + +var constant = require("../../function/constant") + + , o = { b: constant("c") }; + +module.exports = function (t, a) { + a(t("b")(o), "c"); +}; diff --git a/node_modules/es5-ext/test/function/is-arguments.js b/node_modules/es5-ext/test/function/is-arguments.js new file mode 100644 index 000000000..5bd54ac7e --- /dev/null +++ b/node_modules/es5-ext/test/function/is-arguments.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + var args, dummy; + args = (function () { + return arguments; +}()); + dummy = { 0: 1, 1: 2 }; + Object.defineProperty(dummy, "length", { value: 2 }); + a(t(args), true, "Arguments"); + a(t(dummy), false, "Dummy"); + a(t([]), false, "Array"); +}; diff --git a/node_modules/es5-ext/test/function/is-function.js b/node_modules/es5-ext/test/function/is-function.js new file mode 100644 index 000000000..fe8979851 --- /dev/null +++ b/node_modules/es5-ext/test/function/is-function.js @@ -0,0 +1,8 @@ +"use strict"; + +var o = { call: Function.prototype.call, apply: Function.prototype.apply }; + +module.exports = function (t, a) { + a(t(function () {}), true, "Function is function"); + a(t(o), false, "Plain object is not function"); +}; diff --git a/node_modules/es5-ext/test/function/noop.js b/node_modules/es5-ext/test/function/noop.js new file mode 100644 index 000000000..34de85ab6 --- /dev/null +++ b/node_modules/es5-ext/test/function/noop.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(1, 2, 3), "undefined"); +}; diff --git a/node_modules/es5-ext/test/function/pluck.js b/node_modules/es5-ext/test/function/pluck.js new file mode 100644 index 000000000..f8954c59d --- /dev/null +++ b/node_modules/es5-ext/test/function/pluck.js @@ -0,0 +1,7 @@ +"use strict"; + +var o = { foo: "bar" }; + +module.exports = function (t, a) { + a(t("foo")(o), o.foo); +}; diff --git a/node_modules/es5-ext/test/function/valid-function.js b/node_modules/es5-ext/test/function/valid-function.js new file mode 100644 index 000000000..30c036084 --- /dev/null +++ b/node_modules/es5-ext/test/function/valid-function.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = function (t, a) { + var f = function () {}; + a(t(f), f, "Function"); + // eslint-disable-next-line no-new-func + f = new Function(); + a(t(f), f, "Function"); + a.throws(function () { + t({}); + }, "Object"); + a.throws(function () { + t(/re/); + }, "RegExp"); + a.throws(function () { + t({ + call: function () { + return 20; + } + }); + }, "Plain object"); +}; diff --git a/node_modules/es5-ext/test/global.js b/node_modules/es5-ext/test/global.js new file mode 100644 index 000000000..554ad4ccd --- /dev/null +++ b/node_modules/es5-ext/test/global.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (t, a) { + a.ok(t && typeof t === "object"); + a(typeof t.Array, "function"); +}; diff --git a/node_modules/es5-ext/test/iterable/for-each.js b/node_modules/es5-ext/test/iterable/for-each.js new file mode 100644 index 000000000..d6c3872aa --- /dev/null +++ b/node_modules/es5-ext/test/iterable/for-each.js @@ -0,0 +1,42 @@ +"use strict"; + +var ArrayIterator = require("es6-iterator/array") + + , slice = Array.prototype.slice; + +module.exports = function (t, a) { + var i = 0, x = ["raz", "dwa", "trzy"], y = {}; + t(x, function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "Array " + i + "#"); + a(this, y, "Array: context: " + i++ + "#"); + }, y); + i = 0; + t((function () { + return arguments; +}("raz", "dwa", "trzy")), function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "Arguments" + i + "#"); + a(this, y, "Arguments: context: " + i++ + "#"); + }, y); + i = 0; + t({ 0: "raz", 1: "dwa", 2: "trzy", length: 3 }, function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "Array-like" + i + "#"); + a(this, y, "Array-like: context: " + i++ + "#"); + }, y); + i = 0; + t(x = "foo", function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "String " + i + "#"); + a(this, y, "Regular String: context: " + i++ + "#"); + }, y); + i = 0; + x = ["r", "💩", "z"]; + t("r💩z", function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "String " + i + "#"); + a(this, y, "Unicode String: context: " + i++ + "#"); + }, y); + i = 0; + t(new ArrayIterator(x), function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "Iterator " + i + "#"); + a(this, y, "Iterator: context: " + i++ + "#"); + }, y); + +}; diff --git a/node_modules/es5-ext/test/iterable/is.js b/node_modules/es5-ext/test/iterable/is.js new file mode 100644 index 000000000..8c3158b22 --- /dev/null +++ b/node_modules/es5-ext/test/iterable/is.js @@ -0,0 +1,22 @@ +"use strict"; + +var iteratorSymbol = require("es6-symbol").iterator; + +module.exports = function (t, a) { + var x; + a(t([]), true, "Array"); + a(t(""), true, "String"); + a(t((function () { + return arguments; +}())), true, "Arguments"); + a(t({ length: 0 }), true, "List object"); + a(t(function () {}), false, "Function"); + a(t({}), false, "Plain object"); + a(t(/raz/), false, "Regexp"); + a(t(), false, "No argument"); + a(t(null), false, "Null"); + a(t(undefined), false, "Undefined"); + x = {}; + x[iteratorSymbol] = function () {}; + a(t(x), true, "Iterable"); +}; diff --git a/node_modules/es5-ext/test/iterable/validate-object.js b/node_modules/es5-ext/test/iterable/validate-object.js new file mode 100644 index 000000000..83a9ca15e --- /dev/null +++ b/node_modules/es5-ext/test/iterable/validate-object.js @@ -0,0 +1,34 @@ +"use strict"; + +var iteratorSymbol = require("es6-symbol").iterator; + +module.exports = function (t, a) { + var x; + a.throws(function () { + t(0); +}, TypeError, "0"); + a.throws(function () { + t(false); +}, TypeError, "false"); + a.throws(function () { + t(""); +}, TypeError, "String"); + a.throws(function () { + t({}); +}, TypeError, "Plain Object"); + a.throws(function () { + t(function () {}); +}, TypeError, "Function"); + a(t(x = new String("raz")), x, "String object"); // Jslint: ignore + + a(t(x = { length: 1 }), x, "Array like"); + a.throws(function () { + t(); +}, TypeError, "Undefined"); + a.throws(function () { + t(null); +}, TypeError, "null"); + x = {}; + x[iteratorSymbol] = function () {}; + a(t(x), x, "Iterable"); +}; diff --git a/node_modules/es5-ext/test/iterable/validate.js b/node_modules/es5-ext/test/iterable/validate.js new file mode 100644 index 000000000..61cab5d38 --- /dev/null +++ b/node_modules/es5-ext/test/iterable/validate.js @@ -0,0 +1,32 @@ +"use strict"; + +var iteratorSymbol = require("es6-symbol").iterator; + +module.exports = function (t, a) { + var x; + a.throws(function () { + t(0); +}, TypeError, "0"); + a.throws(function () { + t(false); +}, TypeError, "false"); + a(t(""), "", "''"); + a.throws(function () { + t({}); +}, TypeError, "Plain Object"); + a.throws(function () { + t(function () {}); +}, TypeError, "Function"); + a(t(x = new String("raz")), x, "String object"); // Jslint: ignore + + a(t(x = { length: 1 }), x, "Array like"); + a.throws(function () { + t(); +}, TypeError, "Undefined"); + a.throws(function () { + t(null); +}, TypeError, "null"); + x = {}; + x[iteratorSymbol] = function () {}; + a(t(x), x, "Iterable"); +}; diff --git a/node_modules/es5-ext/test/json/safe-stringify.js b/node_modules/es5-ext/test/json/safe-stringify.js new file mode 100644 index 000000000..2d13f3def --- /dev/null +++ b/node_modules/es5-ext/test/json/safe-stringify.js @@ -0,0 +1,26 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({ foo: "bar" }), JSON.stringify({ foo: "bar" })); + a(t({ foo: { elo: 12 } }), "{\"foo\":{\"elo\":12}}"); + a(t({ foo: { elo: 12, +mel: { + toJSON: function () { + throw new Error("Nu nu!"); +} + } } }), "{\"foo\":{\"elo\":12}}"); + a(t({ foo: { elo: 12 }, +mel: { + toJSON: function () { + throw new Error("Nu nu!"); +} + } }), "{\"foo\":{\"elo\":12}}"); + a(t({ foo: { elo: 12 }, +mel: [ +"raz", { + toJSON: function () { + throw new Error("Nu nu!"); +} + }, 0, 2 +] }), "{\"foo\":{\"elo\":12},\"mel\":[\"raz\",0,2]}"); +}; diff --git a/node_modules/es5-ext/test/math/_pack-ieee754.js b/node_modules/es5-ext/test/math/_pack-ieee754.js new file mode 100644 index 000000000..7e56f7f29 --- /dev/null +++ b/node_modules/es5-ext/test/math/_pack-ieee754.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a.deep(t(1.337, 8, 23), [63, 171, 34, 209]); +}; diff --git a/node_modules/es5-ext/test/math/_unpack-ieee754.js b/node_modules/es5-ext/test/math/_unpack-ieee754.js new file mode 100644 index 000000000..52730f389 --- /dev/null +++ b/node_modules/es5-ext/test/math/_unpack-ieee754.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a.deep(t([63, 171, 34, 209], 8, 23), 1.3370000123977661); +}; diff --git a/node_modules/es5-ext/test/math/acosh/implement.js b/node_modules/es5-ext/test/math/acosh/implement.js new file mode 100644 index 000000000..d7bcc28ae --- /dev/null +++ b/node_modules/es5-ext/test/math/acosh/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/acosh/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/acosh/index.js b/node_modules/es5-ext/test/math/acosh/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/acosh/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/acosh/is-implemented.js b/node_modules/es5-ext/test/math/acosh/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/acosh/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/acosh/shim.js b/node_modules/es5-ext/test/math/acosh/shim.js new file mode 100644 index 000000000..17ac18193 --- /dev/null +++ b/node_modules/es5-ext/test/math/acosh/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(-1), NaN, "Negative"); + a(t(0), NaN, "Zero"); + a(t(0.5), NaN, "Below 1"); + a(t(1), 0, "1"); + a(t(2), 1.3169578969248166, "Other"); + a(t(Infinity), Infinity, "Infinity"); +}; diff --git a/node_modules/es5-ext/test/math/asinh/implement.js b/node_modules/es5-ext/test/math/asinh/implement.js new file mode 100644 index 000000000..ab4b96914 --- /dev/null +++ b/node_modules/es5-ext/test/math/asinh/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/asinh/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/asinh/index.js b/node_modules/es5-ext/test/math/asinh/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/asinh/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/asinh/is-implemented.js b/node_modules/es5-ext/test/math/asinh/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/asinh/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/asinh/shim.js b/node_modules/es5-ext/test/math/asinh/shim.js new file mode 100644 index 000000000..a4328d2e1 --- /dev/null +++ b/node_modules/es5-ext/test/math/asinh/shim.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(0), 0, "Zero"); + a(t(Infinity), Infinity, "Infinity"); + a(t(-Infinity), -Infinity, "-Infinity"); + a(t(-2), -1.4436354751788103, "Negative"); + a(t(2), 1.4436354751788103, "Positive"); +}; diff --git a/node_modules/es5-ext/test/math/atanh/implement.js b/node_modules/es5-ext/test/math/atanh/implement.js new file mode 100644 index 000000000..bcd3bd875 --- /dev/null +++ b/node_modules/es5-ext/test/math/atanh/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/atanh/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/atanh/index.js b/node_modules/es5-ext/test/math/atanh/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/atanh/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/atanh/is-implemented.js b/node_modules/es5-ext/test/math/atanh/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/atanh/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/atanh/shim.js b/node_modules/es5-ext/test/math/atanh/shim.js new file mode 100644 index 000000000..f58709cc4 --- /dev/null +++ b/node_modules/es5-ext/test/math/atanh/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(-2), NaN, "Less than -1"); + a(t(2), NaN, "Greater than 1"); + a(t(-1), -Infinity, "-1"); + a(t(1), Infinity, "1"); + a(t(0), 0, "Zero"); + a(Math.round(t(0.5) * 1e15), 549306144334055, "Other"); +}; diff --git a/node_modules/es5-ext/test/math/cbrt/implement.js b/node_modules/es5-ext/test/math/cbrt/implement.js new file mode 100644 index 000000000..132e9296d --- /dev/null +++ b/node_modules/es5-ext/test/math/cbrt/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/cbrt/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/cbrt/index.js b/node_modules/es5-ext/test/math/cbrt/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/cbrt/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/cbrt/is-implemented.js b/node_modules/es5-ext/test/math/cbrt/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/cbrt/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/cbrt/shim.js b/node_modules/es5-ext/test/math/cbrt/shim.js new file mode 100644 index 000000000..fc1beee4c --- /dev/null +++ b/node_modules/es5-ext/test/math/cbrt/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(0), 0, "Zero"); + a(t(Infinity), Infinity, "Infinity"); + a(t(-Infinity), -Infinity, "-Infinity"); + a(t(-1), -1, "-1"); + a(t(1), 1, "1"); + a(t(2), 1.2599210498948732, "Ohter"); +}; diff --git a/node_modules/es5-ext/test/math/clz32/implement.js b/node_modules/es5-ext/test/math/clz32/implement.js new file mode 100644 index 000000000..36f529f15 --- /dev/null +++ b/node_modules/es5-ext/test/math/clz32/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/clz32/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/clz32/index.js b/node_modules/es5-ext/test/math/clz32/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/clz32/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/clz32/is-implemented.js b/node_modules/es5-ext/test/math/clz32/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/clz32/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/clz32/shim.js b/node_modules/es5-ext/test/math/clz32/shim.js new file mode 100644 index 000000000..4d8dd2fa0 --- /dev/null +++ b/node_modules/es5-ext/test/math/clz32/shim.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(1), 31, "1"); + a(t(1000), 22, "1000"); + a(t(), 32, "No arguments"); + a(t(Infinity), 32, "Infinity"); + a(t(-Infinity), 32, "-Infinity"); + a(t("foo"), 32, "String"); + a(t(true), 31, "Boolean"); + a(t(3.5), 30, "Float"); +}; diff --git a/node_modules/es5-ext/test/math/cosh/implement.js b/node_modules/es5-ext/test/math/cosh/implement.js new file mode 100644 index 000000000..6ad42efb0 --- /dev/null +++ b/node_modules/es5-ext/test/math/cosh/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/cosh/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/cosh/index.js b/node_modules/es5-ext/test/math/cosh/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/cosh/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/cosh/is-implemented.js b/node_modules/es5-ext/test/math/cosh/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/cosh/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/cosh/shim.js b/node_modules/es5-ext/test/math/cosh/shim.js new file mode 100644 index 000000000..0b917c706 --- /dev/null +++ b/node_modules/es5-ext/test/math/cosh/shim.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(0), 1, "Zero"); + a(t(Infinity), Infinity, "Infinity"); + a(t(-Infinity), Infinity, "-Infinity"); + a(t(1), 1.5430806348152437, "1"); + a(t(Number.MAX_VALUE), Infinity); + a(t(-Number.MAX_VALUE), Infinity); + a(t(Number.MIN_VALUE), 1); + a(t(-Number.MIN_VALUE), 1); +}; diff --git a/node_modules/es5-ext/test/math/expm1/implement.js b/node_modules/es5-ext/test/math/expm1/implement.js new file mode 100644 index 000000000..7fb528a3e --- /dev/null +++ b/node_modules/es5-ext/test/math/expm1/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/expm1/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/expm1/index.js b/node_modules/es5-ext/test/math/expm1/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/expm1/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/expm1/is-implemented.js b/node_modules/es5-ext/test/math/expm1/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/expm1/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/expm1/shim.js b/node_modules/es5-ext/test/math/expm1/shim.js new file mode 100644 index 000000000..cebb063c6 --- /dev/null +++ b/node_modules/es5-ext/test/math/expm1/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(0), 0, "Zero"); + a(t(Infinity), Infinity, "Infinity"); + a(t(-Infinity), -1, "-Infinity"); + a(t(1).toFixed(15), "1.718281828459045", "1"); +}; diff --git a/node_modules/es5-ext/test/math/fround/implement.js b/node_modules/es5-ext/test/math/fround/implement.js new file mode 100644 index 000000000..c7b9ad4a9 --- /dev/null +++ b/node_modules/es5-ext/test/math/fround/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/fround/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/fround/index.js b/node_modules/es5-ext/test/math/fround/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/fround/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/fround/is-implemented.js b/node_modules/es5-ext/test/math/fround/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/fround/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/fround/shim.js b/node_modules/es5-ext/test/math/fround/shim.js new file mode 100644 index 000000000..0525bfab9 --- /dev/null +++ b/node_modules/es5-ext/test/math/fround/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(0), 0, "Zero"); + a(t(Infinity), Infinity, "Infinity"); + a(t(-Infinity), -Infinity, "-Infinity"); + a(t(1.337), 1.3370000123977661, "1"); +}; diff --git a/node_modules/es5-ext/test/math/hypot/implement.js b/node_modules/es5-ext/test/math/hypot/implement.js new file mode 100644 index 000000000..29c87fe93 --- /dev/null +++ b/node_modules/es5-ext/test/math/hypot/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/hypot/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/hypot/index.js b/node_modules/es5-ext/test/math/hypot/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/hypot/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/hypot/is-implemented.js b/node_modules/es5-ext/test/math/hypot/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/hypot/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/hypot/shim.js b/node_modules/es5-ext/test/math/hypot/shim.js new file mode 100644 index 000000000..89e4657c1 --- /dev/null +++ b/node_modules/es5-ext/test/math/hypot/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(), 0, "No arguments"); + a(t(0, -0, 0), 0, "Zeros"); + a(t(4, NaN, Infinity), Infinity, "Infinity"); + a(t(4, NaN, -Infinity), Infinity, "Infinity"); + a(t(4, NaN, 34), NaN, "NaN"); + a(t(3, 4), 5, "#1"); + a(t(3, 4, 5), 7.0710678118654755, "#2"); +}; diff --git a/node_modules/es5-ext/test/math/imul/implement.js b/node_modules/es5-ext/test/math/imul/implement.js new file mode 100644 index 000000000..b633a72b5 --- /dev/null +++ b/node_modules/es5-ext/test/math/imul/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/imul/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/imul/index.js b/node_modules/es5-ext/test/math/imul/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/imul/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/imul/is-implemented.js b/node_modules/es5-ext/test/math/imul/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/imul/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/imul/shim.js b/node_modules/es5-ext/test/math/imul/shim.js new file mode 100644 index 000000000..a8d4e9060 --- /dev/null +++ b/node_modules/es5-ext/test/math/imul/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(), 0, "No arguments"); + a(t(0, 0), 0, "Zeros"); + a(t(2, 4), 8, "#1"); + a(t(-1, 8), -8, "#2"); + a(t(0xfffffffe, 5), -10, "#3"); +}; diff --git a/node_modules/es5-ext/test/math/log10/implement.js b/node_modules/es5-ext/test/math/log10/implement.js new file mode 100644 index 000000000..afc9dab17 --- /dev/null +++ b/node_modules/es5-ext/test/math/log10/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/log10/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/log10/index.js b/node_modules/es5-ext/test/math/log10/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/log10/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/log10/is-implemented.js b/node_modules/es5-ext/test/math/log10/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/log10/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/log10/shim.js b/node_modules/es5-ext/test/math/log10/shim.js new file mode 100644 index 000000000..d0696287f --- /dev/null +++ b/node_modules/es5-ext/test/math/log10/shim.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(-0.5), NaN, "Less than 0"); + a(t(0), -Infinity, "0"); + a(t(1), 0, "1"); + a(t(Infinity), Infinity, "Infinity"); + a(t(2), 0.3010299956639812, "Other"); +}; diff --git a/node_modules/es5-ext/test/math/log1p/implement.js b/node_modules/es5-ext/test/math/log1p/implement.js new file mode 100644 index 000000000..baa2ab159 --- /dev/null +++ b/node_modules/es5-ext/test/math/log1p/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/log1p/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/log1p/index.js b/node_modules/es5-ext/test/math/log1p/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/log1p/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/log1p/is-implemented.js b/node_modules/es5-ext/test/math/log1p/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/log1p/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/log1p/shim.js b/node_modules/es5-ext/test/math/log1p/shim.js new file mode 100644 index 000000000..66b400ccd --- /dev/null +++ b/node_modules/es5-ext/test/math/log1p/shim.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(-1.5), NaN, "Less than -1"); + a(t(-1), -Infinity, "-1"); + a(t(0), 0, "0"); + a(t(Infinity), Infinity, "Infinity"); + a(t(1), 0.6931471805599453, "Other"); +}; diff --git a/node_modules/es5-ext/test/math/log2/implement.js b/node_modules/es5-ext/test/math/log2/implement.js new file mode 100644 index 000000000..43bdf4360 --- /dev/null +++ b/node_modules/es5-ext/test/math/log2/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/log2/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/log2/index.js b/node_modules/es5-ext/test/math/log2/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/log2/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/log2/is-implemented.js b/node_modules/es5-ext/test/math/log2/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/log2/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/log2/shim.js b/node_modules/es5-ext/test/math/log2/shim.js new file mode 100644 index 000000000..f587e3393 --- /dev/null +++ b/node_modules/es5-ext/test/math/log2/shim.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(-0.5), NaN, "Less than 0"); + a(t(0), -Infinity, "0"); + a(t(1), 0, "1"); + a(t(Infinity), Infinity, "Infinity"); + a(t(3).toFixed(15), "1.584962500721156", "Other"); +}; diff --git a/node_modules/es5-ext/test/math/sign/implement.js b/node_modules/es5-ext/test/math/sign/implement.js new file mode 100644 index 000000000..409beb1f5 --- /dev/null +++ b/node_modules/es5-ext/test/math/sign/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/sign/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/sign/index.js b/node_modules/es5-ext/test/math/sign/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/sign/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/sign/is-implemented.js b/node_modules/es5-ext/test/math/sign/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/sign/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/sign/shim.js b/node_modules/es5-ext/test/math/sign/shim.js new file mode 100644 index 000000000..071ea07e1 --- /dev/null +++ b/node_modules/es5-ext/test/math/sign/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +var is = require("../../../object/is"); + +module.exports = function (t, a) { + a(is(t(0), +0), true, "+0"); + a(is(t(-0), -0), true, "-0"); + a(t({}), NaN, true, "NaN"); + a(t(-234234234), -1, "Negative"); + a(t(234234234), 1, "Positive"); +}; diff --git a/node_modules/es5-ext/test/math/sinh/implement.js b/node_modules/es5-ext/test/math/sinh/implement.js new file mode 100644 index 000000000..ca4b5e7b5 --- /dev/null +++ b/node_modules/es5-ext/test/math/sinh/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/sinh/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/sinh/index.js b/node_modules/es5-ext/test/math/sinh/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/sinh/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/sinh/is-implemented.js b/node_modules/es5-ext/test/math/sinh/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/sinh/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/sinh/shim.js b/node_modules/es5-ext/test/math/sinh/shim.js new file mode 100644 index 000000000..f168a7f71 --- /dev/null +++ b/node_modules/es5-ext/test/math/sinh/shim.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(0), 0, "Zero"); + a(t(Infinity), Infinity, "Infinity"); + a(t(-Infinity), -Infinity, "-Infinity"); + a(t(1), 1.1752011936438014, "1"); + a(t(Number.MAX_VALUE), Infinity); + a(t(-Number.MAX_VALUE), -Infinity); + a(t(Number.MIN_VALUE), 5e-324); + a(t(-Number.MIN_VALUE), -5e-324); +}; diff --git a/node_modules/es5-ext/test/math/tanh/implement.js b/node_modules/es5-ext/test/math/tanh/implement.js new file mode 100644 index 000000000..8503711f4 --- /dev/null +++ b/node_modules/es5-ext/test/math/tanh/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/tanh/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/tanh/index.js b/node_modules/es5-ext/test/math/tanh/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/tanh/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/tanh/is-implemented.js b/node_modules/es5-ext/test/math/tanh/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/tanh/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/tanh/shim.js b/node_modules/es5-ext/test/math/tanh/shim.js new file mode 100644 index 000000000..5da3c0875 --- /dev/null +++ b/node_modules/es5-ext/test/math/tanh/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(0), 0, "Zero"); + a(t(Infinity), 1, "Infinity"); + a(t(-Infinity), -1, "-Infinity"); + a(t(1), 0.7615941559557649, "1"); + a(t(Number.MAX_VALUE), 1); + a(t(-Number.MAX_VALUE), -1); +}; diff --git a/node_modules/es5-ext/test/math/trunc/implement.js b/node_modules/es5-ext/test/math/trunc/implement.js new file mode 100644 index 000000000..0d3374fc9 --- /dev/null +++ b/node_modules/es5-ext/test/math/trunc/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../math/trunc/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/math/trunc/index.js b/node_modules/es5-ext/test/math/trunc/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/math/trunc/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/math/trunc/is-implemented.js b/node_modules/es5-ext/test/math/trunc/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/math/trunc/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/math/trunc/shim.js b/node_modules/es5-ext/test/math/trunc/shim.js new file mode 100644 index 000000000..b80e86830 --- /dev/null +++ b/node_modules/es5-ext/test/math/trunc/shim.js @@ -0,0 +1,16 @@ +"use strict"; + +var is = require("../../../object/is"); + +module.exports = function (t, a) { + a(t({}), NaN, "NaN"); + a(t(0), 0, "Zero"); + a(t(Infinity), Infinity, "Infinity"); + a(t(-Infinity), -Infinity, "-Infinity"); + a(is(t(0.234), 0), true, "0"); + a(is(t(-0.234), -0), true, "-0"); + a(t(13.7), 13, "Positive #1"); + a(t(12.3), 12, "Positive #2"); + a(t(-12.3), -12, "Negative #1"); + a(t(-14.7), -14, "Negative #2"); +}; diff --git a/node_modules/es5-ext/test/number/#/pad.js b/node_modules/es5-ext/test/number/#/pad.js new file mode 100644 index 000000000..cc8aa5e40 --- /dev/null +++ b/node_modules/es5-ext/test/number/#/pad.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call(78, 4), "0078"); + a(t.call(65.12323, 4, 3), "0065.123", "Precision"); + a(t.call(65, 4, 3), "0065.000", "Precision integer"); +}; diff --git a/node_modules/es5-ext/test/number/epsilon/implement.js b/node_modules/es5-ext/test/number/epsilon/implement.js new file mode 100644 index 000000000..d387b7c1e --- /dev/null +++ b/node_modules/es5-ext/test/number/epsilon/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../number/epsilon/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/number/epsilon/index.js b/node_modules/es5-ext/test/number/epsilon/index.js new file mode 100644 index 000000000..d20e5c3bc --- /dev/null +++ b/node_modules/es5-ext/test/number/epsilon/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t, "number"); +}; diff --git a/node_modules/es5-ext/test/number/epsilon/is-implemented.js b/node_modules/es5-ext/test/number/epsilon/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/number/epsilon/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/number/is-finite/implement.js b/node_modules/es5-ext/test/number/is-finite/implement.js new file mode 100644 index 000000000..5300de627 --- /dev/null +++ b/node_modules/es5-ext/test/number/is-finite/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../number/is-finite/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/number/is-finite/index.js b/node_modules/es5-ext/test/number/is-finite/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/number/is-finite/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/number/is-finite/is-implemented.js b/node_modules/es5-ext/test/number/is-finite/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/number/is-finite/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/number/is-finite/shim.js b/node_modules/es5-ext/test/number/is-finite/shim.js new file mode 100644 index 000000000..8fa004fd4 --- /dev/null +++ b/node_modules/es5-ext/test/number/is-finite/shim.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(2), true, "Number"); + a(t("23"), false, "Not numeric"); + a(t(NaN), false, "NaN"); + a(t(Infinity), false, "Infinity"); +}; diff --git a/node_modules/es5-ext/test/number/is-integer/implement.js b/node_modules/es5-ext/test/number/is-integer/implement.js new file mode 100644 index 000000000..2290b2507 --- /dev/null +++ b/node_modules/es5-ext/test/number/is-integer/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../number/is-integer/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/number/is-integer/index.js b/node_modules/es5-ext/test/number/is-integer/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/number/is-integer/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/number/is-integer/is-implemented.js b/node_modules/es5-ext/test/number/is-integer/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/number/is-integer/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/number/is-integer/shim.js b/node_modules/es5-ext/test/number/is-integer/shim.js new file mode 100644 index 000000000..e367990bb --- /dev/null +++ b/node_modules/es5-ext/test/number/is-integer/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(2), true, "Number"); + a(t(2.34), false, "Float"); + a(t("23"), false, "Not numeric"); + a(t(NaN), false, "NaN"); + a(t(Infinity), false, "Infinity"); +}; diff --git a/node_modules/es5-ext/test/number/is-nan/implement.js b/node_modules/es5-ext/test/number/is-nan/implement.js new file mode 100644 index 000000000..10fa084ed --- /dev/null +++ b/node_modules/es5-ext/test/number/is-nan/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../number/is-nan/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/number/is-nan/index.js b/node_modules/es5-ext/test/number/is-nan/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/number/is-nan/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/number/is-nan/is-implemented.js b/node_modules/es5-ext/test/number/is-nan/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/number/is-nan/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/number/is-nan/shim.js b/node_modules/es5-ext/test/number/is-nan/shim.js new file mode 100644 index 000000000..31810474e --- /dev/null +++ b/node_modules/es5-ext/test/number/is-nan/shim.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(2), false, "Number"); + a(t({}), false, "Not numeric"); + a(t(NaN), true, "NaN"); +}; diff --git a/node_modules/es5-ext/test/number/is-natural.js b/node_modules/es5-ext/test/number/is-natural.js new file mode 100644 index 000000000..8fe4dcc46 --- /dev/null +++ b/node_modules/es5-ext/test/number/is-natural.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(2), true, "Number"); + a(t(-2), false, "Negative"); + a(t(2.34), false, "Float"); + a(t("23"), false, "Not numeric"); + a(t(NaN), false, "NaN"); + a(t(Infinity), false, "Infinity"); +}; diff --git a/node_modules/es5-ext/test/number/is-number.js b/node_modules/es5-ext/test/number/is-number.js new file mode 100644 index 000000000..9cd670c1b --- /dev/null +++ b/node_modules/es5-ext/test/number/is-number.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(0), true, "Zero"); + a(t(NaN), true, "NaN"); + a(t(Infinity), true, "Infinity"); + a(t(12), true, "Number"); + a(t(false), false, "Boolean"); + a(t(new Date()), false, "Date"); + a(t(new Number(2)), true, "Number object"); + a(t("asdfaf"), false, "String"); + a(t(""), false, "Empty String"); +}; diff --git a/node_modules/es5-ext/test/number/is-safe-integer/implement.js b/node_modules/es5-ext/test/number/is-safe-integer/implement.js new file mode 100644 index 000000000..96f634b16 --- /dev/null +++ b/node_modules/es5-ext/test/number/is-safe-integer/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../number/is-safe-integer/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/number/is-safe-integer/index.js b/node_modules/es5-ext/test/number/is-safe-integer/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/number/is-safe-integer/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/number/is-safe-integer/is-implemented.js b/node_modules/es5-ext/test/number/is-safe-integer/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/number/is-safe-integer/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/number/is-safe-integer/shim.js b/node_modules/es5-ext/test/number/is-safe-integer/shim.js new file mode 100644 index 000000000..a4ea6913c --- /dev/null +++ b/node_modules/es5-ext/test/number/is-safe-integer/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(2), true, "Number"); + a(t(2.34), false, "Float"); + a(t(Math.pow(2, 53)), false, "Too large"); + a(t(Math.pow(2, 53) - 1), true, "Maximum"); + a(t("23"), false, "Not numeric"); + a(t(NaN), false, "NaN"); + a(t(Infinity), false, "Infinity"); +}; diff --git a/node_modules/es5-ext/test/number/max-safe-integer/implement.js b/node_modules/es5-ext/test/number/max-safe-integer/implement.js new file mode 100644 index 000000000..1928f3410 --- /dev/null +++ b/node_modules/es5-ext/test/number/max-safe-integer/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../number/max-safe-integer/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/number/max-safe-integer/index.js b/node_modules/es5-ext/test/number/max-safe-integer/index.js new file mode 100644 index 000000000..d20e5c3bc --- /dev/null +++ b/node_modules/es5-ext/test/number/max-safe-integer/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t, "number"); +}; diff --git a/node_modules/es5-ext/test/number/max-safe-integer/is-implemented.js b/node_modules/es5-ext/test/number/max-safe-integer/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/number/max-safe-integer/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/number/min-safe-integer/implement.js b/node_modules/es5-ext/test/number/min-safe-integer/implement.js new file mode 100644 index 000000000..f8b309a8c --- /dev/null +++ b/node_modules/es5-ext/test/number/min-safe-integer/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../number/min-safe-integer/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/number/min-safe-integer/index.js b/node_modules/es5-ext/test/number/min-safe-integer/index.js new file mode 100644 index 000000000..d20e5c3bc --- /dev/null +++ b/node_modules/es5-ext/test/number/min-safe-integer/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t, "number"); +}; diff --git a/node_modules/es5-ext/test/number/min-safe-integer/is-implemented.js b/node_modules/es5-ext/test/number/min-safe-integer/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/number/min-safe-integer/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/number/to-integer.js b/node_modules/es5-ext/test/number/to-integer.js new file mode 100644 index 000000000..b7b975f56 --- /dev/null +++ b/node_modules/es5-ext/test/number/to-integer.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), 0, "NaN"); + a(t(20), 20, "Positive integer"); + a(t("-20"), -20, "String negative integer"); + a(t(Infinity), Infinity, "Infinity"); + a(t(15.343), 15, "Float"); + a(t(-15.343), -15, "Negative float"); +}; diff --git a/node_modules/es5-ext/test/number/to-pos-integer.js b/node_modules/es5-ext/test/number/to-pos-integer.js new file mode 100644 index 000000000..27c7cdfae --- /dev/null +++ b/node_modules/es5-ext/test/number/to-pos-integer.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), 0, "NaN"); + a(t(20), 20, "Positive integer"); + a(t(-20), 0, "Negative integer"); + a(t(Infinity), Infinity, "Infinity"); + a(t(15.343), 15, "Float"); + a(t(-15.343), 0, "Negative float"); +}; diff --git a/node_modules/es5-ext/test/number/to-uint32.js b/node_modules/es5-ext/test/number/to-uint32.js new file mode 100644 index 000000000..7eea42f5f --- /dev/null +++ b/node_modules/es5-ext/test/number/to-uint32.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), 0, "Not numeric"); + a(t(-4), 4294967292, "Negative"); + a(t(133432), 133432, "Positive"); + a(t(8589934592), 0, "Greater than maximum"); +}; diff --git a/node_modules/es5-ext/test/object/_iterate.js b/node_modules/es5-ext/test/object/_iterate.js new file mode 100644 index 000000000..d7728f429 --- /dev/null +++ b/node_modules/es5-ext/test/object/_iterate.js @@ -0,0 +1,30 @@ +"use strict"; + +module.exports = function (t, a) { + var o = { raz: 1, dwa: 2, trzy: 3 } + , o2 = {}, o3 = {}, arr, i = -1; + + t = t("forEach"); + t(o, function (value, name, self, index) { + o2[name] = value; + a(index, ++i, "Index"); + a(self, o, "Self"); + a(this, o3, "Scope"); + }, o3); + a.deep(o2, o); + + arr = []; + o2 = {}; + i = -1; + t(o, function (value, name, self, index) { + arr.push(value); + o2[name] = value; + a(index, ++i, "Index"); + a(self, o, "Self"); + a(this, o3, "Scope"); + }, o3, function (a, b) { + return o[b] - o[a]; + }); + a.deep(o2, o, "Sort by Values: Content"); + a.deep(arr, [3, 2, 1], "Sort by Values: Order"); +}; diff --git a/node_modules/es5-ext/test/object/assign/implement.js b/node_modules/es5-ext/test/object/assign/implement.js new file mode 100644 index 000000000..c3e0396ba --- /dev/null +++ b/node_modules/es5-ext/test/object/assign/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../object/assign/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/object/assign/index.js b/node_modules/es5-ext/test/object/assign/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/object/assign/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/object/assign/is-implemented.js b/node_modules/es5-ext/test/object/assign/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/object/assign/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/object/assign/shim.js b/node_modules/es5-ext/test/object/assign/shim.js new file mode 100644 index 000000000..360749076 --- /dev/null +++ b/node_modules/es5-ext/test/object/assign/shim.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + var o1 = { a: 1, b: 2 } + , o2 = { b: 3, c: 4 }; + + a(t(o1, o2), o1, "Returns self"); + a.deep(o1, { a: 1, b: 3, c: 4 }, "Single: content"); + + a.deep(t({}, o1, o2), { a: 1, b: 3, c: 4 }, "Multi argument"); +}; diff --git a/node_modules/es5-ext/test/object/clear.js b/node_modules/es5-ext/test/object/clear.js new file mode 100644 index 000000000..5735e7967 --- /dev/null +++ b/node_modules/es5-ext/test/object/clear.js @@ -0,0 +1,13 @@ +"use strict"; + +var isEmpty = require("../../object/is-empty"); + +module.exports = function (t, a) { + var x = {}; + a(t(x), x, "Empty: Returns same object"); + a(isEmpty(x), true, "Empty: Not changed"); + x.foo = "raz"; + x.bar = "dwa"; + a(t(x), x, "Same object"); + a(isEmpty(x), true, "Emptied"); +}; diff --git a/node_modules/es5-ext/test/object/compact.js b/node_modules/es5-ext/test/object/compact.js new file mode 100644 index 000000000..353f6f327 --- /dev/null +++ b/node_modules/es5-ext/test/object/compact.js @@ -0,0 +1,20 @@ +"use strict"; + +module.exports = function (t, a) { + var x = {}, y = {}, z; + z = t(x); + a.not(z, x, "Returns different object"); + a.deep(z, {}, "Empty on empty"); + + x = { foo: "bar", +a: 0, +b: false, +c: "", +d: "0", +e: null, +bar: y, + elo: undefined }; + z = t(x); + a.deep(z, { foo: "bar", a: 0, b: false, c: "", d: "0", bar: y }, + "Cleared null values"); +}; diff --git a/node_modules/es5-ext/test/object/compare.js b/node_modules/es5-ext/test/object/compare.js new file mode 100644 index 000000000..23cc51160 --- /dev/null +++ b/node_modules/es5-ext/test/object/compare.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + var d = new Date(); + + a.ok(t(12, 3) > 0, "Numbers"); + a.ok(t(2, 13) < 0, "Numbers #2"); + a.ok(t("aaa", "aa") > 0, "Strings"); + a.ok(t("aa", "ab") < 0, "Strings #2"); + a(t("aa", "aa"), 0, "Strings same"); + a(t(d, new Date(d.getTime())), 0, "Same date"); + a.ok(t(d, new Date(d.getTime() + 1)) < 0, "Different date"); +}; diff --git a/node_modules/es5-ext/test/object/copy-deep.js b/node_modules/es5-ext/test/object/copy-deep.js new file mode 100644 index 000000000..2dcbc3ab9 --- /dev/null +++ b/node_modules/es5-ext/test/object/copy-deep.js @@ -0,0 +1,31 @@ +"use strict"; + +var stringify = JSON.stringify; + +module.exports = function (t, a) { + var o = { 1: "raz", 2: "dwa", 3: "trzy" } + , no = t(o); + + a.not(no, o, "Return different object"); + a(stringify(no), stringify(o), "Match properties and values"); + + o = { foo: "bar", +raz: { dwa: "dwa", + trzy: { cztery: "pięć", sześć: "siedem" }, +osiem: {}, + dziewięć: function () { } }, + dziesięć: 10, +jedenaście: ["raz", ["dwa", "trzy", { elo: "true" }]] }; + o.raz.rec = o; + + no = t(o); + a.not(o.raz, no.raz, "Deep"); + a.not(o.raz.trzy, no.raz.trzy, "Deep #2"); + a(stringify(o.raz.trzy), stringify(no.raz.trzy), "Deep content"); + a(no.raz.rec, no, "Recursive"); + a.not(o.raz.osiem, no.raz.osiem, "Empty object"); + a(o.raz["dziewięć"], no.raz["dziewięć"], "Function"); + a.not(o["jedenaście"], no["jedenaście"]); + a.not(o["jedenaście"][1], no["jedenaście"][1]); + a.not(o["jedenaście"][1][2], no["jedenaście"][1][2]); +}; diff --git a/node_modules/es5-ext/test/object/copy.js b/node_modules/es5-ext/test/object/copy.js new file mode 100644 index 000000000..a5e2c3480 --- /dev/null +++ b/node_modules/es5-ext/test/object/copy.js @@ -0,0 +1,30 @@ +"use strict"; + +var stringify = JSON.stringify; + +module.exports = function (t, a) { + var o = { 1: "raz", 2: "dwa", 3: "trzy" }, no = t(o); + + a.not(no, o, "Return different object"); + a(stringify(no), stringify(o), "Match properties and values"); + + o = { + foo: "bar", + raz: { + dwa: "dwa", + trzy: { cztery: "pięć", sześć: "siedem" }, + osiem: {}, + dziewięć: function () {} + }, + dziesięć: 10 + }; + o.raz.rec = o; + + no = t(o); + a(o.raz, no.raz, "Shallow"); + + a.deep(t(o, ["foo"]), { foo: "bar" }); + a.deep(t(Object.create(o), ["foo"]), { foo: "bar" }); + a.deep(t(o, ["foo", "habla"]), { foo: "bar" }); + a.deep(t(o, ["foo", "habla"], { ensure: true }), { foo: "bar", habla: undefined }); +}; diff --git a/node_modules/es5-ext/test/object/count.js b/node_modules/es5-ext/test/object/count.js new file mode 100644 index 000000000..ec1c50450 --- /dev/null +++ b/node_modules/es5-ext/test/object/count.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), 0, "Empty"); + a(t({ raz: 1, dwa: null, trzy: undefined, cztery: 0 }), 4, + "Some properties"); + a(t(Object.defineProperties({}, { + raz: { value: "raz" }, + dwa: { value: "dwa", enumerable: true } + })), 1, "Some properties hidden"); +}; diff --git a/node_modules/es5-ext/test/object/create.js b/node_modules/es5-ext/test/object/create.js new file mode 100644 index 000000000..c9f3029f6 --- /dev/null +++ b/node_modules/es5-ext/test/object/create.js @@ -0,0 +1,22 @@ +"use strict"; + +var setPrototypeOf = require("../../object/set-prototype-of") + + , getPrototypeOf = Object.getPrototypeOf; + +module.exports = function (t, a) { + var x = {}, obj; + + a(getPrototypeOf(t(x)), x, "Normal object"); + a(getPrototypeOf(t(null)), + (setPrototypeOf && setPrototypeOf.nullPolyfill) || null, "Null"); + + a.h1("Properties"); + a.h2("Normal object"); + a(getPrototypeOf(obj = t(x, { foo: { value: "bar" } })), x, "Prototype"); + a(obj.foo, "bar", "Property"); + a.h2("Null"); + a(getPrototypeOf(obj = t(null, { foo: { value: "bar2" } })), + (setPrototypeOf && setPrototypeOf.nullPolyfill) || null, "Prototype"); + a(obj.foo, "bar2", "Property"); +}; diff --git a/node_modules/es5-ext/test/object/ensure-array.js b/node_modules/es5-ext/test/object/ensure-array.js new file mode 100644 index 000000000..fd3c32c97 --- /dev/null +++ b/node_modules/es5-ext/test/object/ensure-array.js @@ -0,0 +1,55 @@ +"use strict"; + +module.exports = function (t, a) { + var arr = []; + a(t(arr), arr, "Array"); + a(t(""), "", "String"); + var args = (function () { + return arguments; + }()); + a(t(args), args, "Arguments"); + var arrayLike = { length: 0 }; + a(t(arrayLike), arrayLike, "Array like"); + a.throws( + function () { + t(function () {}); + }, + TypeError, + "Function" + ); + a.throws( + function () { + t({}); + }, + TypeError, + "Plain object" + ); + a.throws( + function () { + t(/raz/); + }, + TypeError, + "Regexp" + ); + a.throws( + function () { + t(); + }, + TypeError, + "No argument" + ); + a.throws( + function () { + t(null); + }, + TypeError, + "Null" + ); + a.throws( + function () { + t(undefined); + }, + TypeError, + "Undefined" + ); +}; diff --git a/node_modules/es5-ext/test/object/ensure-finite-number.js b/node_modules/es5-ext/test/object/ensure-finite-number.js new file mode 100644 index 000000000..f1e6166b5 --- /dev/null +++ b/node_modules/es5-ext/test/object/ensure-finite-number.js @@ -0,0 +1,54 @@ +"use strict"; + +module.exports = function (t, a) { + a.throws( + function () { + t(undefined); + }, + TypeError, + "Undefined" + ); + a.throws( + function () { + t(null); + }, + TypeError, + "Null" + ); + a(t(0), 0, "Zero"); + a.throws( + function () { + t(NaN); + }, + TypeError, + "NaN" + ); + a.throws( + function () { + t(Infinity); + }, + TypeError, + "Infinity" + ); + a(t(12), 12, "Number"); + a(t(false), 0, "Boolean"); + a(t(new Date(1000000)), 1000000, "Date"); + a(t(new Number(2)), 2, "Number object"); + a.throws( + function () { + t("asdfaf"); + }, + TypeError, + "String" + ); + a(t(""), 0, "Empty String"); + if (typeof Symbol === "function") { + a.throws( + function () { + t(Symbol("test")); + }, + TypeError, + "Symbol" + ); + } +}; diff --git a/node_modules/es5-ext/test/object/ensure-natural-number-value.js b/node_modules/es5-ext/test/object/ensure-natural-number-value.js new file mode 100644 index 000000000..9aaae370a --- /dev/null +++ b/node_modules/es5-ext/test/object/ensure-natural-number-value.js @@ -0,0 +1,24 @@ +"use strict"; + +module.exports = function (t, a) { + a.throws(function () { + t(undefined); +}, TypeError, "Undefined"); + a.throws(function () { + t(null); +}, TypeError, "Null"); + a(t(2), 2, "Number"); + a.throws(function () { + t(-2); +}, TypeError, "Negative"); + a.throws(function () { + t(2.34); +}, TypeError, "Float"); + a(t("23"), 23, "Numeric string"); + a.throws(function () { + t(NaN); +}, TypeError, "NaN"); + a.throws(function () { + t(Infinity); +}, TypeError, "Infinity"); +}; diff --git a/node_modules/es5-ext/test/object/ensure-natural-number.js b/node_modules/es5-ext/test/object/ensure-natural-number.js new file mode 100644 index 000000000..ff0e836af --- /dev/null +++ b/node_modules/es5-ext/test/object/ensure-natural-number.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = function (t, a) { + a.throws(function () { + t(undefined); +}, TypeError, "Undefined"); + a(t(null), 0, "Null"); + a(t(2), 2, "Number"); + a.throws(function () { + t(-2); +}, TypeError, "Negative"); + a.throws(function () { + t(2.34); +}, TypeError, "Float"); + a(t("23"), 23, "Numeric string"); + a.throws(function () { + t(NaN); +}, TypeError, "NaN"); + a.throws(function () { + t(Infinity); +}, TypeError, "Infinity"); +}; diff --git a/node_modules/es5-ext/test/object/ensure-promise.js b/node_modules/es5-ext/test/object/ensure-promise.js new file mode 100644 index 000000000..1af15bab7 --- /dev/null +++ b/node_modules/es5-ext/test/object/ensure-promise.js @@ -0,0 +1,32 @@ +"use strict"; + +module.exports = function (t, a) { + var promise; + a.throws(function () { + t(); +}, TypeError); + a.throws(function () { + t(null); +}, TypeError); + a.throws(function () { + t("promise"); +}, TypeError); + a.throws(function () { + t({}); +}, TypeError); + a.throws(function () { + t(function () {}); +}, TypeError); + a.throws(function () { + t({ then: {} }); +}, TypeError); + promise = { then: function () {} }; + a(t(promise), promise); + promise = function () {}; + promise.then = {}; + a.throws(function () { + t(promise); +}, TypeError); + promise.then = function () {}; + a(t(promise), promise); +}; diff --git a/node_modules/es5-ext/test/object/eq.js b/node_modules/es5-ext/test/object/eq.js new file mode 100644 index 000000000..8cad90aeb --- /dev/null +++ b/node_modules/es5-ext/test/object/eq.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + var o = {}; + a(t(o, {}), false, "Different objects"); + a(t(o, o), true, "Same objects"); + a(t("1", "1"), true, "Same primitive"); + a(t("1", 1), false, "Different primitive types"); + a(t(NaN, NaN), true, "NaN"); + a(t(0, 0), true, "0,0"); + a(t(0, -0), true, "0,-0"); +}; diff --git a/node_modules/es5-ext/test/object/every.js b/node_modules/es5-ext/test/object/every.js new file mode 100644 index 000000000..7e837d22e --- /dev/null +++ b/node_modules/es5-ext/test/object/every.js @@ -0,0 +1,21 @@ +"use strict"; + +var o = { 1: 1, 2: 2, 3: 3 }; + +module.exports = function (t, a) { + var o2 = {}; + t(o, function (value, name) { + o2[name] = value; + return true; + }); + a(JSON.stringify(o2), JSON.stringify(o), "Iterates"); + + a(t(o, function () { + return true; + }), true, "Succeeds"); + + a(t(o, function () { + return false; + }), false, "Fails"); + +}; diff --git a/node_modules/es5-ext/test/object/filter.js b/node_modules/es5-ext/test/object/filter.js new file mode 100644 index 000000000..c714d2373 --- /dev/null +++ b/node_modules/es5-ext/test/object/filter.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = function (t, a) { + a.deep(t({ 1: 1, 2: 2, 3: 3, 4: 4 }, + function (value) { + return Boolean(value % 2); +}), { 1: 1, 3: 3 }); +}; diff --git a/node_modules/es5-ext/test/object/find-key.js b/node_modules/es5-ext/test/object/find-key.js new file mode 100644 index 000000000..d4a578ff3 --- /dev/null +++ b/node_modules/es5-ext/test/object/find-key.js @@ -0,0 +1,23 @@ +"use strict"; + +var o = { 1: 1, 2: 2, 3: 3 }; + +module.exports = function (t, a) { + var o2 = {}, i = 0; + t(o, function (value, name) { + o2[name] = value; + return false; + }); + a(JSON.stringify(o2), JSON.stringify(o), "Iterates"); + + a(t(o, function () { + ++i; + return true; + }), "1", "Finds"); + a(i, 1, "Stops iteration after condition is met"); + + a(t(o, function () { + return false; + }), undefined, "Fails"); + +}; diff --git a/node_modules/es5-ext/test/object/find.js b/node_modules/es5-ext/test/object/find.js new file mode 100644 index 000000000..eea512470 --- /dev/null +++ b/node_modules/es5-ext/test/object/find.js @@ -0,0 +1,23 @@ +"use strict"; + +var o = { 1: 1, 2: 2, 3: 3 }; + +module.exports = function (t, a) { + var o2 = {}, i = 0; + t(o, function (value, name) { + o2[name] = value; + return false; + }); + a(JSON.stringify(o2), JSON.stringify(o), "Iterates"); + + a(t(o, function () { + ++i; + return true; + }), 1, "Finds"); + a(i, 1, "Stops iteration after condition is met"); + + a(t(o, function () { + return false; + }), undefined, "Fails"); + +}; diff --git a/node_modules/es5-ext/test/object/first-key.js b/node_modules/es5-ext/test/object/first-key.js new file mode 100644 index 000000000..6010ba11c --- /dev/null +++ b/node_modules/es5-ext/test/object/first-key.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + var x = {}, y = Object.create(null); + a(t(x), null, "Normal: Empty"); + a(t(y), null, "Null extension: Empty"); + x.foo = "raz"; + x.bar = 343; + a(["foo", "bar"].indexOf(t(x)) !== -1, true, "Normal"); + y.elo = "foo"; + y.mar = "wew"; + a(["elo", "mar"].indexOf(t(y)) !== -1, true, "Null extension"); +}; diff --git a/node_modules/es5-ext/test/object/flatten.js b/node_modules/es5-ext/test/object/flatten.js new file mode 100644 index 000000000..277a97cfd --- /dev/null +++ b/node_modules/es5-ext/test/object/flatten.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (t, a) { + a.deep(t({ a: { aa: 1, ab: 2 }, b: { ba: 3, bb: 4 } }), + { aa: 1, ab: 2, ba: 3, bb: 4 }); +}; diff --git a/node_modules/es5-ext/test/object/for-each.js b/node_modules/es5-ext/test/object/for-each.js new file mode 100644 index 000000000..97c6399a8 --- /dev/null +++ b/node_modules/es5-ext/test/object/for-each.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + var o = { raz: 1, dwa: 2, trzy: 3 } + , o2 = {}; + a(t(o, function (value, name) { + o2[name] = value; + }), undefined, "Return"); + a.deep(o2, o); +}; diff --git a/node_modules/es5-ext/test/object/get-property-names.js b/node_modules/es5-ext/test/object/get-property-names.js new file mode 100644 index 000000000..a1d6377fe --- /dev/null +++ b/node_modules/es5-ext/test/object/get-property-names.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = function (t, a) { + var o = { first: 1, second: 4 }, r1, r2; + o = Object.create(o, { + third: { value: null } + }); + o.first = 2; + o = Object.create(o); + o.fourth = 3; + + r1 = t(o); + r1.sort(); + r2 = ["first", "second", "third", "fourth"] + .concat(Object.getOwnPropertyNames(Object.prototype)); + r2.sort(); + a.deep(r1, r2); +}; diff --git a/node_modules/es5-ext/test/object/is-array-like.js b/node_modules/es5-ext/test/object/is-array-like.js new file mode 100644 index 000000000..c50ef1d12 --- /dev/null +++ b/node_modules/es5-ext/test/object/is-array-like.js @@ -0,0 +1,16 @@ +"use strict"; + +module.exports = function (t, a) { + a(t([]), true, "Array"); + a(t(""), true, "String"); + a(t((function () { + return arguments; +}())), true, "Arguments"); + a(t({ length: 0 }), true, "List object"); + a(t(function () {}), false, "Function"); + a(t({}), false, "Plain object"); + a(t(/raz/), false, "Regexp"); + a(t(), false, "No argument"); + a(t(null), false, "Null"); + a(t(undefined), false, "Undefined"); +}; diff --git a/node_modules/es5-ext/test/object/is-callable.js b/node_modules/es5-ext/test/object/is-callable.js new file mode 100644 index 000000000..415023e39 --- /dev/null +++ b/node_modules/es5-ext/test/object/is-callable.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(function () {}), true, "Function"); + a(t({}), false, "Object"); + a(t(), false, "Undefined"); + a(t(null), false, "Null"); +}; diff --git a/node_modules/es5-ext/test/object/is-copy-deep.js b/node_modules/es5-ext/test/object/is-copy-deep.js new file mode 100644 index 000000000..9c8ad9257 --- /dev/null +++ b/node_modules/es5-ext/test/object/is-copy-deep.js @@ -0,0 +1,46 @@ +"use strict"; + +module.exports = function (t, a) { + var x, y; + + a(t({ 1: 1, 2: 2, 3: 3 }, { 1: 1, 2: 2, 3: 3 }), true, "Same"); + a(t({ 1: 1, 2: 2, 3: 3 }, { 1: 1, 2: 2, 3: 4 }), false, + "Different property value"); + a(t({ 1: 1, 2: 2, 3: 3 }, { 1: 1, 2: 2 }), false, + "Property only in source"); + a(t({ 1: 1, 2: 2 }, { 1: 1, 2: 2, 3: 4 }), false, + "Property only in target"); + + a(t("raz", "dwa"), false, "String: diff"); + a(t("raz", "raz"), true, "String: same"); + a(t("32", 32), false, "String & Number"); + + a(t([1, "raz", true], [1, "raz", true]), true, "Array: same"); + a(t([1, "raz", undefined], [1, "raz"]), false, "Array: diff"); + a(t(["foo"], ["one"]), false, "Array: One value comparision"); + + x = { foo: { bar: { mar: {} } } }; + y = { foo: { bar: { mar: {} } } }; + a(t(x, y), true, "Deep"); + + a(t({ foo: { bar: { mar: "foo" } } }, { foo: { bar: { mar: {} } } }), + false, "Deep: false"); + + x = { foo: { bar: { mar: {} } } }; + x.rec = { foo: x }; + + y = { foo: { bar: { mar: {} } } }; + y.rec = { foo: x }; + + a(t(x, y), true, "Object: Infinite Recursion: Same #1"); + + x.rec.foo = y; + a(t(x, y), true, "Object: Infinite Recursion: Same #2"); + + x.rec.foo = x; + y.rec.foo = y; + a(t(x, y), true, "Object: Infinite Recursion: Same #3"); + + y.foo.bar.mar = "raz"; + a(t(x, y), false, "Object: Infinite Recursion: Diff"); +}; diff --git a/node_modules/es5-ext/test/object/is-copy.js b/node_modules/es5-ext/test/object/is-copy.js new file mode 100644 index 000000000..6052bb051 --- /dev/null +++ b/node_modules/es5-ext/test/object/is-copy.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({ 1: 1, 2: 2, 3: 3 }, { 1: 1, 2: 2, 3: 3 }), true, "Same"); + a(t({ 1: 1, 2: 2, 3: 3 }, { 1: 1, 2: 2, 3: 4 }), false, + "Different property value"); + a(t({ 1: 1, 2: 2, 3: 3 }, { 1: 1, 2: 2 }), false, + "Property only in source"); + a(t({ 1: 1, 2: 2 }, { 1: 1, 2: 2, 3: 4 }), false, + "Property only in target"); + + a(t("raz", "dwa"), false, "String: diff"); + a(t("raz", "raz"), true, "String: same"); + a(t("32", 32), false, "String & Number"); + + a(t([1, "raz", true], [1, "raz", true]), true, "Array: same"); + a(t([1, "raz", undefined], [1, "raz"]), false, "Array: diff"); +}; diff --git a/node_modules/es5-ext/test/object/is-empty.js b/node_modules/es5-ext/test/object/is-empty.js new file mode 100644 index 000000000..067b1621f --- /dev/null +++ b/node_modules/es5-ext/test/object/is-empty.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), true, "Empty"); + a(t({ 1: 1 }), false, "Not empty"); +}; diff --git a/node_modules/es5-ext/test/object/is-finite-number.js b/node_modules/es5-ext/test/object/is-finite-number.js new file mode 100644 index 000000000..6475fb661 --- /dev/null +++ b/node_modules/es5-ext/test/object/is-finite-number.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(undefined), false, "Undefined"); + a(t(null), false, "Null"); + a(t(0), true, "Zero"); + a(t(NaN), false, "NaN"); + a(t(Infinity), false, "Infinity"); + a(t(12), true, "Number"); + a(t(false), true, "Boolean"); + a(t(new Date()), true, "Date"); + a(t(new Number(2)), true, "Number object"); + a(t("asdfaf"), false, "String"); + a(t(""), true, "Empty String"); + if (typeof Symbol === "function") { + a(t(Symbol("test")), false, "Symbol"); + } +}; diff --git a/node_modules/es5-ext/test/object/is-number-value.js b/node_modules/es5-ext/test/object/is-number-value.js new file mode 100644 index 000000000..2c09d2517 --- /dev/null +++ b/node_modules/es5-ext/test/object/is-number-value.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(undefined), false, "Undefined"); + a(t(null), false, "Null"); + a(t(0), true, "Zero"); + a(t(NaN), false, "NaN"); + a(t(Infinity), true, "Infinity"); + a(t(12), true, "Number"); + a(t(false), true, "Boolean"); + a(t(new Date()), true, "Date"); + a(t(new Number(2)), true, "Number object"); + a(t("asdfaf"), false, "String"); + a(t(""), true, "Empty String"); + if (typeof Symbol === "function") { + a(t(Symbol("test")), false, "Symbol"); + } +}; diff --git a/node_modules/es5-ext/test/object/is-object.js b/node_modules/es5-ext/test/object/is-object.js new file mode 100644 index 000000000..0b8359978 --- /dev/null +++ b/node_modules/es5-ext/test/object/is-object.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + a(t("arar"), false, "String"); + a(t(12), false, "Number"); + a(t(true), false, "Boolean"); + a(t(null), false, "Null"); + a(t(new Date()), true, "Date"); + a(t(new String("raz")), true, "String object"); + a(t({}), true, "Plain object"); + a(t(/a/), true, "Regular expression"); + a(t(function () {}), true, "Function"); +}; diff --git a/node_modules/es5-ext/test/object/is-plain-object.js b/node_modules/es5-ext/test/object/is-plain-object.js new file mode 100644 index 000000000..7324438d9 --- /dev/null +++ b/node_modules/es5-ext/test/object/is-plain-object.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = function (t, a) { + a(t({}), true, "Empty {} is plain object"); + a(t({ a: true }), true, "{} with property is plain object"); + a(t({ prototype: 1, constructor: 2, __proto__: 3 }), true, + "{} with any property keys is plain object"); + a(t(null), false, "Null is not plain object"); + a(t("string"), false, "Primitive is not plain object"); + a(t(function () {}), false, "Function is not plain object"); + a(t(Object.create({})), false, + "Object whose prototype is not Object.prototype is not plain object"); + a(t(Object.create(Object.prototype)), true, + "Object whose prototype is Object.prototype is plain object"); + a(t(Object.create(null)), true, + "Object whose prototype is null is plain object"); + a(t(Object.prototype), false, "Object.prototype"); +}; diff --git a/node_modules/es5-ext/test/object/is-promise.js b/node_modules/es5-ext/test/object/is-promise.js new file mode 100644 index 000000000..18bf934d8 --- /dev/null +++ b/node_modules/es5-ext/test/object/is-promise.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = function (t, a) { + var promise; + a(t(), false); + a(t(null), false); + a(t("promise"), false); + a(t({}), false); + a(t(function () {}), false); + a(t({ then: {} }), false); + a(t({ then: function () {} }), true); + promise = function () {}; + promise.then = {}; + a(t(promise), false); + promise.then = function () {}; + a(t(promise), true); +}; diff --git a/node_modules/es5-ext/test/object/is-value.js b/node_modules/es5-ext/test/object/is-value.js new file mode 100644 index 000000000..c97722d0a --- /dev/null +++ b/node_modules/es5-ext/test/object/is-value.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(), false); + a(t(undefined), false); + a(t(null), false); + a(t(NaN), true); + a(t(0), true); + a(t(false), true); + a(t("null"), true); + a(t(""), true); + a(t({}), true); + a(t(Object.prototype), true); +}; diff --git a/node_modules/es5-ext/test/object/is.js b/node_modules/es5-ext/test/object/is.js new file mode 100644 index 000000000..c94ed41c7 --- /dev/null +++ b/node_modules/es5-ext/test/object/is.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + var o = {}; + a(t(o, {}), false, "Different objects"); + a(t(o, o), true, "Same objects"); + a(t("1", "1"), true, "Same primitive"); + a(t("1", 1), false, "Different primitive types"); + a(t(NaN, NaN), true, "NaN"); + a(t(0, 0), true, "0,0"); + a(t(0, -0), false, "0,-0"); +}; diff --git a/node_modules/es5-ext/test/object/key-of.js b/node_modules/es5-ext/test/object/key-of.js new file mode 100644 index 000000000..bf10ca03b --- /dev/null +++ b/node_modules/es5-ext/test/object/key-of.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + var x = {}, y = {} + , o = { foo: "bar", raz: x, trzy: "cztery", five: "6" }; + + a(t(o, "bar"), "foo", "First property"); + a(t(o, 6), null, "Primitive that's not there"); + a(t(o, x), "raz", "Object"); + a(t(o, y), null, "Object that's not there"); + a(t(o, "6"), "five", "Last property"); +}; diff --git a/node_modules/es5-ext/test/object/keys/implement.js b/node_modules/es5-ext/test/object/keys/implement.js new file mode 100644 index 000000000..d364abed9 --- /dev/null +++ b/node_modules/es5-ext/test/object/keys/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../object/keys/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/object/keys/index.js b/node_modules/es5-ext/test/object/keys/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/object/keys/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/object/keys/is-implemented.js b/node_modules/es5-ext/test/object/keys/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/object/keys/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/object/keys/shim.js b/node_modules/es5-ext/test/object/keys/shim.js new file mode 100644 index 000000000..47e6547ed --- /dev/null +++ b/node_modules/es5-ext/test/object/keys/shim.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + a.deep(t({ foo: "bar" }), ["foo"], "Object"); + a.deep(t("raz"), ["0", "1", "2"], "Primitive"); + a.throws(function () { + t(); +}, TypeError, "Undefined"); + a.throws(function () { + t(null); +}, TypeError, "Undefined"); +}; diff --git a/node_modules/es5-ext/test/object/map-keys.js b/node_modules/es5-ext/test/object/map-keys.js new file mode 100644 index 000000000..4598db21a --- /dev/null +++ b/node_modules/es5-ext/test/object/map-keys.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + a.deep(t({ 1: 1, 2: 2, 3: 3 }, function (key, value) { + return "x" + (key + value); + }), { x11: 1, x22: 2, x33: 3 }); +}; diff --git a/node_modules/es5-ext/test/object/map.js b/node_modules/es5-ext/test/object/map.js new file mode 100644 index 000000000..78c1ed346 --- /dev/null +++ b/node_modules/es5-ext/test/object/map.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + var obj = { 1: 1, 2: 2, 3: 3 }; + a.deep(t(obj, function (value, key, context) { + a(context, obj, "Context argument"); + return (value + 1) + key; + }), { 1: "21", 2: "32", 3: "43" }); +}; diff --git a/node_modules/es5-ext/test/object/mixin-prototypes.js b/node_modules/es5-ext/test/object/mixin-prototypes.js new file mode 100644 index 000000000..8745d9779 --- /dev/null +++ b/node_modules/es5-ext/test/object/mixin-prototypes.js @@ -0,0 +1,73 @@ +"use strict"; + +module.exports = function (t, a) { + var o, o1, o2, x, y = {}, z = {}; + o = { inherited: true, visible: 23 }; + o1 = Object.create(o); + o1.visible = z; + o1.nonremovable = "raz"; + Object.defineProperty(o1, "hidden", { value: "hidden" }); + + o2 = Object.defineProperties({}, { nonremovable: { value: y } }); + o2.other = "other"; + + try { + t(o2, o1); +} catch (ignore) {} + + a(o2.visible, z, "Enumerable"); + a(o1.hidden, "hidden", "Not Enumerable"); + a(o2.propertyIsEnumerable("visible"), true, "Enumerable is enumerable"); + a(o2.propertyIsEnumerable("hidden"), false, + "Not enumerable is not enumerable"); + + a(o2.inherited, true, "Extend deep"); + + a(o2.nonremovable, y, "Do not overwrite non configurable"); + a(o2.other, "other", "Own kept"); + + x = {}; + t(x, o2); + try { + t(x, o1); +} catch (ignore) {} + + a(x.visible, z, "Enumerable"); + a(x.hidden, "hidden", "Not Enumerable"); + a(x.propertyIsEnumerable("visible"), true, "Enumerable is enumerable"); + a(x.propertyIsEnumerable("hidden"), false, + "Not enumerable is not enumerable"); + + a(x.inherited, true, "Extend deep"); + + a(x.nonremovable, y, "Ignored non configurable"); + a(x.other, "other", "Other"); + + x.visible = 3; + a(x.visible, 3, "Writable is writable"); + + x = {}; + t(x, o1); + a.throws(function () { + x.hidden = 3; + }, "Not writable is not writable"); + + x = {}; + t(x, o1); + delete x.visible; + a.ok(!x.hasOwnProperty("visible"), "Configurable is configurable"); + + x = {}; + t(x, o1); + a.throws(function () { + delete x.hidden; + }, "Not configurable is not configurable"); + + x = Object.defineProperty({}, "foo", + { configurable: false, writable: true, enumerable: false, value: "bar" }); + + try { + t(x, { foo: "lorem" }); +} catch (ignore) {} + a(x.foo, "bar", "Writable, not enumerable"); +}; diff --git a/node_modules/es5-ext/test/object/mixin.js b/node_modules/es5-ext/test/object/mixin.js new file mode 100644 index 000000000..d1905c17c --- /dev/null +++ b/node_modules/es5-ext/test/object/mixin.js @@ -0,0 +1,75 @@ +"use strict"; + +module.exports = function (t, a) { + var o, o1, o2, x, y = {}, z = {}; + o = { inherited: true }; + o1 = Object.create(o); + o1.visible = z; + o1.nonremovable = "raz"; + Object.defineProperty(o1, "hidden", { value: "hidden" }); + + o2 = Object.defineProperties({}, { nonremovable: { value: y } }); + o2.other = "other"; + + try { + t(o2, o1); +} catch (ignore) {} + + a(o2.visible, z, "Enumerable"); + a(o1.hidden, "hidden", "Not Enumerable"); + a(o2.propertyIsEnumerable("visible"), true, "Enumerable is enumerable"); + a(o2.propertyIsEnumerable("hidden"), false, + "Not enumerable is not enumerable"); + + a(o2.hasOwnProperty("inherited"), false, "Extend only own"); + a(o2.inherited, undefined, "Extend ony own: value"); + + a(o2.nonremovable, y, "Do not overwrite non configurable"); + a(o2.other, "other", "Own kept"); + + x = {}; + t(x, o2); + try { + t(x, o1); +} catch (ignore) {} + + a(x.visible, z, "Enumerable"); + a(x.hidden, "hidden", "Not Enumerable"); + a(x.propertyIsEnumerable("visible"), true, "Enumerable is enumerable"); + a(x.propertyIsEnumerable("hidden"), false, + "Not enumerable is not enumerable"); + + a(x.hasOwnProperty("inherited"), false, "Extend only own"); + a(x.inherited, undefined, "Extend ony own: value"); + + a(x.nonremovable, y, "Ignored non configurable"); + a(x.other, "other", "Other"); + + x.visible = 3; + a(x.visible, 3, "Writable is writable"); + + x = {}; + t(x, o1); + a.throws(function () { + x.hidden = 3; + }, "Not writable is not writable"); + + x = {}; + t(x, o1); + delete x.visible; + a.ok(!x.hasOwnProperty("visible"), "Configurable is configurable"); + + x = {}; + t(x, o1); + a.throws(function () { + delete x.hidden; + }, "Not configurable is not configurable"); + + x = Object.defineProperty({}, "foo", + { configurable: false, writable: true, enumerable: false, value: "bar" }); + + try { + t(x, { foo: "lorem" }); +} catch (ignore) {} + a(x.foo, "bar", "Writable, not enumerable"); +}; diff --git a/node_modules/es5-ext/test/object/normalize-options.js b/node_modules/es5-ext/test/object/normalize-options.js new file mode 100644 index 000000000..028864fec --- /dev/null +++ b/node_modules/es5-ext/test/object/normalize-options.js @@ -0,0 +1,46 @@ +"use strict"; + +var create = Object.create, defineProperty = Object.defineProperty; + +module.exports = function (t, a) { + var x = { foo: "raz", bar: "dwa" }, y; + y = t(x); + a.not(y, x, "Returns copy"); + a.deep(y, x, "Plain"); + + x = { raz: "one", dwa: "two" }; + defineProperty(x, "get", { + configurable: true, + enumerable: true, + get: function () { + return this.dwa; +} + }); + x = create(x); + x.trzy = "three"; + x.cztery = "four"; + x = create(x); + x.dwa = "two!"; + x.trzy = "three!"; + x.piec = "five"; + x.szesc = "six"; + + a.deep(t(x), { raz: "one", +dwa: "two!", +trzy: "three!", +cztery: "four", + piec: "five", +szesc: "six", +get: "two!" }, "Deep object"); + + a.deep(t({ marko: "raz", raz: "foo" }, x, { szesc: "elo", siedem: "bibg" }), + { marko: "raz", +raz: "one", +dwa: "two!", +trzy: "three!", +cztery: "four", + piec: "five", +szesc: "elo", +siedem: "bibg", +get: "two!" }, "Multiple options"); +}; diff --git a/node_modules/es5-ext/test/object/primitive-set.js b/node_modules/es5-ext/test/object/primitive-set.js new file mode 100644 index 000000000..b5083d5cc --- /dev/null +++ b/node_modules/es5-ext/test/object/primitive-set.js @@ -0,0 +1,15 @@ +"use strict"; + +var getPropertyNames = require("../../object/get-property-names") + , isPlainObject = require("../../object/is-plain-object"); + +module.exports = function (t, a) { + var x = t(); + a(isPlainObject(x), true, "Plain object"); + a.deep(getPropertyNames(x), [], "No properties"); + x.foo = "bar"; + a.deep(getPropertyNames(x), ["foo"], "Extensible"); + + a.deep(t("raz", "dwa", 3), { raz: true, dwa: true, 3: true }, + "Arguments handling"); +}; diff --git a/node_modules/es5-ext/test/object/safe-traverse.js b/node_modules/es5-ext/test/object/safe-traverse.js new file mode 100644 index 000000000..acf49c0ed --- /dev/null +++ b/node_modules/es5-ext/test/object/safe-traverse.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = function (t, a) { + var obj = { foo: { bar: { lorem: 12 } } }; + a(t(obj), obj, "No props"); + a(t(obj, "foo"), obj.foo, "One"); + a(t(obj, "raz"), undefined, "One: Fail"); + a(t(obj, "foo", "bar"), obj.foo.bar, "Two"); + a(t(obj, "dsd", "raz"), undefined, "Two: Fail #1"); + a(t(obj, "foo", "raz"), undefined, "Two: Fail #2"); + a(t(obj, "foo", "bar", "lorem"), obj.foo.bar.lorem, "Three"); + a(t(obj, "dsd", "raz", "fef"), undefined, "Three: Fail #1"); + a(t(obj, "foo", "raz", "asdf"), undefined, "Three: Fail #2"); + a(t(obj, "foo", "bar", "asd"), undefined, "Three: Fail #3"); +}; diff --git a/node_modules/es5-ext/test/object/serialize.js b/node_modules/es5-ext/test/object/serialize.js new file mode 100644 index 000000000..f0ca800cc --- /dev/null +++ b/node_modules/es5-ext/test/object/serialize.js @@ -0,0 +1,45 @@ +"use strict"; + +module.exports = function (t, a) { + var fn = function (raz, dwa) { + return raz + dwa; + }; + a(t(), "undefined", "Undefined"); + a(t(null), "null", "Null"); + a(t(null), "null", "Null"); + a(t("raz"), "\"raz\"", "String"); + a(t("raz\"ddwa\ntrzy"), "\"raz\\\"ddwa\\ntrzy\"", "String with escape"); + a(t(false), "false", "Booelean"); + a(t(fn), String(fn), "Function"); + + a(t(/raz-dwa/g), "/raz-dwa/g", "RegExp"); + a(t(new Date(1234567)), "new Date(1234567)", "Date"); + a(t([]), "[]", "Empty array"); + a( + t([undefined, false, null, "raz\"ddwa\ntrzy", fn, /raz/g, new Date(1234567), ["foo"]]), + "[undefined,false,null,\"raz\\\"ddwa\\ntrzy\"," + + String(fn) + + ",/raz/g,new Date(1234567),[\"foo\"]]", + "Rich Array" + ); + a(t({}), "{}", "Empty object"); + a( + t({ + raz: undefined, + dwa: false, + trzy: null, + cztery: "raz\"ddwa\ntrzy", + piec: fn, + szesc: /raz/g, + siedem: new Date(1234567), + osiem: ["foo", 32], + dziewiec: { foo: "bar", dwa: 343 } + }), + "{\"raz\":undefined,\"dwa\":false,\"trzy\":null,\"cztery\":\"raz\\\"ddwa\\ntrzy\"," + + "\"piec\":" + + String(fn) + + ",\"szesc\":/raz/g,\"siedem\":new Date(1234567),\"osiem\":[\"foo\",32]," + + "\"dziewiec\":{\"foo\":\"bar\",\"dwa\":343}}", + "Rich object" + ); +}; diff --git a/node_modules/es5-ext/test/object/set-prototype-of/implement.js b/node_modules/es5-ext/test/object/set-prototype-of/implement.js new file mode 100644 index 000000000..5b8fb9e99 --- /dev/null +++ b/node_modules/es5-ext/test/object/set-prototype-of/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +var create = require("../../../object/create") + , isImplemented = require("../../../object/set-prototype-of/is-implemented"); + +module.exports = function (a) { + a(isImplemented(create), true); +}; diff --git a/node_modules/es5-ext/test/object/set-prototype-of/index.js b/node_modules/es5-ext/test/object/set-prototype-of/index.js new file mode 100644 index 000000000..23619b079 --- /dev/null +++ b/node_modules/es5-ext/test/object/set-prototype-of/index.js @@ -0,0 +1,27 @@ +"use strict"; + +var create = require("../../../object/create") + + , getPrototypeOf = Object.getPrototypeOf; + +module.exports = function (t, a) { + var x = {}, y = {}; + + if (t === null) return; + a(t(x, y), x, "Return self object"); + a(getPrototypeOf(x), y, "Object"); + a.throws(function () { + t(x); +}, TypeError, "Undefined"); + a.throws(function () { + t("foo"); +}, TypeError, "Primitive"); + a(getPrototypeOf(t(x, null)), t.nullPolyfill || null, "Null"); + x = create(null); + a.h1("Change null prototype"); + a(t(x, y), x, "Result"); + a(getPrototypeOf(x), y, "Prototype"); + a.h1("Set null prototype"); + a(t(y, null), y, "Result"); + a(getPrototypeOf(y), t.nullPolyfill || null, "Prototype"); +}; diff --git a/node_modules/es5-ext/test/object/set-prototype-of/is-implemented.js b/node_modules/es5-ext/test/object/set-prototype-of/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/object/set-prototype-of/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/object/set-prototype-of/shim.js b/node_modules/es5-ext/test/object/set-prototype-of/shim.js new file mode 100644 index 000000000..23619b079 --- /dev/null +++ b/node_modules/es5-ext/test/object/set-prototype-of/shim.js @@ -0,0 +1,27 @@ +"use strict"; + +var create = require("../../../object/create") + + , getPrototypeOf = Object.getPrototypeOf; + +module.exports = function (t, a) { + var x = {}, y = {}; + + if (t === null) return; + a(t(x, y), x, "Return self object"); + a(getPrototypeOf(x), y, "Object"); + a.throws(function () { + t(x); +}, TypeError, "Undefined"); + a.throws(function () { + t("foo"); +}, TypeError, "Primitive"); + a(getPrototypeOf(t(x, null)), t.nullPolyfill || null, "Null"); + x = create(null); + a.h1("Change null prototype"); + a(t(x, y), x, "Result"); + a(getPrototypeOf(x), y, "Prototype"); + a.h1("Set null prototype"); + a(t(y, null), y, "Result"); + a(getPrototypeOf(y), t.nullPolyfill || null, "Prototype"); +}; diff --git a/node_modules/es5-ext/test/object/some.js b/node_modules/es5-ext/test/object/some.js new file mode 100644 index 000000000..97e5d772d --- /dev/null +++ b/node_modules/es5-ext/test/object/some.js @@ -0,0 +1,23 @@ +"use strict"; + +var o = { 1: 1, 2: 2, 3: 3 }; + +module.exports = function (t, a) { + var o2 = {}, i = 0; + t(o, function (value, name) { + o2[name] = value; + return false; + }); + a(JSON.stringify(o2), JSON.stringify(o), "Iterates"); + + a(t(o, function () { + ++i; + return true; + }), true, "Succeeds"); + a(i, 1, "Stops iteration after condition is met"); + + a(t(o, function () { + return false; + }), false, "Fails"); + +}; diff --git a/node_modules/es5-ext/test/object/to-array.js b/node_modules/es5-ext/test/object/to-array.js new file mode 100644 index 000000000..cd11a05f2 --- /dev/null +++ b/node_modules/es5-ext/test/object/to-array.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = function (t, a) { + var o = { 1: 1, 2: 2, 3: 3 }, o1 = {} + , o2 = t(o, function (value, name, self) { + a(self, o, "Self"); + a(this, o1, "Scope"); + return value + Number(name); + }, o1); + a.deep(o2, [2, 4, 6]); + + t(o).sort().forEach(function (item) { + a.deep(item, [item[0], o[item[0]]], "Default"); + }); +}; diff --git a/node_modules/es5-ext/test/object/unserialize.js b/node_modules/es5-ext/test/object/unserialize.js new file mode 100644 index 000000000..5af3c77fe --- /dev/null +++ b/node_modules/es5-ext/test/object/unserialize.js @@ -0,0 +1,41 @@ +"use strict"; + +module.exports = function (t, a) { + var fn = function (raz, dwa) { + return raz + dwa; + }; + a(t("undefined"), undefined, "Undefined"); + a(t("null"), null, "Null"); + a(t("\"raz\""), "raz", "String"); + a(t("\"raz\\\"ddwa\\ntrzy\""), "raz\"ddwa\ntrzy", "String with escape"); + a(t("false"), false, "Booelean"); + a(String(t(String(fn))), String(fn), "Function"); + + a.deep(t("/raz-dwa/g"), /raz-dwa/g, "RegExp"); + a.deep(t("new Date(1234567)"), new Date(1234567), "Date"); + a.deep(t("[]"), [], "Empty array"); + a.deep( + t("[undefined,false,null,\"raz\\\"ddwa\\ntrzy\",/raz/g,new Date(1234567),[\"foo\"]]"), + [undefined, false, null, "raz\"ddwa\ntrzy", /raz/g, new Date(1234567), ["foo"]], + "Rich Array" + ); + a.deep(t("{}"), {}, "Empty object"); + a.deep( + t( + "{\"raz\":undefined,\"dwa\":false,\"trzy\":null,\"cztery\":\"raz\\\"ddwa\\ntrzy\"," + + "\"szesc\":/raz/g,\"siedem\":new Date(1234567),\"osiem\":[\"foo\",32]," + + "\"dziewiec\":{\"foo\":\"bar\",\"dwa\":343}}" + ), + { + raz: undefined, + dwa: false, + trzy: null, + cztery: "raz\"ddwa\ntrzy", + szesc: /raz/g, + siedem: new Date(1234567), + osiem: ["foo", 32], + dziewiec: { foo: "bar", dwa: 343 } + }, + "Rich object" + ); +}; diff --git a/node_modules/es5-ext/test/object/valid-callable.js b/node_modules/es5-ext/test/object/valid-callable.js new file mode 100644 index 000000000..fb7310c84 --- /dev/null +++ b/node_modules/es5-ext/test/object/valid-callable.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + var f = function () {}; + a(t(f), f, "Function"); + a.throws(function () { + t({}); + }, "Not Function"); +}; diff --git a/node_modules/es5-ext/test/object/valid-object.js b/node_modules/es5-ext/test/object/valid-object.js new file mode 100644 index 000000000..b33be9779 --- /dev/null +++ b/node_modules/es5-ext/test/object/valid-object.js @@ -0,0 +1,25 @@ +"use strict"; + +module.exports = function (t, a) { + var x; + a.throws(function () { + t(0); +}, TypeError, "0"); + a.throws(function () { + t(false); +}, TypeError, "false"); + a.throws(function () { + t(""); +}, TypeError, "''"); + a(t(x = {}), x, "Object"); + a(t(x = function () {}), x, "Function"); + a(t(x = new String("raz")), x, "String object"); // Jslint: ignore + a(t(x = new Date()), x, "Date"); + + a.throws(function () { + t(); +}, TypeError, "Undefined"); + a.throws(function () { + t(null); +}, TypeError, "null"); +}; diff --git a/node_modules/es5-ext/test/object/valid-value.js b/node_modules/es5-ext/test/object/valid-value.js new file mode 100644 index 000000000..394f89f77 --- /dev/null +++ b/node_modules/es5-ext/test/object/valid-value.js @@ -0,0 +1,19 @@ +"use strict"; + +var numIsNaN = require("../../number/is-nan"); + +module.exports = function (t, a) { + var x; + a(t(0), 0, "0"); + a(t(false), false, "false"); + a(t(""), "", "''"); + a(numIsNaN(t(NaN)), true, "NaN"); + a(t(x = {}), x, "{}"); + + a.throws(function () { + t(); + }, "Undefined"); + a.throws(function () { + t(null); + }, "null"); +}; diff --git a/node_modules/es5-ext/test/object/validate-array-like-object.js b/node_modules/es5-ext/test/object/validate-array-like-object.js new file mode 100644 index 000000000..b10ec69b5 --- /dev/null +++ b/node_modules/es5-ext/test/object/validate-array-like-object.js @@ -0,0 +1,29 @@ +"use strict"; + +module.exports = function (t, a) { + var x; + a.throws(function () { + t(0); +}, TypeError, "0"); + a.throws(function () { + t(false); +}, TypeError, "false"); + a.throws(function () { + t(""); +}, TypeError, "String"); + a.throws(function () { + t({}); +}, TypeError, "Plain Object"); + a.throws(function () { + t(function () {}); +}, TypeError, "Function"); + a(t(x = new String("raz")), x, "String object"); // Jslint: ignore + + a(t(x = { length: 1 }), x, "Array like"); + a.throws(function () { + t(); +}, TypeError, "Undefined"); + a.throws(function () { + t(null); +}, TypeError, "null"); +}; diff --git a/node_modules/es5-ext/test/object/validate-array-like.js b/node_modules/es5-ext/test/object/validate-array-like.js new file mode 100644 index 000000000..6da6b191e --- /dev/null +++ b/node_modules/es5-ext/test/object/validate-array-like.js @@ -0,0 +1,27 @@ +"use strict"; + +module.exports = function (t, a) { + var x; + a.throws(function () { + t(0); +}, TypeError, "0"); + a.throws(function () { + t(false); +}, TypeError, "false"); + a(t(""), "", "''"); + a.throws(function () { + t({}); +}, TypeError, "Plain Object"); + a.throws(function () { + t(function () {}); +}, TypeError, "Function"); + a(t(x = new String("raz")), x, "String object"); // Jslint: ignore + + a(t(x = { length: 1 }), x, "Array like"); + a.throws(function () { + t(); +}, TypeError, "Undefined"); + a.throws(function () { + t(null); +}, TypeError, "null"); +}; diff --git a/node_modules/es5-ext/test/object/validate-stringifiable-value.js b/node_modules/es5-ext/test/object/validate-stringifiable-value.js new file mode 100644 index 000000000..8283814ab --- /dev/null +++ b/node_modules/es5-ext/test/object/validate-stringifiable-value.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = function (t, a) { + var x; + a.throws(function () { + t(); +}, TypeError, "Undefined"); + a.throws(function () { + t(null); +}, TypeError, "Null"); + a(t(0), "0"); + a(t(false), "false"); + a(t(""), ""); + a(t({}), String({}), "Object"); + a(t(x = function () {}), String(x), "Function"); + a(t(x = new String("raz")), String(x), "String object"); // Jslint: ignore + a(t(x = new Date()), String(x), "Date"); + + a.throws(function () { + t(Object.create(null)); +}, TypeError, "Null prototype object"); +}; diff --git a/node_modules/es5-ext/test/object/validate-stringifiable.js b/node_modules/es5-ext/test/object/validate-stringifiable.js new file mode 100644 index 000000000..e75a4157b --- /dev/null +++ b/node_modules/es5-ext/test/object/validate-stringifiable.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = function (t, a) { + var x; + a(t(), "undefined", "Undefined"); + a(t(null), "null", "Null"); + a(t(0), "0"); + a(t(false), "false"); + a(t(""), ""); + a(t({}), String({}), "Object"); + a(t(x = function () {}), String(x), "Function"); + a(t(x = new String("raz")), String(x), "String object"); // Jslint: ignore + a(t(x = new Date()), String(x), "Date"); + + a.throws(function () { + t(Object.create(null)); +}, TypeError, "Null prototype object"); +}; diff --git a/node_modules/es5-ext/test/optional-chaining.js b/node_modules/es5-ext/test/optional-chaining.js new file mode 100644 index 000000000..1f7d40563 --- /dev/null +++ b/node_modules/es5-ext/test/optional-chaining.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = function (t, a) { + var obj = { foo: { bar: "elo", par: null } }; + a(t(), undefined); + a(t(null), null); + a(t(obj), obj); + a(t(obj, "foo"), obj.foo); + a(t(obj, "foo", "bar"), "elo"); + a(t(obj, "foo", "bar", "slice"), String.prototype.slice); + a(t(obj, "foo", "par"), null); + a(t(obj, "foo", "par", "marko"), undefined); + a(t(obj, "marko"), undefined); + a(t(""), ""); + a(t("", "foo"), undefined); + a(t("", "slice"), String.prototype.slice); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/index.js b/node_modules/es5-ext/test/reg-exp/#/index.js new file mode 100644 index 000000000..7ab9ab8af --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/index.js @@ -0,0 +1,15 @@ +/* eslint-env node */ + +"use strict"; + +var indexTest = require("tad/lib/utils/index-test") + , path = require("path").resolve(__dirname, "../../../reg-exp/#"); + +module.exports = function (t, a, d) { + indexTest( + indexTest.readDir(path).aside(function (data) { + delete data.sticky; + delete data.unicode; + }) + )(t, a, d); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/is-sticky.js b/node_modules/es5-ext/test/reg-exp/#/is-sticky.js new file mode 100644 index 000000000..e65740e76 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/is-sticky.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + var re; + a(t.call(/raz/), false, "Normal"); + a(t.call(/raz/g), false, "Global"); + try { + // eslint-disable-next-line no-invalid-regexp + re = new RegExp("raz", "y"); + } catch (ignore) {} + if (!re) return; + a(t.call(re), true, "Sticky"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/is-unicode.js b/node_modules/es5-ext/test/reg-exp/#/is-unicode.js new file mode 100644 index 000000000..86217aa04 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/is-unicode.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = function (t, a) { + var re; + a(t.call(/raz/), false, "Normal"); + a(t.call(/raz/g), false, "Global"); + try { + // eslint-disable-next-line no-invalid-regexp + re = new RegExp("raz", "u"); + } catch (ignore) {} + if (!re) return; + a(t.call(re), true, "Unicode"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/match/implement.js b/node_modules/es5-ext/test/reg-exp/#/match/implement.js new file mode 100644 index 000000000..633d9bb6b --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/match/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../reg-exp/#/match/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/match/index.js b/node_modules/es5-ext/test/reg-exp/#/match/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/match/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/reg-exp/#/match/is-implemented.js b/node_modules/es5-ext/test/reg-exp/#/match/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/match/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/match/shim.js b/node_modules/es5-ext/test/reg-exp/#/match/shim.js new file mode 100644 index 000000000..fce094f61 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/match/shim.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = function (t, a) { + var result = ["foo"]; + result.index = 0; + result.input = "foobar"; + a.deep(t.call(/foo/, "foobar"), result); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/replace/implement.js b/node_modules/es5-ext/test/reg-exp/#/replace/implement.js new file mode 100644 index 000000000..7da5e6694 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/replace/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../reg-exp/#/replace/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/replace/index.js b/node_modules/es5-ext/test/reg-exp/#/replace/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/replace/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/reg-exp/#/replace/is-implemented.js b/node_modules/es5-ext/test/reg-exp/#/replace/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/replace/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/replace/shim.js b/node_modules/es5-ext/test/reg-exp/#/replace/shim.js new file mode 100644 index 000000000..4178065db --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/replace/shim.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call(/foo/, "foobar", "mar"), "marbar"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/search/implement.js b/node_modules/es5-ext/test/reg-exp/#/search/implement.js new file mode 100644 index 000000000..ded73e27d --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/search/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../reg-exp/#/search/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/search/index.js b/node_modules/es5-ext/test/reg-exp/#/search/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/search/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/reg-exp/#/search/is-implemented.js b/node_modules/es5-ext/test/reg-exp/#/search/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/search/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/search/shim.js b/node_modules/es5-ext/test/reg-exp/#/search/shim.js new file mode 100644 index 000000000..779b13274 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/search/shim.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call(/foo/, "barfoo"), 3); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/split/implement.js b/node_modules/es5-ext/test/reg-exp/#/split/implement.js new file mode 100644 index 000000000..4ef532bd7 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/split/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../reg-exp/#/split/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/split/index.js b/node_modules/es5-ext/test/reg-exp/#/split/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/split/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/reg-exp/#/split/is-implemented.js b/node_modules/es5-ext/test/reg-exp/#/split/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/split/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/split/shim.js b/node_modules/es5-ext/test/reg-exp/#/split/shim.js new file mode 100644 index 000000000..a01250e9a --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/split/shim.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a.deep(t.call(/\|/, "bar|foo"), ["bar", "foo"]); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/sticky/implement.js b/node_modules/es5-ext/test/reg-exp/#/sticky/implement.js new file mode 100644 index 000000000..d7e59bf99 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/sticky/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../reg-exp/#/sticky/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/sticky/is-implemented.js b/node_modules/es5-ext/test/reg-exp/#/sticky/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/sticky/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/unicode/implement.js b/node_modules/es5-ext/test/reg-exp/#/unicode/implement.js new file mode 100644 index 000000000..9cb2b3792 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/unicode/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../reg-exp/#/unicode/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/reg-exp/#/unicode/is-implemented.js b/node_modules/es5-ext/test/reg-exp/#/unicode/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/#/unicode/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/escape.js b/node_modules/es5-ext/test/reg-exp/escape.js new file mode 100644 index 000000000..9478f5234 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/escape.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (t, a) { + var str = "(?:^te|er)s{2}t\\[raz]+$"; + a(RegExp("^" + t(str) + "$").test(str), true); +}; diff --git a/node_modules/es5-ext/test/reg-exp/is-reg-exp.js b/node_modules/es5-ext/test/reg-exp/is-reg-exp.js new file mode 100644 index 000000000..7727eabaf --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/is-reg-exp.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + a(t("arar"), false, "String"); + a(t(12), false, "Number"); + a(t(true), false, "Boolean"); + a(t(new Date()), false, "Date"); + a(t(new String("raz")), false, "String object"); + a(t({}), false, "Plain object"); + a(t(/a/), true, "Regular expression"); + a(t(new RegExp("a")), true, "Regular expression via constructor"); +}; diff --git a/node_modules/es5-ext/test/reg-exp/valid-reg-exp.js b/node_modules/es5-ext/test/reg-exp/valid-reg-exp.js new file mode 100644 index 000000000..2f99441b0 --- /dev/null +++ b/node_modules/es5-ext/test/reg-exp/valid-reg-exp.js @@ -0,0 +1,19 @@ +"use strict"; + +module.exports = function (t, a) { + var r = /raz/; + a(t(r), r, "Direct"); + r = new RegExp("foo"); + a(t(r), r, "Constructor"); + a.throws(function () { + t({}); + }, "Object"); + a.throws(function () { + t(function () {}); + }, "Function"); + a.throws(function () { + t({ exec: function () { + return 20; +} }); + }, "Plain object"); +}; diff --git a/node_modules/es5-ext/test/safe-to-string.js b/node_modules/es5-ext/test/safe-to-string.js new file mode 100644 index 000000000..1e2d7e13e --- /dev/null +++ b/node_modules/es5-ext/test/safe-to-string.js @@ -0,0 +1,19 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(), "undefined"); + a(t(null), "null"); + a(t(10), "10"); + a(t("str"), "str"); + a( + t({ + toString: function () { + return "miszka"; + } + }), + "miszka" + ); + // eslint-disable-next-line symbol-description + if (typeof Symbol === "function") a(t(Symbol()), "Symbol()"); + a(t(Object.create(null)), ""); +}; diff --git a/node_modules/es5-ext/test/string/#/@@iterator/implement.js b/node_modules/es5-ext/test/string/#/@@iterator/implement.js new file mode 100644 index 000000000..c984fb268 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/@@iterator/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../string/#/@@iterator/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/string/#/@@iterator/index.js b/node_modules/es5-ext/test/string/#/@@iterator/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/string/#/@@iterator/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/string/#/@@iterator/is-implemented.js b/node_modules/es5-ext/test/string/#/@@iterator/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/@@iterator/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/string/#/@@iterator/shim.js b/node_modules/es5-ext/test/string/#/@@iterator/shim.js new file mode 100644 index 000000000..467cdc355 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/@@iterator/shim.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + var it = t.call("r💩z"); + a.deep(it.next(), { done: false, value: "r" }, "#1"); + a.deep(it.next(), { done: false, value: "💩" }, "#2"); + a.deep(it.next(), { done: false, value: "z" }, "#3"); + a.deep(it.next(), { done: true, value: undefined }, "End"); +}; diff --git a/node_modules/es5-ext/test/string/#/at.js b/node_modules/es5-ext/test/string/#/at.js new file mode 100644 index 000000000..a614f938f --- /dev/null +++ b/node_modules/es5-ext/test/string/#/at.js @@ -0,0 +1,132 @@ +/* eslint no-useless-call: "off" */ +// See tests at https://github.com/mathiasbynens/String.prototype.at + +"use strict"; + +module.exports = function (t, a) { + a(t.length, 1, "Length"); + + a.h1("BMP"); + a(t.call("abc\uD834\uDF06def", -Infinity), "", "-Infinity"); + a(t.call("abc\uD834\uDF06def", -1), "", "-1"); + a(t.call("abc\uD834\uDF06def", -0), "a", "-0"); + a(t.call("abc\uD834\uDF06def", +0), "a", "+0"); + a(t.call("abc\uD834\uDF06def", 1), "b", "1"); + a(t.call("abc\uD834\uDF06def", 3), "\uD834\uDF06", "3"); + a(t.call("abc\uD834\uDF06def", 4), "\uDF06", "4"); + a(t.call("abc\uD834\uDF06def", 5), "d", "5"); + a(t.call("abc\uD834\uDF06def", 42), "", "42"); + a(t.call("abc\uD834\uDF06def", Number(Infinity)), "", "+Infinity"); + a(t.call("abc\uD834\uDF06def", null), "a", "null"); + a(t.call("abc\uD834\uDF06def", undefined), "a", "undefined"); + a(t.call("abc\uD834\uDF06def"), "a", "No argument"); + a(t.call("abc\uD834\uDF06def", false), "a", "false"); + a(t.call("abc\uD834\uDF06def", NaN), "a", "NaN"); + a(t.call("abc\uD834\uDF06def", ""), "a", "Empty string"); + a(t.call("abc\uD834\uDF06def", "_"), "a", "_"); + a(t.call("abc\uD834\uDF06def", "1"), "b", "'1'"); + a(t.call("abc\uD834\uDF06def", []), "a", "[]"); + a(t.call("abc\uD834\uDF06def", {}), "a", "{}"); + a(t.call("abc\uD834\uDF06def", -0.9), "a", "-0.9"); + a(t.call("abc\uD834\uDF06def", 1.9), "b", "1.9"); + a(t.call("abc\uD834\uDF06def", 7.9), "f", "7.9"); + a(t.call("abc\uD834\uDF06def", Math.pow(2, 32)), "", "Big number"); + + a.h1("Astral symbol"); + a(t.call("\uD834\uDF06def", -Infinity), "", "-Infinity"); + a(t.call("\uD834\uDF06def", -1), "", "-1"); + a(t.call("\uD834\uDF06def", -0), "\uD834\uDF06", "-0"); + a(t.call("\uD834\uDF06def", +0), "\uD834\uDF06", "+0"); + a(t.call("\uD834\uDF06def", 1), "\uDF06", "1"); + a(t.call("\uD834\uDF06def", 2), "d", "2"); + a(t.call("\uD834\uDF06def", 3), "e", "3"); + a(t.call("\uD834\uDF06def", 4), "f", "4"); + a(t.call("\uD834\uDF06def", 42), "", "42"); + a(t.call("\uD834\uDF06def", Number(Infinity)), "", "+Infinity"); + a(t.call("\uD834\uDF06def", null), "\uD834\uDF06", "null"); + a(t.call("\uD834\uDF06def", undefined), "\uD834\uDF06", "undefined"); + a(t.call("\uD834\uDF06def"), "\uD834\uDF06", "No arguments"); + a(t.call("\uD834\uDF06def", false), "\uD834\uDF06", "false"); + a(t.call("\uD834\uDF06def", NaN), "\uD834\uDF06", "NaN"); + a(t.call("\uD834\uDF06def", ""), "\uD834\uDF06", "Empty string"); + a(t.call("\uD834\uDF06def", "_"), "\uD834\uDF06", "_"); + a(t.call("\uD834\uDF06def", "1"), "\uDF06", "'1'"); + + a.h1("Lone high surrogates"); + a(t.call("\uD834abc", -Infinity), "", "-Infinity"); + a(t.call("\uD834abc", -1), "", "-1"); + a(t.call("\uD834abc", -0), "\uD834", "-0"); + a(t.call("\uD834abc", +0), "\uD834", "+0"); + a(t.call("\uD834abc", 1), "a", "1"); + a(t.call("\uD834abc", 42), "", "42"); + a(t.call("\uD834abc", Number(Infinity)), "", "Infinity"); + a(t.call("\uD834abc", null), "\uD834", "null"); + a(t.call("\uD834abc", undefined), "\uD834", "undefined"); + a(t.call("\uD834abc"), "\uD834", "No arguments"); + a(t.call("\uD834abc", false), "\uD834", "false"); + a(t.call("\uD834abc", NaN), "\uD834", "NaN"); + a(t.call("\uD834abc", ""), "\uD834", "Empty string"); + a(t.call("\uD834abc", "_"), "\uD834", "_"); + a(t.call("\uD834abc", "1"), "a", "'a'"); + + a.h1("Lone low surrogates"); + a(t.call("\uDF06abc", -Infinity), "", "-Infinity"); + a(t.call("\uDF06abc", -1), "", "-1"); + a(t.call("\uDF06abc", -0), "\uDF06", "-0"); + a(t.call("\uDF06abc", +0), "\uDF06", "+0"); + a(t.call("\uDF06abc", 1), "a", "1"); + a(t.call("\uDF06abc", 42), "", "42"); + a(t.call("\uDF06abc", Number(Infinity)), "", "+Infinity"); + a(t.call("\uDF06abc", null), "\uDF06", "null"); + a(t.call("\uDF06abc", undefined), "\uDF06", "undefined"); + a(t.call("\uDF06abc"), "\uDF06", "No arguments"); + a(t.call("\uDF06abc", false), "\uDF06", "false"); + a(t.call("\uDF06abc", NaN), "\uDF06", "NaN"); + a(t.call("\uDF06abc", ""), "\uDF06", "Empty string"); + a(t.call("\uDF06abc", "_"), "\uDF06", "_"); + a(t.call("\uDF06abc", "1"), "a", "'1'"); + + a.h1("Context"); + a.throws( + function () { + t.call(undefined); + }, + TypeError, + "Undefined" + ); + a.throws( + function () { + t.call(undefined, 4); + }, + TypeError, + "Undefined + argument" + ); + a.throws( + function () { + t.call(null); + }, + TypeError, + "Null" + ); + a.throws( + function () { + t.call(null, 4); + }, + TypeError, + "Null + argument" + ); + a(t.call(42, 0), "4", "Number #1"); + a(t.call(42, 1), "2", "Number #2"); + a( + t.call( + { + toString: function () { + return "abc"; + } + }, + 2 + ), + "c", + "Object" + ); +}; diff --git a/node_modules/es5-ext/test/string/#/camel-to-hyphen.js b/node_modules/es5-ext/test/string/#/camel-to-hyphen.js new file mode 100644 index 000000000..bbf9ae48a --- /dev/null +++ b/node_modules/es5-ext/test/string/#/camel-to-hyphen.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("razDwaTRzy4yFoo45My"), "raz-dwa-t-rzy4y-foo45-my"); + a(t.call("razDwaTRzy4yFoo45My-"), "raz-dwa-t-rzy4y-foo45-my-"); + a(t.call("razDwaTRzy4yFoo45My--"), "raz-dwa-t-rzy4y-foo45-my--"); +}; diff --git a/node_modules/es5-ext/test/string/#/capitalize.js b/node_modules/es5-ext/test/string/#/capitalize.js new file mode 100644 index 000000000..884ae9cbb --- /dev/null +++ b/node_modules/es5-ext/test/string/#/capitalize.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("raz"), "Raz", "Word"); + a(t.call("BLA"), "BLA", "Uppercase"); + a(t.call(""), "", "Empty"); + a(t.call("a"), "A", "One letter"); + a(t.call("this is a test"), "This is a test", "Sentence"); +}; diff --git a/node_modules/es5-ext/test/string/#/case-insensitive-compare.js b/node_modules/es5-ext/test/string/#/case-insensitive-compare.js new file mode 100644 index 000000000..8117f9205 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/case-insensitive-compare.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("AA", "aa"), 0, "Same"); + a.ok(t.call("Amber", "zebra") < 0, "Less"); + a.ok(t.call("Zebra", "amber") > 0, "Greater"); +}; diff --git a/node_modules/es5-ext/test/string/#/code-point-at/implement.js b/node_modules/es5-ext/test/string/#/code-point-at/implement.js new file mode 100644 index 000000000..f966c5354 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/code-point-at/implement.js @@ -0,0 +1,8 @@ +"use strict"; + +var isImplemented = + require("../../../../string/#/code-point-at/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/string/#/code-point-at/index.js b/node_modules/es5-ext/test/string/#/code-point-at/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/string/#/code-point-at/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/string/#/code-point-at/is-implemented.js b/node_modules/es5-ext/test/string/#/code-point-at/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/code-point-at/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/string/#/code-point-at/shim.js b/node_modules/es5-ext/test/string/#/code-point-at/shim.js new file mode 100644 index 000000000..40d62766e --- /dev/null +++ b/node_modules/es5-ext/test/string/#/code-point-at/shim.js @@ -0,0 +1,119 @@ +/* eslint no-useless-call: "off" */ + +// Taken from: https://github.com/mathiasbynens/String.prototype.codePointAt +// /blob/master/tests/tests.js + +"use strict"; + +module.exports = function (t, a) { + a(t.length, 1, "Length"); + + // String that starts with a BMP symbol + a(t.call("abc\uD834\uDF06def", ""), 0x61); + a(t.call("abc\uD834\uDF06def", "_"), 0x61); + a(t.call("abc\uD834\uDF06def"), 0x61); + a(t.call("abc\uD834\uDF06def", -Infinity), undefined); + a(t.call("abc\uD834\uDF06def", -1), undefined); + a(t.call("abc\uD834\uDF06def", -0), 0x61); + a(t.call("abc\uD834\uDF06def", 0), 0x61); + a(t.call("abc\uD834\uDF06def", 3), 0x1d306); + a(t.call("abc\uD834\uDF06def", 4), 0xdf06); + a(t.call("abc\uD834\uDF06def", 5), 0x64); + a(t.call("abc\uD834\uDF06def", 42), undefined); + a(t.call("abc\uD834\uDF06def", Infinity), undefined); + a(t.call("abc\uD834\uDF06def", Infinity), undefined); + a(t.call("abc\uD834\uDF06def", NaN), 0x61); + a(t.call("abc\uD834\uDF06def", false), 0x61); + a(t.call("abc\uD834\uDF06def", null), 0x61); + a(t.call("abc\uD834\uDF06def", undefined), 0x61); + + // String that starts with an astral symbol + a(t.call("\uD834\uDF06def", ""), 0x1d306); + a(t.call("\uD834\uDF06def", "1"), 0xdf06); + a(t.call("\uD834\uDF06def", "_"), 0x1d306); + a(t.call("\uD834\uDF06def"), 0x1d306); + a(t.call("\uD834\uDF06def", -1), undefined); + a(t.call("\uD834\uDF06def", -0), 0x1d306); + a(t.call("\uD834\uDF06def", 0), 0x1d306); + a(t.call("\uD834\uDF06def", 1), 0xdf06); + a(t.call("\uD834\uDF06def", 42), undefined); + a(t.call("\uD834\uDF06def", false), 0x1d306); + a(t.call("\uD834\uDF06def", null), 0x1d306); + a(t.call("\uD834\uDF06def", undefined), 0x1d306); + + // Lone high surrogates + a(t.call("\uD834abc", ""), 0xd834); + a(t.call("\uD834abc", "_"), 0xd834); + a(t.call("\uD834abc"), 0xd834); + a(t.call("\uD834abc", -1), undefined); + a(t.call("\uD834abc", -0), 0xd834); + a(t.call("\uD834abc", 0), 0xd834); + a(t.call("\uD834abc", false), 0xd834); + a(t.call("\uD834abc", NaN), 0xd834); + a(t.call("\uD834abc", null), 0xd834); + a(t.call("\uD834abc", undefined), 0xd834); + + // Lone low surrogates + a(t.call("\uDF06abc", ""), 0xdf06); + a(t.call("\uDF06abc", "_"), 0xdf06); + a(t.call("\uDF06abc"), 0xdf06); + a(t.call("\uDF06abc", -1), undefined); + a(t.call("\uDF06abc", -0), 0xdf06); + a(t.call("\uDF06abc", 0), 0xdf06); + a(t.call("\uDF06abc", false), 0xdf06); + a(t.call("\uDF06abc", NaN), 0xdf06); + a(t.call("\uDF06abc", null), 0xdf06); + a(t.call("\uDF06abc", undefined), 0xdf06); + + a.throws(function () { + t.call(undefined); + }, TypeError); + a.throws(function () { + t.call(undefined, 4); + }, TypeError); + a.throws(function () { + t.call(null); + }, TypeError); + a.throws(function () { + t.call(null, 4); + }, TypeError); + a(t.call(42, 0), 0x34); + a(t.call(42, 1), 0x32); + a( + t.call( + { + toString: function () { + return "abc"; + } + }, + 2 + ), + 0x63 + ); + + a.throws(function () { + t.apply(undefined); + }, TypeError); + a.throws(function () { + t.apply(undefined, [4]); + }, TypeError); + a.throws(function () { + t.apply(null); + }, TypeError); + a.throws(function () { + t.apply(null, [4]); + }, TypeError); + a(t.apply(42, [0]), 0x34); + a(t.apply(42, [1]), 0x32); + a( + t.apply( + { + toString: function () { + return "abc"; + } + }, + [2] + ), + 0x63 + ); +}; diff --git a/node_modules/es5-ext/test/string/#/contains/implement.js b/node_modules/es5-ext/test/string/#/contains/implement.js new file mode 100644 index 000000000..297a832f9 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/contains/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../string/#/contains/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/string/#/contains/index.js b/node_modules/es5-ext/test/string/#/contains/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/string/#/contains/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/string/#/contains/is-implemented.js b/node_modules/es5-ext/test/string/#/contains/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/contains/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/string/#/contains/shim.js b/node_modules/es5-ext/test/string/#/contains/shim.js new file mode 100644 index 000000000..0a73671d4 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/contains/shim.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("raz", ""), true, "Empty"); + a(t.call("", ""), true, "Both Empty"); + a(t.call("raz", "raz"), true, "Same"); + a(t.call("razdwa", "raz"), true, "Starts with"); + a(t.call("razdwa", "dwa"), true, "Ends with"); + a(t.call("razdwa", "zdw"), true, "In middle"); + a(t.call("", "raz"), false, "Something in empty"); + a(t.call("az", "raz"), false, "Longer"); + a(t.call("azasdfasdf", "azff"), false, "Not found"); + a(t.call("razdwa", "raz", 1), false, "Position"); +}; diff --git a/node_modules/es5-ext/test/string/#/count.js b/node_modules/es5-ext/test/string/#/count.js new file mode 100644 index 000000000..d259c9012 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/count.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = function (t, a) { + a.throws(function () { + t.call("", ""); + }); + a(t.call("x", "x"), 1); + a(t.call("xx", "x"), 2); + a(t.call("xxx", "xx"), 1); + a(t.call("xxxx", "xx"), 2); + a(t.call("xx", "xxx"), 0); + a(t.call("", "elo"), 0); + a(t.call("fooo", "foofooo"), 0); +}; diff --git a/node_modules/es5-ext/test/string/#/ends-with/implement.js b/node_modules/es5-ext/test/string/#/ends-with/implement.js new file mode 100644 index 000000000..5a2ca3cc6 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/ends-with/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../string/#/ends-with/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/string/#/ends-with/index.js b/node_modules/es5-ext/test/string/#/ends-with/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/string/#/ends-with/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/string/#/ends-with/is-implemented.js b/node_modules/es5-ext/test/string/#/ends-with/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/ends-with/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/string/#/ends-with/shim.js b/node_modules/es5-ext/test/string/#/ends-with/shim.js new file mode 100644 index 000000000..753988331 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/ends-with/shim.js @@ -0,0 +1,16 @@ +// In some parts copied from: +// http://closure-library.googlecode.com/svn/trunk/closure/goog/ +// string/string_test.html + +"use strict"; + +module.exports = function (t, a) { + a(t.call("abc", ""), true, "Empty needle"); + a(t.call("abcd", "cd"), true, "Ends with needle"); + a(t.call("abcd", "abcd"), true, "Needle equals haystack"); + a(t.call("abcd", "ab"), false, "Doesn't end with needle"); + a(t.call("abc", "defg"), false, "Length trick"); + a(t.call("razdwa", "zd", 3), false, "Position: false"); + a(t.call("razdwa", "zd", 4), true, "Position: true"); + a(t.call("razdwa", "zd", 5), false, "Position: false #2"); +}; diff --git a/node_modules/es5-ext/test/string/#/hyphen-to-camel.js b/node_modules/es5-ext/test/string/#/hyphen-to-camel.js new file mode 100644 index 000000000..89c8161c9 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/hyphen-to-camel.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("raz-dwa-t-rzy-4y-rtr4-tiu-45-pa"), "razDwaTRzy4yRtr4Tiu45Pa"); + a(t.call("raz-dwa-t-rzy-4y-rtr4-tiu-45-pa-"), "razDwaTRzy4yRtr4Tiu45Pa-"); + a(t.call("raz-dwa-t-rzy-4y-rtr4-tiu-45-pa--"), "razDwaTRzy4yRtr4Tiu45Pa--"); +}; diff --git a/node_modules/es5-ext/test/string/#/indent.js b/node_modules/es5-ext/test/string/#/indent.js new file mode 100644 index 000000000..6b1dd895d --- /dev/null +++ b/node_modules/es5-ext/test/string/#/indent.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("ra\nzz", ""), "ra\nzz", "Empty"); + a(t.call("ra\nzz", "\t", 3), "\t\t\tra\n\t\t\tzz", "String repeat"); + a(t.call("ra\nzz\nsss\nfff\n", "\t"), "\tra\n\tzz\n\tsss\n\tfff\n", + "Multi-line"); + a(t.call("ra\n\nzz\n", "\t"), "\tra\n\n\tzz\n", "Don't touch empty lines"); +}; diff --git a/node_modules/es5-ext/test/string/#/last.js b/node_modules/es5-ext/test/string/#/last.js new file mode 100644 index 000000000..fea798d6a --- /dev/null +++ b/node_modules/es5-ext/test/string/#/last.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call(""), null, "Null"); + a(t.call("abcdef"), "f", "String"); +}; diff --git a/node_modules/es5-ext/test/string/#/normalize/_data.js b/node_modules/es5-ext/test/string/#/normalize/_data.js new file mode 100644 index 000000000..963121194 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/normalize/_data.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t[0], "object"); +}; diff --git a/node_modules/es5-ext/test/string/#/normalize/implement.js b/node_modules/es5-ext/test/string/#/normalize/implement.js new file mode 100644 index 000000000..b053aa892 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/normalize/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../string/#/normalize/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/string/#/normalize/index.js b/node_modules/es5-ext/test/string/#/normalize/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/string/#/normalize/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/string/#/normalize/is-implemented.js b/node_modules/es5-ext/test/string/#/normalize/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/normalize/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/string/#/normalize/shim.js b/node_modules/es5-ext/test/string/#/normalize/shim.js new file mode 100644 index 000000000..0c80aa409 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/normalize/shim.js @@ -0,0 +1,13 @@ +// Taken from: https://github.com/walling/unorm/blob/master/test/es6-shim.js + +"use strict"; + +var str = "äiti"; + +module.exports = function (t, a) { + a(t.call(str), "\u00e4iti"); + a(t.call(str, "NFC"), "\u00e4iti"); + a(t.call(str, "NFD"), "a\u0308iti"); + a(t.call(str, "NFKC"), "\u00e4iti"); + a(t.call(str, "NFKD"), "a\u0308iti"); +}; diff --git a/node_modules/es5-ext/test/string/#/pad.js b/node_modules/es5-ext/test/string/#/pad.js new file mode 100644 index 000000000..e573453fb --- /dev/null +++ b/node_modules/es5-ext/test/string/#/pad.js @@ -0,0 +1,24 @@ +"use strict"; + +var partial = require("../../../function/#/partial"); + +module.exports = { + Left: function (t, a) { + t = partial.call(t, "x", 5); + + a(t.call("yy"), "xxxyy"); + a(t.call(""), "xxxxx", "Empty string"); + + a(t.call("yyyyy"), "yyyyy", "Equal length"); + a(t.call("yyyyyyy"), "yyyyyyy", "Longer"); + }, + Right: function (t, a) { + t = partial.call(t, "x", -5); + + a(t.call("yy"), "yyxxx"); + a(t.call(""), "xxxxx", "Empty string"); + + a(t.call("yyyyy"), "yyyyy", "Equal length"); + a(t.call("yyyyyyy"), "yyyyyyy", "Longer"); + } +}; diff --git a/node_modules/es5-ext/test/string/#/plain-replace-all.js b/node_modules/es5-ext/test/string/#/plain-replace-all.js new file mode 100644 index 000000000..e5f801c62 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/plain-replace-all.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("razdwatrzy", "dwa", "olera"), "razoleratrzy", "Basic"); + a(t.call("razdwatrzy", "dwa", "ole$&a"), "razole$&atrzy", "Inserts"); + a(t.call("razdwa", "ola", "sdfs"), "razdwa", "No replace"); + + a(t.call("$raz$$dwa$trzy$", "$", "&&"), "&&raz&&&&dwa&&trzy&&", "Multi"); + a(t.call("$raz$$dwa$$$$trzy$", "$$", "&"), "$raz&dwa&&trzy$", + "Multi many chars"); +}; diff --git a/node_modules/es5-ext/test/string/#/plain-replace.js b/node_modules/es5-ext/test/string/#/plain-replace.js new file mode 100644 index 000000000..9f6c2beef --- /dev/null +++ b/node_modules/es5-ext/test/string/#/plain-replace.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("razdwatrzy", "dwa", "olera"), "razoleratrzy", "Basic"); + a(t.call("razdwatrzy", "dwa", "ole$&a"), "razole$&atrzy", "Inserts"); + a(t.call("razdwa", "ola", "sdfs"), "razdwa", "No replace"); +}; diff --git a/node_modules/es5-ext/test/string/#/repeat/implement.js b/node_modules/es5-ext/test/string/#/repeat/implement.js new file mode 100644 index 000000000..270962895 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/repeat/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../string/#/repeat/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/string/#/repeat/index.js b/node_modules/es5-ext/test/string/#/repeat/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/string/#/repeat/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/string/#/repeat/is-implemented.js b/node_modules/es5-ext/test/string/#/repeat/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/repeat/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/string/#/repeat/shim.js b/node_modules/es5-ext/test/string/#/repeat/shim.js new file mode 100644 index 000000000..c5848840c --- /dev/null +++ b/node_modules/es5-ext/test/string/#/repeat/shim.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("a", 0), "", "Empty"); + a(t.call("a", 1), "a", "1"); + a(t.call("a", 2), "aa", "2"); + a(t.call("\t", 5), "\t\t\t\t\t", "Whitespace"); + a(t.call("raz", 3), "razrazraz", "Many chars"); + a(t.call("raz", 3), "razrazraz", "Many chars"); + a(t.call("razfoobar", 5), "razfoobarrazfoobarrazfoobarrazfoobarrazfoobar", "Many chars"); + a(t.call("a", 300).length, 300); +}; diff --git a/node_modules/es5-ext/test/string/#/starts-with/implement.js b/node_modules/es5-ext/test/string/#/starts-with/implement.js new file mode 100644 index 000000000..d1f1ce252 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/starts-with/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../../string/#/starts-with/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/string/#/starts-with/index.js b/node_modules/es5-ext/test/string/#/starts-with/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/string/#/starts-with/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/string/#/starts-with/is-implemented.js b/node_modules/es5-ext/test/string/#/starts-with/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/starts-with/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/string/#/starts-with/shim.js b/node_modules/es5-ext/test/string/#/starts-with/shim.js new file mode 100644 index 000000000..4b5e4e402 --- /dev/null +++ b/node_modules/es5-ext/test/string/#/starts-with/shim.js @@ -0,0 +1,14 @@ +// Inspired and in some parts copied from: +// http://closure-library.googlecode.com/svn/trunk/closure/goog +// /string/string_test.html + +"use strict"; + +module.exports = function (t, a) { + a(t.call("abc", ""), true, "Empty needle"); + a(t.call("abcd", "ab"), true, "Starts with needle"); + a(t.call("abcd", "abcd"), true, "Needle equals haystack"); + a(t.call("abcd", "bcde", 1), false, "Needle larger than haystack"); + a(!t.call("abcd", "cd"), true, "Doesn't start with needle"); + a(t.call("abcd", "bc", 1), true, "Position"); +}; diff --git a/node_modules/es5-ext/test/string/#/uncapitalize.js b/node_modules/es5-ext/test/string/#/uncapitalize.js new file mode 100644 index 000000000..cddd847ce --- /dev/null +++ b/node_modules/es5-ext/test/string/#/uncapitalize.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (t, a) { + a(t.call("raz"), "raz", "Word"); + a(t.call("BLA"), "bLA", "Uppercase"); + a(t.call(""), "", "Empty"); + a(t.call("a"), "a", "One letter"); + a(t.call("this is a test"), "this is a test", "Sentence"); + a(t.call("This is a test"), "this is a test", "Capitalized sentence"); +}; diff --git a/node_modules/es5-ext/test/string/format-method.js b/node_modules/es5-ext/test/string/format-method.js new file mode 100644 index 000000000..69e93de63 --- /dev/null +++ b/node_modules/es5-ext/test/string/format-method.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = function (t, a) { + t = t({ a: "A", +aa: "B", +ab: "C", +b: "D", + c: function () { + return ++this.a; +} }); + a(t.call({ a: 0 }, " %a%aab%abb%b\\%aa%ab%c%c "), " ABbCbD%aaC12 "); +}; diff --git a/node_modules/es5-ext/test/string/from-code-point/implement.js b/node_modules/es5-ext/test/string/from-code-point/implement.js new file mode 100644 index 000000000..31ed7b5bd --- /dev/null +++ b/node_modules/es5-ext/test/string/from-code-point/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../string/from-code-point/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/string/from-code-point/index.js b/node_modules/es5-ext/test/string/from-code-point/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/string/from-code-point/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/string/from-code-point/is-implemented.js b/node_modules/es5-ext/test/string/from-code-point/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/string/from-code-point/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/string/from-code-point/shim.js b/node_modules/es5-ext/test/string/from-code-point/shim.js new file mode 100644 index 000000000..023931f13 --- /dev/null +++ b/node_modules/es5-ext/test/string/from-code-point/shim.js @@ -0,0 +1,73 @@ +// Taken from: https://github.com/mathiasbynens/String.fromCodePoint/blob/master +// /tests/tests.js + +"use strict"; + +var pow = Math.pow; + +module.exports = function (t, a) { + var counter, result; + + a(t.length, 1, "Length"); + a(String.propertyIsEnumerable("fromCodePoint"), false, "Not enumerable"); + + a(t(""), "\0", "Empty string"); + a(t(), "", "No arguments"); + a(t(-0), "\0", "-0"); + a(t(0), "\0", "0"); + a(t(0x1D306), "\uD834\uDF06", "Unicode"); + a(t(0x1D306, 0x61, 0x1D307), "\uD834\uDF06a\uD834\uDF07", "Complex unicode"); + a(t(0x61, 0x62, 0x1D307), "ab\uD834\uDF07", "Complex"); + a(t(false), "\0", "false"); + a(t(null), "\0", "null"); + + a.throws(function () { + t("_"); +}, RangeError, "_"); + a.throws(function () { + t(Infinity); +}, RangeError, "Infinity"); + a.throws(function () { + t(-Infinity); +}, RangeError, "-Infinity"); + a.throws(function () { + t(-1); +}, RangeError, "-1"); + a.throws(function () { + t(0x10FFFF + 1); +}, RangeError, "Range error #1"); + a.throws(function () { + t(3.14); +}, RangeError, "Range error #2"); + a.throws(function () { + t(3e-2); +}, RangeError, "Range error #3"); + a.throws(function () { + t(-Infinity); +}, RangeError, "Range error #4"); + a.throws(function () { + t(Number(Infinity)); +}, RangeError, "Range error #5"); + a.throws(function () { + t(NaN); +}, RangeError, "Range error #6"); + a.throws(function () { + t(undefined); +}, RangeError, "Range error #7"); + a.throws(function () { + t({}); +}, RangeError, "Range error #8"); + a.throws(function () { + t(/re/); +}, RangeError, "Range error #9"); + + counter = pow(2, 15) * 3 / 2; + result = []; + while (--counter >= 0) result.push(0); // One code unit per symbol + t.apply(null, result); // Must not throw + + counter = pow(2, 15) * 3 / 2; + result = []; + while (--counter >= 0) result.push(0xFFFF + 1); // Two code units per symbol + t.apply(null, result); // Must not throw +}; diff --git a/node_modules/es5-ext/test/string/is-string.js b/node_modules/es5-ext/test/string/is-string.js new file mode 100644 index 000000000..0e831221d --- /dev/null +++ b/node_modules/es5-ext/test/string/is-string.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = function (t, a) { + a(t(null), false, "Null"); + a(t(""), true, "Empty string"); + a(t(12), false, "Number"); + a(t(false), false, "Boolean"); + a(t(new Date()), false, "Date"); + a(t(new String("raz")), true, "String object"); + a(t("asdfaf"), true, "String"); +}; diff --git a/node_modules/es5-ext/test/string/random-uniq.js b/node_modules/es5-ext/test/string/random-uniq.js new file mode 100644 index 000000000..3b6d889ad --- /dev/null +++ b/node_modules/es5-ext/test/string/random-uniq.js @@ -0,0 +1,14 @@ +"use strict"; + +var isValidFormat = RegExp.prototype.test.bind(/^[a-z0-9]+$/); + +module.exports = function (t, a) { + a(typeof t(), "string"); + a.ok(t().length > 7); + a.not(t(), t()); + a.ok(isValidFormat(t())); + a.ok(isValidFormat(t())); + a.ok(isValidFormat(t())); + a.ok(isValidFormat(t())); + a.ok(isValidFormat(t())); +}; diff --git a/node_modules/es5-ext/test/string/raw/implement.js b/node_modules/es5-ext/test/string/raw/implement.js new file mode 100644 index 000000000..25b624e8e --- /dev/null +++ b/node_modules/es5-ext/test/string/raw/implement.js @@ -0,0 +1,7 @@ +"use strict"; + +var isImplemented = require("../../../string/raw/is-implemented"); + +module.exports = function (a) { + a(isImplemented(), true); +}; diff --git a/node_modules/es5-ext/test/string/raw/index.js b/node_modules/es5-ext/test/string/raw/index.js new file mode 100644 index 000000000..10bb8f65d --- /dev/null +++ b/node_modules/es5-ext/test/string/raw/index.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./shim"); diff --git a/node_modules/es5-ext/test/string/raw/is-implemented.js b/node_modules/es5-ext/test/string/raw/is-implemented.js new file mode 100644 index 000000000..5003e7e93 --- /dev/null +++ b/node_modules/es5-ext/test/string/raw/is-implemented.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function (t, a) { + a(typeof t(), "boolean"); +}; diff --git a/node_modules/es5-ext/test/string/raw/shim.js b/node_modules/es5-ext/test/string/raw/shim.js new file mode 100644 index 000000000..17a11ac52 --- /dev/null +++ b/node_modules/es5-ext/test/string/raw/shim.js @@ -0,0 +1,15 @@ +// Partially taken from: +// https://github.com/paulmillr/es6-shim/blob/master/test/string.js + +"use strict"; + +module.exports = function (t, a) { + var callSite = []; + + callSite.raw = ["The total is ", " ($", " with tax)"]; + a(t(callSite, "{total}", "{total * 1.01}"), + "The total is {total} (${total * 1.01} with tax)"); + + callSite.raw = []; + a(t(callSite, "{total}", "{total * 1.01}"), ""); +}; diff --git a/node_modules/es5-ext/test/to-short-string-representation.js b/node_modules/es5-ext/test/to-short-string-representation.js new file mode 100644 index 000000000..ea9a06d89 --- /dev/null +++ b/node_modules/es5-ext/test/to-short-string-representation.js @@ -0,0 +1,23 @@ +"use strict"; + +var repeat = require("../string/#/repeat"); + +module.exports = function (t, a) { + a(t(), "undefined"); + a(t(null), "null"); + a(t(10), "10"); + a(t("str"), "str"); + a( + t({ + toString: function () { + return "miszka"; + } + }), + "miszka" + ); + // eslint-disable-next-line symbol-description + if (typeof Symbol === "function") a(t(Symbol()), "Symbol()"); + a(t(Object.create(null)), ""); + a(t(repeat.call("a", 300)), repeat.call("a", 99) + "…"); + a(t("mar\ntoo\nfar"), "mar\\ntoo\\nfar"); +}; diff --git a/node_modules/es5-ext/to-short-string-representation.js b/node_modules/es5-ext/to-short-string-representation.js new file mode 100644 index 000000000..5aede5380 --- /dev/null +++ b/node_modules/es5-ext/to-short-string-representation.js @@ -0,0 +1,16 @@ +"use strict"; + +var safeToString = require("./safe-to-string"); + +var reNewLine = /[\n\r\u2028\u2029]/g; + +module.exports = function (value) { + var string = safeToString(value); + // Trim if too long + if (string.length > 100) string = string.slice(0, 99) + "…"; + // Replace eventual new lines + string = string.replace(reNewLine, function (char) { + return JSON.stringify(char).slice(1, -1); + }); + return string; +}; diff --git a/node_modules/es6-iterator/#/chain.js b/node_modules/es6-iterator/#/chain.js new file mode 100644 index 000000000..6dc1543b3 --- /dev/null +++ b/node_modules/es6-iterator/#/chain.js @@ -0,0 +1,40 @@ +'use strict'; + +var setPrototypeOf = require('es5-ext/object/set-prototype-of') + , d = require('d') + , Iterator = require('../') + , validIterable = require('../valid-iterable') + + , push = Array.prototype.push + , defineProperties = Object.defineProperties + , IteratorChain; + +IteratorChain = function (iterators) { + defineProperties(this, { + __iterators__: d('', iterators), + __current__: d('w', iterators.shift()) + }); +}; +if (setPrototypeOf) setPrototypeOf(IteratorChain, Iterator); + +IteratorChain.prototype = Object.create(Iterator.prototype, { + constructor: d(IteratorChain), + next: d(function () { + var result; + if (!this.__current__) return { done: true, value: undefined }; + result = this.__current__.next(); + while (result.done) { + this.__current__ = this.__iterators__.shift(); + if (!this.__current__) return { done: true, value: undefined }; + result = this.__current__.next(); + } + return result; + }) +}); + +module.exports = function () { + var iterators = [this]; + push.apply(iterators, arguments); + iterators.forEach(validIterable); + return new IteratorChain(iterators); +}; diff --git a/node_modules/es6-iterator/.lint b/node_modules/es6-iterator/.lint new file mode 100644 index 000000000..cf54d8156 --- /dev/null +++ b/node_modules/es6-iterator/.lint @@ -0,0 +1,11 @@ +@root + +module + +tabs +indent 2 +maxlen 100 + +ass +nomen +plusplus diff --git a/node_modules/es6-iterator/.npmignore b/node_modules/es6-iterator/.npmignore new file mode 100644 index 000000000..155e41f69 --- /dev/null +++ b/node_modules/es6-iterator/.npmignore @@ -0,0 +1,4 @@ +.DS_Store +/node_modules +/npm-debug.log +/.lintcache diff --git a/node_modules/es6-iterator/.travis.yml b/node_modules/es6-iterator/.travis.yml new file mode 100644 index 000000000..f1a40dbf6 --- /dev/null +++ b/node_modules/es6-iterator/.travis.yml @@ -0,0 +1,13 @@ +sudo: false # http://docs.travis-ci.com/user/workers/container-based-infrastructure/ +language: node_js +node_js: + - 0.12 + - 4 + - 6 + - 7 + +notifications: + email: + - medikoo+es6-iterator@medikoo.com + +script: "npm test && npm run lint" diff --git a/node_modules/es6-iterator/CHANGES b/node_modules/es6-iterator/CHANGES new file mode 100644 index 000000000..05fec6e7f --- /dev/null +++ b/node_modules/es6-iterator/CHANGES @@ -0,0 +1,38 @@ +v2.0.1 -- 2017.03.15 +* Update dependencies + +v2.0.0 -- 2015.10.02 +* Use es6-symbol at v3 + +v1.0.0 -- 2015.06.23 +* Implement support for arguments object +* Drop support for v0.8 node ('^' in package.json dependencies) + +v0.1.3 -- 2015.02.02 +* Update dependencies +* Fix spelling of LICENSE + +v0.1.2 -- 2014.11.19 +* Optimise internal `_next` to not verify internal's list length at all times + (#2 thanks @RReverser) +* Fix documentation examples +* Configure lint scripts + +v0.1.1 -- 2014.04.29 +* Fix es6-symbol dependency version + +v0.1.0 -- 2014.04.29 +* Assure strictly npm hosted dependencies +* Remove sparse arrays dedicated handling (as per spec) +* Add: isIterable, validIterable and chain (method) +* Remove toArray, it's addressed by Array.from (polyfil can be found in es5-ext/array/from) +* Add break possiblity to 'forOf' via 'doBreak' function argument +* Provide dedicated iterator for array-likes (ArrayIterator) and for strings (StringIterator) +* Provide @@toStringTag symbol +* When available rely on @@iterator symbol +* Remove 32bit integer maximum list length restriction +* Improve Iterator internals +* Update to use latest version of dependencies + +v0.0.0 -- 2013.10.12 +Initial (dev version) \ No newline at end of file diff --git a/node_modules/es6-iterator/LICENSE b/node_modules/es6-iterator/LICENSE new file mode 100644 index 000000000..5d87e598b --- /dev/null +++ b/node_modules/es6-iterator/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (C) 2013-2015 Mariusz Nowak (www.medikoo.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/es6-iterator/README.md b/node_modules/es6-iterator/README.md new file mode 100644 index 000000000..288373da7 --- /dev/null +++ b/node_modules/es6-iterator/README.md @@ -0,0 +1,148 @@ +# es6-iterator +## ECMAScript 6 Iterator interface + +### Installation + + $ npm install es6-iterator + +To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/) + +## API + +### Constructors + +#### Iterator(list) _(es6-iterator)_ + +Abstract Iterator interface. Meant for extensions and not to be used on its own. + +Accepts any _list_ object (technically object with numeric _length_ property). + +_Mind it doesn't iterate strings properly, for that use dedicated [StringIterator](#string-iterator)_ + +```javascript +var Iterator = require('es6-iterator') +var iterator = new Iterator([1, 2, 3]); + +iterator.next(); // { value: 1, done: false } +iterator.next(); // { value: 2, done: false } +iterator.next(); // { value: 3, done: false } +iterator.next(); // { value: undefined, done: true } +``` + + +#### ArrayIterator(arrayLike[, kind]) _(es6-iterator/array)_ + +Dedicated for arrays and array-likes. Supports three iteration kinds: +* __value__ _(default)_ - Iterates values +* __key__ - Iterates indexes +* __key+value__ - Iterates keys and indexes, each iteration value is in _[key, value]_ form. + + +```javascript +var ArrayIterator = require('es6-iterator/array') +var iterator = new ArrayIterator([1, 2, 3], 'key+value'); + +iterator.next(); // { value: [0, 1], done: false } +iterator.next(); // { value: [1, 2], done: false } +iterator.next(); // { value: [2, 3], done: false } +iterator.next(); // { value: undefined, done: true } +``` + +May also be used for _arguments_ objects: + +```javascript +(function () { + var iterator = new ArrayIterator(arguments); + + iterator.next(); // { value: 1, done: false } + iterator.next(); // { value: 2, done: false } + iterator.next(); // { value: 3, done: false } + iterator.next(); // { value: undefined, done: true } +}(1, 2, 3)); +``` + +#### StringIterator(str) _(es6-iterator/string)_ + +Assures proper iteration over unicode symbols. +See: http://mathiasbynens.be/notes/javascript-unicode + +```javascript +var StringIterator = require('es6-iterator/string'); +var iterator = new StringIterator('f🙈o🙉o🙊'); + +iterator.next(); // { value: 'f', done: false } +iterator.next(); // { value: '🙈', done: false } +iterator.next(); // { value: 'o', done: false } +iterator.next(); // { value: '🙉', done: false } +iterator.next(); // { value: 'o', done: false } +iterator.next(); // { value: '🙊', done: false } +iterator.next(); // { value: undefined, done: true } +``` + +### Function utilities + +#### forOf(iterable, callback[, thisArg]) _(es6-iterator/for-of)_ + +Polyfill for ECMAScript 6 [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) statement. + +``` +var forOf = require('es6-iterator/for-of'); +var result = []; + +forOf('🙈🙉🙊', function (monkey) { result.push(monkey); }); +console.log(result); // ['🙈', '🙉', '🙊']; +``` + +Optionally you can break iteration at any point: + +```javascript +var result = []; + +forOf([1,2,3,4]', function (val, doBreak) { + result.push(monkey); + if (val >= 3) doBreak(); +}); +console.log(result); // [1, 2, 3]; +``` + +#### get(obj) _(es6-iterator/get)_ + +Return iterator for any iterable object. + +```javascript +var getIterator = require('es6-iterator/get'); +var iterator = get([1,2,3]); + +iterator.next(); // { value: 1, done: false } +iterator.next(); // { value: 2, done: false } +iterator.next(); // { value: 3, done: false } +iterator.next(); // { value: undefined, done: true } +``` + +#### isIterable(obj) _(es6-iterator/is-iterable)_ + +Whether _obj_ is iterable + +```javascript +var isIterable = require('es6-iterator/is-iterable'); + +isIterable(null); // false +isIterable(true); // false +isIterable('str'); // true +isIterable(['a', 'r', 'r']); // true +isIterable(new ArrayIterator([])); // true +``` + +#### validIterable(obj) _(es6-iterator/valid-iterable)_ + +If _obj_ is an iterable it is returned. Otherwise _TypeError_ is thrown. + +### Method extensions + +#### iterator.chain(iterator1[, …iteratorn]) _(es6-iterator/#/chain)_ + +Chain multiple iterators into one. + +### Tests [![Build Status](https://travis-ci.org/medikoo/es6-iterator.png)](https://travis-ci.org/medikoo/es6-iterator) + + $ npm test diff --git a/node_modules/es6-iterator/array.js b/node_modules/es6-iterator/array.js new file mode 100644 index 000000000..885ad0a4f --- /dev/null +++ b/node_modules/es6-iterator/array.js @@ -0,0 +1,30 @@ +'use strict'; + +var setPrototypeOf = require('es5-ext/object/set-prototype-of') + , contains = require('es5-ext/string/#/contains') + , d = require('d') + , Iterator = require('./') + + , defineProperty = Object.defineProperty + , ArrayIterator; + +ArrayIterator = module.exports = function (arr, kind) { + if (!(this instanceof ArrayIterator)) return new ArrayIterator(arr, kind); + Iterator.call(this, arr); + if (!kind) kind = 'value'; + else if (contains.call(kind, 'key+value')) kind = 'key+value'; + else if (contains.call(kind, 'key')) kind = 'key'; + else kind = 'value'; + defineProperty(this, '__kind__', d('', kind)); +}; +if (setPrototypeOf) setPrototypeOf(ArrayIterator, Iterator); + +ArrayIterator.prototype = Object.create(Iterator.prototype, { + constructor: d(ArrayIterator), + _resolve: d(function (i) { + if (this.__kind__ === 'value') return this.__list__[i]; + if (this.__kind__ === 'key+value') return [i, this.__list__[i]]; + return i; + }), + toString: d(function () { return '[object Array Iterator]'; }) +}); diff --git a/node_modules/es6-iterator/for-of.js b/node_modules/es6-iterator/for-of.js new file mode 100644 index 000000000..c7a28411d --- /dev/null +++ b/node_modules/es6-iterator/for-of.js @@ -0,0 +1,46 @@ +'use strict'; + +var isArguments = require('es5-ext/function/is-arguments') + , callable = require('es5-ext/object/valid-callable') + , isString = require('es5-ext/string/is-string') + , get = require('./get') + + , isArray = Array.isArray, call = Function.prototype.call + , some = Array.prototype.some; + +module.exports = function (iterable, cb/*, thisArg*/) { + var mode, thisArg = arguments[2], result, doBreak, broken, i, l, char, code; + if (isArray(iterable) || isArguments(iterable)) mode = 'array'; + else if (isString(iterable)) mode = 'string'; + else iterable = get(iterable); + + callable(cb); + doBreak = function () { broken = true; }; + if (mode === 'array') { + some.call(iterable, function (value) { + call.call(cb, thisArg, value, doBreak); + if (broken) return true; + }); + return; + } + if (mode === 'string') { + l = iterable.length; + for (i = 0; i < l; ++i) { + char = iterable[i]; + if ((i + 1) < l) { + code = char.charCodeAt(0); + if ((code >= 0xD800) && (code <= 0xDBFF)) char += iterable[++i]; + } + call.call(cb, thisArg, char, doBreak); + if (broken) break; + } + return; + } + result = iterable.next(); + + while (!result.done) { + call.call(cb, thisArg, result.value, doBreak); + if (broken) return; + result = iterable.next(); + } +}; diff --git a/node_modules/es6-iterator/get.js b/node_modules/es6-iterator/get.js new file mode 100644 index 000000000..7c7e052b1 --- /dev/null +++ b/node_modules/es6-iterator/get.js @@ -0,0 +1,15 @@ +'use strict'; + +var isArguments = require('es5-ext/function/is-arguments') + , isString = require('es5-ext/string/is-string') + , ArrayIterator = require('./array') + , StringIterator = require('./string') + , iterable = require('./valid-iterable') + , iteratorSymbol = require('es6-symbol').iterator; + +module.exports = function (obj) { + if (typeof iterable(obj)[iteratorSymbol] === 'function') return obj[iteratorSymbol](); + if (isArguments(obj)) return new ArrayIterator(obj); + if (isString(obj)) return new StringIterator(obj); + return new ArrayIterator(obj); +}; diff --git a/node_modules/es6-iterator/index.js b/node_modules/es6-iterator/index.js new file mode 100644 index 000000000..10fd08958 --- /dev/null +++ b/node_modules/es6-iterator/index.js @@ -0,0 +1,90 @@ +'use strict'; + +var clear = require('es5-ext/array/#/clear') + , assign = require('es5-ext/object/assign') + , callable = require('es5-ext/object/valid-callable') + , value = require('es5-ext/object/valid-value') + , d = require('d') + , autoBind = require('d/auto-bind') + , Symbol = require('es6-symbol') + + , defineProperty = Object.defineProperty + , defineProperties = Object.defineProperties + , Iterator; + +module.exports = Iterator = function (list, context) { + if (!(this instanceof Iterator)) return new Iterator(list, context); + defineProperties(this, { + __list__: d('w', value(list)), + __context__: d('w', context), + __nextIndex__: d('w', 0) + }); + if (!context) return; + callable(context.on); + context.on('_add', this._onAdd); + context.on('_delete', this._onDelete); + context.on('_clear', this._onClear); +}; + +defineProperties(Iterator.prototype, assign({ + constructor: d(Iterator), + _next: d(function () { + var i; + if (!this.__list__) return; + if (this.__redo__) { + i = this.__redo__.shift(); + if (i !== undefined) return i; + } + if (this.__nextIndex__ < this.__list__.length) return this.__nextIndex__++; + this._unBind(); + }), + next: d(function () { return this._createResult(this._next()); }), + _createResult: d(function (i) { + if (i === undefined) return { done: true, value: undefined }; + return { done: false, value: this._resolve(i) }; + }), + _resolve: d(function (i) { return this.__list__[i]; }), + _unBind: d(function () { + this.__list__ = null; + delete this.__redo__; + if (!this.__context__) return; + this.__context__.off('_add', this._onAdd); + this.__context__.off('_delete', this._onDelete); + this.__context__.off('_clear', this._onClear); + this.__context__ = null; + }), + toString: d(function () { return '[object Iterator]'; }) +}, autoBind({ + _onAdd: d(function (index) { + if (index >= this.__nextIndex__) return; + ++this.__nextIndex__; + if (!this.__redo__) { + defineProperty(this, '__redo__', d('c', [index])); + return; + } + this.__redo__.forEach(function (redo, i) { + if (redo >= index) this.__redo__[i] = ++redo; + }, this); + this.__redo__.push(index); + }), + _onDelete: d(function (index) { + var i; + if (index >= this.__nextIndex__) return; + --this.__nextIndex__; + if (!this.__redo__) return; + i = this.__redo__.indexOf(index); + if (i !== -1) this.__redo__.splice(i, 1); + this.__redo__.forEach(function (redo, i) { + if (redo > index) this.__redo__[i] = --redo; + }, this); + }), + _onClear: d(function () { + if (this.__redo__) clear.call(this.__redo__); + this.__nextIndex__ = 0; + }) +}))); + +defineProperty(Iterator.prototype, Symbol.iterator, d(function () { + return this; +})); +defineProperty(Iterator.prototype, Symbol.toStringTag, d('', 'Iterator')); diff --git a/node_modules/es6-iterator/is-iterable.js b/node_modules/es6-iterator/is-iterable.js new file mode 100644 index 000000000..2c6f496c3 --- /dev/null +++ b/node_modules/es6-iterator/is-iterable.js @@ -0,0 +1,15 @@ +'use strict'; + +var isArguments = require('es5-ext/function/is-arguments') + , isString = require('es5-ext/string/is-string') + , iteratorSymbol = require('es6-symbol').iterator + + , isArray = Array.isArray; + +module.exports = function (value) { + if (value == null) return false; + if (isArray(value)) return true; + if (isString(value)) return true; + if (isArguments(value)) return true; + return (typeof value[iteratorSymbol] === 'function'); +}; diff --git a/node_modules/es6-iterator/package.json b/node_modules/es6-iterator/package.json new file mode 100644 index 000000000..ccbed65fd --- /dev/null +++ b/node_modules/es6-iterator/package.json @@ -0,0 +1,71 @@ +{ + "_from": "es6-iterator@~2.0.1", + "_id": "es6-iterator@2.0.1", + "_inBundle": false, + "_integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "_location": "/es6-iterator", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "es6-iterator@~2.0.1", + "name": "es6-iterator", + "escapedName": "es6-iterator", + "rawSpec": "~2.0.1", + "saveSpec": null, + "fetchSpec": "~2.0.1" + }, + "_requiredBy": [ + "/es5-ext", + "/es6-map", + "/es6-set", + "/es6-weak-map" + ], + "_resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "_shasum": "8e319c9f0453bf575d374940a655920e59ca5512", + "_spec": "es6-iterator@~2.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/es6-map", + "author": { + "name": "Mariusz Nowak", + "email": "medyk@medikoo.com", + "url": "http://www.medikoo.com/" + }, + "bugs": { + "url": "https://github.com/medikoo/es6-iterator/issues" + }, + "bundleDependencies": false, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-symbol": "^3.1" + }, + "deprecated": false, + "description": "Iterator abstraction based on ES6 specification", + "devDependencies": { + "event-emitter": "^0.3.4", + "tad": "^0.2.7", + "xlint": "^0.2.2", + "xlint-jslint-medikoo": "^0.1.4" + }, + "homepage": "https://github.com/medikoo/es6-iterator#readme", + "keywords": [ + "iterator", + "array", + "list", + "set", + "map", + "generator" + ], + "license": "MIT", + "name": "es6-iterator", + "repository": { + "type": "git", + "url": "git://github.com/medikoo/es6-iterator.git" + }, + "scripts": { + "lint": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream", + "lint-console": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch", + "test": "node ./node_modules/tad/bin/tad" + }, + "version": "2.0.1" +} diff --git a/node_modules/es6-iterator/string.js b/node_modules/es6-iterator/string.js new file mode 100644 index 000000000..cdb39ea4e --- /dev/null +++ b/node_modules/es6-iterator/string.js @@ -0,0 +1,37 @@ +// Thanks @mathiasbynens +// http://mathiasbynens.be/notes/javascript-unicode#iterating-over-symbols + +'use strict'; + +var setPrototypeOf = require('es5-ext/object/set-prototype-of') + , d = require('d') + , Iterator = require('./') + + , defineProperty = Object.defineProperty + , StringIterator; + +StringIterator = module.exports = function (str) { + if (!(this instanceof StringIterator)) return new StringIterator(str); + str = String(str); + Iterator.call(this, str); + defineProperty(this, '__length__', d('', str.length)); + +}; +if (setPrototypeOf) setPrototypeOf(StringIterator, Iterator); + +StringIterator.prototype = Object.create(Iterator.prototype, { + constructor: d(StringIterator), + _next: d(function () { + if (!this.__list__) return; + if (this.__nextIndex__ < this.__length__) return this.__nextIndex__++; + this._unBind(); + }), + _resolve: d(function (i) { + var char = this.__list__[i], code; + if (this.__nextIndex__ === this.__length__) return char; + code = char.charCodeAt(0); + if ((code >= 0xD800) && (code <= 0xDBFF)) return char + this.__list__[this.__nextIndex__++]; + return char; + }), + toString: d(function () { return '[object String Iterator]'; }) +}); diff --git a/node_modules/es6-iterator/test/#/chain.js b/node_modules/es6-iterator/test/#/chain.js new file mode 100644 index 000000000..a414c66d7 --- /dev/null +++ b/node_modules/es6-iterator/test/#/chain.js @@ -0,0 +1,23 @@ +'use strict'; + +var Iterator = require('../../'); + +module.exports = function (t, a) { + var i1 = new Iterator(['raz', 'dwa', 'trzy']) + , i2 = new Iterator(['cztery', 'pięć', 'sześć']) + , i3 = new Iterator(['siedem', 'osiem', 'dziewięć']) + + , iterator = t.call(i1, i2, i3); + + a.deep(iterator.next(), { done: false, value: 'raz' }, "#1"); + a.deep(iterator.next(), { done: false, value: 'dwa' }, "#2"); + a.deep(iterator.next(), { done: false, value: 'trzy' }, "#3"); + a.deep(iterator.next(), { done: false, value: 'cztery' }, "#4"); + a.deep(iterator.next(), { done: false, value: 'pięć' }, "#5"); + a.deep(iterator.next(), { done: false, value: 'sześć' }, "#6"); + a.deep(iterator.next(), { done: false, value: 'siedem' }, "#7"); + a.deep(iterator.next(), { done: false, value: 'osiem' }, "#8"); + a.deep(iterator.next(), { done: false, value: 'dziewięć' }, "#9"); + a.deep(iterator.next(), { done: true, value: undefined }, "Done #1"); + a.deep(iterator.next(), { done: true, value: undefined }, "Done #2"); +}; diff --git a/node_modules/es6-iterator/test/array.js b/node_modules/es6-iterator/test/array.js new file mode 100644 index 000000000..ae7c2199e --- /dev/null +++ b/node_modules/es6-iterator/test/array.js @@ -0,0 +1,67 @@ +'use strict'; + +var iteratorSymbol = require('es6-symbol').iterator; + +module.exports = function (T) { + return { + Values: function (a) { + var x = ['raz', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć'], it; + + it = new T(x); + a(it[iteratorSymbol](), it, "@@iterator"); + a.deep(it.next(), { done: false, value: 'raz' }, "#1"); + a.deep(it.next(), { done: false, value: 'dwa' }, "#2"); + x.splice(1, 0, 'elo'); + a.deep(it.next(), { done: false, value: 'dwa' }, "Insert"); + a.deep(it.next(), { done: false, value: 'trzy' }, "#3"); + a.deep(it.next(), { done: false, value: 'cztery' }, "#4"); + x.pop(); + a.deep(it.next(), { done: false, value: 'pięć' }, "#5"); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Keys & Values": function (a) { + var x = ['raz', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć'], it; + + it = new T(x, 'key+value'); + a(it[iteratorSymbol](), it, "@@iterator"); + a.deep(it.next(), { done: false, value: [0, 'raz'] }, "#1"); + a.deep(it.next(), { done: false, value: [1, 'dwa'] }, "#2"); + x.splice(1, 0, 'elo'); + a.deep(it.next(), { done: false, value: [2, 'dwa'] }, "Insert"); + a.deep(it.next(), { done: false, value: [3, 'trzy'] }, "#3"); + a.deep(it.next(), { done: false, value: [4, 'cztery'] }, "#4"); + x.pop(); + a.deep(it.next(), { done: false, value: [5, 'pięć'] }, "#5"); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + Keys: function (a) { + var x = ['raz', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć'], it; + + it = new T(x, 'key'); + a(it[iteratorSymbol](), it, "@@iterator"); + a.deep(it.next(), { done: false, value: 0 }, "#1"); + a.deep(it.next(), { done: false, value: 1 }, "#2"); + x.splice(1, 0, 'elo'); + a.deep(it.next(), { done: false, value: 2 }, "Insert"); + a.deep(it.next(), { done: false, value: 3 }, "#3"); + a.deep(it.next(), { done: false, value: 4 }, "#4"); + x.pop(); + a.deep(it.next(), { done: false, value: 5 }, "#5"); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + Sparse: function (a) { + var x = new Array(6), it; + + x[2] = 'raz'; + x[4] = 'dwa'; + it = new T(x); + a.deep(it.next(), { done: false, value: undefined }, "#1"); + a.deep(it.next(), { done: false, value: undefined }, "#2"); + a.deep(it.next(), { done: false, value: 'raz' }, "#3"); + a.deep(it.next(), { done: false, value: undefined }, "#4"); + a.deep(it.next(), { done: false, value: 'dwa' }, "#5"); + a.deep(it.next(), { done: false, value: undefined }, "#6"); + a.deep(it.next(), { done: true, value: undefined }, "End"); + } + }; +}; diff --git a/node_modules/es6-iterator/test/for-of.js b/node_modules/es6-iterator/test/for-of.js new file mode 100644 index 000000000..108df7d97 --- /dev/null +++ b/node_modules/es6-iterator/test/for-of.js @@ -0,0 +1,40 @@ +'use strict'; + +var ArrayIterator = require('../array') + + , slice = Array.prototype.slice; + +module.exports = function (t, a) { + var i = 0, x = ['raz', 'dwa', 'trzy'], y = {}, called = 0; + t(x, function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "Array " + i + "#"); + a(this, y, "Array: context: " + (i++) + "#"); + }, y); + i = 0; + t((function () { return arguments; }('raz', 'dwa', 'trzy')), function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "Arguments" + i + "#"); + a(this, y, "Arguments: context: " + (i++) + "#"); + }, y); + i = 0; + t(x = 'foo', function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "String " + i + "#"); + a(this, y, "Regular String: context: " + (i++) + "#"); + }, y); + i = 0; + x = ['r', '💩', 'z']; + t('r💩z', function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "String " + i + "#"); + a(this, y, "Unicode String: context: " + (i++) + "#"); + }, y); + i = 0; + t(new ArrayIterator(x), function () { + a.deep(slice.call(arguments, 0, 1), [x[i]], "Iterator " + i + "#"); + a(this, y, "Iterator: context: " + (i++) + "#"); + }, y); + + t(x = ['raz', 'dwa', 'trzy'], function (value, doBreak) { + ++called; + return doBreak(); + }); + a(called, 1, "Break"); +}; diff --git a/node_modules/es6-iterator/test/get.js b/node_modules/es6-iterator/test/get.js new file mode 100644 index 000000000..81ce6e6ae --- /dev/null +++ b/node_modules/es6-iterator/test/get.js @@ -0,0 +1,17 @@ +'use strict'; + +var iteratorSymbol = require('es6-symbol').iterator + , Iterator = require('../'); + +module.exports = function (t, a) { + var iterator; + a.throws(function () { t(); }, TypeError, "Null"); + a.throws(function () { t({}); }, TypeError, "Plain object"); + a.throws(function () { t({ length: 0 }); }, TypeError, "Array-like"); + iterator = {}; + iterator[iteratorSymbol] = function () { return new Iterator([]); }; + a(t(iterator) instanceof Iterator, true, "Iterator"); + a(String(t([])), '[object Array Iterator]', " Array"); + a(String(t((function () { return arguments; }()))), '[object Array Iterator]', " Arguments"); + a(String(t('foo')), '[object String Iterator]', "String"); +}; diff --git a/node_modules/es6-iterator/test/index.js b/node_modules/es6-iterator/test/index.js new file mode 100644 index 000000000..ea3621adf --- /dev/null +++ b/node_modules/es6-iterator/test/index.js @@ -0,0 +1,99 @@ +'use strict'; + +var ee = require('event-emitter') + , iteratorSymbol = require('es6-symbol').iterator; + +module.exports = function (T) { + return { + "": function (a) { + var x = ['raz', 'dwa', 'trzy', 'cztery', 'pięć'], it, y, z; + + it = new T(x); + a(it[iteratorSymbol](), it, "@@iterator"); + y = it.next(); + a.deep(y, { done: false, value: 'raz' }, "#1"); + z = it.next(); + a.not(y, z, "Recreate result"); + a.deep(z, { done: false, value: 'dwa' }, "#2"); + a.deep(it.next(), { done: false, value: 'trzy' }, "#3"); + a.deep(it.next(), { done: false, value: 'cztery' }, "#4"); + a.deep(it.next(), { done: false, value: 'pięć' }, "#5"); + a.deep(y = it.next(), { done: true, value: undefined }, "End"); + a.not(y, it.next(), "Recreate result on dead"); + }, + Emited: function (a) { + var x = ['raz', 'dwa', 'trzy', 'cztery', 'pięć'], y, it; + + y = ee(); + it = new T(x, y); + a.deep(it.next(), { done: false, value: 'raz' }, "#1"); + a.deep(it.next(), { done: false, value: 'dwa' }, "#2"); + y.emit('_add', x.push('sześć') - 1); + a.deep(it.next(), { done: false, value: 'trzy' }, "#3"); + x.splice(1, 0, 'półtora'); + y.emit('_add', 1); + a.deep(it.next(), { done: false, value: 'półtora' }, "Insert"); + x.splice(5, 1); + y.emit('_delete', 5); + a.deep(it.next(), { done: false, value: 'cztery' }, "#4"); + a.deep(it.next(), { done: false, value: 'sześć' }, "#5"); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Emited #2": function (a) { + var x = ['raz', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć'], y, it; + + y = ee(); + it = new T(x, y); + a.deep(it.next(), { done: false, value: 'raz' }, "#1"); + a.deep(it.next(), { done: false, value: 'dwa' }, "#2"); + x.splice(1, 0, 'półtora'); + y.emit('_add', 1); + x.splice(1, 0, '1.25'); + y.emit('_add', 1); + x.splice(0, 1); + y.emit('_delete', 0); + a.deep(it.next(), { done: false, value: 'półtora' }, "Insert"); + a.deep(it.next(), { done: false, value: '1.25' }, "Insert #2"); + a.deep(it.next(), { done: false, value: 'trzy' }, "#3"); + a.deep(it.next(), { done: false, value: 'cztery' }, "#4"); + x.splice(5, 1); + y.emit('_delete', 5); + a.deep(it.next(), { done: false, value: 'sześć' }, "#5"); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Emited: Clear #1": function (a) { + var x = ['raz', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć'], y, it; + + y = ee(); + it = new T(x, y); + a.deep(it.next(), { done: false, value: 'raz' }, "#1"); + a.deep(it.next(), { done: false, value: 'dwa' }, "#2"); + x.length = 0; + y.emit('_clear'); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Emited: Clear #2": function (a) { + var x = ['raz', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć'], y, it; + + y = ee(); + it = new T(x, y); + a.deep(it.next(), { done: false, value: 'raz' }, "#1"); + a.deep(it.next(), { done: false, value: 'dwa' }, "#2"); + x.length = 0; + y.emit('_clear'); + x.push('foo'); + x.push('bar'); + a.deep(it.next(), { done: false, value: 'foo' }, "#3"); + a.deep(it.next(), { done: false, value: 'bar' }, "#4"); + x.splice(1, 0, 'półtora'); + y.emit('_add', 1); + x.splice(1, 0, '1.25'); + y.emit('_add', 1); + x.splice(0, 1); + y.emit('_delete', 0); + a.deep(it.next(), { done: false, value: 'półtora' }, "Insert"); + a.deep(it.next(), { done: false, value: '1.25' }, "Insert #2"); + a.deep(it.next(), { done: true, value: undefined }, "End"); + } + }; +}; diff --git a/node_modules/es6-iterator/test/is-iterable.js b/node_modules/es6-iterator/test/is-iterable.js new file mode 100644 index 000000000..438ad349c --- /dev/null +++ b/node_modules/es6-iterator/test/is-iterable.js @@ -0,0 +1,19 @@ +'use strict'; + +var iteratorSymbol = require('es6-symbol').iterator + , Iterator = require('../'); + +module.exports = function (t, a) { + var iterator; + a(t(), false, "Undefined"); + a(t(123), false, "Number"); + a(t({}), false, "Plain object"); + a(t({ length: 0 }), false, "Array-like"); + iterator = {}; + iterator[iteratorSymbol] = function () { return new Iterator([]); }; + a(t(iterator), true, "Iterator"); + a(t([]), true, "Array"); + a(t('foo'), true, "String"); + a(t(''), true, "Empty string"); + a(t((function () { return arguments; }())), true, "Arguments"); +}; diff --git a/node_modules/es6-iterator/test/string.js b/node_modules/es6-iterator/test/string.js new file mode 100644 index 000000000..d11855f25 --- /dev/null +++ b/node_modules/es6-iterator/test/string.js @@ -0,0 +1,23 @@ +'use strict'; + +var iteratorSymbol = require('es6-symbol').iterator; + +module.exports = function (T, a) { + var it = new T('foobar'); + + a(it[iteratorSymbol](), it, "@@iterator"); + a.deep(it.next(), { done: false, value: 'f' }, "#1"); + a.deep(it.next(), { done: false, value: 'o' }, "#2"); + a.deep(it.next(), { done: false, value: 'o' }, "#3"); + a.deep(it.next(), { done: false, value: 'b' }, "#4"); + a.deep(it.next(), { done: false, value: 'a' }, "#5"); + a.deep(it.next(), { done: false, value: 'r' }, "#6"); + a.deep(it.next(), { done: true, value: undefined }, "End"); + + a.h1("Outside of BMP"); + it = new T('r💩z'); + a.deep(it.next(), { done: false, value: 'r' }, "#1"); + a.deep(it.next(), { done: false, value: '💩' }, "#2"); + a.deep(it.next(), { done: false, value: 'z' }, "#3"); + a.deep(it.next(), { done: true, value: undefined }, "End"); +}; diff --git a/node_modules/es6-iterator/test/valid-iterable.js b/node_modules/es6-iterator/test/valid-iterable.js new file mode 100644 index 000000000..a407f1a0c --- /dev/null +++ b/node_modules/es6-iterator/test/valid-iterable.js @@ -0,0 +1,18 @@ +'use strict'; + +var iteratorSymbol = require('es6-symbol').iterator + , Iterator = require('../'); + +module.exports = function (t, a) { + var obj; + a.throws(function () { t(); }, TypeError, "Undefined"); + a.throws(function () { t({}); }, TypeError, "Plain object"); + a.throws(function () { t({ length: 0 }); }, TypeError, "Array-like"); + obj = {}; + obj[iteratorSymbol] = function () { return new Iterator([]); }; + a(t(obj), obj, "Iterator"); + obj = []; + a(t(obj), obj, 'Array'); + obj = (function () { return arguments; }()); + a(t(obj), obj, "Arguments"); +}; diff --git a/node_modules/es6-iterator/valid-iterable.js b/node_modules/es6-iterator/valid-iterable.js new file mode 100644 index 000000000..d330997cb --- /dev/null +++ b/node_modules/es6-iterator/valid-iterable.js @@ -0,0 +1,8 @@ +'use strict'; + +var isIterable = require('./is-iterable'); + +module.exports = function (value) { + if (!isIterable(value)) throw new TypeError(value + " is not iterable"); + return value; +}; diff --git a/node_modules/es6-map/.lint b/node_modules/es6-map/.lint new file mode 100644 index 000000000..fa861e073 --- /dev/null +++ b/node_modules/es6-map/.lint @@ -0,0 +1,13 @@ +@root + +module + +indent 2 +maxlen 100 +tabs + +ass +nomen +plusplus + +predef+ Map diff --git a/node_modules/es6-map/.npmignore b/node_modules/es6-map/.npmignore new file mode 100644 index 000000000..155e41f69 --- /dev/null +++ b/node_modules/es6-map/.npmignore @@ -0,0 +1,4 @@ +.DS_Store +/node_modules +/npm-debug.log +/.lintcache diff --git a/node_modules/es6-map/.travis.yml b/node_modules/es6-map/.travis.yml new file mode 100644 index 000000000..7560f7499 --- /dev/null +++ b/node_modules/es6-map/.travis.yml @@ -0,0 +1,13 @@ +sudo: false # http://docs.travis-ci.com/user/workers/container-based-infrastructure/ +language: node_js +node_js: + - 0.12 + - 4 + - 6 + - 7 + +notifications: + email: + - medikoo+es6-map@medikoo.com + +script: "npm test && npm run lint" diff --git a/node_modules/es6-map/CHANGES b/node_modules/es6-map/CHANGES new file mode 100644 index 000000000..0205ad41e --- /dev/null +++ b/node_modules/es6-map/CHANGES @@ -0,0 +1,33 @@ +v0.1.5 -- 2017.03.17 +* Update dependencies +* Improve documentation + +v0.1.4 -- 2016.06.03 +* Update dependencies + +v0.1.3 -- 2015.11.18 +* Relax validation of native implementation (do not require proper stringification of Map.prototype) + +v0.1.2 -- 2015.10.15 +* Improve native detection +* Ensure proper inheritance +* Update up to specification +* Fix spelling of LICENSE +* Update dependencies + +v0.1.1 -- 2014.10.07 +* Fix isImplemented so native Maps are detected properly +* Configure lint scripts + +v0.1.0 -- 2014.04.29 +* Assure strictly npm hosted dependencies +* Update to use latest versions of dependencies + +v0.0.1 -- 2014.04.25 +* Provide @@toStringTag symbol, and use other ES 6 symbols +* Fix iterators handling +* Fix isImplemented so it doesn't crash +* Update up to changes in dependencies + +v0.0.0 -- 2013.11.10 +- Initial (dev) version diff --git a/node_modules/es6-map/LICENSE b/node_modules/es6-map/LICENSE new file mode 100644 index 000000000..aaf35282f --- /dev/null +++ b/node_modules/es6-map/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2013 Mariusz Nowak (www.medikoo.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/es6-map/README.md b/node_modules/es6-map/README.md new file mode 100644 index 000000000..d132981b5 --- /dev/null +++ b/node_modules/es6-map/README.md @@ -0,0 +1,79 @@ +# es6-map +## Map collection as specified in ECMAScript6 + +__Warning: +v0.1 version does not ensure O(1) algorithm complexity (but O(n)). This shortcoming will be addressed in v1.0__ + + +### Usage + +It’s safest to use *es6-map* as a [ponyfill](https://ponyfill.com) – a polyfill which doesn’t touch global objects: + +```javascript +var Map = require('es6-map'); +``` + +If you want to make sure your environment implements `Map` globally, do: + +```javascript +require('es6-map/implement'); +``` + +If you strictly want to use the polyfill even if the native `Map` exists, do: + +```javascript +var Map = require('es6-map/polyfill'); +``` + +### Installation + + $ npm install es6-map + +To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/) + +#### API + +Best is to refer to [specification](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-map-objects). Still if you want quick look, follow examples: + +```javascript +var Map = require('es6-map'); + +var x = {}, y = {}, map = new Map([['raz', 'one'], ['dwa', 'two'], [x, y]]); + +map.size; // 3 +map.get('raz'); // 'one' +map.get(x); // y +map.has('raz'); // true +map.has(x); // true +map.has('foo'); // false +map.set('trzy', 'three'); // map +map.size // 4 +map.get('trzy'); // 'three' +map.has('trzy'); // true +map.has('dwa'); // true +map.delete('dwa'); // true +map.size; // 3 + +map.forEach(function (value, key) { + // { 'raz', 'one' }, { x, y }, { 'trzy', 'three' } iterated +}); + +// FF nightly only: +for (value of map) { + // ['raz', 'one'], [x, y], ['trzy', 'three'] iterated +} + +var iterator = map.values(); + +iterator.next(); // { done: false, value: 'one' } +iterator.next(); // { done: false, value: y } +iterator.next(); // { done: false, value: 'three' } +iterator.next(); // { done: true, value: undefined } + +map.clear(); // undefined +map.size; // 0 +``` + +## Tests [![Build Status](https://travis-ci.org/medikoo/es6-map.png)](https://travis-ci.org/medikoo/es6-map) + + $ npm test diff --git a/node_modules/es6-map/implement.js b/node_modules/es6-map/implement.js new file mode 100644 index 000000000..ff3ebaccb --- /dev/null +++ b/node_modules/es6-map/implement.js @@ -0,0 +1,7 @@ +'use strict'; + +if (!require('./is-implemented')()) { + Object.defineProperty(require('es5-ext/global'), 'Map', + { value: require('./polyfill'), configurable: true, enumerable: false, + writable: true }); +} diff --git a/node_modules/es6-map/index.js b/node_modules/es6-map/index.js new file mode 100644 index 000000000..3e27caacb --- /dev/null +++ b/node_modules/es6-map/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./is-implemented')() ? Map : require('./polyfill'); diff --git a/node_modules/es6-map/is-implemented.js b/node_modules/es6-map/is-implemented.js new file mode 100644 index 000000000..cd3b8f23d --- /dev/null +++ b/node_modules/es6-map/is-implemented.js @@ -0,0 +1,32 @@ +'use strict'; + +module.exports = function () { + var map, iterator, result; + if (typeof Map !== 'function') return false; + try { + // WebKit doesn't support arguments and crashes + map = new Map([['raz', 'one'], ['dwa', 'two'], ['trzy', 'three']]); + } catch (e) { + return false; + } + if (String(map) !== '[object Map]') return false; + if (map.size !== 3) return false; + if (typeof map.clear !== 'function') return false; + if (typeof map.delete !== 'function') return false; + if (typeof map.entries !== 'function') return false; + if (typeof map.forEach !== 'function') return false; + if (typeof map.get !== 'function') return false; + if (typeof map.has !== 'function') return false; + if (typeof map.keys !== 'function') return false; + if (typeof map.set !== 'function') return false; + if (typeof map.values !== 'function') return false; + + iterator = map.entries(); + result = iterator.next(); + if (result.done !== false) return false; + if (!result.value) return false; + if (result.value[0] !== 'raz') return false; + if (result.value[1] !== 'one') return false; + + return true; +}; diff --git a/node_modules/es6-map/is-map.js b/node_modules/es6-map/is-map.js new file mode 100644 index 000000000..1e1fa8233 --- /dev/null +++ b/node_modules/es6-map/is-map.js @@ -0,0 +1,12 @@ +'use strict'; + +var toStringTagSymbol = require('es6-symbol').toStringTag + + , toString = Object.prototype.toString + , id = '[object Map]' + , Global = (typeof Map === 'undefined') ? null : Map; + +module.exports = function (x) { + return (x && ((Global && ((x instanceof Global) || (x === Global.prototype))) || + (toString.call(x) === id) || (x[toStringTagSymbol] === 'Map'))) || false; +}; diff --git a/node_modules/es6-map/is-native-implemented.js b/node_modules/es6-map/is-native-implemented.js new file mode 100644 index 000000000..b0b7a1916 --- /dev/null +++ b/node_modules/es6-map/is-native-implemented.js @@ -0,0 +1,9 @@ +// Exports true if environment provides native `Map` implementation, +// whatever that is. + +'use strict'; + +module.exports = (function () { + if (typeof Map === 'undefined') return false; + return (Object.prototype.toString.call(new Map()) === '[object Map]'); +}()); diff --git a/node_modules/es6-map/lib/iterator-kinds.js b/node_modules/es6-map/lib/iterator-kinds.js new file mode 100644 index 000000000..5367b38d9 --- /dev/null +++ b/node_modules/es6-map/lib/iterator-kinds.js @@ -0,0 +1,4 @@ +'use strict'; + +module.exports = require('es5-ext/object/primitive-set')('key', + 'value', 'key+value'); diff --git a/node_modules/es6-map/lib/iterator.js b/node_modules/es6-map/lib/iterator.js new file mode 100644 index 000000000..60f1e8c9e --- /dev/null +++ b/node_modules/es6-map/lib/iterator.js @@ -0,0 +1,38 @@ +'use strict'; + +var setPrototypeOf = require('es5-ext/object/set-prototype-of') + , d = require('d') + , Iterator = require('es6-iterator') + , toStringTagSymbol = require('es6-symbol').toStringTag + , kinds = require('./iterator-kinds') + + , defineProperties = Object.defineProperties + , unBind = Iterator.prototype._unBind + , MapIterator; + +MapIterator = module.exports = function (map, kind) { + if (!(this instanceof MapIterator)) return new MapIterator(map, kind); + Iterator.call(this, map.__mapKeysData__, map); + if (!kind || !kinds[kind]) kind = 'key+value'; + defineProperties(this, { + __kind__: d('', kind), + __values__: d('w', map.__mapValuesData__) + }); +}; +if (setPrototypeOf) setPrototypeOf(MapIterator, Iterator); + +MapIterator.prototype = Object.create(Iterator.prototype, { + constructor: d(MapIterator), + _resolve: d(function (i) { + if (this.__kind__ === 'value') return this.__values__[i]; + if (this.__kind__ === 'key') return this.__list__[i]; + return [this.__list__[i], this.__values__[i]]; + }), + _unBind: d(function () { + this.__values__ = null; + unBind.call(this); + }), + toString: d(function () { return '[object Map Iterator]'; }) +}); +Object.defineProperty(MapIterator.prototype, toStringTagSymbol, + d('c', 'Map Iterator')); diff --git a/node_modules/es6-map/lib/primitive-iterator.js b/node_modules/es6-map/lib/primitive-iterator.js new file mode 100644 index 000000000..b9eada37c --- /dev/null +++ b/node_modules/es6-map/lib/primitive-iterator.js @@ -0,0 +1,57 @@ +'use strict'; + +var clear = require('es5-ext/array/#/clear') + , assign = require('es5-ext/object/assign') + , setPrototypeOf = require('es5-ext/object/set-prototype-of') + , toStringTagSymbol = require('es6-symbol').toStringTag + , d = require('d') + , autoBind = require('d/auto-bind') + , Iterator = require('es6-iterator') + , kinds = require('./iterator-kinds') + + , defineProperties = Object.defineProperties, keys = Object.keys + , unBind = Iterator.prototype._unBind + , PrimitiveMapIterator; + +PrimitiveMapIterator = module.exports = function (map, kind) { + if (!(this instanceof PrimitiveMapIterator)) { + return new PrimitiveMapIterator(map, kind); + } + Iterator.call(this, keys(map.__mapKeysData__), map); + if (!kind || !kinds[kind]) kind = 'key+value'; + defineProperties(this, { + __kind__: d('', kind), + __keysData__: d('w', map.__mapKeysData__), + __valuesData__: d('w', map.__mapValuesData__) + }); +}; +if (setPrototypeOf) setPrototypeOf(PrimitiveMapIterator, Iterator); + +PrimitiveMapIterator.prototype = Object.create(Iterator.prototype, assign({ + constructor: d(PrimitiveMapIterator), + _resolve: d(function (i) { + if (this.__kind__ === 'value') return this.__valuesData__[this.__list__[i]]; + if (this.__kind__ === 'key') return this.__keysData__[this.__list__[i]]; + return [this.__keysData__[this.__list__[i]], + this.__valuesData__[this.__list__[i]]]; + }), + _unBind: d(function () { + this.__keysData__ = null; + this.__valuesData__ = null; + unBind.call(this); + }), + toString: d(function () { return '[object Map Iterator]'; }) +}, autoBind({ + _onAdd: d(function (key) { this.__list__.push(key); }), + _onDelete: d(function (key) { + var index = this.__list__.lastIndexOf(key); + if (index < this.__nextIndex__) return; + this.__list__.splice(index, 1); + }), + _onClear: d(function () { + clear.call(this.__list__); + this.__nextIndex__ = 0; + }) +}))); +Object.defineProperty(PrimitiveMapIterator.prototype, toStringTagSymbol, + d('c', 'Map Iterator')); diff --git a/node_modules/es6-map/package.json b/node_modules/es6-map/package.json new file mode 100644 index 000000000..b559ef9dd --- /dev/null +++ b/node_modules/es6-map/package.json @@ -0,0 +1,74 @@ +{ + "_from": "es6-map@^0.1.3", + "_id": "es6-map@0.1.5", + "_inBundle": false, + "_integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "_location": "/es6-map", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "es6-map@^0.1.3", + "name": "es6-map", + "escapedName": "es6-map", + "rawSpec": "^0.1.3", + "saveSpec": null, + "fetchSpec": "^0.1.3" + }, + "_requiredBy": [ + "/escope" + ], + "_resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "_shasum": "9136e0503dcc06a301690f0bb14ff4e364e949f0", + "_spec": "es6-map@^0.1.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/escope", + "author": { + "name": "Mariusz Nowak", + "email": "medyk@medikoo.com", + "url": "http://www.medikoo.com/" + }, + "bugs": { + "url": "https://github.com/medikoo/es6-map/issues" + }, + "bundleDependencies": false, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + }, + "deprecated": false, + "description": "ECMAScript6 Map polyfill", + "devDependencies": { + "tad": "~0.2.7", + "xlint": "~0.2.2", + "xlint-jslint-medikoo": "~0.1.4" + }, + "homepage": "https://github.com/medikoo/es6-map#readme", + "keywords": [ + "collection", + "es6", + "shim", + "harmony", + "list", + "hash", + "map", + "polyfill", + "ponyfill", + "ecmascript" + ], + "license": "MIT", + "name": "es6-map", + "repository": { + "type": "git", + "url": "git://github.com/medikoo/es6-map.git" + }, + "scripts": { + "lint": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream", + "lint-console": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch", + "test": "node ./node_modules/tad/bin/tad" + }, + "version": "0.1.5" +} diff --git a/node_modules/es6-map/polyfill.js b/node_modules/es6-map/polyfill.js new file mode 100644 index 000000000..c638e760c --- /dev/null +++ b/node_modules/es6-map/polyfill.js @@ -0,0 +1,104 @@ +'use strict'; + +var clear = require('es5-ext/array/#/clear') + , eIndexOf = require('es5-ext/array/#/e-index-of') + , setPrototypeOf = require('es5-ext/object/set-prototype-of') + , callable = require('es5-ext/object/valid-callable') + , validValue = require('es5-ext/object/valid-value') + , d = require('d') + , ee = require('event-emitter') + , Symbol = require('es6-symbol') + , iterator = require('es6-iterator/valid-iterable') + , forOf = require('es6-iterator/for-of') + , Iterator = require('./lib/iterator') + , isNative = require('./is-native-implemented') + + , call = Function.prototype.call + , defineProperties = Object.defineProperties, getPrototypeOf = Object.getPrototypeOf + , MapPoly; + +module.exports = MapPoly = function (/*iterable*/) { + var iterable = arguments[0], keys, values, self; + if (!(this instanceof MapPoly)) throw new TypeError('Constructor requires \'new\''); + if (isNative && setPrototypeOf && (Map !== MapPoly)) { + self = setPrototypeOf(new Map(), getPrototypeOf(this)); + } else { + self = this; + } + if (iterable != null) iterator(iterable); + defineProperties(self, { + __mapKeysData__: d('c', keys = []), + __mapValuesData__: d('c', values = []) + }); + if (!iterable) return self; + forOf(iterable, function (value) { + var key = validValue(value)[0]; + value = value[1]; + if (eIndexOf.call(keys, key) !== -1) return; + keys.push(key); + values.push(value); + }, self); + return self; +}; + +if (isNative) { + if (setPrototypeOf) setPrototypeOf(MapPoly, Map); + MapPoly.prototype = Object.create(Map.prototype, { + constructor: d(MapPoly) + }); +} + +ee(defineProperties(MapPoly.prototype, { + clear: d(function () { + if (!this.__mapKeysData__.length) return; + clear.call(this.__mapKeysData__); + clear.call(this.__mapValuesData__); + this.emit('_clear'); + }), + delete: d(function (key) { + var index = eIndexOf.call(this.__mapKeysData__, key); + if (index === -1) return false; + this.__mapKeysData__.splice(index, 1); + this.__mapValuesData__.splice(index, 1); + this.emit('_delete', index, key); + return true; + }), + entries: d(function () { return new Iterator(this, 'key+value'); }), + forEach: d(function (cb/*, thisArg*/) { + var thisArg = arguments[1], iterator, result; + callable(cb); + iterator = this.entries(); + result = iterator._next(); + while (result !== undefined) { + call.call(cb, thisArg, this.__mapValuesData__[result], + this.__mapKeysData__[result], this); + result = iterator._next(); + } + }), + get: d(function (key) { + var index = eIndexOf.call(this.__mapKeysData__, key); + if (index === -1) return; + return this.__mapValuesData__[index]; + }), + has: d(function (key) { + return (eIndexOf.call(this.__mapKeysData__, key) !== -1); + }), + keys: d(function () { return new Iterator(this, 'key'); }), + set: d(function (key, value) { + var index = eIndexOf.call(this.__mapKeysData__, key), emit; + if (index === -1) { + index = this.__mapKeysData__.push(key) - 1; + emit = true; + } + this.__mapValuesData__[index] = value; + if (emit) this.emit('_add', index, key); + return this; + }), + size: d.gs(function () { return this.__mapKeysData__.length; }), + values: d(function () { return new Iterator(this, 'value'); }), + toString: d(function () { return '[object Map]'; }) +})); +Object.defineProperty(MapPoly.prototype, Symbol.iterator, d(function () { + return this.entries(); +})); +Object.defineProperty(MapPoly.prototype, Symbol.toStringTag, d('c', 'Map')); diff --git a/node_modules/es6-map/primitive/index.js b/node_modules/es6-map/primitive/index.js new file mode 100644 index 000000000..8ac21432e --- /dev/null +++ b/node_modules/es6-map/primitive/index.js @@ -0,0 +1,117 @@ +'use strict'; + +var clear = require('es5-ext/object/clear') + , setPrototypeOf = require('es5-ext/object/set-prototype-of') + , validValue = require('es5-ext/object/valid-value') + , callable = require('es5-ext/object/valid-callable') + , d = require('d') + , iterator = require('es6-iterator/valid-iterable') + , forOf = require('es6-iterator/for-of') + , isNative = require('../is-native-implemented') + , MapPolyfill = require('../polyfill') + , Iterator = require('../lib/primitive-iterator') + + , call = Function.prototype.call + , create = Object.create, defineProperty = Object.defineProperty + , defineProperties = Object.defineProperties, getPrototypeOf = Object.getPrototypeOf + , hasOwnProperty = Object.prototype.hasOwnProperty + , PrimitiveMap; + +module.exports = PrimitiveMap = function (/*iterable, serialize*/) { + var iterable = arguments[0], serialize = arguments[1], self; + if (!(this instanceof PrimitiveMap)) throw new TypeError('Constructor requires \'new\''); + if (isNative && setPrototypeOf && (Map !== MapPolyfill)) { + self = setPrototypeOf(new Map(), getPrototypeOf(this)); + } else { + self = this; + } + if (iterable != null) iterator(iterable); + if (serialize !== undefined) { + callable(serialize); + defineProperty(self, '_serialize', d('', serialize)); + } + defineProperties(self, { + __mapKeysData__: d('c', create(null)), + __mapValuesData__: d('c', create(null)), + __size__: d('w', 0) + }); + if (!iterable) return self; + forOf(iterable, function (value) { + var key = validValue(value)[0], sKey = self._serialize(key); + if (sKey == null) throw new TypeError(key + " cannot be serialized"); + value = value[1]; + if (hasOwnProperty.call(self.__mapKeysData__, sKey)) { + if (self.__mapValuesData__[sKey] === value) return; + } else { + ++self.__size__; + } + self.__mapKeysData__[sKey] = key; + self.__mapValuesData__[sKey] = value; + }); + return self; +}; +if (setPrototypeOf) setPrototypeOf(PrimitiveMap, MapPolyfill); + +PrimitiveMap.prototype = create(MapPolyfill.prototype, { + constructor: d(PrimitiveMap), + _serialize: d(function (value) { + if (value && (typeof value.toString !== 'function')) return null; + return String(value); + }), + clear: d(function () { + if (!this.__size__) return; + clear(this.__mapKeysData__); + clear(this.__mapValuesData__); + this.__size__ = 0; + this.emit('_clear'); + }), + delete: d(function (key) { + var sKey = this._serialize(key); + if (sKey == null) return false; + if (!hasOwnProperty.call(this.__mapKeysData__, sKey)) return false; + delete this.__mapKeysData__[sKey]; + delete this.__mapValuesData__[sKey]; + --this.__size__; + this.emit('_delete', sKey); + return true; + }), + entries: d(function () { return new Iterator(this, 'key+value'); }), + forEach: d(function (cb/*, thisArg*/) { + var thisArg = arguments[1], iterator, result, sKey; + callable(cb); + iterator = this.entries(); + result = iterator._next(); + while (result !== undefined) { + sKey = iterator.__list__[result]; + call.call(cb, thisArg, this.__mapValuesData__[sKey], + this.__mapKeysData__[sKey], this); + result = iterator._next(); + } + }), + get: d(function (key) { + var sKey = this._serialize(key); + if (sKey == null) return; + return this.__mapValuesData__[sKey]; + }), + has: d(function (key) { + var sKey = this._serialize(key); + if (sKey == null) return false; + return hasOwnProperty.call(this.__mapKeysData__, sKey); + }), + keys: d(function () { return new Iterator(this, 'key'); }), + size: d.gs(function () { return this.__size__; }), + set: d(function (key, value) { + var sKey = this._serialize(key); + if (sKey == null) throw new TypeError(key + " cannot be serialized"); + if (hasOwnProperty.call(this.__mapKeysData__, sKey)) { + if (this.__mapValuesData__[sKey] === value) return this; + } else { + ++this.__size__; + } + this.__mapKeysData__[sKey] = key; + this.__mapValuesData__[sKey] = value; + this.emit('_add', sKey); + return this; + }), + values: d(function () { return new Iterator(this, 'value'); }) +}); diff --git a/node_modules/es6-map/test/implement.js b/node_modules/es6-map/test/implement.js new file mode 100644 index 000000000..3569df61d --- /dev/null +++ b/node_modules/es6-map/test/implement.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function (t, a) { a(typeof Map, 'function'); }; diff --git a/node_modules/es6-map/test/index.js b/node_modules/es6-map/test/index.js new file mode 100644 index 000000000..907b8c5a7 --- /dev/null +++ b/node_modules/es6-map/test/index.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function (T, a) { + a((new T([['raz', 1], ['dwa', 2]])).size, 2); +}; diff --git a/node_modules/es6-map/test/is-implemented.js b/node_modules/es6-map/test/is-implemented.js new file mode 100644 index 000000000..06df91cc5 --- /dev/null +++ b/node_modules/es6-map/test/is-implemented.js @@ -0,0 +1,14 @@ +'use strict'; + +var global = require('es5-ext/global') + , polyfill = require('../polyfill'); + +module.exports = function (t, a) { + var cache; + a(typeof t(), 'boolean'); + cache = global.Map; + global.Map = polyfill; + a(t(), true); + if (cache === undefined) delete global.Map; + else global.Map = cache; +}; diff --git a/node_modules/es6-map/test/is-map.js b/node_modules/es6-map/test/is-map.js new file mode 100644 index 000000000..f600b2298 --- /dev/null +++ b/node_modules/es6-map/test/is-map.js @@ -0,0 +1,16 @@ +'use strict'; + +var MapPoly = require('../polyfill'); + +module.exports = function (t, a) { + a(t(undefined), false, "Undefined"); + a(t(null), false, "Null"); + a(t(true), false, "Primitive"); + a(t('raz'), false, "String"); + a(t({}), false, "Object"); + a(t([]), false, "Array"); + if (typeof Map !== 'undefined') { + a(t(new Map()), true, "Native"); + } + a(t(new MapPoly()), true, "Polyfill"); +}; diff --git a/node_modules/es6-map/test/is-native-implemented.js b/node_modules/es6-map/test/is-native-implemented.js new file mode 100644 index 000000000..df8ba0323 --- /dev/null +++ b/node_modules/es6-map/test/is-native-implemented.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function (t, a) { a(typeof t, 'boolean'); }; diff --git a/node_modules/es6-map/test/lib/iterator-kinds.js b/node_modules/es6-map/test/lib/iterator-kinds.js new file mode 100644 index 000000000..41ea10c57 --- /dev/null +++ b/node_modules/es6-map/test/lib/iterator-kinds.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function (t, a) { + a.deep(t, { key: true, value: true, 'key+value': true }); +}; diff --git a/node_modules/es6-map/test/lib/iterator.js b/node_modules/es6-map/test/lib/iterator.js new file mode 100644 index 000000000..2688ed26c --- /dev/null +++ b/node_modules/es6-map/test/lib/iterator.js @@ -0,0 +1,13 @@ +'use strict'; + +var Map = require('../../polyfill') + , toArray = require('es5-ext/array/to-array'); + +module.exports = function (T, a) { + var arr = [['raz', 'one'], ['dwa', 'two']], map = new Map(arr); + + a.deep(toArray(new T(map)), arr, "Default"); + a.deep(toArray(new T(map, 'key+value')), arr, "Key & Value"); + a.deep(toArray(new T(map, 'value')), ['one', 'two'], "Value"); + a.deep(toArray(new T(map, 'key')), ['raz', 'dwa'], "Value"); +}; diff --git a/node_modules/es6-map/test/lib/primitive-iterator.js b/node_modules/es6-map/test/lib/primitive-iterator.js new file mode 100644 index 000000000..ed2790de9 --- /dev/null +++ b/node_modules/es6-map/test/lib/primitive-iterator.js @@ -0,0 +1,130 @@ +'use strict'; + +var iteratorSymbol = require('es6-symbol').iterator + , toArray = require('es5-ext/array/to-array') + , Map = require('../../primitive') + + , compare, mapToResults; + +compare = function (a, b) { + if (!a.value) return -1; + if (!b.value) return 1; + return a.value[0].localeCompare(b.value[0]); +}; + +mapToResults = function (arr) { + return arr.sort().map(function (value) { + return { done: false, value: value }; + }); +}; + +module.exports = function (T) { + return { + "": function (a) { + var arr, it, y, z, map, result = []; + + arr = [['raz', 'one'], ['dwa', 'two'], ['trzy', 'three'], + ['cztery', 'four'], ['pięć', 'five']]; + map = new Map(arr); + + it = new T(map); + a(it[iteratorSymbol](), it, "@@iterator"); + y = it.next(); + result.push(y); + z = it.next(); + a.not(y, z, "Recreate result"); + result.push(z); + result.push(it.next()); + result.push(it.next()); + result.push(it.next()); + a.deep(result.sort(compare), mapToResults(arr)); + a.deep(y = it.next(), { done: true, value: undefined }, "End"); + a.not(y, it.next(), "Recreate result on dead"); + }, + Emited: function (a) { + var arr, it, map, result = []; + + arr = [['raz', 'one'], ['dwa', 'two'], ['trzy', 'three'], + ['cztery', 'four'], ['pięć', 'five']]; + map = new Map(arr); + + it = new T(map); + result.push(it.next()); + result.push(it.next()); + map.set('sześć', 'six'); + arr.push(['sześć', 'six']); + result.push(it.next()); + map.delete('pięć'); + arr.splice(4, 1); + result.push(it.next()); + result.push(it.next()); + a.deep(result.sort(compare), mapToResults(arr)); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Emited #2": function (a) { + var arr, it, map, result = []; + + arr = [['raz', 'one'], ['dwa', 'two'], ['trzy', 'three'], + ['cztery', 'four'], ['pięć', 'five'], ['sześć', 'six']]; + map = new Map(arr); + + it = new T(map); + result.push(it.next()); + result.push(it.next()); + map.set('siedem', 'seven'); + map.delete('siedem'); + result.push(it.next()); + result.push(it.next()); + map.delete('pięć'); + arr.splice(4, 1); + result.push(it.next()); + a.deep(result.sort(compare), mapToResults(arr)); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Emited: Clear #1": function (a) { + var arr, it, map, result = []; + + arr = [['raz', 'one'], ['dwa', 'two'], ['trzy', 'three'], + ['cztery', 'four'], ['pięć', 'five'], ['sześć', 'six']]; + map = new Map(arr); + + it = new T(map); + result.push(it.next()); + result.push(it.next()); + arr = [['raz', 'one'], ['dwa', 'two']]; + map.clear(); + a.deep(result.sort(compare), mapToResults(arr)); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Emited: Clear #2": function (a) { + var arr, it, map, result = []; + + arr = [['raz', 'one'], ['dwa', 'two'], ['trzy', 'three'], + ['cztery', 'four'], ['pięć', 'five'], ['sześć', 'six']]; + map = new Map(arr); + + it = new T(map); + result.push(it.next()); + result.push(it.next()); + map.clear(); + map.set('foo', 'bru'); + map.set('bar', 'far'); + arr = [['raz', 'one'], ['dwa', 'two'], ['foo', 'bru'], ['bar', 'far']]; + result.push(it.next()); + result.push(it.next()); + a.deep(result.sort(compare), mapToResults(arr)); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + Kinds: function (a) { + var arr = [['raz', 'one'], ['dwa', 'two']], map = new Map(arr); + + a.deep(toArray(new T(map)).sort(), arr.sort(), "Default"); + a.deep(toArray(new T(map, 'key+value')).sort(), arr.sort(), + "Key + Value"); + a.deep(toArray(new T(map, 'value')).sort(), ['one', 'two'].sort(), + "Value"); + a.deep(toArray(new T(map, 'key')).sort(), ['raz', 'dwa'].sort(), + "Key"); + } + }; +}; diff --git a/node_modules/es6-map/test/polyfill.js b/node_modules/es6-map/test/polyfill.js new file mode 100644 index 000000000..6816cb049 --- /dev/null +++ b/node_modules/es6-map/test/polyfill.js @@ -0,0 +1,60 @@ +'use strict'; + +var aFrom = require('es5-ext/array/from') + , toArray = require('es5-ext/array/to-array'); + +module.exports = function (T, a) { + var arr = [['raz', 'one'], ['dwa', 'two'], ['trzy', 'three']] + , map = new T(arr), x = {}, y = {}, i = 0; + + a(map instanceof T, true, "Map"); + a(map.size, 3, "Size"); + a(map.get('raz'), 'one', "Get: contained"); + a(map.get(x), undefined, "Get: not contained"); + a(map.has('raz'), true, "Has: contained"); + a(map.has(x), false, "Has: not contained"); + a(map.set(x, y), map, "Set: return"); + a(map.has(x), true, "Set: has"); + a(map.get(x), y, "Set: get"); + a(map.size, 4, "Set: Size"); + map.set('dwa', x); + a(map.get('dwa'), x, "Overwrite: get"); + a(map.size, 4, "Overwrite: size"); + + a(map.delete({}), false, "Delete: false"); + + arr.push([x, y]); + arr[1][1] = x; + map.forEach(function () { + a.deep(aFrom(arguments), [arr[i][1], arr[i][0], map], + "ForEach: Arguments: #" + i); + a(this, y, "ForEach: Context: #" + i); + if (i === 0) { + a(map.delete('raz'), true, "Delete: true"); + a(map.has('raz'), false, "Delete"); + a(map.size, 3, "Delete: size"); + map.set('cztery', 'four'); + arr.push(['cztery', 'four']); + } + i++; + }, y); + arr.splice(0, 1); + + a.deep(toArray(map.entries()), [['dwa', x], ['trzy', 'three'], [x, y], + ['cztery', 'four']], "Entries"); + a.deep(toArray(map.keys()), ['dwa', 'trzy', x, 'cztery'], "Keys"); + a.deep(toArray(map.values()), [x, 'three', y, 'four'], "Values"); + a.deep(toArray(map), [['dwa', x], ['trzy', 'three'], [x, y], + ['cztery', 'four']], "Iterator"); + + map.clear(); + a(map.size, 0, "Clear: size"); + a(map.has('trzy'), false, "Clear: has"); + a.deep(toArray(map), [], "Clear: Values"); + + a.h1("Empty initialization"); + map = new T(); + map.set('foo', 'bar'); + a(map.size, 1); + a(map.get('foo'), 'bar'); +}; diff --git a/node_modules/es6-map/test/primitive/index.js b/node_modules/es6-map/test/primitive/index.js new file mode 100644 index 000000000..a99c68522 --- /dev/null +++ b/node_modules/es6-map/test/primitive/index.js @@ -0,0 +1,59 @@ +'use strict'; + +var aFrom = require('es5-ext/array/from') + , getIterator = require('es6-iterator/get') + , toArray = require('es5-ext/array/to-array'); + +module.exports = function (T, a) { + var arr = [['raz', 'one'], ['dwa', 'two'], ['trzy', 'three']] + , map = new T(arr), x = 'other', y = 'other2' + , i = 0, result = []; + + a(map instanceof T, true, "Map"); + a(map.size, 3, "Size"); + a(map.get('raz'), 'one', "Get: contained"); + a(map.get(x), undefined, "Get: not contained"); + a(map.has('raz'), true, "Has: true"); + a(map.has(x), false, "Has: false"); + a(map.set(x, y), map, "Add: return"); + a(map.has(x), true, "Add"); + a(map.size, 4, "Add: Size"); + map.set('dwa', x); + a(map.get('dwa'), x, "Overwrite: get"); + a(map.size, 4, "Overwrite: size"); + + a(map.delete('else'), false, "Delete: false"); + + arr.push([x, y]); + arr[1][1] = x; + map.forEach(function () { + result.push(aFrom(arguments)); + a(this, y, "ForEach: Context: #" + i); + }, y); + + a.deep(result.sort(function (a, b) { + return String([a[1], a[0]]).localeCompare([b[1], b[0]]); + }), arr.sort().map(function (val) { return [val[1], val[0], map]; }), + "ForEach: Arguments"); + + a.deep(toArray(map.entries()).sort(), [['dwa', x], ['trzy', 'three'], + [x, y], ['raz', 'one']].sort(), "Entries"); + a.deep(toArray(map.keys()).sort(), ['dwa', 'trzy', x, 'raz'].sort(), + "Keys"); + a.deep(toArray(map.values()).sort(), [x, 'three', y, 'one'].sort(), + "Values"); + a.deep(toArray(getIterator(map)).sort(), [['dwa', x], ['trzy', 'three'], + [x, y], ['raz', 'one']].sort(), + "Iterator"); + + map.clear(); + a(map.size, 0, "Clear: size"); + a(map.has('trzy'), false, "Clear: has"); + a.deep(toArray(map.values()), [], "Clear: Values"); + + a.h1("Empty initialization"); + map = new T(); + map.set('foo', 'bar'); + a(map.size, 1); + a(map.get('foo'), 'bar'); +}; diff --git a/node_modules/es6-map/test/valid-map.js b/node_modules/es6-map/test/valid-map.js new file mode 100644 index 000000000..ac0314949 --- /dev/null +++ b/node_modules/es6-map/test/valid-map.js @@ -0,0 +1,19 @@ +'use strict'; + +var MapPoly = require('../polyfill'); + +module.exports = function (t, a) { + var map; + a.throws(function () { t(undefined); }, TypeError, "Undefined"); + a.throws(function () { t(null); }, TypeError, "Null"); + a.throws(function () { t(true); }, TypeError, "Primitive"); + a.throws(function () { t('raz'); }, TypeError, "String"); + a.throws(function () { t({}); }, TypeError, "Object"); + a.throws(function () { t([]); }, TypeError, "Array"); + if (typeof Map !== 'undefined') { + map = new Map(); + a(t(map), map, "Native"); + } + map = new MapPoly(); + a(t(map), map, "Polyfill"); +}; diff --git a/node_modules/es6-map/valid-map.js b/node_modules/es6-map/valid-map.js new file mode 100644 index 000000000..e2aca87a4 --- /dev/null +++ b/node_modules/es6-map/valid-map.js @@ -0,0 +1,8 @@ +'use strict'; + +var isMap = require('./is-map'); + +module.exports = function (x) { + if (!isMap(x)) throw new TypeError(x + " is not a Map"); + return x; +}; diff --git a/node_modules/es6-set/.lint b/node_modules/es6-set/.lint new file mode 100644 index 000000000..89386b35c --- /dev/null +++ b/node_modules/es6-set/.lint @@ -0,0 +1,13 @@ +@root + +module + +tabs +indent 2 +maxlen 100 + +ass +nomen +plusplus + +predef+ Set diff --git a/node_modules/es6-set/.npmignore b/node_modules/es6-set/.npmignore new file mode 100644 index 000000000..155e41f69 --- /dev/null +++ b/node_modules/es6-set/.npmignore @@ -0,0 +1,4 @@ +.DS_Store +/node_modules +/npm-debug.log +/.lintcache diff --git a/node_modules/es6-set/.travis.yml b/node_modules/es6-set/.travis.yml new file mode 100644 index 000000000..09a917c05 --- /dev/null +++ b/node_modules/es6-set/.travis.yml @@ -0,0 +1,13 @@ +sudo: false # http://docs.travis-ci.com/user/workers/container-based-infrastructure/ +language: node_js +node_js: + - 0.12 + - 4 + - 6 + - 7 + +notifications: + email: + - medikoo+es6-set@medikoo.com + +script: "npm test && npm run lint" diff --git a/node_modules/es6-set/CHANGES b/node_modules/es6-set/CHANGES new file mode 100644 index 000000000..21ad4bf30 --- /dev/null +++ b/node_modules/es6-set/CHANGES @@ -0,0 +1,34 @@ +v0.1.5 -- 2017.03.16 +* Improve documentation +* Update dependencies + +v0.1.4 -- 2016.01.19 +* Ensure Set polyfill function name is `Set` (#2) + +v0.1.3 -- 2015.11.18 +* Relax validation of native implementation (do not require proper stringification of Set.prototype) + +v0.1.2 -- 2015.10.02 +* Improve native Set detection +* Fix spelling of LICENSE +* Set.prototype.filter extension +* Update dependencies + +v0.1.1 -- 2014.10.07 +* Fix isImplemented so it validates native Set properly +* Add getFirst and getLast extensions +* Configure linter scripts + +v0.1.0 -- 2014.04.29 +* Assure strictly npm hosted dependencies +* Introduce faster 'primitive' alternative (doesn't guarantee order of iteration) +* Add isNativeImplemented, and some, every and copy method extensions +* If native Set is provided polyfill extends it +* Optimize forEach iteration +* Remove comparator support (as it was removed from spec) +* Provide @@toStringTag symbol, ad @@iterator symbols on iterators +* Update to use latest dependencies versions +* Improve interals + +v0.0.0 -- 2013.10.12 +Initial (dev) version diff --git a/node_modules/es6-set/LICENSE b/node_modules/es6-set/LICENSE new file mode 100644 index 000000000..aaf35282f --- /dev/null +++ b/node_modules/es6-set/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2013 Mariusz Nowak (www.medikoo.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/es6-set/README.md b/node_modules/es6-set/README.md new file mode 100644 index 000000000..4ec0a005f --- /dev/null +++ b/node_modules/es6-set/README.md @@ -0,0 +1,74 @@ +# es6-set +## Set collection as specified in ECMAScript6 + +__Warning: +v0.1 version does not ensure O(1) algorithm complexity (but O(n)). This shortcoming will be addressed in v1.0__ + +### Usage + +If you want to make sure your environment implements `Set`, do: + +```javascript +require('es6-set/implement'); +``` + +If you'd like to use native version when it exists and fallback to polyfill if it doesn't, but without implementing `Set` on global scope, do: + +```javascript +var Set = require('es6-set'); +``` + +If you strictly want to use polyfill even if native `Set` exists, do: + +```javascript +var Set = require('es6-set/polyfill'); +``` + +### Installation + + $ npm install es6-set + +To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/) + +#### API + +Best is to refer to [specification](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-set-objects). Still if you want quick look, follow examples: + +```javascript +var Set = require('es6-set'); + +var set = new Set(['raz', 'dwa', {}]); + +set.size; // 3 +set.has('raz'); // true +set.has('foo'); // false +set.add('foo'); // set +set.size // 4 +set.has('foo'); // true +set.has('dwa'); // true +set.delete('dwa'); // true +set.size; // 3 + +set.forEach(function (value) { + // 'raz', {}, 'foo' iterated +}); + +// FF nightly only: +for (value of set) { + // 'raz', {}, 'foo' iterated +} + +var iterator = set.values(); + +iterator.next(); // { done: false, value: 'raz' } +iterator.next(); // { done: false, value: {} } +iterator.next(); // { done: false, value: 'foo' } +iterator.next(); // { done: true, value: undefined } + +set.clear(); // undefined +set.size; // 0 +``` + +## Tests [![Build Status](https://travis-ci.org/medikoo/es6-set.png)](https://travis-ci.org/medikoo/es6-set) + + $ npm test diff --git a/node_modules/es6-set/ext/copy.js b/node_modules/es6-set/ext/copy.js new file mode 100644 index 000000000..a8fd5c20c --- /dev/null +++ b/node_modules/es6-set/ext/copy.js @@ -0,0 +1,5 @@ +'use strict'; + +var Set = require('../'); + +module.exports = function () { return new Set(this); }; diff --git a/node_modules/es6-set/ext/every.js b/node_modules/es6-set/ext/every.js new file mode 100644 index 000000000..ea64ebc56 --- /dev/null +++ b/node_modules/es6-set/ext/every.js @@ -0,0 +1,18 @@ +'use strict'; + +var callable = require('es5-ext/object/valid-callable') + , forOf = require('es6-iterator/for-of') + + , call = Function.prototype.call; + +module.exports = function (cb/*, thisArg*/) { + var thisArg = arguments[1], result = true; + callable(cb); + forOf(this, function (value, doBreak) { + if (!call.call(cb, thisArg, value)) { + result = false; + doBreak(); + } + }); + return result; +}; diff --git a/node_modules/es6-set/ext/filter.js b/node_modules/es6-set/ext/filter.js new file mode 100644 index 000000000..1178fc591 --- /dev/null +++ b/node_modules/es6-set/ext/filter.js @@ -0,0 +1,18 @@ +'use strict'; + +var callable = require('es5-ext/object/valid-callable') + , forOf = require('es6-iterator/for-of') + , isSet = require('../is-set') + , Set = require('../') + + , call = Function.prototype.call; + +module.exports = function (cb/*, thisArg*/) { + var thisArg = arguments[1], result; + callable(cb); + result = isSet(this) ? new this.constructor() : new Set(); + forOf(this, function (value) { + if (call.call(cb, thisArg, value)) result.add(value); + }); + return result; +}; diff --git a/node_modules/es6-set/ext/get-first.js b/node_modules/es6-set/ext/get-first.js new file mode 100644 index 000000000..b5d89fc13 --- /dev/null +++ b/node_modules/es6-set/ext/get-first.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function () { + return this.values().next().value; +}; diff --git a/node_modules/es6-set/ext/get-last.js b/node_modules/es6-set/ext/get-last.js new file mode 100644 index 000000000..d22ce737b --- /dev/null +++ b/node_modules/es6-set/ext/get-last.js @@ -0,0 +1,11 @@ +'use strict'; + +module.exports = function () { + var value, iterator = this.values(), item; + while (true) { + item = iterator.next(); + if (item.done) break; + value = item.value; + } + return value; +}; diff --git a/node_modules/es6-set/ext/some.js b/node_modules/es6-set/ext/some.js new file mode 100644 index 000000000..400a5a0c6 --- /dev/null +++ b/node_modules/es6-set/ext/some.js @@ -0,0 +1,18 @@ +'use strict'; + +var callable = require('es5-ext/object/valid-callable') + , forOf = require('es6-iterator/for-of') + + , call = Function.prototype.call; + +module.exports = function (cb/*, thisArg*/) { + var thisArg = arguments[1], result = false; + callable(cb); + forOf(this, function (value, doBreak) { + if (call.call(cb, thisArg, value)) { + result = true; + doBreak(); + } + }); + return result; +}; diff --git a/node_modules/es6-set/implement.js b/node_modules/es6-set/implement.js new file mode 100644 index 000000000..f03362e08 --- /dev/null +++ b/node_modules/es6-set/implement.js @@ -0,0 +1,7 @@ +'use strict'; + +if (!require('./is-implemented')()) { + Object.defineProperty(require('es5-ext/global'), 'Set', + { value: require('./polyfill'), configurable: true, enumerable: false, + writable: true }); +} diff --git a/node_modules/es6-set/index.js b/node_modules/es6-set/index.js new file mode 100644 index 000000000..daa788619 --- /dev/null +++ b/node_modules/es6-set/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./is-implemented')() ? Set : require('./polyfill'); diff --git a/node_modules/es6-set/is-implemented.js b/node_modules/es6-set/is-implemented.js new file mode 100644 index 000000000..7f1bfbb7c --- /dev/null +++ b/node_modules/es6-set/is-implemented.js @@ -0,0 +1,24 @@ +'use strict'; + +module.exports = function () { + var set, iterator, result; + if (typeof Set !== 'function') return false; + set = new Set(['raz', 'dwa', 'trzy']); + if (String(set) !== '[object Set]') return false; + if (set.size !== 3) return false; + if (typeof set.add !== 'function') return false; + if (typeof set.clear !== 'function') return false; + if (typeof set.delete !== 'function') return false; + if (typeof set.entries !== 'function') return false; + if (typeof set.forEach !== 'function') return false; + if (typeof set.has !== 'function') return false; + if (typeof set.keys !== 'function') return false; + if (typeof set.values !== 'function') return false; + + iterator = set.values(); + result = iterator.next(); + if (result.done !== false) return false; + if (result.value !== 'raz') return false; + + return true; +}; diff --git a/node_modules/es6-set/is-native-implemented.js b/node_modules/es6-set/is-native-implemented.js new file mode 100644 index 000000000..e8b0160ec --- /dev/null +++ b/node_modules/es6-set/is-native-implemented.js @@ -0,0 +1,9 @@ +// Exports true if environment provides native `Set` implementation, +// whatever that is. + +'use strict'; + +module.exports = (function () { + if (typeof Set === 'undefined') return false; + return (Object.prototype.toString.call(Set.prototype) === '[object Set]'); +}()); diff --git a/node_modules/es6-set/is-set.js b/node_modules/es6-set/is-set.js new file mode 100644 index 000000000..6b491ddee --- /dev/null +++ b/node_modules/es6-set/is-set.js @@ -0,0 +1,12 @@ +'use strict'; + +var toString = Object.prototype.toString + , toStringTagSymbol = require('es6-symbol').toStringTag + + , id = '[object Set]' + , Global = (typeof Set === 'undefined') ? null : Set; + +module.exports = function (x) { + return (x && ((Global && ((x instanceof Global) || (x === Global.prototype))) || + (toString.call(x) === id) || (x[toStringTagSymbol] === 'Set'))) || false; +}; diff --git a/node_modules/es6-set/lib/iterator.js b/node_modules/es6-set/lib/iterator.js new file mode 100644 index 000000000..6069a8a13 --- /dev/null +++ b/node_modules/es6-set/lib/iterator.js @@ -0,0 +1,30 @@ +'use strict'; + +var setPrototypeOf = require('es5-ext/object/set-prototype-of') + , contains = require('es5-ext/string/#/contains') + , d = require('d') + , Iterator = require('es6-iterator') + , toStringTagSymbol = require('es6-symbol').toStringTag + + , defineProperty = Object.defineProperty + , SetIterator; + +SetIterator = module.exports = function (set, kind) { + if (!(this instanceof SetIterator)) return new SetIterator(set, kind); + Iterator.call(this, set.__setData__, set); + if (!kind) kind = 'value'; + else if (contains.call(kind, 'key+value')) kind = 'key+value'; + else kind = 'value'; + defineProperty(this, '__kind__', d('', kind)); +}; +if (setPrototypeOf) setPrototypeOf(SetIterator, Iterator); + +SetIterator.prototype = Object.create(Iterator.prototype, { + constructor: d(SetIterator), + _resolve: d(function (i) { + if (this.__kind__ === 'value') return this.__list__[i]; + return [this.__list__[i], this.__list__[i]]; + }), + toString: d(function () { return '[object Set Iterator]'; }) +}); +defineProperty(SetIterator.prototype, toStringTagSymbol, d('c', 'Set Iterator')); diff --git a/node_modules/es6-set/lib/primitive-iterator.js b/node_modules/es6-set/lib/primitive-iterator.js new file mode 100644 index 000000000..1f0326a3b --- /dev/null +++ b/node_modules/es6-set/lib/primitive-iterator.js @@ -0,0 +1,53 @@ +'use strict'; + +var clear = require('es5-ext/array/#/clear') + , assign = require('es5-ext/object/assign') + , setPrototypeOf = require('es5-ext/object/set-prototype-of') + , contains = require('es5-ext/string/#/contains') + , d = require('d') + , autoBind = require('d/auto-bind') + , Iterator = require('es6-iterator') + , toStringTagSymbol = require('es6-symbol').toStringTag + + , defineProperties = Object.defineProperties, keys = Object.keys + , unBind = Iterator.prototype._unBind + , PrimitiveSetIterator; + +PrimitiveSetIterator = module.exports = function (set, kind) { + if (!(this instanceof PrimitiveSetIterator)) { + return new PrimitiveSetIterator(set, kind); + } + Iterator.call(this, keys(set.__setData__), set); + kind = (!kind || !contains.call(kind, 'key+value')) ? 'value' : 'key+value'; + defineProperties(this, { + __kind__: d('', kind), + __data__: d('w', set.__setData__) + }); +}; +if (setPrototypeOf) setPrototypeOf(PrimitiveSetIterator, Iterator); + +PrimitiveSetIterator.prototype = Object.create(Iterator.prototype, assign({ + constructor: d(PrimitiveSetIterator), + _resolve: d(function (i) { + var value = this.__data__[this.__list__[i]]; + return (this.__kind__ === 'value') ? value : [value, value]; + }), + _unBind: d(function () { + this.__data__ = null; + unBind.call(this); + }), + toString: d(function () { return '[object Set Iterator]'; }) +}, autoBind({ + _onAdd: d(function (key) { this.__list__.push(key); }), + _onDelete: d(function (key) { + var index = this.__list__.lastIndexOf(key); + if (index < this.__nextIndex__) return; + this.__list__.splice(index, 1); + }), + _onClear: d(function () { + clear.call(this.__list__); + this.__nextIndex__ = 0; + }) +}))); +Object.defineProperty(PrimitiveSetIterator.prototype, toStringTagSymbol, + d('c', 'Set Iterator')); diff --git a/node_modules/es6-set/package.json b/node_modules/es6-set/package.json new file mode 100644 index 000000000..f573b5c8f --- /dev/null +++ b/node_modules/es6-set/package.json @@ -0,0 +1,69 @@ +{ + "_from": "es6-set@~0.1.5", + "_id": "es6-set@0.1.5", + "_inBundle": false, + "_integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "_location": "/es6-set", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "es6-set@~0.1.5", + "name": "es6-set", + "escapedName": "es6-set", + "rawSpec": "~0.1.5", + "saveSpec": null, + "fetchSpec": "~0.1.5" + }, + "_requiredBy": [ + "/es6-map" + ], + "_resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "_shasum": "d2b3ec5d4d800ced818db538d28974db0a73ccb1", + "_spec": "es6-set@~0.1.5", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/es6-map", + "author": { + "name": "Mariusz Nowak", + "email": "medyk@medikoo.com", + "url": "http://www.medikoo.com/" + }, + "bugs": { + "url": "https://github.com/medikoo/es6-set/issues" + }, + "bundleDependencies": false, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "deprecated": false, + "description": "ECMAScript6 Set polyfill", + "devDependencies": { + "tad": "~0.2.7", + "xlint": "~0.2.2", + "xlint-jslint-medikoo": "~0.1.4" + }, + "homepage": "https://github.com/medikoo/es6-set#readme", + "keywords": [ + "set", + "collection", + "es6", + "harmony", + "list", + "hash" + ], + "license": "MIT", + "name": "es6-set", + "repository": { + "type": "git", + "url": "git://github.com/medikoo/es6-set.git" + }, + "scripts": { + "lint": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream", + "lint-console": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch", + "test": "node ./node_modules/tad/bin/tad" + }, + "version": "0.1.5" +} diff --git a/node_modules/es6-set/polyfill.js b/node_modules/es6-set/polyfill.js new file mode 100644 index 000000000..51b1e6307 --- /dev/null +++ b/node_modules/es6-set/polyfill.js @@ -0,0 +1,80 @@ +'use strict'; + +var clear = require('es5-ext/array/#/clear') + , eIndexOf = require('es5-ext/array/#/e-index-of') + , setPrototypeOf = require('es5-ext/object/set-prototype-of') + , callable = require('es5-ext/object/valid-callable') + , d = require('d') + , ee = require('event-emitter') + , Symbol = require('es6-symbol') + , iterator = require('es6-iterator/valid-iterable') + , forOf = require('es6-iterator/for-of') + , Iterator = require('./lib/iterator') + , isNative = require('./is-native-implemented') + + , call = Function.prototype.call + , defineProperty = Object.defineProperty, getPrototypeOf = Object.getPrototypeOf + , SetPoly, getValues, NativeSet; + +if (isNative) NativeSet = Set; + +module.exports = SetPoly = function Set(/*iterable*/) { + var iterable = arguments[0], self; + if (!(this instanceof SetPoly)) throw new TypeError('Constructor requires \'new\''); + if (isNative && setPrototypeOf) self = setPrototypeOf(new NativeSet(), getPrototypeOf(this)); + else self = this; + if (iterable != null) iterator(iterable); + defineProperty(self, '__setData__', d('c', [])); + if (!iterable) return self; + forOf(iterable, function (value) { + if (eIndexOf.call(this, value) !== -1) return; + this.push(value); + }, self.__setData__); + return self; +}; + +if (isNative) { + if (setPrototypeOf) setPrototypeOf(SetPoly, NativeSet); + SetPoly.prototype = Object.create(NativeSet.prototype, { constructor: d(SetPoly) }); +} + +ee(Object.defineProperties(SetPoly.prototype, { + add: d(function (value) { + if (this.has(value)) return this; + this.emit('_add', this.__setData__.push(value) - 1, value); + return this; + }), + clear: d(function () { + if (!this.__setData__.length) return; + clear.call(this.__setData__); + this.emit('_clear'); + }), + delete: d(function (value) { + var index = eIndexOf.call(this.__setData__, value); + if (index === -1) return false; + this.__setData__.splice(index, 1); + this.emit('_delete', index, value); + return true; + }), + entries: d(function () { return new Iterator(this, 'key+value'); }), + forEach: d(function (cb/*, thisArg*/) { + var thisArg = arguments[1], iterator, result, value; + callable(cb); + iterator = this.values(); + result = iterator._next(); + while (result !== undefined) { + value = iterator._resolve(result); + call.call(cb, thisArg, value, value, this); + result = iterator._next(); + } + }), + has: d(function (value) { + return (eIndexOf.call(this.__setData__, value) !== -1); + }), + keys: d(getValues = function () { return this.values(); }), + size: d.gs(function () { return this.__setData__.length; }), + values: d(function () { return new Iterator(this); }), + toString: d(function () { return '[object Set]'; }) +})); +defineProperty(SetPoly.prototype, Symbol.iterator, d(getValues)); +defineProperty(SetPoly.prototype, Symbol.toStringTag, d('c', 'Set')); diff --git a/node_modules/es6-set/primitive/index.js b/node_modules/es6-set/primitive/index.js new file mode 100644 index 000000000..6bcad18d3 --- /dev/null +++ b/node_modules/es6-set/primitive/index.js @@ -0,0 +1,87 @@ +'use strict'; + +var callable = require('es5-ext/object/valid-callable') + , clear = require('es5-ext/object/clear') + , setPrototypeOf = require('es5-ext/object/set-prototype-of') + , d = require('d') + , iterator = require('es6-iterator/valid-iterable') + , forOf = require('es6-iterator/for-of') + , Set = require('../polyfill') + , Iterator = require('../lib/primitive-iterator') + , isNative = require('../is-native-implemented') + + , create = Object.create, defineProperties = Object.defineProperties + , defineProperty = Object.defineProperty, getPrototypeOf = Object.getPrototypeOf + , hasOwnProperty = Object.prototype.hasOwnProperty + , PrimitiveSet; + +module.exports = PrimitiveSet = function (/*iterable, serialize*/) { + var iterable = arguments[0], serialize = arguments[1], self; + if (!(this instanceof PrimitiveSet)) throw new TypeError('Constructor requires \'new\''); + if (isNative && setPrototypeOf) self = setPrototypeOf(new Set(), getPrototypeOf(this)); + else self = this; + if (iterable != null) iterator(iterable); + if (serialize !== undefined) { + callable(serialize); + defineProperty(self, '_serialize', d('', serialize)); + } + defineProperties(self, { + __setData__: d('c', create(null)), + __size__: d('w', 0) + }); + if (!iterable) return self; + forOf(iterable, function (value) { + var key = self._serialize(value); + if (key == null) throw new TypeError(value + " cannot be serialized"); + if (hasOwnProperty.call(self.__setData__, key)) return; + self.__setData__[key] = value; + ++self.__size__; + }); + return self; +}; +if (setPrototypeOf) setPrototypeOf(PrimitiveSet, Set); + +PrimitiveSet.prototype = create(Set.prototype, { + constructor: d(PrimitiveSet), + _serialize: d(function (value) { + if (value && (typeof value.toString !== 'function')) return null; + return String(value); + }), + add: d(function (value) { + var key = this._serialize(value); + if (key == null) throw new TypeError(value + " cannot be serialized"); + if (hasOwnProperty.call(this.__setData__, key)) return this; + this.__setData__[key] = value; + ++this.__size__; + this.emit('_add', key); + return this; + }), + clear: d(function () { + if (!this.__size__) return; + clear(this.__setData__); + this.__size__ = 0; + this.emit('_clear'); + }), + delete: d(function (value) { + var key = this._serialize(value); + if (key == null) return false; + if (!hasOwnProperty.call(this.__setData__, key)) return false; + delete this.__setData__[key]; + --this.__size__; + this.emit('_delete', key); + return true; + }), + entries: d(function () { return new Iterator(this, 'key+value'); }), + get: d(function (key) { + key = this._serialize(key); + if (key == null) return; + return this.__setData__[key]; + }), + has: d(function (value) { + var key = this._serialize(value); + if (key == null) return false; + return hasOwnProperty.call(this.__setData__, key); + }), + size: d.gs(function () { return this.__size__; }), + values: d(function () { return new Iterator(this); }) +}); diff --git a/node_modules/es6-set/test/ext/copy.js b/node_modules/es6-set/test/ext/copy.js new file mode 100644 index 000000000..84fe912a3 --- /dev/null +++ b/node_modules/es6-set/test/ext/copy.js @@ -0,0 +1,12 @@ +'use strict'; + +var toArray = require('es5-ext/array/to-array') + , Set = require('../../'); + +module.exports = function (t, a) { + var content = ['raz', 2, true], set = new Set(content), copy; + + copy = t.call(set); + a.not(copy, set, "Copy"); + a.deep(toArray(copy), content, "Content"); +}; diff --git a/node_modules/es6-set/test/ext/every.js b/node_modules/es6-set/test/ext/every.js new file mode 100644 index 000000000..f56ca385f --- /dev/null +++ b/node_modules/es6-set/test/ext/every.js @@ -0,0 +1,9 @@ +'use strict'; + +var Set = require('../../'); + +module.exports = function (t, a) { + a(t.call(new Set(), Boolean), true, "Empty set"); + a(t.call(new Set([2, 3, 4]), Boolean), true, "Truthy"); + a(t.call(new Set([2, 0, 4]), Boolean), false, "Falsy"); +}; diff --git a/node_modules/es6-set/test/ext/filter.js b/node_modules/es6-set/test/ext/filter.js new file mode 100644 index 000000000..46981859b --- /dev/null +++ b/node_modules/es6-set/test/ext/filter.js @@ -0,0 +1,12 @@ +'use strict'; + +var aFrom = require('es5-ext/array/from') + + , Set = require('../../'); + +module.exports = function (t, a) { + a.deep(aFrom(t.call(new Set(), Boolean)), [], "Empty set"); + a.deep(aFrom(t.call(new Set([2, 3, 4]), Boolean)), [2, 3, 4], "All true"); + a.deep(aFrom(t.call(new Set([0, false, 4]), Boolean)), [4], "Some false"); + a.deep(aFrom(t.call(new Set([0, false, null]), Boolean)), [], "All false"); +}; diff --git a/node_modules/es6-set/test/ext/get-first.js b/node_modules/es6-set/test/ext/get-first.js new file mode 100644 index 000000000..f99829e5a --- /dev/null +++ b/node_modules/es6-set/test/ext/get-first.js @@ -0,0 +1,12 @@ +'use strict'; + +var Set = require('../../'); + +module.exports = function (t, a) { + var content = ['raz', 2, true], set = new Set(content); + + a(t.call(set), 'raz'); + + set = new Set(); + a(t.call(set), undefined); +}; diff --git a/node_modules/es6-set/test/ext/get-last.js b/node_modules/es6-set/test/ext/get-last.js new file mode 100644 index 000000000..1dcc993ed --- /dev/null +++ b/node_modules/es6-set/test/ext/get-last.js @@ -0,0 +1,12 @@ +'use strict'; + +var Set = require('../../'); + +module.exports = function (t, a) { + var content = ['raz', 2, true], set = new Set(content); + + a(t.call(set), true); + + set = new Set(); + a(t.call(set), undefined); +}; diff --git a/node_modules/es6-set/test/ext/some.js b/node_modules/es6-set/test/ext/some.js new file mode 100644 index 000000000..84ce11916 --- /dev/null +++ b/node_modules/es6-set/test/ext/some.js @@ -0,0 +1,10 @@ +'use strict'; + +var Set = require('../../'); + +module.exports = function (t, a) { + a(t.call(new Set(), Boolean), false, "Empty set"); + a(t.call(new Set([2, 3, 4]), Boolean), true, "All true"); + a(t.call(new Set([0, false, 4]), Boolean), true, "Some false"); + a(t.call(new Set([0, false, null]), Boolean), false, "All false"); +}; diff --git a/node_modules/es6-set/test/implement.js b/node_modules/es6-set/test/implement.js new file mode 100644 index 000000000..4882d3786 --- /dev/null +++ b/node_modules/es6-set/test/implement.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function (t, a) { a(typeof Set, 'function'); }; diff --git a/node_modules/es6-set/test/index.js b/node_modules/es6-set/test/index.js new file mode 100644 index 000000000..19c648650 --- /dev/null +++ b/node_modules/es6-set/test/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function (T, a) { a((new T(['raz', 'dwa'])).size, 2); }; diff --git a/node_modules/es6-set/test/is-implemented.js b/node_modules/es6-set/test/is-implemented.js new file mode 100644 index 000000000..124793e73 --- /dev/null +++ b/node_modules/es6-set/test/is-implemented.js @@ -0,0 +1,14 @@ +'use strict'; + +var global = require('es5-ext/global') + , polyfill = require('../polyfill'); + +module.exports = function (t, a) { + var cache; + a(typeof t(), 'boolean'); + cache = global.Set; + global.Set = polyfill; + a(t(), true); + if (cache === undefined) delete global.Set; + else global.Set = cache; +}; diff --git a/node_modules/es6-set/test/is-native-implemented.js b/node_modules/es6-set/test/is-native-implemented.js new file mode 100644 index 000000000..df8ba0323 --- /dev/null +++ b/node_modules/es6-set/test/is-native-implemented.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function (t, a) { a(typeof t, 'boolean'); }; diff --git a/node_modules/es6-set/test/is-set.js b/node_modules/es6-set/test/is-set.js new file mode 100644 index 000000000..c969cce23 --- /dev/null +++ b/node_modules/es6-set/test/is-set.js @@ -0,0 +1,16 @@ +'use strict'; + +var SetPoly = require('../polyfill'); + +module.exports = function (t, a) { + a(t(undefined), false, "Undefined"); + a(t(null), false, "Null"); + a(t(true), false, "Primitive"); + a(t('raz'), false, "String"); + a(t({}), false, "Object"); + a(t([]), false, "Array"); + if (typeof Set !== 'undefined') { + a(t(new Set()), true, "Native"); + } + a(t(new SetPoly()), true, "Polyfill"); +}; diff --git a/node_modules/es6-set/test/lib/iterator.js b/node_modules/es6-set/test/lib/iterator.js new file mode 100644 index 000000000..9e5cfb91b --- /dev/null +++ b/node_modules/es6-set/test/lib/iterator.js @@ -0,0 +1,13 @@ +'use strict'; + +var Set = require('../../polyfill') + , toArray = require('es5-ext/array/to-array'); + +module.exports = function (T, a) { + var set = new Set(['raz', 'dwa']); + + a.deep(toArray(new T(set)), ['raz', 'dwa'], "Default"); + a.deep(toArray(new T(set, 'key+value')), [['raz', 'raz'], ['dwa', 'dwa']], + "Key & Value"); + a.deep(toArray(new T(set, 'value')), ['raz', 'dwa'], "Other"); +}; diff --git a/node_modules/es6-set/test/lib/primitive-iterator.js b/node_modules/es6-set/test/lib/primitive-iterator.js new file mode 100644 index 000000000..2a4956b80 --- /dev/null +++ b/node_modules/es6-set/test/lib/primitive-iterator.js @@ -0,0 +1,113 @@ +'use strict'; + +var Set = require('../../primitive') + , toArray = require('es5-ext/array/to-array') + , iteratorSymbol = require('es6-symbol').iterator + + , compare, map; + +compare = function (a, b) { + if (!a.value) return -1; + if (!b.value) return 1; + return a.value.localeCompare(b.value); +}; + +map = function (arr) { + return arr.sort().map(function (value) { + return { done: false, value: value }; + }); +}; + +module.exports = function (T) { + return { + "": function (a) { + var arr = ['raz', 'dwa', 'trzy', 'cztery', 'pięć'], it, y, z + , set = new Set(arr), result = []; + + it = new T(set); + a(it[iteratorSymbol](), it, "@@iterator"); + y = it.next(); + result.push(y); + z = it.next(); + a.not(y, z, "Recreate result"); + result.push(z); + result.push(it.next()); + result.push(it.next()); + result.push(it.next()); + a.deep(result.sort(compare), map(arr)); + a.deep(y = it.next(), { done: true, value: undefined }, "End"); + a.not(y, it.next(), "Recreate result on dead"); + }, + Emited: function (a) { + var arr = ['raz', 'dwa', 'trzy', 'cztery', 'pięć'], it + , set = new Set(arr), result = []; + + it = new T(set); + result.push(it.next()); + result.push(it.next()); + set.add('sześć'); + arr.push('sześć'); + result.push(it.next()); + set.delete('pięć'); + arr.splice(4, 1); + result.push(it.next()); + result.push(it.next()); + a.deep(result.sort(compare), map(arr)); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Emited #2": function (a) { + var arr = ['raz', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć'], it + , set = new Set(arr), result = []; + + it = new T(set); + result.push(it.next()); + result.push(it.next()); + set.add('siedem'); + set.delete('siedem'); + result.push(it.next()); + result.push(it.next()); + set.delete('pięć'); + arr.splice(4, 1); + result.push(it.next()); + a.deep(result.sort(compare), map(arr)); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Emited: Clear #1": function (a) { + var arr = ['raz', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć'], it + , set = new Set(arr), result = []; + + it = new T(set); + result.push(it.next()); + result.push(it.next()); + arr = ['raz', 'dwa']; + set.clear(); + a.deep(result.sort(compare), map(arr)); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + "Emited: Clear #2": function (a) { + var arr = ['raz', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć'], it + , set = new Set(arr), result = []; + + it = new T(set); + result.push(it.next()); + result.push(it.next()); + set.clear(); + set.add('foo'); + set.add('bar'); + arr = ['raz', 'dwa', 'foo', 'bar']; + result.push(it.next()); + result.push(it.next()); + a.deep(result.sort(compare), map(arr)); + a.deep(it.next(), { done: true, value: undefined }, "End"); + }, + Kinds: function (a) { + var set = new Set(['raz', 'dwa']); + + a.deep(toArray(new T(set)).sort(), ['raz', 'dwa'].sort(), "Default"); + a.deep(toArray(new T(set, 'key+value')).sort(), + [['raz', 'raz'], ['dwa', 'dwa']].sort(), "Key & Value"); + a.deep(toArray(new T(set, 'value')).sort(), ['raz', 'dwa'].sort(), + "Other"); + } + }; +}; diff --git a/node_modules/es6-set/test/polyfill.js b/node_modules/es6-set/test/polyfill.js new file mode 100644 index 000000000..94ae3e6e6 --- /dev/null +++ b/node_modules/es6-set/test/polyfill.js @@ -0,0 +1,50 @@ +'use strict'; + +var aFrom = require('es5-ext/array/from') + , toArray = require('es5-ext/array/to-array'); + +module.exports = function (T, a) { + var arr = ['raz', 'dwa', 'trzy'], set = new T(arr), x = {}, y = {}, i = 0; + + a(set instanceof T, true, "Set"); + a(set.size, 3, "Size"); + a(set.has('raz'), true, "Has: true"); + a(set.has(x), false, "Has: false"); + a(set.add(x), set, "Add: return"); + a(set.has(x), true, "Add"); + a(set.size, 4, "Add: Size"); + a(set.delete({}), false, "Delete: false"); + + arr.push(x); + set.forEach(function () { + a.deep(aFrom(arguments), [arr[i], arr[i], set], + "ForEach: Arguments: #" + i); + a(this, y, "ForEach: Context: #" + i); + if (i === 0) { + a(set.delete('raz'), true, "Delete: true"); + a(set.has('raz'), false, "Delete"); + a(set.size, 3, "Delete: size"); + set.add('cztery'); + arr.push('cztery'); + } + i++; + }, y); + arr.splice(0, 1); + + a.deep(toArray(set.entries()), [['dwa', 'dwa'], ['trzy', 'trzy'], [x, x], + ['cztery', 'cztery']], "Entries"); + a.deep(toArray(set.keys()), ['dwa', 'trzy', x, 'cztery'], "Keys"); + a.deep(toArray(set.values()), ['dwa', 'trzy', x, 'cztery'], "Values"); + a.deep(toArray(set), ['dwa', 'trzy', x, 'cztery'], "Iterator"); + + set.clear(); + a(set.size, 0, "Clear: size"); + a(set.has('trzy'), false, "Clear: has"); + a.deep(toArray(set), [], "Clear: Values"); + + a.h1("Empty initialization"); + set = new T(); + set.add('foo'); + a(set.size, 1); + a(set.has('foo'), true); +}; diff --git a/node_modules/es6-set/test/primitive/index.js b/node_modules/es6-set/test/primitive/index.js new file mode 100644 index 000000000..88f9502fd --- /dev/null +++ b/node_modules/es6-set/test/primitive/index.js @@ -0,0 +1,50 @@ +'use strict'; + +var aFrom = require('es5-ext/array/from') + , getIterator = require('es6-iterator/get') + , toArray = require('es5-ext/array/to-array'); + +module.exports = function (T, a) { + var arr = ['raz', 'dwa', 'trzy'], set = new T(arr), x = 'other', y = 'other2' + , i = 0, result = []; + + a(set instanceof T, true, "Set"); + a(set.size, 3, "Size"); + a(set.has('raz'), true, "Has: true"); + a(set.has(x), false, "Has: false"); + a(set.add(x), set, "Add: return"); + a(set.has(x), true, "Add"); + a(set.size, 4, "Add: Size"); + a(set.delete('else'), false, "Delete: false"); + a(set.get('raz'), 'raz', "Get"); + + arr.push(x); + set.forEach(function () { + result.push(aFrom(arguments)); + a(this, y, "ForEach: Context: #" + i); + }, y); + + a.deep(result.sort(function (a, b) { + return a[0].localeCompare(b[0]); + }), arr.sort().map(function (val) { return [val, val, set]; })); + + a.deep(toArray(set.entries()).sort(), [['dwa', 'dwa'], ['trzy', 'trzy'], + [x, x], ['raz', 'raz']].sort(), "Entries"); + a.deep(toArray(set.keys()).sort(), ['dwa', 'trzy', x, 'raz'].sort(), + "Keys"); + a.deep(toArray(set.values()).sort(), ['dwa', 'trzy', x, 'raz'].sort(), + "Values"); + a.deep(toArray(getIterator(set)).sort(), ['dwa', 'trzy', x, 'raz'].sort(), + "Iterator"); + + set.clear(); + a(set.size, 0, "Clear: size"); + a(set.has('trzy'), false, "Clear: has"); + a.deep(toArray(set.values()), [], "Clear: Values"); + + a.h1("Empty initialization"); + set = new T(); + set.add('foo'); + a(set.size, 1); + a(set.has('foo'), true); +}; diff --git a/node_modules/es6-set/test/valid-set.js b/node_modules/es6-set/test/valid-set.js new file mode 100644 index 000000000..8c71f5f8c --- /dev/null +++ b/node_modules/es6-set/test/valid-set.js @@ -0,0 +1,19 @@ +'use strict'; + +var SetPoly = require('../polyfill'); + +module.exports = function (t, a) { + var set; + a.throws(function () { t(undefined); }, TypeError, "Undefined"); + a.throws(function () { t(null); }, TypeError, "Null"); + a.throws(function () { t(true); }, TypeError, "Primitive"); + a.throws(function () { t('raz'); }, TypeError, "String"); + a.throws(function () { t({}); }, TypeError, "Object"); + a.throws(function () { t([]); }, TypeError, "Array"); + if (typeof Set !== 'undefined') { + set = new Set(); + a(t(set), set, "Native"); + } + set = new SetPoly(); + a(t(set), set, "Polyfill"); +}; diff --git a/node_modules/es6-set/valid-set.js b/node_modules/es6-set/valid-set.js new file mode 100644 index 000000000..9336fd355 --- /dev/null +++ b/node_modules/es6-set/valid-set.js @@ -0,0 +1,8 @@ +'use strict'; + +var isSet = require('./is-set'); + +module.exports = function (x) { + if (!isSet(x)) throw new TypeError(x + " is not a Set"); + return x; +}; diff --git a/node_modules/es6-symbol/.lint b/node_modules/es6-symbol/.lint new file mode 100644 index 000000000..df1e53cd5 --- /dev/null +++ b/node_modules/es6-symbol/.lint @@ -0,0 +1,15 @@ +@root + +module + +tabs +indent 2 +maxlen 100 + +ass +nomen +plusplus +newcap +vars + +predef+ Symbol diff --git a/node_modules/es6-symbol/.npmignore b/node_modules/es6-symbol/.npmignore new file mode 100644 index 000000000..155e41f69 --- /dev/null +++ b/node_modules/es6-symbol/.npmignore @@ -0,0 +1,4 @@ +.DS_Store +/node_modules +/npm-debug.log +/.lintcache diff --git a/node_modules/es6-symbol/.travis.yml b/node_modules/es6-symbol/.travis.yml new file mode 100644 index 000000000..0b1f5e4ae --- /dev/null +++ b/node_modules/es6-symbol/.travis.yml @@ -0,0 +1,11 @@ +sudo: false # http://docs.travis-ci.com/user/workers/container-based-infrastructure/ +language: node_js +node_js: + - 0.12 + - v4 + - v5 + - v6 + +notifications: + email: + - medikoo+es6-symbol@medikoo.com diff --git a/node_modules/es6-symbol/CHANGES b/node_modules/es6-symbol/CHANGES new file mode 100644 index 000000000..017d40915 --- /dev/null +++ b/node_modules/es6-symbol/CHANGES @@ -0,0 +1,57 @@ +v3.1.1 -- 2017.03.15 +* Improve documentation +* Improve error messages +* Update dependencies + +v3.1.0 -- 2016.06.03 +* Fix internals of symbol detection +* Ensure Symbol.prototype[Symbol.toPrimitive] in all cases returns primitive value + (fixes Node v6 support) +* Create native symbols whenver possible + +v3.0.2 -- 2015.12.12 +* Fix definition flow, so uneven state of Symbol implementation doesn't crash initialization of + polyfill. See #13 + +v3.0.1 -- 2015.10.22 +* Workaround for IE11 bug (reported in #12) + +v3.0.0 -- 2015.10.02 +* Reuse native symbols (e.g. iterator, toStringTag etc.) in a polyfill if they're available + Otherwise polyfill symbols may not be recognized by other functions +* Improve documentation + +v2.0.1 -- 2015.01.28 +* Fix Symbol.prototype[Symbol.isPrimitive] implementation +* Improve validation within Symbol.prototype.toString and + Symbol.prototype.valueOf + +v2.0.0 -- 2015.01.28 +* Update up to changes in specification: + * Implement `for` and `keyFor` + * Remove `Symbol.create` and `Symbol.isRegExp` + * Add `Symbol.match`, `Symbol.replace`, `Symbol.search`, `Symbol.species` and + `Symbol.split` +* Rename `validSymbol` to `validateSymbol` +* Improve documentation +* Remove dead test modules + +v1.0.0 -- 2015.01.26 +* Fix enumerability for symbol properties set normally (e.g. obj[symbol] = value) +* Introduce initialization via hidden constructor +* Fix isSymbol handling of polyfill values when native Symbol is present +* Fix spelling of LICENSE +* Configure lint scripts + +v0.1.1 -- 2014.10.07 +* Fix isImplemented, so it returns true in case of polyfill +* Improve documentations + +v0.1.0 -- 2014.04.28 +* Assure strictly npm dependencies +* Update to use latest versions of dependencies +* Fix implementation detection so it doesn't crash on `String(symbol)` +* throw on `new Symbol()` (as decided by TC39) + +v0.0.0 -- 2013.11.15 +* Initial (dev) version \ No newline at end of file diff --git a/node_modules/es6-symbol/LICENSE b/node_modules/es6-symbol/LICENSE new file mode 100644 index 000000000..04724a3ab --- /dev/null +++ b/node_modules/es6-symbol/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2013-2015 Mariusz Nowak (www.medikoo.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/es6-symbol/README.md b/node_modules/es6-symbol/README.md new file mode 100644 index 000000000..fea99062e --- /dev/null +++ b/node_modules/es6-symbol/README.md @@ -0,0 +1,71 @@ +# es6-symbol +## ECMAScript 6 Symbol polyfill + +For more information about symbols see following links +- [Symbols in ECMAScript 6 by Axel Rauschmayer](http://www.2ality.com/2014/12/es6-symbols.html) +- [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) +- [Specification](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-symbol-constructor) + +### Limitations + +Underneath it uses real string property names which can easily be retrieved, however accidental collision with other property names is unlikely. + +### Usage + +If you'd like to use native version when it exists and fallback to [ponyfill](https://ponyfill.com) if it doesn't, use *es6-symbol* as following: + +```javascript +var Symbol = require('es6-symbol'); +``` + +If you want to make sure your environment implements `Symbol` globally, do: + +```javascript +require('es6-symbol/implement'); +``` + +If you strictly want to use polyfill even if native `Symbol` exists (hard to find a good reason for that), do: + +```javascript +var Symbol = require('es6-symbol/polyfill'); +``` + +#### API + +Best is to refer to [specification](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-symbol-objects). Still if you want quick look, follow examples: + +```javascript +var Symbol = require('es6-symbol'); + +var symbol = Symbol('My custom symbol'); +var x = {}; + +x[symbol] = 'foo'; +console.log(x[symbol]); 'foo' + +// Detect iterable: +var iterator, result; +if (possiblyIterable[Symbol.iterator]) { + iterator = possiblyIterable[Symbol.iterator](); + result = iterator.next(); + while(!result.done) { + console.log(result.value); + result = iterator.next(); + } +} +``` + +### Installation +#### NPM + +In your project path: + + $ npm install es6-symbol + +##### Browser + +To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/) + +## Tests [![Build Status](https://travis-ci.org/medikoo/es6-symbol.png)](https://travis-ci.org/medikoo/es6-symbol) + + $ npm test diff --git a/node_modules/es6-symbol/implement.js b/node_modules/es6-symbol/implement.js new file mode 100644 index 000000000..153edacdb --- /dev/null +++ b/node_modules/es6-symbol/implement.js @@ -0,0 +1,7 @@ +'use strict'; + +if (!require('./is-implemented')()) { + Object.defineProperty(require('es5-ext/global'), 'Symbol', + { value: require('./polyfill'), configurable: true, enumerable: false, + writable: true }); +} diff --git a/node_modules/es6-symbol/index.js b/node_modules/es6-symbol/index.js new file mode 100644 index 000000000..609f1faf5 --- /dev/null +++ b/node_modules/es6-symbol/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./is-implemented')() ? Symbol : require('./polyfill'); diff --git a/node_modules/es6-symbol/is-implemented.js b/node_modules/es6-symbol/is-implemented.js new file mode 100644 index 000000000..93629d2f8 --- /dev/null +++ b/node_modules/es6-symbol/is-implemented.js @@ -0,0 +1,17 @@ +'use strict'; + +var validTypes = { object: true, symbol: true }; + +module.exports = function () { + var symbol; + if (typeof Symbol !== 'function') return false; + symbol = Symbol('test symbol'); + try { String(symbol); } catch (e) { return false; } + + // Return 'true' also for polyfills + if (!validTypes[typeof Symbol.iterator]) return false; + if (!validTypes[typeof Symbol.toPrimitive]) return false; + if (!validTypes[typeof Symbol.toStringTag]) return false; + + return true; +}; diff --git a/node_modules/es6-symbol/is-native-implemented.js b/node_modules/es6-symbol/is-native-implemented.js new file mode 100644 index 000000000..8676d0e8d --- /dev/null +++ b/node_modules/es6-symbol/is-native-implemented.js @@ -0,0 +1,5 @@ +// Exports true if environment provides native `Symbol` implementation + +'use strict'; + +module.exports = typeof Symbol === 'function' && typeof Symbol() === 'symbol'; diff --git a/node_modules/es6-symbol/is-symbol.js b/node_modules/es6-symbol/is-symbol.js new file mode 100644 index 000000000..074cb07fb --- /dev/null +++ b/node_modules/es6-symbol/is-symbol.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = function (x) { + if (!x) return false; + if (typeof x === 'symbol') return true; + if (!x.constructor) return false; + if (x.constructor.name !== 'Symbol') return false; + return (x[x.constructor.toStringTag] === 'Symbol'); +}; diff --git a/node_modules/es6-symbol/package.json b/node_modules/es6-symbol/package.json new file mode 100644 index 000000000..b12331320 --- /dev/null +++ b/node_modules/es6-symbol/package.json @@ -0,0 +1,72 @@ +{ + "_from": "es6-symbol@~3.1.1", + "_id": "es6-symbol@3.1.1", + "_inBundle": false, + "_integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "_location": "/es6-symbol", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "es6-symbol@~3.1.1", + "name": "es6-symbol", + "escapedName": "es6-symbol", + "rawSpec": "~3.1.1", + "saveSpec": null, + "fetchSpec": "~3.1.1" + }, + "_requiredBy": [ + "/es5-ext", + "/es6-iterator", + "/es6-map", + "/es6-set", + "/es6-weak-map" + ], + "_resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "_shasum": "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77", + "_spec": "es6-symbol@~3.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/es6-map", + "author": { + "name": "Mariusz Nowak", + "email": "medyk@medikoo.com", + "url": "http://www.medikoo.com/" + }, + "bugs": { + "url": "https://github.com/medikoo/es6-symbol/issues" + }, + "bundleDependencies": false, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + }, + "deprecated": false, + "description": "ECMAScript 6 Symbol polyfill", + "devDependencies": { + "tad": "~0.2.7", + "xlint": "~0.2.2", + "xlint-jslint-medikoo": "~0.1.4" + }, + "homepage": "https://github.com/medikoo/es6-symbol#readme", + "keywords": [ + "symbol", + "private", + "property", + "es6", + "ecmascript", + "harmony", + "ponyfill", + "polyfill" + ], + "license": "MIT", + "name": "es6-symbol", + "repository": { + "type": "git", + "url": "git://github.com/medikoo/es6-symbol.git" + }, + "scripts": { + "lint": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream", + "lint-console": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch", + "test": "node ./node_modules/tad/bin/tad" + }, + "version": "3.1.1" +} diff --git a/node_modules/es6-symbol/polyfill.js b/node_modules/es6-symbol/polyfill.js new file mode 100644 index 000000000..dca879a3e --- /dev/null +++ b/node_modules/es6-symbol/polyfill.js @@ -0,0 +1,118 @@ +// ES2015 Symbol polyfill for environments that do not (or partially) support it + +'use strict'; + +var d = require('d') + , validateSymbol = require('./validate-symbol') + + , create = Object.create, defineProperties = Object.defineProperties + , defineProperty = Object.defineProperty, objPrototype = Object.prototype + , NativeSymbol, SymbolPolyfill, HiddenSymbol, globalSymbols = create(null) + , isNativeSafe; + +if (typeof Symbol === 'function') { + NativeSymbol = Symbol; + try { + String(NativeSymbol()); + isNativeSafe = true; + } catch (ignore) {} +} + +var generateName = (function () { + var created = create(null); + return function (desc) { + var postfix = 0, name, ie11BugWorkaround; + while (created[desc + (postfix || '')]) ++postfix; + desc += (postfix || ''); + created[desc] = true; + name = '@@' + desc; + defineProperty(objPrototype, name, d.gs(null, function (value) { + // For IE11 issue see: + // https://connect.microsoft.com/IE/feedbackdetail/view/1928508/ + // ie11-broken-getters-on-dom-objects + // https://github.com/medikoo/es6-symbol/issues/12 + if (ie11BugWorkaround) return; + ie11BugWorkaround = true; + defineProperty(this, name, d(value)); + ie11BugWorkaround = false; + })); + return name; + }; +}()); + +// Internal constructor (not one exposed) for creating Symbol instances. +// This one is used to ensure that `someSymbol instanceof Symbol` always return false +HiddenSymbol = function Symbol(description) { + if (this instanceof HiddenSymbol) throw new TypeError('Symbol is not a constructor'); + return SymbolPolyfill(description); +}; + +// Exposed `Symbol` constructor +// (returns instances of HiddenSymbol) +module.exports = SymbolPolyfill = function Symbol(description) { + var symbol; + if (this instanceof Symbol) throw new TypeError('Symbol is not a constructor'); + if (isNativeSafe) return NativeSymbol(description); + symbol = create(HiddenSymbol.prototype); + description = (description === undefined ? '' : String(description)); + return defineProperties(symbol, { + __description__: d('', description), + __name__: d('', generateName(description)) + }); +}; +defineProperties(SymbolPolyfill, { + for: d(function (key) { + if (globalSymbols[key]) return globalSymbols[key]; + return (globalSymbols[key] = SymbolPolyfill(String(key))); + }), + keyFor: d(function (s) { + var key; + validateSymbol(s); + for (key in globalSymbols) if (globalSymbols[key] === s) return key; + }), + + // To ensure proper interoperability with other native functions (e.g. Array.from) + // fallback to eventual native implementation of given symbol + hasInstance: d('', (NativeSymbol && NativeSymbol.hasInstance) || SymbolPolyfill('hasInstance')), + isConcatSpreadable: d('', (NativeSymbol && NativeSymbol.isConcatSpreadable) || + SymbolPolyfill('isConcatSpreadable')), + iterator: d('', (NativeSymbol && NativeSymbol.iterator) || SymbolPolyfill('iterator')), + match: d('', (NativeSymbol && NativeSymbol.match) || SymbolPolyfill('match')), + replace: d('', (NativeSymbol && NativeSymbol.replace) || SymbolPolyfill('replace')), + search: d('', (NativeSymbol && NativeSymbol.search) || SymbolPolyfill('search')), + species: d('', (NativeSymbol && NativeSymbol.species) || SymbolPolyfill('species')), + split: d('', (NativeSymbol && NativeSymbol.split) || SymbolPolyfill('split')), + toPrimitive: d('', (NativeSymbol && NativeSymbol.toPrimitive) || SymbolPolyfill('toPrimitive')), + toStringTag: d('', (NativeSymbol && NativeSymbol.toStringTag) || SymbolPolyfill('toStringTag')), + unscopables: d('', (NativeSymbol && NativeSymbol.unscopables) || SymbolPolyfill('unscopables')) +}); + +// Internal tweaks for real symbol producer +defineProperties(HiddenSymbol.prototype, { + constructor: d(SymbolPolyfill), + toString: d('', function () { return this.__name__; }) +}); + +// Proper implementation of methods exposed on Symbol.prototype +// They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype +defineProperties(SymbolPolyfill.prototype, { + toString: d(function () { return 'Symbol (' + validateSymbol(this).__description__ + ')'; }), + valueOf: d(function () { return validateSymbol(this); }) +}); +defineProperty(SymbolPolyfill.prototype, SymbolPolyfill.toPrimitive, d('', function () { + var symbol = validateSymbol(this); + if (typeof symbol === 'symbol') return symbol; + return symbol.toString(); +})); +defineProperty(SymbolPolyfill.prototype, SymbolPolyfill.toStringTag, d('c', 'Symbol')); + +// Proper implementaton of toPrimitive and toStringTag for returned symbol instances +defineProperty(HiddenSymbol.prototype, SymbolPolyfill.toStringTag, + d('c', SymbolPolyfill.prototype[SymbolPolyfill.toStringTag])); + +// Note: It's important to define `toPrimitive` as last one, as some implementations +// implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols) +// And that may invoke error in definition flow: +// See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149 +defineProperty(HiddenSymbol.prototype, SymbolPolyfill.toPrimitive, + d('c', SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive])); diff --git a/node_modules/es6-symbol/test/implement.js b/node_modules/es6-symbol/test/implement.js new file mode 100644 index 000000000..eb35c3018 --- /dev/null +++ b/node_modules/es6-symbol/test/implement.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function (t, a) { a(typeof Symbol, 'function'); }; diff --git a/node_modules/es6-symbol/test/index.js b/node_modules/es6-symbol/test/index.js new file mode 100644 index 000000000..62b3296df --- /dev/null +++ b/node_modules/es6-symbol/test/index.js @@ -0,0 +1,12 @@ +'use strict'; + +var d = require('d') + + , defineProperty = Object.defineProperty; + +module.exports = function (T, a) { + var symbol = T('test'), x = {}; + defineProperty(x, symbol, d('foo')); + a(x.test, undefined, "Name"); + a(x[symbol], 'foo', "Get"); +}; diff --git a/node_modules/es6-symbol/test/is-implemented.js b/node_modules/es6-symbol/test/is-implemented.js new file mode 100644 index 000000000..bb0d64536 --- /dev/null +++ b/node_modules/es6-symbol/test/is-implemented.js @@ -0,0 +1,14 @@ +'use strict'; + +var global = require('es5-ext/global') + , polyfill = require('../polyfill'); + +module.exports = function (t, a) { + var cache; + a(typeof t(), 'boolean'); + cache = global.Symbol; + global.Symbol = polyfill; + a(t(), true); + if (cache === undefined) delete global.Symbol; + else global.Symbol = cache; +}; diff --git a/node_modules/es6-symbol/test/is-native-implemented.js b/node_modules/es6-symbol/test/is-native-implemented.js new file mode 100644 index 000000000..df8ba0323 --- /dev/null +++ b/node_modules/es6-symbol/test/is-native-implemented.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function (t, a) { a(typeof t, 'boolean'); }; diff --git a/node_modules/es6-symbol/test/is-symbol.js b/node_modules/es6-symbol/test/is-symbol.js new file mode 100644 index 000000000..ac24b9abb --- /dev/null +++ b/node_modules/es6-symbol/test/is-symbol.js @@ -0,0 +1,16 @@ +'use strict'; + +var SymbolPoly = require('../polyfill'); + +module.exports = function (t, a) { + a(t(undefined), false, "Undefined"); + a(t(null), false, "Null"); + a(t(true), false, "Primitive"); + a(t('raz'), false, "String"); + a(t({}), false, "Object"); + a(t([]), false, "Array"); + if (typeof Symbol !== 'undefined') { + a(t(Symbol()), true, "Native"); + } + a(t(SymbolPoly()), true, "Polyfill"); +}; diff --git a/node_modules/es6-symbol/test/polyfill.js b/node_modules/es6-symbol/test/polyfill.js new file mode 100644 index 000000000..8b657905d --- /dev/null +++ b/node_modules/es6-symbol/test/polyfill.js @@ -0,0 +1,29 @@ +'use strict'; + +var d = require('d') + , isSymbol = require('../is-symbol') + + , defineProperty = Object.defineProperty; + +module.exports = function (T, a) { + var symbol = T('test'), x = {}; + defineProperty(x, symbol, d('foo')); + a(x.test, undefined, "Name"); + a(x[symbol], 'foo', "Get"); + a(x instanceof T, false); + + a(isSymbol(symbol), true, "Symbol"); + a(isSymbol(T.iterator), true, "iterator"); + a(isSymbol(T.toStringTag), true, "toStringTag"); + + x = {}; + x[symbol] = 'foo'; + if (typeof symbol !== 'symbol') { + a.deep(Object.getOwnPropertyDescriptor(x, symbol), { configurable: true, enumerable: false, + value: 'foo', writable: true }); + } + symbol = T.for('marko'); + a(isSymbol(symbol), true); + a(T.for('marko'), symbol); + a(T.keyFor(symbol), 'marko'); +}; diff --git a/node_modules/es6-symbol/test/validate-symbol.js b/node_modules/es6-symbol/test/validate-symbol.js new file mode 100644 index 000000000..2c8f84c82 --- /dev/null +++ b/node_modules/es6-symbol/test/validate-symbol.js @@ -0,0 +1,19 @@ +'use strict'; + +var SymbolPoly = require('../polyfill'); + +module.exports = function (t, a) { + var symbol; + a.throws(function () { t(undefined); }, TypeError, "Undefined"); + a.throws(function () { t(null); }, TypeError, "Null"); + a.throws(function () { t(true); }, TypeError, "Primitive"); + a.throws(function () { t('raz'); }, TypeError, "String"); + a.throws(function () { t({}); }, TypeError, "Object"); + a.throws(function () { t([]); }, TypeError, "Array"); + if (typeof Symbol !== 'undefined') { + symbol = Symbol(); + a(t(symbol), symbol, "Native"); + } + symbol = SymbolPoly(); + a(t(symbol), symbol, "Polyfill"); +}; diff --git a/node_modules/es6-symbol/validate-symbol.js b/node_modules/es6-symbol/validate-symbol.js new file mode 100644 index 000000000..42750043d --- /dev/null +++ b/node_modules/es6-symbol/validate-symbol.js @@ -0,0 +1,8 @@ +'use strict'; + +var isSymbol = require('./is-symbol'); + +module.exports = function (value) { + if (!isSymbol(value)) throw new TypeError(value + " is not a symbol"); + return value; +}; diff --git a/node_modules/es6-weak-map/.lint b/node_modules/es6-weak-map/.lint new file mode 100644 index 000000000..3c9ef8da0 --- /dev/null +++ b/node_modules/es6-weak-map/.lint @@ -0,0 +1,13 @@ +@root + +module + +tabs +indent 2 +maxlen 100 + +ass +nomen +plusplus + +predef+ WeakMap diff --git a/node_modules/es6-weak-map/.npmignore b/node_modules/es6-weak-map/.npmignore new file mode 100644 index 000000000..155e41f69 --- /dev/null +++ b/node_modules/es6-weak-map/.npmignore @@ -0,0 +1,4 @@ +.DS_Store +/node_modules +/npm-debug.log +/.lintcache diff --git a/node_modules/es6-weak-map/.travis.yml b/node_modules/es6-weak-map/.travis.yml new file mode 100644 index 000000000..d367a799e --- /dev/null +++ b/node_modules/es6-weak-map/.travis.yml @@ -0,0 +1,13 @@ +sudo: false # use faster docker infrastructure +language: node_js +node_js: + - 0.12 + - 4 + - 6 + - 7 + +notifications: + email: + - medikoo+es6-weak-map@medikoo.com + +script: "npm test && npm run lint" diff --git a/node_modules/es6-weak-map/CHANGES b/node_modules/es6-weak-map/CHANGES new file mode 100644 index 000000000..7772891f1 --- /dev/null +++ b/node_modules/es6-weak-map/CHANGES @@ -0,0 +1,45 @@ +v2.0.2 -- 2017.03.15 +* Update dependencies + +v2.0.1 -- 2015.10.02 +* Update to use es6-symbol at v3 + +v2.0.0 -- 2015.09.04 +* Relax native implementation detection, stringification of instance should returm + expected result (not necesarily prototype) + +v1.0.2 -- 2015.05.07 +* Add "ponyfill" keyword to meta description. Fixes #7 + +v1.0.1 -- 2015.04.14 +* Fix isNativeImplemented, so it's not affected by #3619 V8 bug +* Fix internal prototype resolution, in case where isNativeImplemented was true, and + native implementation was shadowed it got into stack overflow + +v1.0.0 -- 2015.04.13 +* It's v0.1.3 republished as v1.0.0 + +v0.1.4 -- 2015.04.13 +* Republish v0.1.2 as v0.1.4 due to breaking changes + (v0.1.3 should have been published as next major) + +v0.1.3 -- 2015.04.12 +* Update up to changes in specification (require new, remove clear method) +* Improve native implementation validation +* Configure lint scripts +* Rename LICENCE to LICENSE + +v0.1.2 -- 2014.09.01 +* Use internal random and unique id generator instead of external (time-uuid based). + Global uniqueness is not needed in scope of this module. Fixes #1 + +v0.1.1 -- 2014.05.15 +* Improve valid WeakMap detection + +v0.1.0 -- 2014.04.29 +* Assure to depend only npm hosted dependencies +* Update to use latest versions of dependencies +* Use ES6 symbols internally + +v0.0.0 -- 2013.10.24 +Initial (dev version) diff --git a/node_modules/es6-weak-map/LICENSE b/node_modules/es6-weak-map/LICENSE new file mode 100644 index 000000000..aaf35282f --- /dev/null +++ b/node_modules/es6-weak-map/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2013 Mariusz Nowak (www.medikoo.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/es6-weak-map/README.md b/node_modules/es6-weak-map/README.md new file mode 100644 index 000000000..ccbade23a --- /dev/null +++ b/node_modules/es6-weak-map/README.md @@ -0,0 +1,63 @@ +# es6-weak-map +## WeakMap collection as specified in ECMAScript6 + +_Roughly inspired by Mark Miller's and Kris Kowal's [WeakMap implementation](https://github.com/drses/weak-map)_. + +Differences are: +- Assumes compliant ES5 environment (no weird ES3 workarounds or hacks) +- Well modularized CJS style +- Based on one solution. + +### Limitations + +- Will fail on non extensible objects provided as keys + +### Installation + + $ npm install es6-weak-map + +To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/) + +### Usage + +If you want to make sure your environment implements `WeakMap`, do: + +```javascript +require('es6-weak-map/implement'); +``` + +If you'd like to use native version when it exists and fallback to polyfill if it doesn't, but without implementing `WeakMap` on global scope, do: + +```javascript +var WeakMap = require('es6-weak-map'); +``` + +If you strictly want to use polyfill even if native `WeakMap` exists, do: + +```javascript +var WeakMap = require('es6-weak-map/polyfill'); +``` + +#### API + +Best is to refer to [specification](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-weakmap-objects). Still if you want quick look, follow example: + +```javascript +var WeakMap = require('es6-weak-map'); + +var map = new WeakMap(); +var obj = {}; + +map.set(obj, 'foo'); // map +map.get(obj); // 'foo' +map.has(obj); // true +map.delete(obj); // true +map.get(obj); // undefined +map.has(obj); // false +map.set(obj, 'bar'); // map +map.has(obj); // false +``` + +## Tests [![Build Status](https://travis-ci.org/medikoo/es6-weak-map.svg)](https://travis-ci.org/medikoo/es6-weak-map) + + $ npm test diff --git a/node_modules/es6-weak-map/implement.js b/node_modules/es6-weak-map/implement.js new file mode 100644 index 000000000..6c3f306b9 --- /dev/null +++ b/node_modules/es6-weak-map/implement.js @@ -0,0 +1,7 @@ +'use strict'; + +if (!require('./is-implemented')()) { + Object.defineProperty(require('es5-ext/global'), 'WeakMap', + { value: require('./polyfill'), configurable: true, enumerable: false, + writable: true }); +} diff --git a/node_modules/es6-weak-map/index.js b/node_modules/es6-weak-map/index.js new file mode 100644 index 000000000..c2ff71b92 --- /dev/null +++ b/node_modules/es6-weak-map/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./is-implemented')() ? WeakMap : require('./polyfill'); diff --git a/node_modules/es6-weak-map/is-implemented.js b/node_modules/es6-weak-map/is-implemented.js new file mode 100644 index 000000000..6ef5082ef --- /dev/null +++ b/node_modules/es6-weak-map/is-implemented.js @@ -0,0 +1,20 @@ +'use strict'; + +module.exports = function () { + var weakMap, x; + if (typeof WeakMap !== 'function') return false; + try { + // WebKit doesn't support arguments and crashes + weakMap = new WeakMap([[x = {}, 'one'], [{}, 'two'], [{}, 'three']]); + } catch (e) { + return false; + } + if (String(weakMap) !== '[object WeakMap]') return false; + if (typeof weakMap.set !== 'function') return false; + if (weakMap.set({}, 1) !== weakMap) return false; + if (typeof weakMap.delete !== 'function') return false; + if (typeof weakMap.has !== 'function') return false; + if (weakMap.get(x) !== 'one') return false; + + return true; +}; diff --git a/node_modules/es6-weak-map/is-native-implemented.js b/node_modules/es6-weak-map/is-native-implemented.js new file mode 100644 index 000000000..ddc4dbd29 --- /dev/null +++ b/node_modules/es6-weak-map/is-native-implemented.js @@ -0,0 +1,8 @@ +// Exports true if environment provides native `WeakMap` implementation, whatever that is. + +'use strict'; + +module.exports = (function () { + if (typeof WeakMap !== 'function') return false; + return (Object.prototype.toString.call(new WeakMap()) === '[object WeakMap]'); +}()); diff --git a/node_modules/es6-weak-map/is-weak-map.js b/node_modules/es6-weak-map/is-weak-map.js new file mode 100644 index 000000000..10bb2a156 --- /dev/null +++ b/node_modules/es6-weak-map/is-weak-map.js @@ -0,0 +1,13 @@ +'use strict'; + +var toStringTagSymbol = require('es6-symbol').toStringTag + + , toString = Object.prototype.toString + , id = '[object WeakMap]' + , Global = (typeof WeakMap === 'undefined') ? null : WeakMap; + +module.exports = function (x) { + return (x && ((Global && (x instanceof Global)) || + (toString.call(x) === id) || (x[toStringTagSymbol] === 'WeakMap'))) || + false; +}; diff --git a/node_modules/es6-weak-map/package.json b/node_modules/es6-weak-map/package.json new file mode 100644 index 000000000..4e2eca7f8 --- /dev/null +++ b/node_modules/es6-weak-map/package.json @@ -0,0 +1,71 @@ +{ + "_from": "es6-weak-map@^2.0.1", + "_id": "es6-weak-map@2.0.2", + "_inBundle": false, + "_integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "_location": "/es6-weak-map", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "es6-weak-map@^2.0.1", + "name": "es6-weak-map", + "escapedName": "es6-weak-map", + "rawSpec": "^2.0.1", + "saveSpec": null, + "fetchSpec": "^2.0.1" + }, + "_requiredBy": [ + "/escope" + ], + "_resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "_shasum": "5e3ab32251ffd1538a1f8e5ffa1357772f92d96f", + "_spec": "es6-weak-map@^2.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/escope", + "author": { + "name": "Mariusz Nowak", + "email": "medyk@medikoo.com", + "url": "http://www.medikoo.com/" + }, + "bugs": { + "url": "https://github.com/medikoo/es6-weak-map/issues" + }, + "bundleDependencies": false, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + }, + "deprecated": false, + "description": "ECMAScript6 WeakMap polyfill", + "devDependencies": { + "tad": "^0.2.7", + "xlint": "^0.2.2", + "xlint-jslint-medikoo": "^0.1.4" + }, + "homepage": "https://github.com/medikoo/es6-weak-map#readme", + "keywords": [ + "map", + "weakmap", + "collection", + "es6", + "harmony", + "list", + "hash", + "gc", + "ponyfill" + ], + "license": "MIT", + "name": "es6-weak-map", + "repository": { + "type": "git", + "url": "git://github.com/medikoo/es6-weak-map.git" + }, + "scripts": { + "lint": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream", + "lint-console": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch", + "test": "node ./node_modules/tad/bin/tad" + }, + "version": "2.0.2" +} diff --git a/node_modules/es6-weak-map/polyfill.js b/node_modules/es6-weak-map/polyfill.js new file mode 100644 index 000000000..6bef09f5b --- /dev/null +++ b/node_modules/es6-weak-map/polyfill.js @@ -0,0 +1,66 @@ +'use strict'; + +var setPrototypeOf = require('es5-ext/object/set-prototype-of') + , object = require('es5-ext/object/valid-object') + , value = require('es5-ext/object/valid-value') + , randomUniq = require('es5-ext/string/random-uniq') + , d = require('d') + , getIterator = require('es6-iterator/get') + , forOf = require('es6-iterator/for-of') + , toStringTagSymbol = require('es6-symbol').toStringTag + , isNative = require('./is-native-implemented') + + , isArray = Array.isArray, defineProperty = Object.defineProperty + , hasOwnProperty = Object.prototype.hasOwnProperty, getPrototypeOf = Object.getPrototypeOf + , WeakMapPoly; + +module.exports = WeakMapPoly = function (/*iterable*/) { + var iterable = arguments[0], self; + if (!(this instanceof WeakMapPoly)) throw new TypeError('Constructor requires \'new\''); + if (isNative && setPrototypeOf && (WeakMap !== WeakMapPoly)) { + self = setPrototypeOf(new WeakMap(), getPrototypeOf(this)); + } else { + self = this; + } + if (iterable != null) { + if (!isArray(iterable)) iterable = getIterator(iterable); + } + defineProperty(self, '__weakMapData__', d('c', '$weakMap$' + randomUniq())); + if (!iterable) return self; + forOf(iterable, function (val) { + value(val); + self.set(val[0], val[1]); + }); + return self; +}; + +if (isNative) { + if (setPrototypeOf) setPrototypeOf(WeakMapPoly, WeakMap); + WeakMapPoly.prototype = Object.create(WeakMap.prototype, { + constructor: d(WeakMapPoly) + }); +} + +Object.defineProperties(WeakMapPoly.prototype, { + delete: d(function (key) { + if (hasOwnProperty.call(object(key), this.__weakMapData__)) { + delete key[this.__weakMapData__]; + return true; + } + return false; + }), + get: d(function (key) { + if (hasOwnProperty.call(object(key), this.__weakMapData__)) { + return key[this.__weakMapData__]; + } + }), + has: d(function (key) { + return hasOwnProperty.call(object(key), this.__weakMapData__); + }), + set: d(function (key, value) { + defineProperty(object(key), this.__weakMapData__, d('c', value)); + return this; + }), + toString: d(function () { return '[object WeakMap]'; }) +}); +defineProperty(WeakMapPoly.prototype, toStringTagSymbol, d('c', 'WeakMap')); diff --git a/node_modules/es6-weak-map/test/implement.js b/node_modules/es6-weak-map/test/implement.js new file mode 100644 index 000000000..860027ed2 --- /dev/null +++ b/node_modules/es6-weak-map/test/implement.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function (t, a) { a(typeof WeakMap, 'function'); }; diff --git a/node_modules/es6-weak-map/test/index.js b/node_modules/es6-weak-map/test/index.js new file mode 100644 index 000000000..9b26e4fa7 --- /dev/null +++ b/node_modules/es6-weak-map/test/index.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = function (T, a) { + var x = {}; + a((new T([[x, 'foo']])).get(x), 'foo'); +}; diff --git a/node_modules/es6-weak-map/test/is-implemented.js b/node_modules/es6-weak-map/test/is-implemented.js new file mode 100644 index 000000000..0186871e2 --- /dev/null +++ b/node_modules/es6-weak-map/test/is-implemented.js @@ -0,0 +1,14 @@ +'use strict'; + +var global = require('es5-ext/global') + , polyfill = require('../polyfill'); + +module.exports = function (t, a) { + var cache; + a(typeof t(), 'boolean'); + cache = global.WeakMap; + global.WeakMap = polyfill; + a(t(), true); + if (cache === undefined) delete global.WeakMap; + else global.WeakMap = cache; +}; diff --git a/node_modules/es6-weak-map/test/is-native-implemented.js b/node_modules/es6-weak-map/test/is-native-implemented.js new file mode 100644 index 000000000..df8ba0323 --- /dev/null +++ b/node_modules/es6-weak-map/test/is-native-implemented.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function (t, a) { a(typeof t, 'boolean'); }; diff --git a/node_modules/es6-weak-map/test/is-weak-map.js b/node_modules/es6-weak-map/test/is-weak-map.js new file mode 100644 index 000000000..ba8c04519 --- /dev/null +++ b/node_modules/es6-weak-map/test/is-weak-map.js @@ -0,0 +1,16 @@ +'use strict'; + +var WeakMapPoly = require('../polyfill'); + +module.exports = function (t, a) { + a(t(undefined), false, "Undefined"); + a(t(null), false, "Null"); + a(t(true), false, "Primitive"); + a(t('raz'), false, "String"); + a(t({}), false, "Object"); + a(t([]), false, "Array"); + if (typeof WeakMap !== 'undefined') { + a(t(new WeakMap()), true, "Native"); + } + a(t(new WeakMapPoly()), true, "Polyfill"); +}; diff --git a/node_modules/es6-weak-map/test/polyfill.js b/node_modules/es6-weak-map/test/polyfill.js new file mode 100644 index 000000000..aaffe4a1c --- /dev/null +++ b/node_modules/es6-weak-map/test/polyfill.js @@ -0,0 +1,23 @@ +'use strict'; + +module.exports = function (T, a) { + var x = {}, y = {}, z = {}, arr = [[x, 'raz'], [y, 'dwa']], map = new T(arr); + + a(map instanceof T, true, "WeakMap"); + a(map.has(x), true, "Has: true"); + a(map.get(x), 'raz', "Get: contains"); + a(map.has(z), false, "Has: false"); + a(map.get(z), undefined, "Get: doesn't contain"); + a(map.set(z, 'trzy'), map, "Set: return"); + a(map.has(z), true, "Add"); + a(map.delete({}), false, "Delete: false"); + + a(map.delete(x), true, "Delete: true"); + a(map.get(x), undefined, "Get: after delete"); + a(map.has(x), false, "Has: after delete"); + + a.h1("Empty initialization"); + map = new T(); + map.set(x, 'bar'); + a(map.get(x), 'bar'); +}; diff --git a/node_modules/es6-weak-map/test/valid-weak-map.js b/node_modules/es6-weak-map/test/valid-weak-map.js new file mode 100644 index 000000000..a7823421a --- /dev/null +++ b/node_modules/es6-weak-map/test/valid-weak-map.js @@ -0,0 +1,19 @@ +'use strict'; + +var WeakMapPoly = require('../polyfill'); + +module.exports = function (t, a) { + var map; + a.throws(function () { t(undefined); }, TypeError, "Undefined"); + a.throws(function () { t(null); }, TypeError, "Null"); + a.throws(function () { t(true); }, TypeError, "Primitive"); + a.throws(function () { t('raz'); }, TypeError, "String"); + a.throws(function () { t({}); }, TypeError, "Object"); + a.throws(function () { t([]); }, TypeError, "Array"); + if (typeof WeakMap !== 'undefined') { + map = new WeakMap(); + a(t(map), map, "Native"); + } + map = new WeakMapPoly(); + a(t(map), map, "Polyfill"); +}; diff --git a/node_modules/es6-weak-map/valid-weak-map.js b/node_modules/es6-weak-map/valid-weak-map.js new file mode 100644 index 000000000..bfb579fec --- /dev/null +++ b/node_modules/es6-weak-map/valid-weak-map.js @@ -0,0 +1,8 @@ +'use strict'; + +var isWeakMap = require('./is-weak-map'); + +module.exports = function (x) { + if (!isWeakMap(x)) throw new TypeError(x + " is not a WeakMap"); + return x; +}; diff --git a/node_modules/escape-string-regexp/index.js b/node_modules/escape-string-regexp/index.js new file mode 100644 index 000000000..7834bf9b2 --- /dev/null +++ b/node_modules/escape-string-regexp/index.js @@ -0,0 +1,11 @@ +'use strict'; + +var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; + +module.exports = function (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } + + return str.replace(matchOperatorsRe, '\\$&'); +}; diff --git a/node_modules/escape-string-regexp/license b/node_modules/escape-string-regexp/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/escape-string-regexp/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/escape-string-regexp/package.json b/node_modules/escape-string-regexp/package.json new file mode 100644 index 000000000..6da1a935c --- /dev/null +++ b/node_modules/escape-string-regexp/package.json @@ -0,0 +1,81 @@ +{ + "_from": "escape-string-regexp@^1.0.2", + "_id": "escape-string-regexp@1.0.5", + "_inBundle": false, + "_integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "_location": "/escape-string-regexp", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "escape-string-regexp@^1.0.2", + "name": "escape-string-regexp", + "escapedName": "escape-string-regexp", + "rawSpec": "^1.0.2", + "saveSpec": null, + "fetchSpec": "^1.0.2" + }, + "_requiredBy": [ + "/chalk" + ], + "_resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "_shasum": "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4", + "_spec": "escape-string-regexp@^1.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/chalk", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/escape-string-regexp/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Escape RegExp special characters", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=0.8.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/escape-string-regexp#readme", + "keywords": [ + "escape", + "regex", + "regexp", + "re", + "regular", + "expression", + "string", + "str", + "special", + "characters" + ], + "license": "MIT", + "maintainers": [ + { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + { + "name": "Joshua Boy Nicolai Appelman", + "email": "joshua@jbna.nl", + "url": "jbna.nl" + } + ], + "name": "escape-string-regexp", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/escape-string-regexp.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.5" +} diff --git a/node_modules/escape-string-regexp/readme.md b/node_modules/escape-string-regexp/readme.md new file mode 100644 index 000000000..87ac82d5e --- /dev/null +++ b/node_modules/escape-string-regexp/readme.md @@ -0,0 +1,27 @@ +# escape-string-regexp [![Build Status](https://travis-ci.org/sindresorhus/escape-string-regexp.svg?branch=master)](https://travis-ci.org/sindresorhus/escape-string-regexp) + +> Escape RegExp special characters + + +## Install + +``` +$ npm install --save escape-string-regexp +``` + + +## Usage + +```js +const escapeStringRegexp = require('escape-string-regexp'); + +const escapedString = escapeStringRegexp('how much $ for a unicorn?'); +//=> 'how much \$ for a unicorn\?' + +new RegExp(escapedString); +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/escope/.babelrc b/node_modules/escope/.babelrc new file mode 100644 index 000000000..c13c5f627 --- /dev/null +++ b/node_modules/escope/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} diff --git a/node_modules/escope/.jshintrc b/node_modules/escope/.jshintrc new file mode 100644 index 000000000..defbf0263 --- /dev/null +++ b/node_modules/escope/.jshintrc @@ -0,0 +1,20 @@ +{ + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 4, + "eqnull": true, + "latedef": true, + "noarg": true, + "noempty": true, + "quotmark": "single", + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "validthis": true, + + "onevar": true, + + "node": true +} diff --git a/node_modules/escope/CONTRIBUTING.md b/node_modules/escope/CONTRIBUTING.md new file mode 100644 index 000000000..f1ddca9cb --- /dev/null +++ b/node_modules/escope/CONTRIBUTING.md @@ -0,0 +1,5 @@ +## Project license: \ + +- You will only Submit Contributions where You have authored 100% of the content. +- You will only Submit Contributions to which You have the necessary rights. This means that if You are employed You have received the necessary permissions from Your employer to make the Contributions. +- Whatever content You Contribute will be provided under the Project License. diff --git a/node_modules/escope/LICENSE.BSD b/node_modules/escope/LICENSE.BSD new file mode 100644 index 000000000..3e580c355 --- /dev/null +++ b/node_modules/escope/LICENSE.BSD @@ -0,0 +1,19 @@ +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/node_modules/escope/README.md b/node_modules/escope/README.md new file mode 100644 index 000000000..02b3a3e7d --- /dev/null +++ b/node_modules/escope/README.md @@ -0,0 +1,79 @@ +Escope ([escope](http://github.com/estools/escope)) is +[ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm) +scope analyzer extracted from [esmangle project](http://github.com/estools/esmangle). + +[![Build Status](https://travis-ci.org/estools/escope.png?branch=master)](https://travis-ci.org/estools/escope) + +### Example + +```js +var escope = require('escope'); +var esprima = require('esprima'); +var estraverse = require('estraverse'); + +var ast = esprima.parse(code); +var scopeManager = escope.analyze(ast); + +var currentScope = scopeManager.acquire(ast); // global scope + +estraverse.traverse(ast, { + enter: function(node, parent) { + // do stuff + + if (/Function/.test(node.type)) { + currentScope = scopeManager.acquire(node); // get current function scope + } + }, + leave: function(node, parent) { + if (/Function/.test(node.type)) { + currentScope = currentScope.upper; // set to parent scope + } + + // do stuff + } +}); +``` + +### Document + +Generated JSDoc is [here](http://estools.github.io/escope/). + +### Demos and Tools + +Demonstration is [here](http://mazurov.github.io/escope-demo/) by [Sasha Mazurov](https://github.com/mazurov) (twitter: [@mazurov](http://twitter.com/mazurov)). [issue](https://github.com/estools/escope/issues/14) + +![Demo](https://f.cloud.github.com/assets/75759/462920/7aa6dd40-b4f5-11e2-9f07-9f4e8d0415f9.gif) + + +And there are tools constructed on Escope. + +- [Esmangle](https://github.com/estools/esmangle) is a minifier / mangler / optimizer. +- [Eslevels](https://github.com/mazurov/eslevels) is a scope levels analyzer and [SublimeText plugin for scope context coloring](https://github.com/mazurov/sublime-levels) is constructed on it. +- [Esgoggles](https://github.com/keeyipchan/esgoggles) is JavaScript code browser. + + +### 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/node_modules/escope/bower.json b/node_modules/escope/bower.json new file mode 100644 index 000000000..70ad5e5ff --- /dev/null +++ b/node_modules/escope/bower.json @@ -0,0 +1,13 @@ +{ + "name": "escope", + "version": "2.0.2-dev", + "main": "escope.js", + "dependencies": { + "estraverse": ">= 0.0.2" + }, + "ignore": [ + "**/.*", + "node_modules", + "components" + ] +} diff --git a/node_modules/escope/gulpfile.js b/node_modules/escope/gulpfile.js new file mode 100644 index 000000000..64cc31d45 --- /dev/null +++ b/node_modules/escope/gulpfile.js @@ -0,0 +1,153 @@ +/* + 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'), + mocha = require('gulp-mocha'), + babel = require('gulp-babel'), + git = require('gulp-git'), + bump = require('gulp-bump'), + filter = require('gulp-filter'), + tagVersion = require('gulp-tag-version'), + sourcemaps = require('gulp-sourcemaps'), + plumber = require('gulp-plumber'), + source = require('vinyl-source-stream'), + browserify = require('browserify'), + lazypipe = require('lazypipe'), + eslint = require('gulp-eslint'), + fs = require('fs'); + +require('babel-register')({ + only: /escope\/(src|test)\// +}); + +var TEST = [ 'test/*.js' ]; +var SOURCE = [ 'src/**/*.js' ]; + +var ESLINT_OPTION = { + rules: { + 'quotes': 0, + 'eqeqeq': 0, + 'no-use-before-define': 0, + 'no-shadow': 0, + 'no-new': 0, + 'no-underscore-dangle': 0, + 'no-multi-spaces': 0, + 'no-native-reassign': 0, + 'no-loop-func': 0, + 'no-lone-blocks': 0 + }, + ecmaFeatures: { + jsx: false, + modules: true + }, + env: { + node: true, + es6: true + } +}; + +var BABEL_OPTIONS = JSON.parse(fs.readFileSync('.babelrc', { encoding: 'utf8' })); + +var build = lazypipe() + .pipe(sourcemaps.init) + .pipe(babel, BABEL_OPTIONS) + .pipe(sourcemaps.write) + .pipe(gulp.dest, 'lib'); + +gulp.task('build-for-watch', function () { + return gulp.src(SOURCE).pipe(plumber()).pipe(build()); +}); + +gulp.task('build', function () { + return gulp.src(SOURCE).pipe(build()); +}); + +gulp.task('browserify', [ 'build' ], function () { + return browserify({ + entries: [ './lib/index.js' ] + }) + .bundle() + .pipe(source('bundle.js')) + .pipe(gulp.dest('build')) +}); + +gulp.task('test', [ 'build' ], function () { + return gulp.src(TEST) + .pipe(mocha({ + reporter: 'spec', + timeout: 100000 // 100s + })); +}); + +gulp.task('watch', [ 'build-for-watch' ], function () { + gulp.watch(SOURCE, [ 'build-for-watch' ]); +}); + +// Currently, not works for ES6. +gulp.task('lint', function () { + return gulp.src(SOURCE) + .pipe(eslint(ESLINT_OPTION)) + .pipe(eslint.formatEach('stylish', process.stderr)) + .pipe(eslint.failOnError()); +}); + +/** + * 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', [ 'build' ], function () { return inc('patch'); }) +gulp.task('minor', [ 'build' ], function () { return inc('minor'); }) +gulp.task('major', [ 'build' ], function () { return inc('major'); }) + +gulp.task('travis', [ 'test' ]); +gulp.task('default', [ 'travis' ]); diff --git a/node_modules/escope/lib/definition.js b/node_modules/escope/lib/definition.js new file mode 100644 index 000000000..d6fa778ce --- /dev/null +++ b/node_modules/escope/lib/definition.js @@ -0,0 +1,106 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Definition = exports.ParameterDefinition = undefined; + +var _variable = require('./variable'); + +var _variable2 = _interopRequireDefault(_variable); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /* + Copyright (C) 2015 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. + */ + +/** + * @class Definition + */ + +var Definition = function Definition(type, name, node, parent, index, kind) { + _classCallCheck(this, Definition); + + /** + * @member {String} Definition#type - type of the occurrence (e.g. "Parameter", "Variable", ...). + */ + this.type = type; + /** + * @member {esprima.Identifier} Definition#name - the identifier AST node of the occurrence. + */ + this.name = name; + /** + * @member {esprima.Node} Definition#node - the enclosing node of the identifier. + */ + this.node = node; + /** + * @member {esprima.Node?} Definition#parent - the enclosing statement node of the identifier. + */ + this.parent = parent; + /** + * @member {Number?} Definition#index - the index in the declaration statement. + */ + this.index = index; + /** + * @member {String?} Definition#kind - the kind of the declaration statement. + */ + this.kind = kind; +}; + +/** + * @class ParameterDefinition + */ + + +exports.default = Definition; + +var ParameterDefinition = function (_Definition) { + _inherits(ParameterDefinition, _Definition); + + function ParameterDefinition(name, node, index, rest) { + _classCallCheck(this, ParameterDefinition); + + /** + * Whether the parameter definition is a part of a rest parameter. + * @member {boolean} ParameterDefinition#rest + */ + + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ParameterDefinition).call(this, _variable2.default.Parameter, name, node, null, index, null)); + + _this.rest = rest; + return _this; + } + + return ParameterDefinition; +}(Definition); + +exports.ParameterDefinition = ParameterDefinition; +exports.Definition = Definition; + +/* vim: set sw=4 ts=4 et tw=80 : */ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRlZmluaXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQXdCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFLcUIsYUFDakIsU0FEaUIsVUFDakIsQ0FBWSxJQUFaLEVBQWtCLElBQWxCLEVBQXdCLElBQXhCLEVBQThCLE1BQTlCLEVBQXNDLEtBQXRDLEVBQTZDLElBQTdDLEVBQW1EO3dCQURsQyxZQUNrQzs7Ozs7QUFJL0MsT0FBSyxJQUFMLEdBQVksSUFBWjs7OztBQUorQyxNQVEvQyxDQUFLLElBQUwsR0FBWSxJQUFaOzs7O0FBUitDLE1BWS9DLENBQUssSUFBTCxHQUFZLElBQVo7Ozs7QUFaK0MsTUFnQi9DLENBQUssTUFBTCxHQUFjLE1BQWQ7Ozs7QUFoQitDLE1Bb0IvQyxDQUFLLEtBQUwsR0FBYSxLQUFiOzs7O0FBcEIrQyxNQXdCL0MsQ0FBSyxJQUFMLEdBQVksSUFBWixDQXhCK0M7Q0FBbkQ7Ozs7Ozs7a0JBRGlCOztJQWdDZjs7O0FBQ0YsV0FERSxtQkFDRixDQUFZLElBQVosRUFBa0IsSUFBbEIsRUFBd0IsS0FBeEIsRUFBK0IsSUFBL0IsRUFBcUM7MEJBRG5DLHFCQUNtQzs7Ozs7Ozt1RUFEbkMsZ0NBRVEsbUJBQVMsU0FBVCxFQUFvQixNQUFNLE1BQU0sTUFBTSxPQUFPLE9BRGxCOztBQU1qQyxVQUFLLElBQUwsR0FBWSxJQUFaLENBTmlDOztHQUFyQzs7U0FERTtFQUE0Qjs7UUFZOUI7UUFDQSIsImZpbGUiOiJkZWZpbml0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5pbXBvcnQgVmFyaWFibGUgZnJvbSAnLi92YXJpYWJsZSc7XG5cbi8qKlxuICogQGNsYXNzIERlZmluaXRpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbiB7XG4gICAgY29uc3RydWN0b3IodHlwZSwgbmFtZSwgbm9kZSwgcGFyZW50LCBpbmRleCwga2luZCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1lbWJlciB7U3RyaW5nfSBEZWZpbml0aW9uI3R5cGUgLSB0eXBlIG9mIHRoZSBvY2N1cnJlbmNlIChlLmcuIFwiUGFyYW1ldGVyXCIsIFwiVmFyaWFibGVcIiwgLi4uKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtlc3ByaW1hLklkZW50aWZpZXJ9IERlZmluaXRpb24jbmFtZSAtIHRoZSBpZGVudGlmaWVyIEFTVCBub2RlIG9mIHRoZSBvY2N1cnJlbmNlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEuTm9kZX0gRGVmaW5pdGlvbiNub2RlIC0gdGhlIGVuY2xvc2luZyBub2RlIG9mIHRoZSBpZGVudGlmaWVyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEuTm9kZT99IERlZmluaXRpb24jcGFyZW50IC0gdGhlIGVuY2xvc2luZyBzdGF0ZW1lbnQgbm9kZSBvZiB0aGUgaWRlbnRpZmllci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1lbWJlciB7TnVtYmVyP30gRGVmaW5pdGlvbiNpbmRleCAtIHRoZSBpbmRleCBpbiB0aGUgZGVjbGFyYXRpb24gc3RhdGVtZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1lbWJlciB7U3RyaW5nP30gRGVmaW5pdGlvbiNraW5kIC0gdGhlIGtpbmQgb2YgdGhlIGRlY2xhcmF0aW9uIHN0YXRlbWVudC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEBjbGFzcyBQYXJhbWV0ZXJEZWZpbml0aW9uXG4gKi9cbmNsYXNzIFBhcmFtZXRlckRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBub2RlLCBpbmRleCwgcmVzdCkge1xuICAgICAgICBzdXBlcihWYXJpYWJsZS5QYXJhbWV0ZXIsIG5hbWUsIG5vZGUsIG51bGwsIGluZGV4LCBudWxsKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHBhcmFtZXRlciBkZWZpbml0aW9uIGlzIGEgcGFydCBvZiBhIHJlc3QgcGFyYW1ldGVyLlxuICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBQYXJhbWV0ZXJEZWZpbml0aW9uI3Jlc3RcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVzdCA9IHJlc3Q7XG4gICAgfVxufVxuXG5leHBvcnQge1xuICAgIFBhcmFtZXRlckRlZmluaXRpb24sXG4gICAgRGVmaW5pdGlvblxufVxuXG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/node_modules/escope/lib/index.js b/node_modules/escope/lib/index.js new file mode 100644 index 000000000..16e6478b4 --- /dev/null +++ b/node_modules/escope/lib/index.js @@ -0,0 +1,177 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ScopeManager = exports.Scope = exports.Variable = exports.Reference = exports.version = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /* + Copyright (C) 2012-2014 Yusuke Suzuki + Copyright (C) 2013 Alex Seville + Copyright (C) 2014 Thiago de Arruda + + 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. + */ + +/** + * Escope (escope) is an ECMAScript + * scope analyzer extracted from the esmangle project. + *

+ * escope finds lexical scopes in a source program, i.e. areas of that + * program where different occurrences of the same identifier refer to the same + * variable. With each scope the contained variables are collected, and each + * identifier reference in code is linked to its corresponding variable (if + * possible). + *

+ * escope works on a syntax tree of the parsed source code which has + * to adhere to the + * Mozilla Parser API. E.g. esprima is a parser + * that produces such syntax trees. + *

+ * The main interface is the {@link analyze} function. + * @module escope + */ + +/*jslint bitwise:true */ + +exports.analyze = analyze; + +var _assert = require('assert'); + +var _assert2 = _interopRequireDefault(_assert); + +var _scopeManager = require('./scope-manager'); + +var _scopeManager2 = _interopRequireDefault(_scopeManager); + +var _referencer = require('./referencer'); + +var _referencer2 = _interopRequireDefault(_referencer); + +var _reference = require('./reference'); + +var _reference2 = _interopRequireDefault(_reference); + +var _variable = require('./variable'); + +var _variable2 = _interopRequireDefault(_variable); + +var _scope = require('./scope'); + +var _scope2 = _interopRequireDefault(_scope); + +var _package = require('../package.json'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function defaultOptions() { + return { + optimistic: false, + directive: false, + nodejsScope: false, + impliedStrict: false, + sourceType: 'script', // one of ['script', 'module'] + ecmaVersion: 5, + childVisitorKeys: null, + fallback: 'iteration' + }; +} + +function updateDeeply(target, override) { + var key, val; + + function isHashObject(target) { + return (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target instanceof Object && !(target instanceof Array) && !(target instanceof RegExp); + } + + for (key in override) { + if (override.hasOwnProperty(key)) { + val = override[key]; + if (isHashObject(val)) { + if (isHashObject(target[key])) { + updateDeeply(target[key], val); + } else { + target[key] = updateDeeply({}, val); + } + } else { + target[key] = val; + } + } + } + return target; +} + +/** + * Main interface function. Takes an Esprima syntax tree and returns the + * analyzed scopes. + * @function analyze + * @param {esprima.Tree} tree + * @param {Object} providedOptions - Options that tailor the scope analysis + * @param {boolean} [providedOptions.optimistic=false] - the optimistic flag + * @param {boolean} [providedOptions.directive=false]- the directive flag + * @param {boolean} [providedOptions.ignoreEval=false]- whether to check 'eval()' calls + * @param {boolean} [providedOptions.nodejsScope=false]- whether the whole + * script is executed under node.js environment. When enabled, escope adds + * a function scope immediately following the global scope. + * @param {boolean} [providedOptions.impliedStrict=false]- implied strict mode + * (if ecmaVersion >= 5). + * @param {string} [providedOptions.sourceType='script']- the source type of the script. one of 'script' and 'module' + * @param {number} [providedOptions.ecmaVersion=5]- which ECMAScript version is considered + * @param {Object} [providedOptions.childVisitorKeys=null] - Additional known visitor keys. See [esrecurse](https://github.com/estools/esrecurse)'s the `childVisitorKeys` option. + * @param {string} [providedOptions.fallback='iteration'] - A kind of the fallback in order to encounter with unknown node. See [esrecurse](https://github.com/estools/esrecurse)'s the `fallback` option. + * @return {ScopeManager} + */ +function analyze(tree, providedOptions) { + var scopeManager, referencer, options; + + options = updateDeeply(defaultOptions(), providedOptions); + + scopeManager = new _scopeManager2.default(options); + + referencer = new _referencer2.default(options, scopeManager); + referencer.visit(tree); + + (0, _assert2.default)(scopeManager.__currentScope === null, 'currentScope should be null.'); + + return scopeManager; +} + +exports. +/** @name module:escope.version */ +version = _package.version; +exports. +/** @name module:escope.Reference */ +Reference = _reference2.default; +exports. +/** @name module:escope.Variable */ +Variable = _variable2.default; +exports. +/** @name module:escope.Scope */ +Scope = _scope2.default; +exports. +/** @name module:escope.ScopeManager */ +ScopeManager = _scopeManager2.default; + +/* vim: set sw=4 ts=4 et tw=80 : */ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQW9IZ0I7O0FBbEVoQjs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBLFNBQVMsY0FBVCxHQUEwQjtBQUN0QixXQUFPO0FBQ0gsb0JBQVksS0FBWjtBQUNBLG1CQUFXLEtBQVg7QUFDQSxxQkFBYSxLQUFiO0FBQ0EsdUJBQWUsS0FBZjtBQUNBLG9CQUFZLFFBQVo7QUFDQSxxQkFBYSxDQUFiO0FBQ0EsMEJBQWtCLElBQWxCO0FBQ0Esa0JBQVUsV0FBVjtLQVJKLENBRHNCO0NBQTFCOztBQWFBLFNBQVMsWUFBVCxDQUFzQixNQUF0QixFQUE4QixRQUE5QixFQUF3QztBQUNwQyxRQUFJLEdBQUosRUFBUyxHQUFULENBRG9DOztBQUdwQyxhQUFTLFlBQVQsQ0FBc0IsTUFBdEIsRUFBOEI7QUFDMUIsZUFBTyxRQUFPLHVEQUFQLEtBQWtCLFFBQWxCLElBQThCLGtCQUFrQixNQUFsQixJQUE0QixFQUFFLGtCQUFrQixLQUFsQixDQUFGLElBQThCLEVBQUUsa0JBQWtCLE1BQWxCLENBQUYsQ0FEckU7S0FBOUI7O0FBSUEsU0FBSyxHQUFMLElBQVksUUFBWixFQUFzQjtBQUNsQixZQUFJLFNBQVMsY0FBVCxDQUF3QixHQUF4QixDQUFKLEVBQWtDO0FBQzlCLGtCQUFNLFNBQVMsR0FBVCxDQUFOLENBRDhCO0FBRTlCLGdCQUFJLGFBQWEsR0FBYixDQUFKLEVBQXVCO0FBQ25CLG9CQUFJLGFBQWEsT0FBTyxHQUFQLENBQWIsQ0FBSixFQUErQjtBQUMzQixpQ0FBYSxPQUFPLEdBQVAsQ0FBYixFQUEwQixHQUExQixFQUQyQjtpQkFBL0IsTUFFTztBQUNILDJCQUFPLEdBQVAsSUFBYyxhQUFhLEVBQWIsRUFBaUIsR0FBakIsQ0FBZCxDQURHO2lCQUZQO2FBREosTUFNTztBQUNILHVCQUFPLEdBQVAsSUFBYyxHQUFkLENBREc7YUFOUDtTQUZKO0tBREo7QUFjQSxXQUFPLE1BQVAsQ0FyQm9DO0NBQXhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNENPLFNBQVMsT0FBVCxDQUFpQixJQUFqQixFQUF1QixlQUF2QixFQUF3QztBQUMzQyxRQUFJLFlBQUosRUFBa0IsVUFBbEIsRUFBOEIsT0FBOUIsQ0FEMkM7O0FBRzNDLGNBQVUsYUFBYSxnQkFBYixFQUErQixlQUEvQixDQUFWLENBSDJDOztBQUszQyxtQkFBZSwyQkFBaUIsT0FBakIsQ0FBZixDQUwyQzs7QUFPM0MsaUJBQWEseUJBQWUsT0FBZixFQUF3QixZQUF4QixDQUFiLENBUDJDO0FBUTNDLGVBQVcsS0FBWCxDQUFpQixJQUFqQixFQVIyQzs7QUFVM0MsMEJBQU8sYUFBYSxjQUFiLEtBQWdDLElBQWhDLEVBQXNDLDhCQUE3QyxFQVYyQzs7QUFZM0MsV0FBTyxZQUFQLENBWjJDO0NBQXhDOzs7O0FBaUJIOzs7QUFFQTs7O0FBRUE7OztBQUVBOzs7QUFFQSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEzIEFsZXggU2V2aWxsZSA8aGlAYWxleGFuZGVyc2V2aWxsZS5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxNCBUaGlhZ28gZGUgQXJydWRhIDx0cGFkaWxoYTg0QGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4vKipcbiAqIEVzY29wZSAoPGEgaHJlZj1cImh0dHA6Ly9naXRodWIuY29tL2VzdG9vbHMvZXNjb3BlXCI+ZXNjb3BlPC9hPikgaXMgYW4gPGFcbiAqIGhyZWY9XCJodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL3N0YW5kYXJkcy9FY21hLTI2Mi5odG1cIj5FQ01BU2NyaXB0PC9hPlxuICogc2NvcGUgYW5hbHl6ZXIgZXh0cmFjdGVkIGZyb20gdGhlIDxhXG4gKiBocmVmPVwiaHR0cDovL2dpdGh1Yi5jb20vZXN0b29scy9lc21hbmdsZVwiPmVzbWFuZ2xlIHByb2plY3Q8L2EvPi5cbiAqIDxwPlxuICogPGVtPmVzY29wZTwvZW0+IGZpbmRzIGxleGljYWwgc2NvcGVzIGluIGEgc291cmNlIHByb2dyYW0sIGkuZS4gYXJlYXMgb2YgdGhhdFxuICogcHJvZ3JhbSB3aGVyZSBkaWZmZXJlbnQgb2NjdXJyZW5jZXMgb2YgdGhlIHNhbWUgaWRlbnRpZmllciByZWZlciB0byB0aGUgc2FtZVxuICogdmFyaWFibGUuIFdpdGggZWFjaCBzY29wZSB0aGUgY29udGFpbmVkIHZhcmlhYmxlcyBhcmUgY29sbGVjdGVkLCBhbmQgZWFjaFxuICogaWRlbnRpZmllciByZWZlcmVuY2UgaW4gY29kZSBpcyBsaW5rZWQgdG8gaXRzIGNvcnJlc3BvbmRpbmcgdmFyaWFibGUgKGlmXG4gKiBwb3NzaWJsZSkuXG4gKiA8cD5cbiAqIDxlbT5lc2NvcGU8L2VtPiB3b3JrcyBvbiBhIHN5bnRheCB0cmVlIG9mIHRoZSBwYXJzZWQgc291cmNlIGNvZGUgd2hpY2ggaGFzXG4gKiB0byBhZGhlcmUgdG8gdGhlIDxhXG4gKiBocmVmPVwiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9TcGlkZXJNb25rZXkvUGFyc2VyX0FQSVwiPlxuICogTW96aWxsYSBQYXJzZXIgQVBJPC9hPi4gRS5nLiA8YSBocmVmPVwiaHR0cDovL2VzcHJpbWEub3JnXCI+ZXNwcmltYTwvYT4gaXMgYSBwYXJzZXJcbiAqIHRoYXQgcHJvZHVjZXMgc3VjaCBzeW50YXggdHJlZXMuXG4gKiA8cD5cbiAqIFRoZSBtYWluIGludGVyZmFjZSBpcyB0aGUge0BsaW5rIGFuYWx5emV9IGZ1bmN0aW9uLlxuICogQG1vZHVsZSBlc2NvcGVcbiAqL1xuXG4vKmpzbGludCBiaXR3aXNlOnRydWUgKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgU2NvcGVNYW5hZ2VyIGZyb20gJy4vc2NvcGUtbWFuYWdlcic7XG5pbXBvcnQgUmVmZXJlbmNlciBmcm9tICcuL3JlZmVyZW5jZXInO1xuaW1wb3J0IFJlZmVyZW5jZSBmcm9tICcuL3JlZmVyZW5jZSc7XG5pbXBvcnQgVmFyaWFibGUgZnJvbSAnLi92YXJpYWJsZSc7XG5pbXBvcnQgU2NvcGUgZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcblxuZnVuY3Rpb24gZGVmYXVsdE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pc3RpYzogZmFsc2UsXG4gICAgICAgIGRpcmVjdGl2ZTogZmFsc2UsXG4gICAgICAgIG5vZGVqc1Njb3BlOiBmYWxzZSxcbiAgICAgICAgaW1wbGllZFN0cmljdDogZmFsc2UsXG4gICAgICAgIHNvdXJjZVR5cGU6ICdzY3JpcHQnLCAgLy8gb25lIG9mIFsnc2NyaXB0JywgJ21vZHVsZSddXG4gICAgICAgIGVjbWFWZXJzaW9uOiA1LFxuICAgICAgICBjaGlsZFZpc2l0b3JLZXlzOiBudWxsLFxuICAgICAgICBmYWxsYmFjazogJ2l0ZXJhdGlvbidcbiAgICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEZWVwbHkodGFyZ2V0LCBvdmVycmlkZSkge1xuICAgIHZhciBrZXksIHZhbDtcblxuICAgIGZ1bmN0aW9uIGlzSGFzaE9iamVjdCh0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnICYmIHRhcmdldCBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHRhcmdldCBpbnN0YW5jZW9mIEFycmF5KSAmJiAhKHRhcmdldCBpbnN0YW5jZW9mIFJlZ0V4cCk7XG4gICAgfVxuXG4gICAgZm9yIChrZXkgaW4gb3ZlcnJpZGUpIHtcbiAgICAgICAgaWYgKG92ZXJyaWRlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHZhbCA9IG92ZXJyaWRlW2tleV07XG4gICAgICAgICAgICBpZiAoaXNIYXNoT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNIYXNoT2JqZWN0KHRhcmdldFtrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVEZWVwbHkodGFyZ2V0W2tleV0sIHZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB1cGRhdGVEZWVwbHkoe30sIHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIE1haW4gaW50ZXJmYWNlIGZ1bmN0aW9uLiBUYWtlcyBhbiBFc3ByaW1hIHN5bnRheCB0cmVlIGFuZCByZXR1cm5zIHRoZVxuICogYW5hbHl6ZWQgc2NvcGVzLlxuICogQGZ1bmN0aW9uIGFuYWx5emVcbiAqIEBwYXJhbSB7ZXNwcmltYS5UcmVlfSB0cmVlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdmlkZWRPcHRpb25zIC0gT3B0aW9ucyB0aGF0IHRhaWxvciB0aGUgc2NvcGUgYW5hbHlzaXNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3ZpZGVkT3B0aW9ucy5vcHRpbWlzdGljPWZhbHNlXSAtIHRoZSBvcHRpbWlzdGljIGZsYWdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3ZpZGVkT3B0aW9ucy5kaXJlY3RpdmU9ZmFsc2VdLSB0aGUgZGlyZWN0aXZlIGZsYWdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3ZpZGVkT3B0aW9ucy5pZ25vcmVFdmFsPWZhbHNlXS0gd2hldGhlciB0byBjaGVjayAnZXZhbCgpJyBjYWxsc1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlkZWRPcHRpb25zLm5vZGVqc1Njb3BlPWZhbHNlXS0gd2hldGhlciB0aGUgd2hvbGVcbiAqIHNjcmlwdCBpcyBleGVjdXRlZCB1bmRlciBub2RlLmpzIGVudmlyb25tZW50LiBXaGVuIGVuYWJsZWQsIGVzY29wZSBhZGRzXG4gKiBhIGZ1bmN0aW9uIHNjb3BlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgZ2xvYmFsIHNjb3BlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlkZWRPcHRpb25zLmltcGxpZWRTdHJpY3Q9ZmFsc2VdLSBpbXBsaWVkIHN0cmljdCBtb2RlXG4gKiAoaWYgZWNtYVZlcnNpb24gPj0gNSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Byb3ZpZGVkT3B0aW9ucy5zb3VyY2VUeXBlPSdzY3JpcHQnXS0gdGhlIHNvdXJjZSB0eXBlIG9mIHRoZSBzY3JpcHQuIG9uZSBvZiAnc2NyaXB0JyBhbmQgJ21vZHVsZSdcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJvdmlkZWRPcHRpb25zLmVjbWFWZXJzaW9uPTVdLSB3aGljaCBFQ01BU2NyaXB0IHZlcnNpb24gaXMgY29uc2lkZXJlZFxuICogQHBhcmFtIHtPYmplY3R9IFtwcm92aWRlZE9wdGlvbnMuY2hpbGRWaXNpdG9yS2V5cz1udWxsXSAtIEFkZGl0aW9uYWwga25vd24gdmlzaXRvciBrZXlzLiBTZWUgW2VzcmVjdXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2VzdG9vbHMvZXNyZWN1cnNlKSdzIHRoZSBgY2hpbGRWaXNpdG9yS2V5c2Agb3B0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm92aWRlZE9wdGlvbnMuZmFsbGJhY2s9J2l0ZXJhdGlvbiddIC0gQSBraW5kIG9mIHRoZSBmYWxsYmFjayBpbiBvcmRlciB0byBlbmNvdW50ZXIgd2l0aCB1bmtub3duIG5vZGUuIFNlZSBbZXNyZWN1cnNlXShodHRwczovL2dpdGh1Yi5jb20vZXN0b29scy9lc3JlY3Vyc2UpJ3MgdGhlIGBmYWxsYmFja2Agb3B0aW9uLlxuICogQHJldHVybiB7U2NvcGVNYW5hZ2VyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZSh0cmVlLCBwcm92aWRlZE9wdGlvbnMpIHtcbiAgICB2YXIgc2NvcGVNYW5hZ2VyLCByZWZlcmVuY2VyLCBvcHRpb25zO1xuXG4gICAgb3B0aW9ucyA9IHVwZGF0ZURlZXBseShkZWZhdWx0T3B0aW9ucygpLCBwcm92aWRlZE9wdGlvbnMpO1xuXG4gICAgc2NvcGVNYW5hZ2VyID0gbmV3IFNjb3BlTWFuYWdlcihvcHRpb25zKTtcblxuICAgIHJlZmVyZW5jZXIgPSBuZXcgUmVmZXJlbmNlcihvcHRpb25zLCBzY29wZU1hbmFnZXIpO1xuICAgIHJlZmVyZW5jZXIudmlzaXQodHJlZSk7XG5cbiAgICBhc3NlcnQoc2NvcGVNYW5hZ2VyLl9fY3VycmVudFNjb3BlID09PSBudWxsLCAnY3VycmVudFNjb3BlIHNob3VsZCBiZSBudWxsLicpO1xuXG4gICAgcmV0dXJuIHNjb3BlTWFuYWdlcjtcbn1cblxuZXhwb3J0IHtcbiAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29wZS52ZXJzaW9uICovXG4gICAgdmVyc2lvbixcbiAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29wZS5SZWZlcmVuY2UgKi9cbiAgICBSZWZlcmVuY2UsXG4gICAgLyoqIEBuYW1lIG1vZHVsZTplc2NvcGUuVmFyaWFibGUgKi9cbiAgICBWYXJpYWJsZSxcbiAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29wZS5TY29wZSAqL1xuICAgIFNjb3BlLFxuICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlNjb3BlTWFuYWdlciAqL1xuICAgIFNjb3BlTWFuYWdlclxufTtcblxuXG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/node_modules/escope/lib/pattern-visitor.js b/node_modules/escope/lib/pattern-visitor.js new file mode 100644 index 000000000..e67f3e0f3 --- /dev/null +++ b/node_modules/escope/lib/pattern-visitor.js @@ -0,0 +1,176 @@ +'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 _estraverse = require('estraverse'); + +var _esrecurse = require('esrecurse'); + +var _esrecurse2 = _interopRequireDefault(_esrecurse); + +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"); } } + +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; } /* + Copyright (C) 2015 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 getLast(xs) { + return xs[xs.length - 1] || null; +} + +var PatternVisitor = function (_esrecurse$Visitor) { + _inherits(PatternVisitor, _esrecurse$Visitor); + + _createClass(PatternVisitor, null, [{ + key: 'isPattern', + value: function isPattern(node) { + var nodeType = node.type; + return nodeType === _estraverse.Syntax.Identifier || nodeType === _estraverse.Syntax.ObjectPattern || nodeType === _estraverse.Syntax.ArrayPattern || nodeType === _estraverse.Syntax.SpreadElement || nodeType === _estraverse.Syntax.RestElement || nodeType === _estraverse.Syntax.AssignmentPattern; + } + }]); + + function PatternVisitor(options, rootPattern, callback) { + _classCallCheck(this, PatternVisitor); + + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(PatternVisitor).call(this, null, options)); + + _this.rootPattern = rootPattern; + _this.callback = callback; + _this.assignments = []; + _this.rightHandNodes = []; + _this.restElements = []; + return _this; + } + + _createClass(PatternVisitor, [{ + key: 'Identifier', + value: function Identifier(pattern) { + var lastRestElement = getLast(this.restElements); + this.callback(pattern, { + topLevel: pattern === this.rootPattern, + rest: lastRestElement != null && lastRestElement.argument === pattern, + assignments: this.assignments + }); + } + }, { + key: 'Property', + value: function Property(property) { + // Computed property's key is a right hand node. + if (property.computed) { + this.rightHandNodes.push(property.key); + } + + // If it's shorthand, its key is same as its value. + // If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern). + // If it's not shorthand, the name of new variable is its value's. + this.visit(property.value); + } + }, { + key: 'ArrayPattern', + value: function ArrayPattern(pattern) { + var i, iz, element; + for (i = 0, iz = pattern.elements.length; i < iz; ++i) { + element = pattern.elements[i]; + this.visit(element); + } + } + }, { + key: 'AssignmentPattern', + value: function AssignmentPattern(pattern) { + this.assignments.push(pattern); + this.visit(pattern.left); + this.rightHandNodes.push(pattern.right); + this.assignments.pop(); + } + }, { + key: 'RestElement', + value: function RestElement(pattern) { + this.restElements.push(pattern); + this.visit(pattern.argument); + this.restElements.pop(); + } + }, { + key: 'MemberExpression', + value: function MemberExpression(node) { + // Computed property's key is a right hand node. + if (node.computed) { + this.rightHandNodes.push(node.property); + } + // the object is only read, write to its property. + this.rightHandNodes.push(node.object); + } + + // + // ForInStatement.left and AssignmentExpression.left are LeftHandSideExpression. + // By spec, LeftHandSideExpression is Pattern or MemberExpression. + // (see also: https://github.com/estree/estree/pull/20#issuecomment-74584758) + // But espree 2.0 and esprima 2.0 parse to ArrayExpression, ObjectExpression, etc... + // + + }, { + key: 'SpreadElement', + value: function SpreadElement(node) { + this.visit(node.argument); + } + }, { + key: 'ArrayExpression', + value: function ArrayExpression(node) { + node.elements.forEach(this.visit, this); + } + }, { + key: 'AssignmentExpression', + value: function AssignmentExpression(node) { + this.assignments.push(node); + this.visit(node.left); + this.rightHandNodes.push(node.right); + this.assignments.pop(); + } + }, { + key: 'CallExpression', + value: function CallExpression(node) { + var _this2 = this; + + // arguments are right hand nodes. + node.arguments.forEach(function (a) { + _this2.rightHandNodes.push(a); + }); + this.visit(node.callee); + } + }]); + + return PatternVisitor; +}(_esrecurse2.default.Visitor); + +/* vim: set sw=4 ts=4 et tw=80 : */ + + +exports.default = PatternVisitor; +//# sourceMappingURL=data:application/json;base64,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Ozs7OztzQ0FnQlQsTUFBTTtBQUNoQixpQkFBSyxLQUFMLENBQVcsS0FBSyxRQUFMLENBQVgsQ0FEZ0I7Ozs7d0NBSUosTUFBTTtBQUNsQixpQkFBSyxRQUFMLENBQWMsT0FBZCxDQUFzQixLQUFLLEtBQUwsRUFBWSxJQUFsQyxFQURrQjs7Ozs2Q0FJRCxNQUFNO0FBQ3ZCLGlCQUFLLFdBQUwsQ0FBaUIsSUFBakIsQ0FBc0IsSUFBdEIsRUFEdUI7QUFFdkIsaUJBQUssS0FBTCxDQUFXLEtBQUssSUFBTCxDQUFYLENBRnVCO0FBR3ZCLGlCQUFLLGNBQUwsQ0FBb0IsSUFBcEIsQ0FBeUIsS0FBSyxLQUFMLENBQXpCLENBSHVCO0FBSXZCLGlCQUFLLFdBQUwsQ0FBaUIsR0FBakIsR0FKdUI7Ozs7dUNBT1osTUFBTTs7OztBQUVqQixpQkFBSyxTQUFMLENBQWUsT0FBZixDQUF1QixhQUFLO0FBQUUsdUJBQUssY0FBTCxDQUFvQixJQUFwQixDQUF5QixDQUF6QixFQUFGO2FBQUwsQ0FBdkIsQ0FGaUI7QUFHakIsaUJBQUssS0FBTCxDQUFXLEtBQUssTUFBTCxDQUFYLENBSGlCOzs7O1dBL0ZKO0VBQXVCLG9CQUFVLE9BQVY7Ozs7O2tCQUF2QiIsImZpbGUiOiJwYXR0ZXJuLXZpc2l0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbmltcG9ydCB7IFN5bnRheCB9IGZyb20gJ2VzdHJhdmVyc2UnO1xuaW1wb3J0IGVzcmVjdXJzZSBmcm9tICdlc3JlY3Vyc2UnO1xuXG5mdW5jdGlvbiBnZXRMYXN0KHhzKSB7XG4gICAgcmV0dXJuIHhzW3hzLmxlbmd0aCAtIDFdIHx8IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhdHRlcm5WaXNpdG9yIGV4dGVuZHMgZXNyZWN1cnNlLlZpc2l0b3Ige1xuICAgIHN0YXRpYyBpc1BhdHRlcm4obm9kZSkge1xuICAgICAgICB2YXIgbm9kZVR5cGUgPSBub2RlLnR5cGU7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgfHxcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBTeW50YXguT2JqZWN0UGF0dGVybiB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IFN5bnRheC5BcnJheVBhdHRlcm4gfHxcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBTeW50YXguU3ByZWFkRWxlbWVudCB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IFN5bnRheC5SZXN0RWxlbWVudCB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IFN5bnRheC5Bc3NpZ25tZW50UGF0dGVyblxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIHJvb3RQYXR0ZXJuLCBjYWxsYmFjaykge1xuICAgICAgICBzdXBlcihudWxsLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5yb290UGF0dGVybiA9IHJvb3RQYXR0ZXJuO1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuYXNzaWdubWVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5yaWdodEhhbmROb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLnJlc3RFbGVtZW50cyA9IFtdO1xuICAgIH1cblxuICAgIElkZW50aWZpZXIocGF0dGVybikge1xuICAgICAgICBjb25zdCBsYXN0UmVzdEVsZW1lbnQgPSBnZXRMYXN0KHRoaXMucmVzdEVsZW1lbnRzKTtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhwYXR0ZXJuLCB7XG4gICAgICAgICAgICB0b3BMZXZlbDogcGF0dGVybiA9PT0gdGhpcy5yb290UGF0dGVybixcbiAgICAgICAgICAgIHJlc3Q6IGxhc3RSZXN0RWxlbWVudCAhPSBudWxsICYmIGxhc3RSZXN0RWxlbWVudC5hcmd1bWVudCA9PT0gcGF0dGVybixcbiAgICAgICAgICAgIGFzc2lnbm1lbnRzOiB0aGlzLmFzc2lnbm1lbnRzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFByb3BlcnR5KHByb3BlcnR5KSB7XG4gICAgICAgIC8vIENvbXB1dGVkIHByb3BlcnR5J3Mga2V5IGlzIGEgcmlnaHQgaGFuZCBub2RlLlxuICAgICAgICBpZiAocHJvcGVydHkuY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmlnaHRIYW5kTm9kZXMucHVzaChwcm9wZXJ0eS5rZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgaXQncyBzaG9ydGhhbmQsIGl0cyBrZXkgaXMgc2FtZSBhcyBpdHMgdmFsdWUuXG4gICAgICAgIC8vIElmIGl0J3Mgc2hvcnRoYW5kIGFuZCBoYXMgaXRzIGRlZmF1bHQgdmFsdWUsIGl0cyBrZXkgaXMgc2FtZSBhcyBpdHMgdmFsdWUubGVmdCAodGhlIHZhbHVlIGlzIEFzc2lnbm1lbnRQYXR0ZXJuKS5cbiAgICAgICAgLy8gSWYgaXQncyBub3Qgc2hvcnRoYW5kLCB0aGUgbmFtZSBvZiBuZXcgdmFyaWFibGUgaXMgaXRzIHZhbHVlJ3MuXG4gICAgICAgIHRoaXMudmlzaXQocHJvcGVydHkudmFsdWUpO1xuICAgIH1cblxuICAgIEFycmF5UGF0dGVybihwYXR0ZXJuKSB7XG4gICAgICAgIHZhciBpLCBpeiwgZWxlbWVudDtcbiAgICAgICAgZm9yIChpID0gMCwgaXogPSBwYXR0ZXJuLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBwYXR0ZXJuLmVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgdGhpcy52aXNpdChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEFzc2lnbm1lbnRQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICAgICAgdGhpcy5hc3NpZ25tZW50cy5wdXNoKHBhdHRlcm4pO1xuICAgICAgICB0aGlzLnZpc2l0KHBhdHRlcm4ubGVmdCk7XG4gICAgICAgIHRoaXMucmlnaHRIYW5kTm9kZXMucHVzaChwYXR0ZXJuLnJpZ2h0KTtcbiAgICAgICAgdGhpcy5hc3NpZ25tZW50cy5wb3AoKTtcbiAgICB9XG5cbiAgICBSZXN0RWxlbWVudChwYXR0ZXJuKSB7XG4gICAgICAgIHRoaXMucmVzdEVsZW1lbnRzLnB1c2gocGF0dGVybik7XG4gICAgICAgIHRoaXMudmlzaXQocGF0dGVybi5hcmd1bWVudCk7XG4gICAgICAgIHRoaXMucmVzdEVsZW1lbnRzLnBvcCgpO1xuICAgIH1cblxuICAgIE1lbWJlckV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICAvLyBDb21wdXRlZCBwcm9wZXJ0eSdzIGtleSBpcyBhIHJpZ2h0IGhhbmQgbm9kZS5cbiAgICAgICAgaWYgKG5vZGUuY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmlnaHRIYW5kTm9kZXMucHVzaChub2RlLnByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgb2JqZWN0IGlzIG9ubHkgcmVhZCwgd3JpdGUgdG8gaXRzIHByb3BlcnR5LlxuICAgICAgICB0aGlzLnJpZ2h0SGFuZE5vZGVzLnB1c2gobm9kZS5vYmplY3QpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gRm9ySW5TdGF0ZW1lbnQubGVmdCBhbmQgQXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCBhcmUgTGVmdEhhbmRTaWRlRXhwcmVzc2lvbi5cbiAgICAvLyBCeSBzcGVjLCBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uIGlzIFBhdHRlcm4gb3IgTWVtYmVyRXhwcmVzc2lvbi5cbiAgICAvLyAgIChzZWUgYWxzbzogaHR0cHM6Ly9naXRodWIuY29tL2VzdHJlZS9lc3RyZWUvcHVsbC8yMCNpc3N1ZWNvbW1lbnQtNzQ1ODQ3NTgpXG4gICAgLy8gQnV0IGVzcHJlZSAyLjAgYW5kIGVzcHJpbWEgMi4wIHBhcnNlIHRvIEFycmF5RXhwcmVzc2lvbiwgT2JqZWN0RXhwcmVzc2lvbiwgZXRjLi4uXG4gICAgLy9cblxuICAgIFNwcmVhZEVsZW1lbnQobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0KG5vZGUuYXJndW1lbnQpO1xuICAgIH1cblxuICAgIEFycmF5RXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIG5vZGUuZWxlbWVudHMuZm9yRWFjaCh0aGlzLnZpc2l0LCB0aGlzKTtcbiAgICB9XG5cbiAgICBBc3NpZ25tZW50RXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXNzaWdubWVudHMucHVzaChub2RlKTtcbiAgICAgICAgdGhpcy52aXNpdChub2RlLmxlZnQpO1xuICAgICAgICB0aGlzLnJpZ2h0SGFuZE5vZGVzLnB1c2gobm9kZS5yaWdodCk7XG4gICAgICAgIHRoaXMuYXNzaWdubWVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICAvLyBhcmd1bWVudHMgYXJlIHJpZ2h0IGhhbmQgbm9kZXMuXG4gICAgICAgIG5vZGUuYXJndW1lbnRzLmZvckVhY2goYSA9PiB7IHRoaXMucmlnaHRIYW5kTm9kZXMucHVzaChhKTsgfSk7XG4gICAgICAgIHRoaXMudmlzaXQobm9kZS5jYWxsZWUpO1xuICAgIH1cbn1cblxuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/node_modules/escope/lib/reference.js b/node_modules/escope/lib/reference.js new file mode 100644 index 000000000..590d356ce --- /dev/null +++ b/node_modules/escope/lib/reference.js @@ -0,0 +1,193 @@ +"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; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/* + Copyright (C) 2015 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. +*/ + +var READ = 0x1; +var WRITE = 0x2; +var RW = READ | WRITE; + +/** + * A Reference represents a single occurrence of an identifier in code. + * @class Reference + */ + +var Reference = function () { + function Reference(ident, scope, flag, writeExpr, maybeImplicitGlobal, partial, init) { + _classCallCheck(this, Reference); + + /** + * Identifier syntax node. + * @member {esprima#Identifier} Reference#identifier + */ + this.identifier = ident; + /** + * Reference to the enclosing Scope. + * @member {Scope} Reference#from + */ + this.from = scope; + /** + * Whether the reference comes from a dynamic scope (such as 'eval', + * 'with', etc.), and may be trapped by dynamic scopes. + * @member {boolean} Reference#tainted + */ + this.tainted = false; + /** + * The variable this reference is resolved with. + * @member {Variable} Reference#resolved + */ + this.resolved = null; + /** + * The read-write mode of the reference. (Value is one of {@link + * Reference.READ}, {@link Reference.RW}, {@link Reference.WRITE}). + * @member {number} Reference#flag + * @private + */ + this.flag = flag; + if (this.isWrite()) { + /** + * If reference is writeable, this is the tree being written to it. + * @member {esprima#Node} Reference#writeExpr + */ + this.writeExpr = writeExpr; + /** + * Whether the Reference might refer to a partial value of writeExpr. + * @member {boolean} Reference#partial + */ + this.partial = partial; + /** + * Whether the Reference is to write of initialization. + * @member {boolean} Reference#init + */ + this.init = init; + } + this.__maybeImplicitGlobal = maybeImplicitGlobal; + } + + /** + * Whether the reference is static. + * @method Reference#isStatic + * @return {boolean} + */ + + + _createClass(Reference, [{ + key: "isStatic", + value: function isStatic() { + return !this.tainted && this.resolved && this.resolved.scope.isStatic(); + } + + /** + * Whether the reference is writeable. + * @method Reference#isWrite + * @return {boolean} + */ + + }, { + key: "isWrite", + value: function isWrite() { + return !!(this.flag & Reference.WRITE); + } + + /** + * Whether the reference is readable. + * @method Reference#isRead + * @return {boolean} + */ + + }, { + key: "isRead", + value: function isRead() { + return !!(this.flag & Reference.READ); + } + + /** + * Whether the reference is read-only. + * @method Reference#isReadOnly + * @return {boolean} + */ + + }, { + key: "isReadOnly", + value: function isReadOnly() { + return this.flag === Reference.READ; + } + + /** + * Whether the reference is write-only. + * @method Reference#isWriteOnly + * @return {boolean} + */ + + }, { + key: "isWriteOnly", + value: function isWriteOnly() { + return this.flag === Reference.WRITE; + } + + /** + * Whether the reference is read-write. + * @method Reference#isReadWrite + * @return {boolean} + */ + + }, { + key: "isReadWrite", + value: function isReadWrite() { + return this.flag === Reference.RW; + } + }]); + + return Reference; +}(); + +/** + * @constant Reference.READ + * @private + */ + + +exports.default = Reference; +Reference.READ = READ; +/** + * @constant Reference.WRITE + * @private + */ +Reference.WRITE = WRITE; +/** + * @constant Reference.RW + * @private + */ +Reference.RW = RW; + +/* vim: set sw=4 ts=4 et tw=80 : */ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlZmVyZW5jZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLElBQU0sT0FBTyxHQUFQO0FBQ04sSUFBTSxRQUFRLEdBQVI7QUFDTixJQUFNLEtBQUssT0FBTyxLQUFQOzs7Ozs7O0lBTVU7QUFDakIsV0FEaUIsU0FDakIsQ0FBWSxLQUFaLEVBQW1CLEtBQW5CLEVBQTBCLElBQTFCLEVBQWlDLFNBQWpDLEVBQTRDLG1CQUE1QyxFQUFpRSxPQUFqRSxFQUEwRSxJQUExRSxFQUFnRjswQkFEL0QsV0FDK0Q7Ozs7OztBQUs1RSxTQUFLLFVBQUwsR0FBa0IsS0FBbEI7Ozs7O0FBTDRFLFFBVTVFLENBQUssSUFBTCxHQUFZLEtBQVo7Ozs7OztBQVY0RSxRQWdCNUUsQ0FBSyxPQUFMLEdBQWUsS0FBZjs7Ozs7QUFoQjRFLFFBcUI1RSxDQUFLLFFBQUwsR0FBZ0IsSUFBaEI7Ozs7Ozs7QUFyQjRFLFFBNEI1RSxDQUFLLElBQUwsR0FBWSxJQUFaLENBNUI0RTtBQTZCNUUsUUFBSSxLQUFLLE9BQUwsRUFBSixFQUFvQjs7Ozs7QUFLaEIsV0FBSyxTQUFMLEdBQWlCLFNBQWpCOzs7OztBQUxnQixVQVVoQixDQUFLLE9BQUwsR0FBZSxPQUFmOzs7OztBQVZnQixVQWVoQixDQUFLLElBQUwsR0FBWSxJQUFaLENBZmdCO0tBQXBCO0FBaUJBLFNBQUsscUJBQUwsR0FBNkIsbUJBQTdCLENBOUM0RTtHQUFoRjs7Ozs7Ozs7O2VBRGlCOzsrQkF1RE47QUFDUCxhQUFPLENBQUMsS0FBSyxPQUFMLElBQWdCLEtBQUssUUFBTCxJQUFpQixLQUFLLFFBQUwsQ0FBYyxLQUFkLENBQW9CLFFBQXBCLEVBQWxDLENBREE7Ozs7Ozs7Ozs7OzhCQVNEO0FBQ04sYUFBTyxDQUFDLEVBQUUsS0FBSyxJQUFMLEdBQVksVUFBVSxLQUFWLENBQWQsQ0FERjs7Ozs7Ozs7Ozs7NkJBU0Q7QUFDTCxhQUFPLENBQUMsRUFBRSxLQUFLLElBQUwsR0FBWSxVQUFVLElBQVYsQ0FBZCxDQURIOzs7Ozs7Ozs7OztpQ0FTSTtBQUNULGFBQU8sS0FBSyxJQUFMLEtBQWMsVUFBVSxJQUFWLENBRFo7Ozs7Ozs7Ozs7O2tDQVNDO0FBQ1YsYUFBTyxLQUFLLElBQUwsS0FBYyxVQUFVLEtBQVYsQ0FEWDs7Ozs7Ozs7Ozs7a0NBU0E7QUFDVixhQUFPLEtBQUssSUFBTCxLQUFjLFVBQVUsRUFBVixDQURYOzs7O1NBcEdHOzs7Ozs7Ozs7O0FBNkdyQixVQUFVLElBQVYsR0FBaUIsSUFBakI7Ozs7O0FBS0EsVUFBVSxLQUFWLEdBQWtCLEtBQWxCOzs7OztBQUtBLFVBQVUsRUFBVixHQUFlLEVBQWYiLCJmaWxlIjoicmVmZXJlbmNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5jb25zdCBSRUFEID0gMHgxO1xuY29uc3QgV1JJVEUgPSAweDI7XG5jb25zdCBSVyA9IFJFQUQgfCBXUklURTtcblxuLyoqXG4gKiBBIFJlZmVyZW5jZSByZXByZXNlbnRzIGEgc2luZ2xlIG9jY3VycmVuY2Ugb2YgYW4gaWRlbnRpZmllciBpbiBjb2RlLlxuICogQGNsYXNzIFJlZmVyZW5jZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWZlcmVuY2Uge1xuICAgIGNvbnN0cnVjdG9yKGlkZW50LCBzY29wZSwgZmxhZywgIHdyaXRlRXhwciwgbWF5YmVJbXBsaWNpdEdsb2JhbCwgcGFydGlhbCwgaW5pdCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogSWRlbnRpZmllciBzeW50YXggbm9kZS5cbiAgICAgICAgICogQG1lbWJlciB7ZXNwcmltYSNJZGVudGlmaWVyfSBSZWZlcmVuY2UjaWRlbnRpZmllclxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVuY2xvc2luZyBTY29wZS5cbiAgICAgICAgICogQG1lbWJlciB7U2NvcGV9IFJlZmVyZW5jZSNmcm9tXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZyb20gPSBzY29wZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBjb21lcyBmcm9tIGEgZHluYW1pYyBzY29wZSAoc3VjaCBhcyAnZXZhbCcsXG4gICAgICAgICAqICd3aXRoJywgZXRjLiksIGFuZCBtYXkgYmUgdHJhcHBlZCBieSBkeW5hbWljIHNjb3Blcy5cbiAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gUmVmZXJlbmNlI3RhaW50ZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFpbnRlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHZhcmlhYmxlIHRoaXMgcmVmZXJlbmNlIGlzIHJlc29sdmVkIHdpdGguXG4gICAgICAgICAqIEBtZW1iZXIge1ZhcmlhYmxlfSBSZWZlcmVuY2UjcmVzb2x2ZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVzb2x2ZWQgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHJlYWQtd3JpdGUgbW9kZSBvZiB0aGUgcmVmZXJlbmNlLiAoVmFsdWUgaXMgb25lIG9mIHtAbGlua1xuICAgICAgICAgKiBSZWZlcmVuY2UuUkVBRH0sIHtAbGluayBSZWZlcmVuY2UuUld9LCB7QGxpbmsgUmVmZXJlbmNlLldSSVRFfSkuXG4gICAgICAgICAqIEBtZW1iZXIge251bWJlcn0gUmVmZXJlbmNlI2ZsYWdcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmxhZyA9IGZsYWc7XG4gICAgICAgIGlmICh0aGlzLmlzV3JpdGUoKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiByZWZlcmVuY2UgaXMgd3JpdGVhYmxlLCB0aGlzIGlzIHRoZSB0cmVlIGJlaW5nIHdyaXR0ZW4gdG8gaXQuXG4gICAgICAgICAgICAgKiBAbWVtYmVyIHtlc3ByaW1hI05vZGV9IFJlZmVyZW5jZSN3cml0ZUV4cHJcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy53cml0ZUV4cHIgPSB3cml0ZUV4cHI7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZXRoZXIgdGhlIFJlZmVyZW5jZSBtaWdodCByZWZlciB0byBhIHBhcnRpYWwgdmFsdWUgb2Ygd3JpdGVFeHByLlxuICAgICAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gUmVmZXJlbmNlI3BhcnRpYWxcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5wYXJ0aWFsID0gcGFydGlhbDtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0aGUgUmVmZXJlbmNlIGlzIHRvIHdyaXRlIG9mIGluaXRpYWxpemF0aW9uLlxuICAgICAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gUmVmZXJlbmNlI2luaXRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5pbml0ID0gaW5pdDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9fbWF5YmVJbXBsaWNpdEdsb2JhbCA9IG1heWJlSW1wbGljaXRHbG9iYWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHN0YXRpYy5cbiAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1N0YXRpY1xuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNTdGF0aWMoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWludGVkICYmIHRoaXMucmVzb2x2ZWQgJiYgdGhpcy5yZXNvbHZlZC5zY29wZS5pc1N0YXRpYygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyB3cml0ZWFibGUuXG4gICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNXcml0ZVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXcml0ZSgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuZmxhZyAmIFJlZmVyZW5jZS5XUklURSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHJlYWRhYmxlLlxuICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzUmVhZFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNSZWFkKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy5mbGFnICYgUmVmZXJlbmNlLlJFQUQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyByZWFkLW9ubHkuXG4gICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNSZWFkT25seVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNSZWFkT25seSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxhZyA9PT0gUmVmZXJlbmNlLlJFQUQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHdyaXRlLW9ubHkuXG4gICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNXcml0ZU9ubHlcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzV3JpdGVPbmx5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbGFnID09PSBSZWZlcmVuY2UuV1JJVEU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHJlYWQtd3JpdGUuXG4gICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNSZWFkV3JpdGVcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUmVhZFdyaXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbGFnID09PSBSZWZlcmVuY2UuUlc7XG4gICAgfVxufVxuXG4vKipcbiAqIEBjb25zdGFudCBSZWZlcmVuY2UuUkVBRFxuICogQHByaXZhdGVcbiAqL1xuUmVmZXJlbmNlLlJFQUQgPSBSRUFEO1xuLyoqXG4gKiBAY29uc3RhbnQgUmVmZXJlbmNlLldSSVRFXG4gKiBAcHJpdmF0ZVxuICovXG5SZWZlcmVuY2UuV1JJVEUgPSBXUklURTtcbi8qKlxuICogQGNvbnN0YW50IFJlZmVyZW5jZS5SV1xuICogQHByaXZhdGVcbiAqL1xuUmVmZXJlbmNlLlJXID0gUlc7XG5cbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/node_modules/escope/lib/referencer.js b/node_modules/escope/lib/referencer.js new file mode 100644 index 000000000..ae4016155 --- /dev/null +++ b/node_modules/escope/lib/referencer.js @@ -0,0 +1,639 @@ +'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 _estraverse = require('estraverse'); + +var _esrecurse = require('esrecurse'); + +var _esrecurse2 = _interopRequireDefault(_esrecurse); + +var _reference = require('./reference'); + +var _reference2 = _interopRequireDefault(_reference); + +var _variable = require('./variable'); + +var _variable2 = _interopRequireDefault(_variable); + +var _patternVisitor = require('./pattern-visitor'); + +var _patternVisitor2 = _interopRequireDefault(_patternVisitor); + +var _definition = require('./definition'); + +var _assert = require('assert'); + +var _assert2 = _interopRequireDefault(_assert); + +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"); } } + +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; } /* + Copyright (C) 2015 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 traverseIdentifierInPattern(options, rootPattern, referencer, callback) { + // Call the callback at left hand identifier nodes, and Collect right hand nodes. + var visitor = new _patternVisitor2.default(options, rootPattern, callback); + visitor.visit(rootPattern); + + // Process the right hand nodes recursively. + if (referencer != null) { + visitor.rightHandNodes.forEach(referencer.visit, referencer); + } +} + +// Importing ImportDeclaration. +// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-moduledeclarationinstantiation +// https://github.com/estree/estree/blob/master/es6.md#importdeclaration +// FIXME: Now, we don't create module environment, because the context is +// implementation dependent. + +var Importer = function (_esrecurse$Visitor) { + _inherits(Importer, _esrecurse$Visitor); + + function Importer(declaration, referencer) { + _classCallCheck(this, Importer); + + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Importer).call(this, null, referencer.options)); + + _this.declaration = declaration; + _this.referencer = referencer; + return _this; + } + + _createClass(Importer, [{ + key: 'visitImport', + value: function visitImport(id, specifier) { + var _this2 = this; + + this.referencer.visitPattern(id, function (pattern) { + _this2.referencer.currentScope().__define(pattern, new _definition.Definition(_variable2.default.ImportBinding, pattern, specifier, _this2.declaration, null, null)); + }); + } + }, { + key: 'ImportNamespaceSpecifier', + value: function ImportNamespaceSpecifier(node) { + var local = node.local || node.id; + if (local) { + this.visitImport(local, node); + } + } + }, { + key: 'ImportDefaultSpecifier', + value: function ImportDefaultSpecifier(node) { + var local = node.local || node.id; + this.visitImport(local, node); + } + }, { + key: 'ImportSpecifier', + value: function ImportSpecifier(node) { + var local = node.local || node.id; + if (node.name) { + this.visitImport(node.name, node); + } else { + this.visitImport(local, node); + } + } + }]); + + return Importer; +}(_esrecurse2.default.Visitor); + +// Referencing variables and creating bindings. + + +var Referencer = function (_esrecurse$Visitor2) { + _inherits(Referencer, _esrecurse$Visitor2); + + function Referencer(options, scopeManager) { + _classCallCheck(this, Referencer); + + var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(Referencer).call(this, null, options)); + + _this3.options = options; + _this3.scopeManager = scopeManager; + _this3.parent = null; + _this3.isInnerMethodDefinition = false; + return _this3; + } + + _createClass(Referencer, [{ + key: 'currentScope', + value: function currentScope() { + return this.scopeManager.__currentScope; + } + }, { + key: 'close', + value: function close(node) { + while (this.currentScope() && node === this.currentScope().block) { + this.scopeManager.__currentScope = this.currentScope().__close(this.scopeManager); + } + } + }, { + key: 'pushInnerMethodDefinition', + value: function pushInnerMethodDefinition(isInnerMethodDefinition) { + var previous = this.isInnerMethodDefinition; + this.isInnerMethodDefinition = isInnerMethodDefinition; + return previous; + } + }, { + key: 'popInnerMethodDefinition', + value: function popInnerMethodDefinition(isInnerMethodDefinition) { + this.isInnerMethodDefinition = isInnerMethodDefinition; + } + }, { + key: 'materializeTDZScope', + value: function materializeTDZScope(node, iterationNode) { + // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-forin-div-ofexpressionevaluation-abstract-operation + // TDZ scope hides the declaration's names. + this.scopeManager.__nestTDZScope(node, iterationNode); + this.visitVariableDeclaration(this.currentScope(), _variable2.default.TDZ, iterationNode.left, 0, true); + } + }, { + key: 'materializeIterationScope', + value: function materializeIterationScope(node) { + var _this4 = this; + + // Generate iteration scope for upper ForIn/ForOf Statements. + var letOrConstDecl; + this.scopeManager.__nestForScope(node); + letOrConstDecl = node.left; + this.visitVariableDeclaration(this.currentScope(), _variable2.default.Variable, letOrConstDecl, 0); + this.visitPattern(letOrConstDecl.declarations[0].id, function (pattern) { + _this4.currentScope().__referencing(pattern, _reference2.default.WRITE, node.right, null, true, true); + }); + } + }, { + key: 'referencingDefaultValue', + value: function referencingDefaultValue(pattern, assignments, maybeImplicitGlobal, init) { + var scope = this.currentScope(); + assignments.forEach(function (assignment) { + scope.__referencing(pattern, _reference2.default.WRITE, assignment.right, maybeImplicitGlobal, pattern !== assignment.left, init); + }); + } + }, { + key: 'visitPattern', + value: function visitPattern(node, options, callback) { + if (typeof options === 'function') { + callback = options; + options = { processRightHandNodes: false }; + } + traverseIdentifierInPattern(this.options, node, options.processRightHandNodes ? this : null, callback); + } + }, { + key: 'visitFunction', + value: function visitFunction(node) { + var _this5 = this; + + var i, iz; + // FunctionDeclaration name is defined in upper scope + // NOTE: Not referring variableScope. It is intended. + // Since + // in ES5, FunctionDeclaration should be in FunctionBody. + // in ES6, FunctionDeclaration should be block scoped. + if (node.type === _estraverse.Syntax.FunctionDeclaration) { + // id is defined in upper scope + this.currentScope().__define(node.id, new _definition.Definition(_variable2.default.FunctionName, node.id, node, null, null, null)); + } + + // FunctionExpression with name creates its special scope; + // FunctionExpressionNameScope. + if (node.type === _estraverse.Syntax.FunctionExpression && node.id) { + this.scopeManager.__nestFunctionExpressionNameScope(node); + } + + // Consider this function is in the MethodDefinition. + this.scopeManager.__nestFunctionScope(node, this.isInnerMethodDefinition); + + // Process parameter declarations. + for (i = 0, iz = node.params.length; i < iz; ++i) { + this.visitPattern(node.params[i], { processRightHandNodes: true }, function (pattern, info) { + _this5.currentScope().__define(pattern, new _definition.ParameterDefinition(pattern, node, i, info.rest)); + + _this5.referencingDefaultValue(pattern, info.assignments, null, true); + }); + } + + // if there's a rest argument, add that + if (node.rest) { + this.visitPattern({ + type: 'RestElement', + argument: node.rest + }, function (pattern) { + _this5.currentScope().__define(pattern, new _definition.ParameterDefinition(pattern, node, node.params.length, true)); + }); + } + + // Skip BlockStatement to prevent creating BlockStatement scope. + if (node.body.type === _estraverse.Syntax.BlockStatement) { + this.visitChildren(node.body); + } else { + this.visit(node.body); + } + + this.close(node); + } + }, { + key: 'visitClass', + value: function visitClass(node) { + if (node.type === _estraverse.Syntax.ClassDeclaration) { + this.currentScope().__define(node.id, new _definition.Definition(_variable2.default.ClassName, node.id, node, null, null, null)); + } + + // FIXME: Maybe consider TDZ. + this.visit(node.superClass); + + this.scopeManager.__nestClassScope(node); + + if (node.id) { + this.currentScope().__define(node.id, new _definition.Definition(_variable2.default.ClassName, node.id, node)); + } + this.visit(node.body); + + this.close(node); + } + }, { + key: 'visitProperty', + value: function visitProperty(node) { + var previous, isMethodDefinition; + if (node.computed) { + this.visit(node.key); + } + + isMethodDefinition = node.type === _estraverse.Syntax.MethodDefinition; + if (isMethodDefinition) { + previous = this.pushInnerMethodDefinition(true); + } + this.visit(node.value); + if (isMethodDefinition) { + this.popInnerMethodDefinition(previous); + } + } + }, { + key: 'visitForIn', + value: function visitForIn(node) { + var _this6 = this; + + if (node.left.type === _estraverse.Syntax.VariableDeclaration && node.left.kind !== 'var') { + this.materializeTDZScope(node.right, node); + this.visit(node.right); + this.close(node.right); + + this.materializeIterationScope(node); + this.visit(node.body); + this.close(node); + } else { + if (node.left.type === _estraverse.Syntax.VariableDeclaration) { + this.visit(node.left); + this.visitPattern(node.left.declarations[0].id, function (pattern) { + _this6.currentScope().__referencing(pattern, _reference2.default.WRITE, node.right, null, true, true); + }); + } else { + this.visitPattern(node.left, { processRightHandNodes: true }, function (pattern, info) { + var maybeImplicitGlobal = null; + if (!_this6.currentScope().isStrict) { + maybeImplicitGlobal = { + pattern: pattern, + node: node + }; + } + _this6.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false); + _this6.currentScope().__referencing(pattern, _reference2.default.WRITE, node.right, maybeImplicitGlobal, true, false); + }); + } + this.visit(node.right); + this.visit(node.body); + } + } + }, { + key: 'visitVariableDeclaration', + value: function visitVariableDeclaration(variableTargetScope, type, node, index, fromTDZ) { + var _this7 = this; + + // If this was called to initialize a TDZ scope, this needs to make definitions, but doesn't make references. + var decl, init; + + decl = node.declarations[index]; + init = decl.init; + this.visitPattern(decl.id, { processRightHandNodes: !fromTDZ }, function (pattern, info) { + variableTargetScope.__define(pattern, new _definition.Definition(type, pattern, decl, node, index, node.kind)); + + if (!fromTDZ) { + _this7.referencingDefaultValue(pattern, info.assignments, null, true); + } + if (init) { + _this7.currentScope().__referencing(pattern, _reference2.default.WRITE, init, null, !info.topLevel, true); + } + }); + } + }, { + key: 'AssignmentExpression', + value: function AssignmentExpression(node) { + var _this8 = this; + + if (_patternVisitor2.default.isPattern(node.left)) { + if (node.operator === '=') { + this.visitPattern(node.left, { processRightHandNodes: true }, function (pattern, info) { + var maybeImplicitGlobal = null; + if (!_this8.currentScope().isStrict) { + maybeImplicitGlobal = { + pattern: pattern, + node: node + }; + } + _this8.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false); + _this8.currentScope().__referencing(pattern, _reference2.default.WRITE, node.right, maybeImplicitGlobal, !info.topLevel, false); + }); + } else { + this.currentScope().__referencing(node.left, _reference2.default.RW, node.right); + } + } else { + this.visit(node.left); + } + this.visit(node.right); + } + }, { + key: 'CatchClause', + value: function CatchClause(node) { + var _this9 = this; + + this.scopeManager.__nestCatchScope(node); + + this.visitPattern(node.param, { processRightHandNodes: true }, function (pattern, info) { + _this9.currentScope().__define(pattern, new _definition.Definition(_variable2.default.CatchClause, node.param, node, null, null, null)); + _this9.referencingDefaultValue(pattern, info.assignments, null, true); + }); + this.visit(node.body); + + this.close(node); + } + }, { + key: 'Program', + value: function Program(node) { + this.scopeManager.__nestGlobalScope(node); + + if (this.scopeManager.__isNodejsScope()) { + // Force strictness of GlobalScope to false when using node.js scope. + this.currentScope().isStrict = false; + this.scopeManager.__nestFunctionScope(node, false); + } + + if (this.scopeManager.__isES6() && this.scopeManager.isModule()) { + this.scopeManager.__nestModuleScope(node); + } + + if (this.scopeManager.isStrictModeSupported() && this.scopeManager.isImpliedStrict()) { + this.currentScope().isStrict = true; + } + + this.visitChildren(node); + this.close(node); + } + }, { + key: 'Identifier', + value: function Identifier(node) { + this.currentScope().__referencing(node); + } + }, { + key: 'UpdateExpression', + value: function UpdateExpression(node) { + if (_patternVisitor2.default.isPattern(node.argument)) { + this.currentScope().__referencing(node.argument, _reference2.default.RW, null); + } else { + this.visitChildren(node); + } + } + }, { + key: 'MemberExpression', + value: function MemberExpression(node) { + this.visit(node.object); + if (node.computed) { + this.visit(node.property); + } + } + }, { + key: 'Property', + value: function Property(node) { + this.visitProperty(node); + } + }, { + key: 'MethodDefinition', + value: function MethodDefinition(node) { + this.visitProperty(node); + } + }, { + key: 'BreakStatement', + value: function BreakStatement() {} + }, { + key: 'ContinueStatement', + value: function ContinueStatement() {} + }, { + key: 'LabeledStatement', + value: function LabeledStatement(node) { + this.visit(node.body); + } + }, { + key: 'ForStatement', + value: function ForStatement(node) { + // Create ForStatement declaration. + // NOTE: In ES6, ForStatement dynamically generates + // per iteration environment. However, escope is + // a static analyzer, we only generate one scope for ForStatement. + if (node.init && node.init.type === _estraverse.Syntax.VariableDeclaration && node.init.kind !== 'var') { + this.scopeManager.__nestForScope(node); + } + + this.visitChildren(node); + + this.close(node); + } + }, { + key: 'ClassExpression', + value: function ClassExpression(node) { + this.visitClass(node); + } + }, { + key: 'ClassDeclaration', + value: function ClassDeclaration(node) { + this.visitClass(node); + } + }, { + key: 'CallExpression', + value: function CallExpression(node) { + // Check this is direct call to eval + if (!this.scopeManager.__ignoreEval() && node.callee.type === _estraverse.Syntax.Identifier && node.callee.name === 'eval') { + // NOTE: This should be `variableScope`. Since direct eval call always creates Lexical environment and + // let / const should be enclosed into it. Only VariableDeclaration affects on the caller's environment. + this.currentScope().variableScope.__detectEval(); + } + this.visitChildren(node); + } + }, { + key: 'BlockStatement', + value: function BlockStatement(node) { + if (this.scopeManager.__isES6()) { + this.scopeManager.__nestBlockScope(node); + } + + this.visitChildren(node); + + this.close(node); + } + }, { + key: 'ThisExpression', + value: function ThisExpression() { + this.currentScope().variableScope.__detectThis(); + } + }, { + key: 'WithStatement', + value: function WithStatement(node) { + this.visit(node.object); + // Then nest scope for WithStatement. + this.scopeManager.__nestWithScope(node); + + this.visit(node.body); + + this.close(node); + } + }, { + key: 'VariableDeclaration', + value: function VariableDeclaration(node) { + var variableTargetScope, i, iz, decl; + variableTargetScope = node.kind === 'var' ? this.currentScope().variableScope : this.currentScope(); + for (i = 0, iz = node.declarations.length; i < iz; ++i) { + decl = node.declarations[i]; + this.visitVariableDeclaration(variableTargetScope, _variable2.default.Variable, node, i); + if (decl.init) { + this.visit(decl.init); + } + } + } + + // sec 13.11.8 + + }, { + key: 'SwitchStatement', + value: function SwitchStatement(node) { + var i, iz; + + this.visit(node.discriminant); + + if (this.scopeManager.__isES6()) { + this.scopeManager.__nestSwitchScope(node); + } + + for (i = 0, iz = node.cases.length; i < iz; ++i) { + this.visit(node.cases[i]); + } + + this.close(node); + } + }, { + key: 'FunctionDeclaration', + value: function FunctionDeclaration(node) { + this.visitFunction(node); + } + }, { + key: 'FunctionExpression', + value: function FunctionExpression(node) { + this.visitFunction(node); + } + }, { + key: 'ForOfStatement', + value: function ForOfStatement(node) { + this.visitForIn(node); + } + }, { + key: 'ForInStatement', + value: function ForInStatement(node) { + this.visitForIn(node); + } + }, { + key: 'ArrowFunctionExpression', + value: function ArrowFunctionExpression(node) { + this.visitFunction(node); + } + }, { + key: 'ImportDeclaration', + value: function ImportDeclaration(node) { + var importer; + + (0, _assert2.default)(this.scopeManager.__isES6() && this.scopeManager.isModule(), 'ImportDeclaration should appear when the mode is ES6 and in the module context.'); + + importer = new Importer(node, this); + importer.visit(node); + } + }, { + key: 'visitExportDeclaration', + value: function visitExportDeclaration(node) { + if (node.source) { + return; + } + if (node.declaration) { + this.visit(node.declaration); + return; + } + + this.visitChildren(node); + } + }, { + key: 'ExportDeclaration', + value: function ExportDeclaration(node) { + this.visitExportDeclaration(node); + } + }, { + key: 'ExportNamedDeclaration', + value: function ExportNamedDeclaration(node) { + this.visitExportDeclaration(node); + } + }, { + key: 'ExportSpecifier', + value: function ExportSpecifier(node) { + var local = node.id || node.local; + this.visit(local); + } + }, { + key: 'MetaProperty', + value: function MetaProperty() { + // do nothing. + } + }]); + + return Referencer; +}(_esrecurse2.default.Visitor); + +/* vim: set sw=4 ts=4 et tw=80 : */ + + +exports.default = Referencer; +//# sourceMappingURL=data:application/json;base64,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SyxXQUFMLENBQVgsQ0FEa0I7QUFFbEIsdUJBRmtCO2FBQXRCOztBQUtBLGlCQUFLLGFBQUwsQ0FBbUIsSUFBbkIsRUFUeUI7Ozs7MENBWVgsTUFBTTtBQUNwQixpQkFBSyxzQkFBTCxDQUE0QixJQUE1QixFQURvQjs7OzsrQ0FJRCxNQUFNO0FBQ3pCLGlCQUFLLHNCQUFMLENBQTRCLElBQTVCLEVBRHlCOzs7O3dDQUliLE1BQU07QUFDbEIsZ0JBQUksUUFBUyxLQUFLLEVBQUwsSUFBVyxLQUFLLEtBQUwsQ0FETjtBQUVsQixpQkFBSyxLQUFMLENBQVcsS0FBWCxFQUZrQjs7Ozt1Q0FLUDs7Ozs7V0F0ZUU7RUFBbUIsb0JBQVUsT0FBVjs7Ozs7a0JBQW5CIiwiZmlsZSI6InJlZmVyZW5jZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5pbXBvcnQgeyBTeW50YXggfSBmcm9tICdlc3RyYXZlcnNlJztcbmltcG9ydCBlc3JlY3Vyc2UgZnJvbSAnZXNyZWN1cnNlJztcbmltcG9ydCBSZWZlcmVuY2UgZnJvbSAnLi9yZWZlcmVuY2UnO1xuaW1wb3J0IFZhcmlhYmxlIGZyb20gJy4vdmFyaWFibGUnO1xuaW1wb3J0IFBhdHRlcm5WaXNpdG9yIGZyb20gJy4vcGF0dGVybi12aXNpdG9yJztcbmltcG9ydCB7IFBhcmFtZXRlckRlZmluaXRpb24sIERlZmluaXRpb24gfSBmcm9tICcuL2RlZmluaXRpb24nO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5mdW5jdGlvbiB0cmF2ZXJzZUlkZW50aWZpZXJJblBhdHRlcm4ob3B0aW9ucywgcm9vdFBhdHRlcm4sIHJlZmVyZW5jZXIsIGNhbGxiYWNrKSB7XG4gICAgLy8gQ2FsbCB0aGUgY2FsbGJhY2sgYXQgbGVmdCBoYW5kIGlkZW50aWZpZXIgbm9kZXMsIGFuZCBDb2xsZWN0IHJpZ2h0IGhhbmQgbm9kZXMuXG4gICAgdmFyIHZpc2l0b3IgPSBuZXcgUGF0dGVyblZpc2l0b3Iob3B0aW9ucywgcm9vdFBhdHRlcm4sIGNhbGxiYWNrKTtcbiAgICB2aXNpdG9yLnZpc2l0KHJvb3RQYXR0ZXJuKTtcblxuICAgIC8vIFByb2Nlc3MgdGhlIHJpZ2h0IGhhbmQgbm9kZXMgcmVjdXJzaXZlbHkuXG4gICAgaWYgKHJlZmVyZW5jZXIgIT0gbnVsbCkge1xuICAgICAgICB2aXNpdG9yLnJpZ2h0SGFuZE5vZGVzLmZvckVhY2gocmVmZXJlbmNlci52aXNpdCwgcmVmZXJlbmNlcik7XG4gICAgfVxufVxuXG4vLyBJbXBvcnRpbmcgSW1wb3J0RGVjbGFyYXRpb24uXG4vLyBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1tb2R1bGVkZWNsYXJhdGlvbmluc3RhbnRpYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc3RyZWUvZXN0cmVlL2Jsb2IvbWFzdGVyL2VzNi5tZCNpbXBvcnRkZWNsYXJhdGlvblxuLy8gRklYTUU6IE5vdywgd2UgZG9uJ3QgY3JlYXRlIG1vZHVsZSBlbnZpcm9ubWVudCwgYmVjYXVzZSB0aGUgY29udGV4dCBpc1xuLy8gaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LlxuXG5jbGFzcyBJbXBvcnRlciBleHRlbmRzIGVzcmVjdXJzZS5WaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihkZWNsYXJhdGlvbiwgcmVmZXJlbmNlcikge1xuICAgICAgICBzdXBlcihudWxsLCByZWZlcmVuY2VyLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247XG4gICAgICAgIHRoaXMucmVmZXJlbmNlciA9IHJlZmVyZW5jZXI7XG4gICAgfVxuXG4gICAgdmlzaXRJbXBvcnQoaWQsIHNwZWNpZmllcikge1xuICAgICAgICB0aGlzLnJlZmVyZW5jZXIudmlzaXRQYXR0ZXJuKGlkLCAocGF0dGVybikgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VyLmN1cnJlbnRTY29wZSgpLl9fZGVmaW5lKHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgbmV3IERlZmluaXRpb24oXG4gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlLkltcG9ydEJpbmRpbmcsXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNsYXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5vZGUpIHtcbiAgICAgICAgbGV0IGxvY2FsID0gKG5vZGUubG9jYWwgfHwgbm9kZS5pZCk7XG4gICAgICAgIGlmIChsb2NhbCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdEltcG9ydChsb2NhbCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyKG5vZGUpIHtcbiAgICAgICAgbGV0IGxvY2FsID0gKG5vZGUubG9jYWwgfHwgbm9kZS5pZCk7XG4gICAgICAgIHRoaXMudmlzaXRJbXBvcnQobG9jYWwsIG5vZGUpO1xuICAgIH1cblxuICAgIEltcG9ydFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGxldCBsb2NhbCA9IChub2RlLmxvY2FsIHx8IG5vZGUuaWQpO1xuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0SW1wb3J0KG5vZGUubmFtZSwgbm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0SW1wb3J0KGxvY2FsLCBub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gUmVmZXJlbmNpbmcgdmFyaWFibGVzIGFuZCBjcmVhdGluZyBiaW5kaW5ncy5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZXIgZXh0ZW5kcyBlc3JlY3Vyc2UuVmlzaXRvciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgc2NvcGVNYW5hZ2VyKSB7XG4gICAgICAgIHN1cGVyKG51bGwsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnNjb3BlTWFuYWdlciA9IHNjb3BlTWFuYWdlcjtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmlzSW5uZXJNZXRob2REZWZpbml0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY3VycmVudFNjb3BlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY29wZU1hbmFnZXIuX19jdXJyZW50U2NvcGU7XG4gICAgfVxuXG4gICAgY2xvc2Uobm9kZSkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50U2NvcGUoKSAmJiBub2RlID09PSB0aGlzLmN1cnJlbnRTY29wZSgpLmJsb2NrKSB7XG4gICAgICAgICAgICB0aGlzLnNjb3BlTWFuYWdlci5fX2N1cnJlbnRTY29wZSA9IHRoaXMuY3VycmVudFNjb3BlKCkuX19jbG9zZSh0aGlzLnNjb3BlTWFuYWdlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoSW5uZXJNZXRob2REZWZpbml0aW9uKGlzSW5uZXJNZXRob2REZWZpbml0aW9uKSB7XG4gICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuaXNJbm5lck1ldGhvZERlZmluaXRpb247XG4gICAgICAgIHRoaXMuaXNJbm5lck1ldGhvZERlZmluaXRpb24gPSBpc0lubmVyTWV0aG9kRGVmaW5pdGlvbjtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cblxuICAgIHBvcElubmVyTWV0aG9kRGVmaW5pdGlvbihpc0lubmVyTWV0aG9kRGVmaW5pdGlvbikge1xuICAgICAgICB0aGlzLmlzSW5uZXJNZXRob2REZWZpbml0aW9uID0gaXNJbm5lck1ldGhvZERlZmluaXRpb247XG4gICAgfVxuXG4gICAgbWF0ZXJpYWxpemVURFpTY29wZShub2RlLCBpdGVyYXRpb25Ob2RlKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXJ1bnRpbWUtc2VtYW50aWNzLWZvcmluLWRpdi1vZmV4cHJlc3Npb25ldmFsdWF0aW9uLWFic3RyYWN0LW9wZXJhdGlvblxuICAgICAgICAvLyBURFogc2NvcGUgaGlkZXMgdGhlIGRlY2xhcmF0aW9uJ3MgbmFtZXMuXG4gICAgICAgIHRoaXMuc2NvcGVNYW5hZ2VyLl9fbmVzdFREWlNjb3BlKG5vZGUsIGl0ZXJhdGlvbk5vZGUpO1xuICAgICAgICB0aGlzLnZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbih0aGlzLmN1cnJlbnRTY29wZSgpLCBWYXJpYWJsZS5URFosIGl0ZXJhdGlvbk5vZGUubGVmdCwgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbWF0ZXJpYWxpemVJdGVyYXRpb25TY29wZShub2RlKSB7XG4gICAgICAgIC8vIEdlbmVyYXRlIGl0ZXJhdGlvbiBzY29wZSBmb3IgdXBwZXIgRm9ySW4vRm9yT2YgU3RhdGVtZW50cy5cbiAgICAgICAgdmFyIGxldE9yQ29uc3REZWNsO1xuICAgICAgICB0aGlzLnNjb3BlTWFuYWdlci5fX25lc3RGb3JTY29wZShub2RlKTtcbiAgICAgICAgbGV0T3JDb25zdERlY2wgPSBub2RlLmxlZnQ7XG4gICAgICAgIHRoaXMudmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKHRoaXMuY3VycmVudFNjb3BlKCksIFZhcmlhYmxlLlZhcmlhYmxlLCBsZXRPckNvbnN0RGVjbCwgMCk7XG4gICAgICAgIHRoaXMudmlzaXRQYXR0ZXJuKGxldE9yQ29uc3REZWNsLmRlY2xhcmF0aW9uc1swXS5pZCwgKHBhdHRlcm4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCkuX19yZWZlcmVuY2luZyhwYXR0ZXJuLCBSZWZlcmVuY2UuV1JJVEUsIG5vZGUucmlnaHQsIG51bGwsIHRydWUsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWZlcmVuY2luZ0RlZmF1bHRWYWx1ZShwYXR0ZXJuLCBhc3NpZ25tZW50cywgbWF5YmVJbXBsaWNpdEdsb2JhbCwgaW5pdCkge1xuICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuY3VycmVudFNjb3BlKCk7XG4gICAgICAgIGFzc2lnbm1lbnRzLmZvckVhY2goYXNzaWdubWVudCA9PiB7XG4gICAgICAgICAgICBzY29wZS5fX3JlZmVyZW5jaW5nKFxuICAgICAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgUmVmZXJlbmNlLldSSVRFLFxuICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQucmlnaHQsXG4gICAgICAgICAgICAgICAgbWF5YmVJbXBsaWNpdEdsb2JhbCxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuICE9PSBhc3NpZ25tZW50LmxlZnQsXG4gICAgICAgICAgICAgICAgaW5pdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZpc2l0UGF0dGVybihub2RlLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7cHJvY2Vzc1JpZ2h0SGFuZE5vZGVzOiBmYWxzZX1cbiAgICAgICAgfVxuICAgICAgICB0cmF2ZXJzZUlkZW50aWZpZXJJblBhdHRlcm4oXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgb3B0aW9ucy5wcm9jZXNzUmlnaHRIYW5kTm9kZXMgPyB0aGlzIDogbnVsbCxcbiAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2aXNpdEZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgdmFyIGksIGl6O1xuICAgICAgICAvLyBGdW5jdGlvbkRlY2xhcmF0aW9uIG5hbWUgaXMgZGVmaW5lZCBpbiB1cHBlciBzY29wZVxuICAgICAgICAvLyBOT1RFOiBOb3QgcmVmZXJyaW5nIHZhcmlhYmxlU2NvcGUuIEl0IGlzIGludGVuZGVkLlxuICAgICAgICAvLyBTaW5jZVxuICAgICAgICAvLyAgaW4gRVM1LCBGdW5jdGlvbkRlY2xhcmF0aW9uIHNob3VsZCBiZSBpbiBGdW5jdGlvbkJvZHkuXG4gICAgICAgIC8vICBpbiBFUzYsIEZ1bmN0aW9uRGVjbGFyYXRpb24gc2hvdWxkIGJlIGJsb2NrIHNjb3BlZC5cbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIGlkIGlzIGRlZmluZWQgaW4gdXBwZXIgc2NvcGVcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCkuX19kZWZpbmUobm9kZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgbmV3IERlZmluaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZS5GdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZ1bmN0aW9uRXhwcmVzc2lvbiB3aXRoIG5hbWUgY3JlYXRlcyBpdHMgc3BlY2lhbCBzY29wZTtcbiAgICAgICAgLy8gRnVuY3Rpb25FeHByZXNzaW9uTmFtZVNjb3BlLlxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9uICYmIG5vZGUuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2NvcGVNYW5hZ2VyLl9fbmVzdEZ1bmN0aW9uRXhwcmVzc2lvbk5hbWVTY29wZShub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnNpZGVyIHRoaXMgZnVuY3Rpb24gaXMgaW4gdGhlIE1ldGhvZERlZmluaXRpb24uXG4gICAgICAgIHRoaXMuc2NvcGVNYW5hZ2VyLl9fbmVzdEZ1bmN0aW9uU2NvcGUobm9kZSwgdGhpcy5pc0lubmVyTWV0aG9kRGVmaW5pdGlvbik7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zLlxuICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXRQYXR0ZXJuKG5vZGUucGFyYW1zW2ldLCB7cHJvY2Vzc1JpZ2h0SGFuZE5vZGVzOiB0cnVlfSwgKHBhdHRlcm4sIGluZm8pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTY29wZSgpLl9fZGVmaW5lKHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJEZWZpbml0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5yZXN0XG4gICAgICAgICAgICAgICAgICAgICkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2luZ0RlZmF1bHRWYWx1ZShwYXR0ZXJuLCBpbmZvLmFzc2lnbm1lbnRzLCBudWxsLCB0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUncyBhIHJlc3QgYXJndW1lbnQsIGFkZCB0aGF0XG4gICAgICAgIGlmIChub2RlLnJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXRQYXR0ZXJuKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnUmVzdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBub2RlLnJlc3RcbiAgICAgICAgICAgIH0sIChwYXR0ZXJuKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKS5fX2RlZmluZShwYXR0ZXJuLFxuICAgICAgICAgICAgICAgICAgICBuZXcgUGFyYW1ldGVyRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJhbXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2tpcCBCbG9ja1N0YXRlbWVudCB0byBwcmV2ZW50IGNyZWF0aW5nIEJsb2NrU3RhdGVtZW50IHNjb3BlLlxuICAgICAgICBpZiAobm9kZS5ib2R5LnR5cGUgPT09IFN5bnRheC5CbG9ja1N0YXRlbWVudCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUuYm9keSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KG5vZGUuYm9keSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlKG5vZGUpO1xuICAgIH1cblxuICAgIHZpc2l0Q2xhc3Mobm9kZSkge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSBTeW50YXguQ2xhc3NEZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKS5fX2RlZmluZShub2RlLmlkLFxuICAgICAgICAgICAgICAgICAgICBuZXcgRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlLkNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRklYTUU6IE1heWJlIGNvbnNpZGVyIFREWi5cbiAgICAgICAgdGhpcy52aXNpdChub2RlLnN1cGVyQ2xhc3MpO1xuXG4gICAgICAgIHRoaXMuc2NvcGVNYW5hZ2VyLl9fbmVzdENsYXNzU2NvcGUobm9kZSk7XG5cbiAgICAgICAgaWYgKG5vZGUuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCkuX19kZWZpbmUobm9kZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgbmV3IERlZmluaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZS5DbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0KG5vZGUuYm9keSk7XG5cbiAgICAgICAgdGhpcy5jbG9zZShub2RlKTtcbiAgICB9XG5cbiAgICB2aXNpdFByb3BlcnR5KG5vZGUpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzLCBpc01ldGhvZERlZmluaXRpb247XG4gICAgICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KG5vZGUua2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzTWV0aG9kRGVmaW5pdGlvbiA9IG5vZGUudHlwZSA9PT0gU3ludGF4Lk1ldGhvZERlZmluaXRpb247XG4gICAgICAgIGlmIChpc01ldGhvZERlZmluaXRpb24pIHtcbiAgICAgICAgICAgIHByZXZpb3VzID0gdGhpcy5wdXNoSW5uZXJNZXRob2REZWZpbml0aW9uKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXQobm9kZS52YWx1ZSk7XG4gICAgICAgIGlmIChpc01ldGhvZERlZmluaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucG9wSW5uZXJNZXRob2REZWZpbml0aW9uKHByZXZpb3VzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZpc2l0Rm9ySW4obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT09IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uICYmIG5vZGUubGVmdC5raW5kICE9PSAndmFyJykge1xuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbGl6ZVREWlNjb3BlKG5vZGUucmlnaHQsIG5vZGUpO1xuICAgICAgICAgICAgdGhpcy52aXNpdChub2RlLnJpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2Uobm9kZS5yaWdodCk7XG5cbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxpemVJdGVyYXRpb25TY29wZShub2RlKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXQobm9kZS5ib2R5KTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2Uobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT09IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdChub2RlLmxlZnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRQYXR0ZXJuKG5vZGUubGVmdC5kZWNsYXJhdGlvbnNbMF0uaWQsIChwYXR0ZXJuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCkuX19yZWZlcmVuY2luZyhwYXR0ZXJuLCBSZWZlcmVuY2UuV1JJVEUsIG5vZGUucmlnaHQsIG51bGwsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0UGF0dGVybihub2RlLmxlZnQsIHtwcm9jZXNzUmlnaHRIYW5kTm9kZXM6IHRydWV9LCAocGF0dGVybiwgaW5mbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF5YmVJbXBsaWNpdEdsb2JhbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U2NvcGUoKS5pc1N0cmljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVJbXBsaWNpdEdsb2JhbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2luZ0RlZmF1bHRWYWx1ZShwYXR0ZXJuLCBpbmZvLmFzc2lnbm1lbnRzLCBtYXliZUltcGxpY2l0R2xvYmFsLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCkuX19yZWZlcmVuY2luZyhwYXR0ZXJuLCBSZWZlcmVuY2UuV1JJVEUsIG5vZGUucmlnaHQsIG1heWJlSW1wbGljaXRHbG9iYWwsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlzaXQobm9kZS5yaWdodCk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KG5vZGUuYm9keSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24odmFyaWFibGVUYXJnZXRTY29wZSwgdHlwZSwgbm9kZSwgaW5kZXgsIGZyb21URFopIHtcbiAgICAgICAgLy8gSWYgdGhpcyB3YXMgY2FsbGVkIHRvIGluaXRpYWxpemUgYSBURFogc2NvcGUsIHRoaXMgbmVlZHMgdG8gbWFrZSBkZWZpbml0aW9ucywgYnV0IGRvZXNuJ3QgbWFrZSByZWZlcmVuY2VzLlxuICAgICAgICB2YXIgZGVjbCwgaW5pdDtcblxuICAgICAgICBkZWNsID0gbm9kZS5kZWNsYXJhdGlvbnNbaW5kZXhdO1xuICAgICAgICBpbml0ID0gZGVjbC5pbml0O1xuICAgICAgICB0aGlzLnZpc2l0UGF0dGVybihkZWNsLmlkLCB7cHJvY2Vzc1JpZ2h0SGFuZE5vZGVzOiAhZnJvbVREWn0sIChwYXR0ZXJuLCBpbmZvKSA9PiB7XG4gICAgICAgICAgICB2YXJpYWJsZVRhcmdldFNjb3BlLl9fZGVmaW5lKHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgbmV3IERlZmluaXRpb24oXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIGRlY2wsXG4gICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBub2RlLmtpbmRcbiAgICAgICAgICAgICAgICApKTtcblxuICAgICAgICAgICAgaWYgKCFmcm9tVERaKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2luZ0RlZmF1bHRWYWx1ZShwYXR0ZXJuLCBpbmZvLmFzc2lnbm1lbnRzLCBudWxsLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbml0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKS5fX3JlZmVyZW5jaW5nKHBhdHRlcm4sIFJlZmVyZW5jZS5XUklURSwgaW5pdCwgbnVsbCwgIWluZm8udG9wTGV2ZWwsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBBc3NpZ25tZW50RXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmIChQYXR0ZXJuVmlzaXRvci5pc1BhdHRlcm4obm9kZS5sZWZ0KSkge1xuICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICc9Jykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRQYXR0ZXJuKG5vZGUubGVmdCwge3Byb2Nlc3NSaWdodEhhbmROb2RlczogdHJ1ZX0sIChwYXR0ZXJuLCBpbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXliZUltcGxpY2l0R2xvYmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTY29wZSgpLmlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXliZUltcGxpY2l0R2xvYmFsID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jaW5nRGVmYXVsdFZhbHVlKHBhdHRlcm4sIGluZm8uYXNzaWdubWVudHMsIG1heWJlSW1wbGljaXRHbG9iYWwsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKS5fX3JlZmVyZW5jaW5nKHBhdHRlcm4sIFJlZmVyZW5jZS5XUklURSwgbm9kZS5yaWdodCwgbWF5YmVJbXBsaWNpdEdsb2JhbCwgIWluZm8udG9wTGV2ZWwsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKS5fX3JlZmVyZW5jaW5nKG5vZGUubGVmdCwgUmVmZXJlbmNlLlJXLCBub2RlLnJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXQobm9kZS5sZWZ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0KG5vZGUucmlnaHQpO1xuICAgIH1cblxuICAgIENhdGNoQ2xhdXNlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5zY29wZU1hbmFnZXIuX19uZXN0Q2F0Y2hTY29wZShub2RlKTtcblxuICAgICAgICB0aGlzLnZpc2l0UGF0dGVybihub2RlLnBhcmFtLCB7cHJvY2Vzc1JpZ2h0SGFuZE5vZGVzOiB0cnVlfSwgKHBhdHRlcm4sIGluZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCkuX19kZWZpbmUocGF0dGVybixcbiAgICAgICAgICAgICAgICBuZXcgRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUuQ2F0Y2hDbGF1c2UsXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucGFyYW0sXG4gICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIHRoaXMucmVmZXJlbmNpbmdEZWZhdWx0VmFsdWUocGF0dGVybiwgaW5mby5hc3NpZ25tZW50cywgbnVsbCwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnZpc2l0KG5vZGUuYm9keSk7XG5cbiAgICAgICAgdGhpcy5jbG9zZShub2RlKTtcbiAgICB9XG5cbiAgICBQcm9ncmFtKG5vZGUpIHtcbiAgICAgICAgdGhpcy5zY29wZU1hbmFnZXIuX19uZXN0R2xvYmFsU2NvcGUobm9kZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2NvcGVNYW5hZ2VyLl9faXNOb2RlanNTY29wZSgpKSB7XG4gICAgICAgICAgICAvLyBGb3JjZSBzdHJpY3RuZXNzIG9mIEdsb2JhbFNjb3BlIHRvIGZhbHNlIHdoZW4gdXNpbmcgbm9kZS5qcyBzY29wZS5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCkuaXNTdHJpY3QgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2NvcGVNYW5hZ2VyLl9fbmVzdEZ1bmN0aW9uU2NvcGUobm9kZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2NvcGVNYW5hZ2VyLl9faXNFUzYoKSAmJiB0aGlzLnNjb3BlTWFuYWdlci5pc01vZHVsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnNjb3BlTWFuYWdlci5fX25lc3RNb2R1bGVTY29wZShub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNjb3BlTWFuYWdlci5pc1N0cmljdE1vZGVTdXBwb3J0ZWQoKSAmJiB0aGlzLnNjb3BlTWFuYWdlci5pc0ltcGxpZWRTdHJpY3QoKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKS5pc1N0cmljdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSk7XG4gICAgICAgIHRoaXMuY2xvc2Uobm9kZSk7XG4gICAgfVxuXG4gICAgSWRlbnRpZmllcihub2RlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjb3BlKCkuX19yZWZlcmVuY2luZyhub2RlKTtcbiAgICB9XG5cbiAgICBVcGRhdGVFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKFBhdHRlcm5WaXNpdG9yLmlzUGF0dGVybihub2RlLmFyZ3VtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKS5fX3JlZmVyZW5jaW5nKG5vZGUuYXJndW1lbnQsIFJlZmVyZW5jZS5SVywgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBNZW1iZXJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdChub2RlLm9iamVjdCk7XG4gICAgICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KG5vZGUucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgUHJvcGVydHkobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0UHJvcGVydHkobm9kZSk7XG4gICAgfVxuXG4gICAgTWV0aG9kRGVmaW5pdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXRQcm9wZXJ0eShub2RlKTtcbiAgICB9XG5cbiAgICBCcmVha1N0YXRlbWVudCgpIHt9XG5cbiAgICBDb250aW51ZVN0YXRlbWVudCgpIHt9XG5cbiAgICBMYWJlbGVkU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdChub2RlLmJvZHkpO1xuICAgIH1cblxuICAgIEZvclN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIC8vIENyZWF0ZSBGb3JTdGF0ZW1lbnQgZGVjbGFyYXRpb24uXG4gICAgICAgIC8vIE5PVEU6IEluIEVTNiwgRm9yU3RhdGVtZW50IGR5bmFtaWNhbGx5IGdlbmVyYXRlc1xuICAgICAgICAvLyBwZXIgaXRlcmF0aW9uIGVudmlyb25tZW50LiBIb3dldmVyLCBlc2NvcGUgaXNcbiAgICAgICAgLy8gYSBzdGF0aWMgYW5hbHl6ZXIsIHdlIG9ubHkgZ2VuZXJhdGUgb25lIHNjb3BlIGZvciBGb3JTdGF0ZW1lbnQuXG4gICAgICAgIGlmIChub2RlLmluaXQgJiYgbm9kZS5pbml0LnR5cGUgPT09IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uICYmIG5vZGUuaW5pdC5raW5kICE9PSAndmFyJykge1xuICAgICAgICAgICAgdGhpcy5zY29wZU1hbmFnZXIuX19uZXN0Rm9yU2NvcGUobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSk7XG5cbiAgICAgICAgdGhpcy5jbG9zZShub2RlKTtcbiAgICB9XG5cbiAgICBDbGFzc0V4cHJlc3Npb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Q2xhc3Mobm9kZSk7XG4gICAgfVxuXG4gICAgQ2xhc3NEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXRDbGFzcyhub2RlKTtcbiAgICB9XG5cbiAgICBDYWxsRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIC8vIENoZWNrIHRoaXMgaXMgZGlyZWN0IGNhbGwgdG8gZXZhbFxuICAgICAgICBpZiAoIXRoaXMuc2NvcGVNYW5hZ2VyLl9faWdub3JlRXZhbCgpICYmIG5vZGUuY2FsbGVlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdldmFsJykge1xuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBzaG91bGQgYmUgYHZhcmlhYmxlU2NvcGVgLiBTaW5jZSBkaXJlY3QgZXZhbCBjYWxsIGFsd2F5cyBjcmVhdGVzIExleGljYWwgZW52aXJvbm1lbnQgYW5kXG4gICAgICAgICAgICAvLyBsZXQgLyBjb25zdCBzaG91bGQgYmUgZW5jbG9zZWQgaW50byBpdC4gT25seSBWYXJpYWJsZURlY2xhcmF0aW9uIGFmZmVjdHMgb24gdGhlIGNhbGxlcidzIGVudmlyb25tZW50LlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKS52YXJpYWJsZVNjb3BlLl9fZGV0ZWN0RXZhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlKTtcbiAgICB9XG5cbiAgICBCbG9ja1N0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGlmICh0aGlzLnNjb3BlTWFuYWdlci5fX2lzRVM2KCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2NvcGVNYW5hZ2VyLl9fbmVzdEJsb2NrU2NvcGUobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSk7XG5cbiAgICAgICAgdGhpcy5jbG9zZShub2RlKTtcbiAgICB9XG5cbiAgICBUaGlzRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKS52YXJpYWJsZVNjb3BlLl9fZGV0ZWN0VGhpcygpO1xuICAgIH1cblxuICAgIFdpdGhTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0KG5vZGUub2JqZWN0KTtcbiAgICAgICAgLy8gVGhlbiBuZXN0IHNjb3BlIGZvciBXaXRoU3RhdGVtZW50LlxuICAgICAgICB0aGlzLnNjb3BlTWFuYWdlci5fX25lc3RXaXRoU2NvcGUobm9kZSk7XG5cbiAgICAgICAgdGhpcy52aXNpdChub2RlLmJvZHkpO1xuXG4gICAgICAgIHRoaXMuY2xvc2Uobm9kZSk7XG4gICAgfVxuXG4gICAgVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIHZhciB2YXJpYWJsZVRhcmdldFNjb3BlLCBpLCBpeiwgZGVjbDtcbiAgICAgICAgdmFyaWFibGVUYXJnZXRTY29wZSA9IChub2RlLmtpbmQgPT09ICd2YXInKSA/IHRoaXMuY3VycmVudFNjb3BlKCkudmFyaWFibGVTY29wZSA6IHRoaXMuY3VycmVudFNjb3BlKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgZGVjbCA9IG5vZGUuZGVjbGFyYXRpb25zW2ldO1xuICAgICAgICAgICAgdGhpcy52aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24odmFyaWFibGVUYXJnZXRTY29wZSwgVmFyaWFibGUuVmFyaWFibGUsIG5vZGUsIGkpO1xuICAgICAgICAgICAgaWYgKGRlY2wuaW5pdCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXQoZGVjbC5pbml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNlYyAxMy4xMS44XG4gICAgU3dpdGNoU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIGksIGl6O1xuXG4gICAgICAgIHRoaXMudmlzaXQobm9kZS5kaXNjcmltaW5hbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLnNjb3BlTWFuYWdlci5fX2lzRVM2KCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2NvcGVNYW5hZ2VyLl9fbmVzdFN3aXRjaFNjb3BlKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmNhc2VzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXQobm9kZS5jYXNlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlKG5vZGUpO1xuICAgIH1cblxuICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0RnVuY3Rpb24obm9kZSk7XG4gICAgfVxuXG4gICAgRnVuY3Rpb25FeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdEZ1bmN0aW9uKG5vZGUpO1xuICAgIH1cblxuICAgIEZvck9mU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdEZvckluKG5vZGUpO1xuICAgIH1cblxuICAgIEZvckluU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdEZvckluKG5vZGUpO1xuICAgIH1cblxuICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdEZ1bmN0aW9uKG5vZGUpO1xuICAgIH1cblxuICAgIEltcG9ydERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgdmFyIGltcG9ydGVyO1xuXG4gICAgICAgIGFzc2VydCh0aGlzLnNjb3BlTWFuYWdlci5fX2lzRVM2KCkgJiYgdGhpcy5zY29wZU1hbmFnZXIuaXNNb2R1bGUoKSwgJ0ltcG9ydERlY2xhcmF0aW9uIHNob3VsZCBhcHBlYXIgd2hlbiB0aGUgbW9kZSBpcyBFUzYgYW5kIGluIHRoZSBtb2R1bGUgY29udGV4dC4nKTtcblxuICAgICAgICBpbXBvcnRlciA9IG5ldyBJbXBvcnRlcihub2RlLCB0aGlzKTtcbiAgICAgICAgaW1wb3J0ZXIudmlzaXQobm9kZSk7XG4gICAgfVxuXG4gICAgdmlzaXRFeHBvcnREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0KG5vZGUuZGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUpO1xuICAgIH1cblxuICAgIEV4cG9ydERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdEV4cG9ydERlY2xhcmF0aW9uKG5vZGUpO1xuICAgIH1cblxuICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0RXhwb3J0RGVjbGFyYXRpb24obm9kZSk7XG4gICAgfVxuXG4gICAgRXhwb3J0U3BlY2lmaWVyKG5vZGUpIHtcbiAgICAgICAgbGV0IGxvY2FsID0gKG5vZGUuaWQgfHwgbm9kZS5sb2NhbCk7XG4gICAgICAgIHRoaXMudmlzaXQobG9jYWwpO1xuICAgIH1cblxuICAgIE1ldGFQcm9wZXJ0eSgpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZy5cbiAgICB9XG59XG5cbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/node_modules/escope/lib/scope-manager.js b/node_modules/escope/lib/scope-manager.js new file mode 100644 index 000000000..66b37c94f --- /dev/null +++ b/node_modules/escope/lib/scope-manager.js @@ -0,0 +1,297 @@ +'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 (C) 2015 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. + */ + +var _es6WeakMap = require('es6-weak-map'); + +var _es6WeakMap2 = _interopRequireDefault(_es6WeakMap); + +var _scope = require('./scope'); + +var _scope2 = _interopRequireDefault(_scope); + +var _assert = require('assert'); + +var _assert2 = _interopRequireDefault(_assert); + +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"); } } + +/** + * @class ScopeManager + */ + +var ScopeManager = function () { + function ScopeManager(options) { + _classCallCheck(this, ScopeManager); + + this.scopes = []; + this.globalScope = null; + this.__nodeToScope = new _es6WeakMap2.default(); + this.__currentScope = null; + this.__options = options; + this.__declaredVariables = new _es6WeakMap2.default(); + } + + _createClass(ScopeManager, [{ + key: '__useDirective', + value: function __useDirective() { + return this.__options.directive; + } + }, { + key: '__isOptimistic', + value: function __isOptimistic() { + return this.__options.optimistic; + } + }, { + key: '__ignoreEval', + value: function __ignoreEval() { + return this.__options.ignoreEval; + } + }, { + key: '__isNodejsScope', + value: function __isNodejsScope() { + return this.__options.nodejsScope; + } + }, { + key: 'isModule', + value: function isModule() { + return this.__options.sourceType === 'module'; + } + }, { + key: 'isImpliedStrict', + value: function isImpliedStrict() { + return this.__options.impliedStrict; + } + }, { + key: 'isStrictModeSupported', + value: function isStrictModeSupported() { + return this.__options.ecmaVersion >= 5; + } + + // Returns appropriate scope for this node. + + }, { + key: '__get', + value: function __get(node) { + return this.__nodeToScope.get(node); + } + + /** + * Get variables that are declared by the node. + * + * "are declared by the node" means the node is same as `Variable.defs[].node` or `Variable.defs[].parent`. + * If the node declares nothing, this method returns an empty array. + * CAUTION: This API is experimental. See https://github.com/estools/escope/pull/69 for more details. + * + * @param {Esprima.Node} node - a node to get. + * @returns {Variable[]} variables that declared by the node. + */ + + }, { + key: 'getDeclaredVariables', + value: function getDeclaredVariables(node) { + return this.__declaredVariables.get(node) || []; + } + + /** + * acquire scope from node. + * @method ScopeManager#acquire + * @param {Esprima.Node} node - node for the acquired scope. + * @param {boolean=} inner - look up the most inner scope, default value is false. + * @return {Scope?} + */ + + }, { + key: 'acquire', + value: function acquire(node, inner) { + var scopes, scope, i, iz; + + function predicate(scope) { + if (scope.type === 'function' && scope.functionExpressionScope) { + return false; + } + if (scope.type === 'TDZ') { + return false; + } + return true; + } + + scopes = this.__get(node); + if (!scopes || scopes.length === 0) { + return null; + } + + // Heuristic selection from all scopes. + // If you would like to get all scopes, please use ScopeManager#acquireAll. + if (scopes.length === 1) { + return scopes[0]; + } + + if (inner) { + for (i = scopes.length - 1; i >= 0; --i) { + scope = scopes[i]; + if (predicate(scope)) { + return scope; + } + } + } else { + for (i = 0, iz = scopes.length; i < iz; ++i) { + scope = scopes[i]; + if (predicate(scope)) { + return scope; + } + } + } + + return null; + } + + /** + * acquire all scopes from node. + * @method ScopeManager#acquireAll + * @param {Esprima.Node} node - node for the acquired scope. + * @return {Scope[]?} + */ + + }, { + key: 'acquireAll', + value: function acquireAll(node) { + return this.__get(node); + } + + /** + * release the node. + * @method ScopeManager#release + * @param {Esprima.Node} node - releasing node. + * @param {boolean=} inner - look up the most inner scope, default value is false. + * @return {Scope?} upper scope for the node. + */ + + }, { + key: 'release', + value: function release(node, inner) { + var scopes, scope; + scopes = this.__get(node); + if (scopes && scopes.length) { + scope = scopes[0].upper; + if (!scope) { + return null; + } + return this.acquire(scope.block, inner); + } + return null; + } + }, { + key: 'attach', + value: function attach() {} + }, { + key: 'detach', + value: function detach() {} + }, { + key: '__nestScope', + value: function __nestScope(scope) { + if (scope instanceof _scope.GlobalScope) { + (0, _assert2.default)(this.__currentScope === null); + this.globalScope = scope; + } + this.__currentScope = scope; + return scope; + } + }, { + key: '__nestGlobalScope', + value: function __nestGlobalScope(node) { + return this.__nestScope(new _scope.GlobalScope(this, node)); + } + }, { + key: '__nestBlockScope', + value: function __nestBlockScope(node, isMethodDefinition) { + return this.__nestScope(new _scope.BlockScope(this, this.__currentScope, node)); + } + }, { + key: '__nestFunctionScope', + value: function __nestFunctionScope(node, isMethodDefinition) { + return this.__nestScope(new _scope.FunctionScope(this, this.__currentScope, node, isMethodDefinition)); + } + }, { + key: '__nestForScope', + value: function __nestForScope(node) { + return this.__nestScope(new _scope.ForScope(this, this.__currentScope, node)); + } + }, { + key: '__nestCatchScope', + value: function __nestCatchScope(node) { + return this.__nestScope(new _scope.CatchScope(this, this.__currentScope, node)); + } + }, { + key: '__nestWithScope', + value: function __nestWithScope(node) { + return this.__nestScope(new _scope.WithScope(this, this.__currentScope, node)); + } + }, { + key: '__nestClassScope', + value: function __nestClassScope(node) { + return this.__nestScope(new _scope.ClassScope(this, this.__currentScope, node)); + } + }, { + key: '__nestSwitchScope', + value: function __nestSwitchScope(node) { + return this.__nestScope(new _scope.SwitchScope(this, this.__currentScope, node)); + } + }, { + key: '__nestModuleScope', + value: function __nestModuleScope(node) { + return this.__nestScope(new _scope.ModuleScope(this, this.__currentScope, node)); + } + }, { + key: '__nestTDZScope', + value: function __nestTDZScope(node) { + return this.__nestScope(new _scope.TDZScope(this, this.__currentScope, node)); + } + }, { + key: '__nestFunctionExpressionNameScope', + value: function __nestFunctionExpressionNameScope(node) { + return this.__nestScope(new _scope.FunctionExpressionNameScope(this, this.__currentScope, node)); + } + }, { + key: '__isES6', + value: function __isES6() { + return this.__options.ecmaVersion >= 6; + } + }]); + + return ScopeManager; +}(); + +/* vim: set sw=4 ts=4 et tw=80 : */ + + +exports.default = ScopeManager; +//# sourceMappingURL=data:application/json;base64,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b3VyY2VzQ29udGVudCI6WyIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbmltcG9ydCBXZWFrTWFwIGZyb20gJ2VzNi13ZWFrLW1hcCc7XG5pbXBvcnQgU2NvcGUgZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7XG4gICAgR2xvYmFsU2NvcGUsXG4gICAgQ2F0Y2hTY29wZSxcbiAgICBXaXRoU2NvcGUsXG4gICAgTW9kdWxlU2NvcGUsXG4gICAgQ2xhc3NTY29wZSxcbiAgICBTd2l0Y2hTY29wZSxcbiAgICBGdW5jdGlvblNjb3BlLFxuICAgIEZvclNjb3BlLFxuICAgIFREWlNjb3BlLFxuICAgIEZ1bmN0aW9uRXhwcmVzc2lvbk5hbWVTY29wZSxcbiAgICBCbG9ja1Njb3BlXG59IGZyb20gJy4vc2NvcGUnO1xuXG4vKipcbiAqIEBjbGFzcyBTY29wZU1hbmFnZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NvcGVNYW5hZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc2NvcGVzID0gW107XG4gICAgICAgIHRoaXMuZ2xvYmFsU2NvcGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9fbm9kZVRvU2NvcGUgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzLl9fY3VycmVudFNjb3BlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLl9fZGVjbGFyZWRWYXJpYWJsZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cblxuICAgIF9fdXNlRGlyZWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX29wdGlvbnMuZGlyZWN0aXZlO1xuICAgIH1cblxuICAgIF9faXNPcHRpbWlzdGljKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX29wdGlvbnMub3B0aW1pc3RpYztcbiAgICB9XG5cbiAgICBfX2lnbm9yZUV2YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fb3B0aW9ucy5pZ25vcmVFdmFsO1xuICAgIH1cblxuICAgIF9faXNOb2RlanNTY29wZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19vcHRpb25zLm5vZGVqc1Njb3BlO1xuICAgIH1cblxuICAgIGlzTW9kdWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX29wdGlvbnMuc291cmNlVHlwZSA9PT0gJ21vZHVsZSc7XG4gICAgfVxuXG4gICAgaXNJbXBsaWVkU3RyaWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX29wdGlvbnMuaW1wbGllZFN0cmljdDtcbiAgICB9XG5cbiAgICBpc1N0cmljdE1vZGVTdXBwb3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fb3B0aW9ucy5lY21hVmVyc2lvbiA+PSA1O1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYXBwcm9wcmlhdGUgc2NvcGUgZm9yIHRoaXMgbm9kZS5cbiAgICBfX2dldChub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fbm9kZVRvU2NvcGUuZ2V0KG5vZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB2YXJpYWJsZXMgdGhhdCBhcmUgZGVjbGFyZWQgYnkgdGhlIG5vZGUuXG4gICAgICpcbiAgICAgKiBcImFyZSBkZWNsYXJlZCBieSB0aGUgbm9kZVwiIG1lYW5zIHRoZSBub2RlIGlzIHNhbWUgYXMgYFZhcmlhYmxlLmRlZnNbXS5ub2RlYCBvciBgVmFyaWFibGUuZGVmc1tdLnBhcmVudGAuXG4gICAgICogSWYgdGhlIG5vZGUgZGVjbGFyZXMgbm90aGluZywgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBhcnJheS5cbiAgICAgKiBDQVVUSU9OOiBUaGlzIEFQSSBpcyBleHBlcmltZW50YWwuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXN0b29scy9lc2NvcGUvcHVsbC82OSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtFc3ByaW1hLk5vZGV9IG5vZGUgLSBhIG5vZGUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtWYXJpYWJsZVtdfSB2YXJpYWJsZXMgdGhhdCBkZWNsYXJlZCBieSB0aGUgbm9kZS5cbiAgICAgKi9cbiAgICBnZXREZWNsYXJlZFZhcmlhYmxlcyhub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fZGVjbGFyZWRWYXJpYWJsZXMuZ2V0KG5vZGUpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFjcXVpcmUgc2NvcGUgZnJvbSBub2RlLlxuICAgICAqIEBtZXRob2QgU2NvcGVNYW5hZ2VyI2FjcXVpcmVcbiAgICAgKiBAcGFyYW0ge0VzcHJpbWEuTm9kZX0gbm9kZSAtIG5vZGUgZm9yIHRoZSBhY3F1aXJlZCBzY29wZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpbm5lciAtIGxvb2sgdXAgdGhlIG1vc3QgaW5uZXIgc2NvcGUsIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXG4gICAgICogQHJldHVybiB7U2NvcGU/fVxuICAgICAqL1xuICAgIGFjcXVpcmUobm9kZSwgaW5uZXIpIHtcbiAgICAgICAgdmFyIHNjb3Blcywgc2NvcGUsIGksIGl6O1xuXG4gICAgICAgIGZ1bmN0aW9uIHByZWRpY2F0ZShzY29wZSkge1xuICAgICAgICAgICAgaWYgKHNjb3BlLnR5cGUgPT09ICdmdW5jdGlvbicgJiYgc2NvcGUuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NvcGUudHlwZSA9PT0gJ1REWicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlcyA9IHRoaXMuX19nZXQobm9kZSk7XG4gICAgICAgIGlmICghc2NvcGVzIHx8IHNjb3Blcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGV1cmlzdGljIHNlbGVjdGlvbiBmcm9tIGFsbCBzY29wZXMuXG4gICAgICAgIC8vIElmIHlvdSB3b3VsZCBsaWtlIHRvIGdldCBhbGwgc2NvcGVzLCBwbGVhc2UgdXNlIFNjb3BlTWFuYWdlciNhY3F1aXJlQWxsLlxuICAgICAgICBpZiAoc2NvcGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3Blc1swXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbm5lcikge1xuICAgICAgICAgICAgZm9yIChpID0gc2NvcGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUgPSBzY29wZXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShzY29wZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gc2NvcGVzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICBzY29wZSA9IHNjb3Blc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAocHJlZGljYXRlKHNjb3BlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWNxdWlyZSBhbGwgc2NvcGVzIGZyb20gbm9kZS5cbiAgICAgKiBAbWV0aG9kIFNjb3BlTWFuYWdlciNhY3F1aXJlQWxsXG4gICAgICogQHBhcmFtIHtFc3ByaW1hLk5vZGV9IG5vZGUgLSBub2RlIGZvciB0aGUgYWNxdWlyZWQgc2NvcGUuXG4gICAgICogQHJldHVybiB7U2NvcGVbXT99XG4gICAgICovXG4gICAgYWNxdWlyZUFsbChub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fZ2V0KG5vZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlbGVhc2UgdGhlIG5vZGUuXG4gICAgICogQG1ldGhvZCBTY29wZU1hbmFnZXIjcmVsZWFzZVxuICAgICAqIEBwYXJhbSB7RXNwcmltYS5Ob2RlfSBub2RlIC0gcmVsZWFzaW5nIG5vZGUuXG4gICAgICogQHBhcmFtIHtib29sZWFuPX0gaW5uZXIgLSBsb29rIHVwIHRoZSBtb3N0IGlubmVyIHNjb3BlLCBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxuICAgICAqIEByZXR1cm4ge1Njb3BlP30gdXBwZXIgc2NvcGUgZm9yIHRoZSBub2RlLlxuICAgICAqL1xuICAgIHJlbGVhc2Uobm9kZSwgaW5uZXIpIHtcbiAgICAgICAgdmFyIHNjb3Blcywgc2NvcGU7XG4gICAgICAgIHNjb3BlcyA9IHRoaXMuX19nZXQobm9kZSk7XG4gICAgICAgIGlmIChzY29wZXMgJiYgc2NvcGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2NvcGUgPSBzY29wZXNbMF0udXBwZXI7XG4gICAgICAgICAgICBpZiAoIXNjb3BlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3F1aXJlKHNjb3BlLmJsb2NrLCBpbm5lcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXR0YWNoKCkgeyB9XG5cbiAgICBkZXRhY2goKSB7IH1cblxuICAgIF9fbmVzdFNjb3BlKHNjb3BlKSB7XG4gICAgICAgIGlmIChzY29wZSBpbnN0YW5jZW9mIEdsb2JhbFNjb3BlKSB7XG4gICAgICAgICAgICBhc3NlcnQodGhpcy5fX2N1cnJlbnRTY29wZSA9PT0gbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbFNjb3BlID0gc2NvcGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fX2N1cnJlbnRTY29wZSA9IHNjb3BlO1xuICAgICAgICByZXR1cm4gc2NvcGU7XG4gICAgfVxuXG4gICAgX19uZXN0R2xvYmFsU2NvcGUobm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX25lc3RTY29wZShuZXcgR2xvYmFsU2NvcGUodGhpcywgbm9kZSkpO1xuICAgIH1cblxuICAgIF9fbmVzdEJsb2NrU2NvcGUobm9kZSwgaXNNZXRob2REZWZpbml0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fbmVzdFNjb3BlKG5ldyBCbG9ja1Njb3BlKHRoaXMsIHRoaXMuX19jdXJyZW50U2NvcGUsIG5vZGUpKTtcbiAgICB9XG5cbiAgICBfX25lc3RGdW5jdGlvblNjb3BlKG5vZGUsIGlzTWV0aG9kRGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5fX25lc3RTY29wZShuZXcgRnVuY3Rpb25TY29wZSh0aGlzLCB0aGlzLl9fY3VycmVudFNjb3BlLCBub2RlLCBpc01ldGhvZERlZmluaXRpb24pKTtcbiAgICB9XG5cbiAgICBfX25lc3RGb3JTY29wZShub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fbmVzdFNjb3BlKG5ldyBGb3JTY29wZSh0aGlzLCB0aGlzLl9fY3VycmVudFNjb3BlLCBub2RlKSk7XG4gICAgfVxuXG4gICAgX19uZXN0Q2F0Y2hTY29wZShub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fbmVzdFNjb3BlKG5ldyBDYXRjaFNjb3BlKHRoaXMsIHRoaXMuX19jdXJyZW50U2NvcGUsIG5vZGUpKTtcbiAgICB9XG5cbiAgICBfX25lc3RXaXRoU2NvcGUobm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX25lc3RTY29wZShuZXcgV2l0aFNjb3BlKHRoaXMsIHRoaXMuX19jdXJyZW50U2NvcGUsIG5vZGUpKTtcbiAgICB9XG5cbiAgICBfX25lc3RDbGFzc1Njb3BlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19uZXN0U2NvcGUobmV3IENsYXNzU2NvcGUodGhpcywgdGhpcy5fX2N1cnJlbnRTY29wZSwgbm9kZSkpO1xuICAgIH1cblxuICAgIF9fbmVzdFN3aXRjaFNjb3BlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19uZXN0U2NvcGUobmV3IFN3aXRjaFNjb3BlKHRoaXMsIHRoaXMuX19jdXJyZW50U2NvcGUsIG5vZGUpKTtcbiAgICB9XG5cbiAgICBfX25lc3RNb2R1bGVTY29wZShub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fbmVzdFNjb3BlKG5ldyBNb2R1bGVTY29wZSh0aGlzLCB0aGlzLl9fY3VycmVudFNjb3BlLCBub2RlKSk7XG4gICAgfVxuXG4gICAgX19uZXN0VERaU2NvcGUobm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX25lc3RTY29wZShuZXcgVERaU2NvcGUodGhpcywgdGhpcy5fX2N1cnJlbnRTY29wZSwgbm9kZSkpO1xuICAgIH1cblxuICAgIF9fbmVzdEZ1bmN0aW9uRXhwcmVzc2lvbk5hbWVTY29wZShub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fbmVzdFNjb3BlKG5ldyBGdW5jdGlvbkV4cHJlc3Npb25OYW1lU2NvcGUodGhpcywgdGhpcy5fX2N1cnJlbnRTY29wZSwgbm9kZSkpO1xuICAgIH1cblxuICAgIF9faXNFUzYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fb3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2O1xuICAgIH1cbn1cblxuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/node_modules/escope/lib/scope.js b/node_modules/escope/lib/scope.js new file mode 100644 index 000000000..88ded9c82 --- /dev/null +++ b/node_modules/escope/lib/scope.js @@ -0,0 +1,764 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ClassScope = exports.ForScope = exports.FunctionScope = exports.SwitchScope = exports.BlockScope = exports.TDZScope = exports.WithScope = exports.CatchScope = exports.FunctionExpressionNameScope = exports.ModuleScope = exports.GlobalScope = undefined; + +var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(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); } }; + +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 (C) 2015 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. + */ + +var _estraverse = require('estraverse'); + +var _es6Map = require('es6-map'); + +var _es6Map2 = _interopRequireDefault(_es6Map); + +var _reference = require('./reference'); + +var _reference2 = _interopRequireDefault(_reference); + +var _variable = require('./variable'); + +var _variable2 = _interopRequireDefault(_variable); + +var _definition = require('./definition'); + +var _definition2 = _interopRequireDefault(_definition); + +var _assert = require('assert'); + +var _assert2 = _interopRequireDefault(_assert); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function isStrictScope(scope, block, isMethodDefinition, useDirective) { + var body, i, iz, stmt, expr; + + // When upper scope is exists and strict, inner scope is also strict. + if (scope.upper && scope.upper.isStrict) { + return true; + } + + // ArrowFunctionExpression's scope is always strict scope. + if (block.type === _estraverse.Syntax.ArrowFunctionExpression) { + return true; + } + + if (isMethodDefinition) { + return true; + } + + if (scope.type === 'class' || scope.type === 'module') { + return true; + } + + if (scope.type === 'block' || scope.type === 'switch') { + return false; + } + + if (scope.type === 'function') { + if (block.type === _estraverse.Syntax.Program) { + body = block; + } else { + body = block.body; + } + } else if (scope.type === 'global') { + body = block; + } else { + return false; + } + + // Search 'use strict' directive. + if (useDirective) { + for (i = 0, iz = body.body.length; i < iz; ++i) { + stmt = body.body[i]; + if (stmt.type !== _estraverse.Syntax.DirectiveStatement) { + break; + } + if (stmt.raw === '"use strict"' || stmt.raw === '\'use strict\'') { + return true; + } + } + } else { + for (i = 0, iz = body.body.length; i < iz; ++i) { + stmt = body.body[i]; + if (stmt.type !== _estraverse.Syntax.ExpressionStatement) { + break; + } + expr = stmt.expression; + if (expr.type !== _estraverse.Syntax.Literal || typeof expr.value !== 'string') { + break; + } + if (expr.raw != null) { + if (expr.raw === '"use strict"' || expr.raw === '\'use strict\'') { + return true; + } + } else { + if (expr.value === 'use strict') { + return true; + } + } + } + } + return false; +} + +function registerScope(scopeManager, scope) { + var scopes; + + scopeManager.scopes.push(scope); + + scopes = scopeManager.__nodeToScope.get(scope.block); + if (scopes) { + scopes.push(scope); + } else { + scopeManager.__nodeToScope.set(scope.block, [scope]); + } +} + +function shouldBeStatically(def) { + return def.type === _variable2.default.ClassName || def.type === _variable2.default.Variable && def.parent.kind !== 'var'; +} + +/** + * @class Scope + */ + +var Scope = function () { + function Scope(scopeManager, type, upperScope, block, isMethodDefinition) { + _classCallCheck(this, Scope); + + /** + * One of 'TDZ', 'module', 'block', 'switch', 'function', 'catch', 'with', 'function', 'class', 'global'. + * @member {String} Scope#type + */ + this.type = type; + /** + * The scoped {@link Variable}s of this scope, as { Variable.name + * : Variable }. + * @member {Map} Scope#set + */ + this.set = new _es6Map2.default(); + /** + * The tainted variables of this scope, as { Variable.name : + * boolean }. + * @member {Map} Scope#taints */ + this.taints = new _es6Map2.default(); + /** + * Generally, through the lexical scoping of JS you can always know + * which variable an identifier in the source code refers to. There are + * a few exceptions to this rule. With 'global' and 'with' scopes you + * can only decide at runtime which variable a reference refers to. + * Moreover, if 'eval()' is used in a scope, it might introduce new + * bindings in this or its parent scopes. + * All those scopes are considered 'dynamic'. + * @member {boolean} Scope#dynamic + */ + this.dynamic = this.type === 'global' || this.type === 'with'; + /** + * A reference to the scope-defining syntax node. + * @member {esprima.Node} Scope#block + */ + this.block = block; + /** + * The {@link Reference|references} that are not resolved with this scope. + * @member {Reference[]} Scope#through + */ + this.through = []; + /** + * The scoped {@link Variable}s of this scope. In the case of a + * 'function' scope this includes the automatic argument arguments as + * its first element, as well as all further formal arguments. + * @member {Variable[]} Scope#variables + */ + this.variables = []; + /** + * Any variable {@link Reference|reference} found in this scope. This + * includes occurrences of local variables as well as variables from + * parent scopes (including the global scope). For local variables + * this also includes defining occurrences (like in a 'var' statement). + * In a 'function' scope this does not include the occurrences of the + * formal parameter in the parameter list. + * @member {Reference[]} Scope#references + */ + this.references = []; + + /** + * For 'global' and 'function' scopes, this is a self-reference. For + * other scope types this is the variableScope value of the + * parent scope. + * @member {Scope} Scope#variableScope + */ + this.variableScope = this.type === 'global' || this.type === 'function' || this.type === 'module' ? this : upperScope.variableScope; + /** + * Whether this scope is created by a FunctionExpression. + * @member {boolean} Scope#functionExpressionScope + */ + this.functionExpressionScope = false; + /** + * Whether this is a scope that contains an 'eval()' invocation. + * @member {boolean} Scope#directCallToEvalScope + */ + this.directCallToEvalScope = false; + /** + * @member {boolean} Scope#thisFound + */ + this.thisFound = false; + + this.__left = []; + + /** + * Reference to the parent {@link Scope|scope}. + * @member {Scope} Scope#upper + */ + this.upper = upperScope; + /** + * Whether 'use strict' is in effect in this scope. + * @member {boolean} Scope#isStrict + */ + this.isStrict = isStrictScope(this, block, isMethodDefinition, scopeManager.__useDirective()); + + /** + * List of nested {@link Scope}s. + * @member {Scope[]} Scope#childScopes + */ + this.childScopes = []; + if (this.upper) { + this.upper.childScopes.push(this); + } + + this.__declaredVariables = scopeManager.__declaredVariables; + + registerScope(scopeManager, this); + } + + _createClass(Scope, [{ + key: '__shouldStaticallyClose', + value: function __shouldStaticallyClose(scopeManager) { + return !this.dynamic || scopeManager.__isOptimistic(); + } + }, { + key: '__shouldStaticallyCloseForGlobal', + value: function __shouldStaticallyCloseForGlobal(ref) { + // On global scope, let/const/class declarations should be resolved statically. + var name = ref.identifier.name; + if (!this.set.has(name)) { + return false; + } + + var variable = this.set.get(name); + var defs = variable.defs; + return defs.length > 0 && defs.every(shouldBeStatically); + } + }, { + key: '__staticCloseRef', + value: function __staticCloseRef(ref) { + if (!this.__resolve(ref)) { + this.__delegateToUpperScope(ref); + } + } + }, { + key: '__dynamicCloseRef', + value: function __dynamicCloseRef(ref) { + // notify all names are through to global + var current = this; + do { + current.through.push(ref); + current = current.upper; + } while (current); + } + }, { + key: '__globalCloseRef', + value: function __globalCloseRef(ref) { + // let/const/class declarations should be resolved statically. + // others should be resolved dynamically. + if (this.__shouldStaticallyCloseForGlobal(ref)) { + this.__staticCloseRef(ref); + } else { + this.__dynamicCloseRef(ref); + } + } + }, { + key: '__close', + value: function __close(scopeManager) { + var closeRef; + if (this.__shouldStaticallyClose(scopeManager)) { + closeRef = this.__staticCloseRef; + } else if (this.type !== 'global') { + closeRef = this.__dynamicCloseRef; + } else { + closeRef = this.__globalCloseRef; + } + + // Try Resolving all references in this scope. + for (var i = 0, iz = this.__left.length; i < iz; ++i) { + var ref = this.__left[i]; + closeRef.call(this, ref); + } + this.__left = null; + + return this.upper; + } + }, { + key: '__resolve', + value: function __resolve(ref) { + var variable, name; + name = ref.identifier.name; + if (this.set.has(name)) { + variable = this.set.get(name); + variable.references.push(ref); + variable.stack = variable.stack && ref.from.variableScope === this.variableScope; + if (ref.tainted) { + variable.tainted = true; + this.taints.set(variable.name, true); + } + ref.resolved = variable; + return true; + } + return false; + } + }, { + key: '__delegateToUpperScope', + value: function __delegateToUpperScope(ref) { + if (this.upper) { + this.upper.__left.push(ref); + } + this.through.push(ref); + } + }, { + key: '__addDeclaredVariablesOfNode', + value: function __addDeclaredVariablesOfNode(variable, node) { + if (node == null) { + return; + } + + var variables = this.__declaredVariables.get(node); + if (variables == null) { + variables = []; + this.__declaredVariables.set(node, variables); + } + if (variables.indexOf(variable) === -1) { + variables.push(variable); + } + } + }, { + key: '__defineGeneric', + value: function __defineGeneric(name, set, variables, node, def) { + var variable; + + variable = set.get(name); + if (!variable) { + variable = new _variable2.default(name, this); + set.set(name, variable); + variables.push(variable); + } + + if (def) { + variable.defs.push(def); + if (def.type !== _variable2.default.TDZ) { + this.__addDeclaredVariablesOfNode(variable, def.node); + this.__addDeclaredVariablesOfNode(variable, def.parent); + } + } + if (node) { + variable.identifiers.push(node); + } + } + }, { + key: '__define', + value: function __define(node, def) { + if (node && node.type === _estraverse.Syntax.Identifier) { + this.__defineGeneric(node.name, this.set, this.variables, node, def); + } + } + }, { + key: '__referencing', + value: function __referencing(node, assign, writeExpr, maybeImplicitGlobal, partial, init) { + // because Array element may be null + if (!node || node.type !== _estraverse.Syntax.Identifier) { + return; + } + + // Specially handle like `this`. + if (node.name === 'super') { + return; + } + + var ref = new _reference2.default(node, this, assign || _reference2.default.READ, writeExpr, maybeImplicitGlobal, !!partial, !!init); + this.references.push(ref); + this.__left.push(ref); + } + }, { + key: '__detectEval', + value: function __detectEval() { + var current; + current = this; + this.directCallToEvalScope = true; + do { + current.dynamic = true; + current = current.upper; + } while (current); + } + }, { + key: '__detectThis', + value: function __detectThis() { + this.thisFound = true; + } + }, { + key: '__isClosed', + value: function __isClosed() { + return this.__left === null; + } + + /** + * returns resolved {Reference} + * @method Scope#resolve + * @param {Esprima.Identifier} ident - identifier to be resolved. + * @return {Reference} + */ + + }, { + key: 'resolve', + value: function resolve(ident) { + var ref, i, iz; + (0, _assert2.default)(this.__isClosed(), 'Scope should be closed.'); + (0, _assert2.default)(ident.type === _estraverse.Syntax.Identifier, 'Target should be identifier.'); + for (i = 0, iz = this.references.length; i < iz; ++i) { + ref = this.references[i]; + if (ref.identifier === ident) { + return ref; + } + } + return null; + } + + /** + * returns this scope is static + * @method Scope#isStatic + * @return {boolean} + */ + + }, { + key: 'isStatic', + value: function isStatic() { + return !this.dynamic; + } + + /** + * returns this scope has materialized arguments + * @method Scope#isArgumentsMaterialized + * @return {boolean} + */ + + }, { + key: 'isArgumentsMaterialized', + value: function isArgumentsMaterialized() { + return true; + } + + /** + * returns this scope has materialized `this` reference + * @method Scope#isThisMaterialized + * @return {boolean} + */ + + }, { + key: 'isThisMaterialized', + value: function isThisMaterialized() { + return true; + } + }, { + key: 'isUsedName', + value: function isUsedName(name) { + if (this.set.has(name)) { + return true; + } + for (var i = 0, iz = this.through.length; i < iz; ++i) { + if (this.through[i].identifier.name === name) { + return true; + } + } + return false; + } + }]); + + return Scope; +}(); + +exports.default = Scope; + +var GlobalScope = exports.GlobalScope = function (_Scope) { + _inherits(GlobalScope, _Scope); + + function GlobalScope(scopeManager, block) { + _classCallCheck(this, GlobalScope); + + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(GlobalScope).call(this, scopeManager, 'global', null, block, false)); + + _this.implicit = { + set: new _es6Map2.default(), + variables: [], + /** + * List of {@link Reference}s that are left to be resolved (i.e. which + * need to be linked to the variable they refer to). + * @member {Reference[]} Scope#implicit#left + */ + left: [] + }; + return _this; + } + + _createClass(GlobalScope, [{ + key: '__close', + value: function __close(scopeManager) { + var implicit = []; + for (var i = 0, iz = this.__left.length; i < iz; ++i) { + var ref = this.__left[i]; + if (ref.__maybeImplicitGlobal && !this.set.has(ref.identifier.name)) { + implicit.push(ref.__maybeImplicitGlobal); + } + } + + // create an implicit global variable from assignment expression + for (var _i = 0, _iz = implicit.length; _i < _iz; ++_i) { + var info = implicit[_i]; + this.__defineImplicit(info.pattern, new _definition2.default(_variable2.default.ImplicitGlobalVariable, info.pattern, info.node, null, null, null)); + } + + this.implicit.left = this.__left; + + return _get(Object.getPrototypeOf(GlobalScope.prototype), '__close', this).call(this, scopeManager); + } + }, { + key: '__defineImplicit', + value: function __defineImplicit(node, def) { + if (node && node.type === _estraverse.Syntax.Identifier) { + this.__defineGeneric(node.name, this.implicit.set, this.implicit.variables, node, def); + } + } + }]); + + return GlobalScope; +}(Scope); + +var ModuleScope = exports.ModuleScope = function (_Scope2) { + _inherits(ModuleScope, _Scope2); + + function ModuleScope(scopeManager, upperScope, block) { + _classCallCheck(this, ModuleScope); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(ModuleScope).call(this, scopeManager, 'module', upperScope, block, false)); + } + + return ModuleScope; +}(Scope); + +var FunctionExpressionNameScope = exports.FunctionExpressionNameScope = function (_Scope3) { + _inherits(FunctionExpressionNameScope, _Scope3); + + function FunctionExpressionNameScope(scopeManager, upperScope, block) { + _classCallCheck(this, FunctionExpressionNameScope); + + var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionExpressionNameScope).call(this, scopeManager, 'function-expression-name', upperScope, block, false)); + + _this3.__define(block.id, new _definition2.default(_variable2.default.FunctionName, block.id, block, null, null, null)); + _this3.functionExpressionScope = true; + return _this3; + } + + return FunctionExpressionNameScope; +}(Scope); + +var CatchScope = exports.CatchScope = function (_Scope4) { + _inherits(CatchScope, _Scope4); + + function CatchScope(scopeManager, upperScope, block) { + _classCallCheck(this, CatchScope); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(CatchScope).call(this, scopeManager, 'catch', upperScope, block, false)); + } + + return CatchScope; +}(Scope); + +var WithScope = exports.WithScope = function (_Scope5) { + _inherits(WithScope, _Scope5); + + function WithScope(scopeManager, upperScope, block) { + _classCallCheck(this, WithScope); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(WithScope).call(this, scopeManager, 'with', upperScope, block, false)); + } + + _createClass(WithScope, [{ + key: '__close', + value: function __close(scopeManager) { + if (this.__shouldStaticallyClose(scopeManager)) { + return _get(Object.getPrototypeOf(WithScope.prototype), '__close', this).call(this, scopeManager); + } + + for (var i = 0, iz = this.__left.length; i < iz; ++i) { + var ref = this.__left[i]; + ref.tainted = true; + this.__delegateToUpperScope(ref); + } + this.__left = null; + + return this.upper; + } + }]); + + return WithScope; +}(Scope); + +var TDZScope = exports.TDZScope = function (_Scope6) { + _inherits(TDZScope, _Scope6); + + function TDZScope(scopeManager, upperScope, block) { + _classCallCheck(this, TDZScope); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(TDZScope).call(this, scopeManager, 'TDZ', upperScope, block, false)); + } + + return TDZScope; +}(Scope); + +var BlockScope = exports.BlockScope = function (_Scope7) { + _inherits(BlockScope, _Scope7); + + function BlockScope(scopeManager, upperScope, block) { + _classCallCheck(this, BlockScope); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(BlockScope).call(this, scopeManager, 'block', upperScope, block, false)); + } + + return BlockScope; +}(Scope); + +var SwitchScope = exports.SwitchScope = function (_Scope8) { + _inherits(SwitchScope, _Scope8); + + function SwitchScope(scopeManager, upperScope, block) { + _classCallCheck(this, SwitchScope); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(SwitchScope).call(this, scopeManager, 'switch', upperScope, block, false)); + } + + return SwitchScope; +}(Scope); + +var FunctionScope = exports.FunctionScope = function (_Scope9) { + _inherits(FunctionScope, _Scope9); + + function FunctionScope(scopeManager, upperScope, block, isMethodDefinition) { + _classCallCheck(this, FunctionScope); + + // section 9.2.13, FunctionDeclarationInstantiation. + // NOTE Arrow functions never have an arguments objects. + + var _this9 = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionScope).call(this, scopeManager, 'function', upperScope, block, isMethodDefinition)); + + if (_this9.block.type !== _estraverse.Syntax.ArrowFunctionExpression) { + _this9.__defineArguments(); + } + return _this9; + } + + _createClass(FunctionScope, [{ + key: 'isArgumentsMaterialized', + value: function isArgumentsMaterialized() { + // TODO(Constellation) + // We can more aggressive on this condition like this. + // + // function t() { + // // arguments of t is always hidden. + // function arguments() { + // } + // } + if (this.block.type === _estraverse.Syntax.ArrowFunctionExpression) { + return false; + } + + if (!this.isStatic()) { + return true; + } + + var variable = this.set.get('arguments'); + (0, _assert2.default)(variable, 'Always have arguments variable.'); + return variable.tainted || variable.references.length !== 0; + } + }, { + key: 'isThisMaterialized', + value: function isThisMaterialized() { + if (!this.isStatic()) { + return true; + } + return this.thisFound; + } + }, { + key: '__defineArguments', + value: function __defineArguments() { + this.__defineGeneric('arguments', this.set, this.variables, null, null); + this.taints.set('arguments', true); + } + }]); + + return FunctionScope; +}(Scope); + +var ForScope = exports.ForScope = function (_Scope10) { + _inherits(ForScope, _Scope10); + + function ForScope(scopeManager, upperScope, block) { + _classCallCheck(this, ForScope); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(ForScope).call(this, scopeManager, 'for', upperScope, block, false)); + } + + return ForScope; +}(Scope); + +var ClassScope = exports.ClassScope = function (_Scope11) { + _inherits(ClassScope, _Scope11); + + function ClassScope(scopeManager, upperScope, block) { + _classCallCheck(this, ClassScope); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(ClassScope).call(this, scopeManager, 'class', upperScope, block, false)); + } + + return ClassScope; +}(Scope); + +/* vim: set sw=4 ts=4 et tw=80 : */ +//# sourceMappingURL=data:application/json;base64,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eEQ7O0FBSUEsZ0JBQUksQ0FBQyxLQUFLLFFBQUwsRUFBRCxFQUFrQjtBQUNsQix1QkFBTyxJQUFQLENBRGtCO2FBQXRCOztBQUlBLGdCQUFJLFdBQVcsS0FBSyxHQUFMLENBQVMsR0FBVCxDQUFhLFdBQWIsQ0FBWCxDQWpCa0I7QUFrQnRCLGtDQUFPLFFBQVAsRUFBaUIsaUNBQWpCLEVBbEJzQjtBQW1CdEIsbUJBQU8sU0FBUyxPQUFULElBQW9CLFNBQVMsVUFBVCxDQUFvQixNQUFwQixLQUFnQyxDQUFoQyxDQW5CTDs7Ozs2Q0FzQkw7QUFDakIsZ0JBQUksQ0FBQyxLQUFLLFFBQUwsRUFBRCxFQUFrQjtBQUNsQix1QkFBTyxJQUFQLENBRGtCO2FBQXRCO0FBR0EsbUJBQU8sS0FBSyxTQUFMLENBSlU7Ozs7NENBT0Q7QUFDaEIsaUJBQUssZUFBTCxDQUNRLFdBRFIsRUFFUSxLQUFLLEdBQUwsRUFDQSxLQUFLLFNBQUwsRUFDQSxJQUpSLEVBS1EsSUFMUixFQURnQjtBQU9oQixpQkFBSyxNQUFMLENBQVksR0FBWixDQUFnQixXQUFoQixFQUE2QixJQUE3QixFQVBnQjs7OztXQXhDWDtFQUFzQjs7SUFtRHRCOzs7QUFDVCxhQURTLFFBQ1QsQ0FBWSxZQUFaLEVBQTBCLFVBQTFCLEVBQXNDLEtBQXRDLEVBQTZDOzhCQURwQyxVQUNvQzs7c0VBRHBDLHFCQUVDLGNBQWMsT0FBTyxZQUFZLE9BQU8sUUFETDtLQUE3Qzs7V0FEUztFQUFpQjs7SUFNakI7OztBQUNULGFBRFMsVUFDVCxDQUFZLFlBQVosRUFBMEIsVUFBMUIsRUFBc0MsS0FBdEMsRUFBNkM7OEJBRHBDLFlBQ29DOztzRUFEcEMsdUJBRUMsY0FBYyxTQUFTLFlBQVksT0FBTyxRQURQO0tBQTdDOztXQURTO0VBQW1CIiwiZmlsZSI6InNjb3BlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5pbXBvcnQgeyBTeW50YXggfSBmcm9tICdlc3RyYXZlcnNlJztcbmltcG9ydCBNYXAgZnJvbSAnZXM2LW1hcCc7XG5cbmltcG9ydCBSZWZlcmVuY2UgZnJvbSAnLi9yZWZlcmVuY2UnO1xuaW1wb3J0IFZhcmlhYmxlIGZyb20gJy4vdmFyaWFibGUnO1xuaW1wb3J0IERlZmluaXRpb24gZnJvbSAnLi9kZWZpbml0aW9uJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZnVuY3Rpb24gaXNTdHJpY3RTY29wZShzY29wZSwgYmxvY2ssIGlzTWV0aG9kRGVmaW5pdGlvbiwgdXNlRGlyZWN0aXZlKSB7XG4gICAgdmFyIGJvZHksIGksIGl6LCBzdG10LCBleHByO1xuXG4gICAgLy8gV2hlbiB1cHBlciBzY29wZSBpcyBleGlzdHMgYW5kIHN0cmljdCwgaW5uZXIgc2NvcGUgaXMgYWxzbyBzdHJpY3QuXG4gICAgaWYgKHNjb3BlLnVwcGVyICYmIHNjb3BlLnVwcGVyLmlzU3RyaWN0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEFycm93RnVuY3Rpb25FeHByZXNzaW9uJ3Mgc2NvcGUgaXMgYWx3YXlzIHN0cmljdCBzY29wZS5cbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc01ldGhvZERlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNjb3BlLnR5cGUgPT09ICdjbGFzcycgfHwgc2NvcGUudHlwZSA9PT0gJ21vZHVsZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNjb3BlLnR5cGUgPT09ICdibG9jaycgfHwgc2NvcGUudHlwZSA9PT0gJ3N3aXRjaCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzY29wZS50eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChibG9jay50eXBlID09PSBTeW50YXguUHJvZ3JhbSkge1xuICAgICAgICAgICAgYm9keSA9IGJsb2NrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IGJsb2NrLmJvZHk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNjb3BlLnR5cGUgPT09ICdnbG9iYWwnKSB7XG4gICAgICAgIGJvZHkgPSBibG9jaztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoICd1c2Ugc3RyaWN0JyBkaXJlY3RpdmUuXG4gICAgaWYgKHVzZURpcmVjdGl2ZSkge1xuICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGJvZHkuYm9keS5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBzdG10ID0gYm9keS5ib2R5W2ldO1xuICAgICAgICAgICAgaWYgKHN0bXQudHlwZSAhPT0gU3ludGF4LkRpcmVjdGl2ZVN0YXRlbWVudCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0bXQucmF3ID09PSAnXCJ1c2Ugc3RyaWN0XCInIHx8IHN0bXQucmF3ID09PSAnXFwndXNlIHN0cmljdFxcJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGl6ID0gYm9keS5ib2R5Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIHN0bXQgPSBib2R5LmJvZHlbaV07XG4gICAgICAgICAgICBpZiAoc3RtdC50eXBlICE9PSBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwciA9IHN0bXQuZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIGlmIChleHByLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsIHx8IHR5cGVvZiBleHByLnZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4cHIucmF3ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5yYXcgPT09ICdcInVzZSBzdHJpY3RcIicgfHwgZXhwci5yYXcgPT09ICdcXCd1c2Ugc3RyaWN0XFwnJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChleHByLnZhbHVlID09PSAndXNlIHN0cmljdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJTY29wZShzY29wZU1hbmFnZXIsIHNjb3BlKSB7XG4gICAgdmFyIHNjb3BlcztcblxuICAgIHNjb3BlTWFuYWdlci5zY29wZXMucHVzaChzY29wZSk7XG5cbiAgICBzY29wZXMgPSBzY29wZU1hbmFnZXIuX19ub2RlVG9TY29wZS5nZXQoc2NvcGUuYmxvY2spO1xuICAgIGlmIChzY29wZXMpIHtcbiAgICAgICAgc2NvcGVzLnB1c2goc2NvcGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlTWFuYWdlci5fX25vZGVUb1Njb3BlLnNldChzY29wZS5ibG9jaywgWyBzY29wZSBdKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZEJlU3RhdGljYWxseShkZWYpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoZGVmLnR5cGUgPT09IFZhcmlhYmxlLkNsYXNzTmFtZSkgfHxcbiAgICAgICAgKGRlZi50eXBlID09PSBWYXJpYWJsZS5WYXJpYWJsZSAmJiBkZWYucGFyZW50LmtpbmQgIT09ICd2YXInKVxuICAgICk7XG59XG5cbi8qKlxuICogQGNsYXNzIFNjb3BlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZU1hbmFnZXIsIHR5cGUsIHVwcGVyU2NvcGUsIGJsb2NrLCBpc01ldGhvZERlZmluaXRpb24pIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9uZSBvZiAnVERaJywgJ21vZHVsZScsICdibG9jaycsICdzd2l0Y2gnLCAnZnVuY3Rpb24nLCAnY2F0Y2gnLCAnd2l0aCcsICdmdW5jdGlvbicsICdjbGFzcycsICdnbG9iYWwnLlxuICAgICAgICAgKiBAbWVtYmVyIHtTdHJpbmd9IFNjb3BlI3R5cGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHNjb3BlZCB7QGxpbmsgVmFyaWFibGV9cyBvZiB0aGlzIHNjb3BlLCBhcyA8Y29kZT57IFZhcmlhYmxlLm5hbWVcbiAgICAgICAgICogOiBWYXJpYWJsZSB9PC9jb2RlPi5cbiAgICAgICAgICogQG1lbWJlciB7TWFwfSBTY29wZSNzZXRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2V0ID0gbmV3IE1hcCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHRhaW50ZWQgdmFyaWFibGVzIG9mIHRoaXMgc2NvcGUsIGFzIDxjb2RlPnsgVmFyaWFibGUubmFtZSA6XG4gICAgICAgICAqIGJvb2xlYW4gfTwvY29kZT4uXG4gICAgICAgICAqIEBtZW1iZXIge01hcH0gU2NvcGUjdGFpbnRzICovXG4gICAgICAgIHRoaXMudGFpbnRzID0gbmV3IE1hcCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogR2VuZXJhbGx5LCB0aHJvdWdoIHRoZSBsZXhpY2FsIHNjb3Bpbmcgb2YgSlMgeW91IGNhbiBhbHdheXMga25vd1xuICAgICAgICAgKiB3aGljaCB2YXJpYWJsZSBhbiBpZGVudGlmaWVyIGluIHRoZSBzb3VyY2UgY29kZSByZWZlcnMgdG8uIFRoZXJlIGFyZVxuICAgICAgICAgKiBhIGZldyBleGNlcHRpb25zIHRvIHRoaXMgcnVsZS4gV2l0aCAnZ2xvYmFsJyBhbmQgJ3dpdGgnIHNjb3BlcyB5b3VcbiAgICAgICAgICogY2FuIG9ubHkgZGVjaWRlIGF0IHJ1bnRpbWUgd2hpY2ggdmFyaWFibGUgYSByZWZlcmVuY2UgcmVmZXJzIHRvLlxuICAgICAgICAgKiBNb3Jlb3ZlciwgaWYgJ2V2YWwoKScgaXMgdXNlZCBpbiBhIHNjb3BlLCBpdCBtaWdodCBpbnRyb2R1Y2UgbmV3XG4gICAgICAgICAqIGJpbmRpbmdzIGluIHRoaXMgb3IgaXRzIHBhcmVudCBzY29wZXMuXG4gICAgICAgICAqIEFsbCB0aG9zZSBzY29wZXMgYXJlIGNvbnNpZGVyZWQgJ2R5bmFtaWMnLlxuICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSNkeW5hbWljXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmR5bmFtaWMgPSB0aGlzLnR5cGUgPT09ICdnbG9iYWwnIHx8IHRoaXMudHlwZSA9PT0gJ3dpdGgnO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIHNjb3BlLWRlZmluaW5nIHN5bnRheCBub2RlLlxuICAgICAgICAgKiBAbWVtYmVyIHtlc3ByaW1hLk5vZGV9IFNjb3BlI2Jsb2NrXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XG4gICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHtAbGluayBSZWZlcmVuY2V8cmVmZXJlbmNlc30gdGhhdCBhcmUgbm90IHJlc29sdmVkIHdpdGggdGhpcyBzY29wZS5cbiAgICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119IFNjb3BlI3Rocm91Z2hcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGhyb3VnaCA9IFtdO1xuICAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBzY29wZWQge0BsaW5rIFZhcmlhYmxlfXMgb2YgdGhpcyBzY29wZS4gSW4gdGhlIGNhc2Ugb2YgYVxuICAgICAgICAgKiAnZnVuY3Rpb24nIHNjb3BlIHRoaXMgaW5jbHVkZXMgdGhlIGF1dG9tYXRpYyBhcmd1bWVudCA8ZW0+YXJndW1lbnRzPC9lbT4gYXNcbiAgICAgICAgICogaXRzIGZpcnN0IGVsZW1lbnQsIGFzIHdlbGwgYXMgYWxsIGZ1cnRoZXIgZm9ybWFsIGFyZ3VtZW50cy5cbiAgICAgICAgICogQG1lbWJlciB7VmFyaWFibGVbXX0gU2NvcGUjdmFyaWFibGVzXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhcmlhYmxlcyA9IFtdO1xuICAgICAgICAgLyoqXG4gICAgICAgICAqIEFueSB2YXJpYWJsZSB7QGxpbmsgUmVmZXJlbmNlfHJlZmVyZW5jZX0gZm91bmQgaW4gdGhpcyBzY29wZS4gVGhpc1xuICAgICAgICAgKiBpbmNsdWRlcyBvY2N1cnJlbmNlcyBvZiBsb2NhbCB2YXJpYWJsZXMgYXMgd2VsbCBhcyB2YXJpYWJsZXMgZnJvbVxuICAgICAgICAgKiBwYXJlbnQgc2NvcGVzIChpbmNsdWRpbmcgdGhlIGdsb2JhbCBzY29wZSkuIEZvciBsb2NhbCB2YXJpYWJsZXNcbiAgICAgICAgICogdGhpcyBhbHNvIGluY2x1ZGVzIGRlZmluaW5nIG9jY3VycmVuY2VzIChsaWtlIGluIGEgJ3Zhcicgc3RhdGVtZW50KS5cbiAgICAgICAgICogSW4gYSAnZnVuY3Rpb24nIHNjb3BlIHRoaXMgZG9lcyBub3QgaW5jbHVkZSB0aGUgb2NjdXJyZW5jZXMgb2YgdGhlXG4gICAgICAgICAqIGZvcm1hbCBwYXJhbWV0ZXIgaW4gdGhlIHBhcmFtZXRlciBsaXN0LlxuICAgICAgICAgKiBAbWVtYmVyIHtSZWZlcmVuY2VbXX0gU2NvcGUjcmVmZXJlbmNlc1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gW107XG5cbiAgICAgICAgIC8qKlxuICAgICAgICAgKiBGb3IgJ2dsb2JhbCcgYW5kICdmdW5jdGlvbicgc2NvcGVzLCB0aGlzIGlzIGEgc2VsZi1yZWZlcmVuY2UuIEZvclxuICAgICAgICAgKiBvdGhlciBzY29wZSB0eXBlcyB0aGlzIGlzIHRoZSA8ZW0+dmFyaWFibGVTY29wZTwvZW0+IHZhbHVlIG9mIHRoZVxuICAgICAgICAgKiBwYXJlbnQgc2NvcGUuXG4gICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN2YXJpYWJsZVNjb3BlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhcmlhYmxlU2NvcGUgPVxuICAgICAgICAgICAgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcgfHwgdGhpcy50eXBlID09PSAnZnVuY3Rpb24nIHx8IHRoaXMudHlwZSA9PT0gJ21vZHVsZScpID8gdGhpcyA6IHVwcGVyU2NvcGUudmFyaWFibGVTY29wZTtcbiAgICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgc2NvcGUgaXMgY3JlYXRlZCBieSBhIEZ1bmN0aW9uRXhwcmVzc2lvbi5cbiAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjZnVuY3Rpb25FeHByZXNzaW9uU2NvcGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUgPSBmYWxzZTtcbiAgICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBzY29wZSB0aGF0IGNvbnRhaW5zIGFuICdldmFsKCknIGludm9jYXRpb24uXG4gICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFNjb3BlI2RpcmVjdENhbGxUb0V2YWxTY29wZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXJlY3RDYWxsVG9FdmFsU2NvcGUgPSBmYWxzZTtcbiAgICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSN0aGlzRm91bmRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGhpc0ZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fX2xlZnQgPSBbXTtcblxuICAgICAgICAgLyoqXG4gICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHtAbGluayBTY29wZXxzY29wZX0uXG4gICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN1cHBlclxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51cHBlciA9IHVwcGVyU2NvcGU7XG4gICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciAndXNlIHN0cmljdCcgaXMgaW4gZWZmZWN0IGluIHRoaXMgc2NvcGUuXG4gICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFNjb3BlI2lzU3RyaWN0XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzU3RyaWN0ID0gaXNTdHJpY3RTY29wZSh0aGlzLCBibG9jaywgaXNNZXRob2REZWZpbml0aW9uLCBzY29wZU1hbmFnZXIuX191c2VEaXJlY3RpdmUoKSk7XG5cbiAgICAgICAgIC8qKlxuICAgICAgICAgKiBMaXN0IG9mIG5lc3RlZCB7QGxpbmsgU2NvcGV9cy5cbiAgICAgICAgICogQG1lbWJlciB7U2NvcGVbXX0gU2NvcGUjY2hpbGRTY29wZXNcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2hpbGRTY29wZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMudXBwZXIpIHtcbiAgICAgICAgICAgIHRoaXMudXBwZXIuY2hpbGRTY29wZXMucHVzaCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX19kZWNsYXJlZFZhcmlhYmxlcyA9IHNjb3BlTWFuYWdlci5fX2RlY2xhcmVkVmFyaWFibGVzO1xuXG4gICAgICAgIHJlZ2lzdGVyU2NvcGUoc2NvcGVNYW5hZ2VyLCB0aGlzKTtcbiAgICB9XG5cbiAgICBfX3Nob3VsZFN0YXRpY2FsbHlDbG9zZShzY29wZU1hbmFnZXIpIHtcbiAgICAgICAgcmV0dXJuICghdGhpcy5keW5hbWljIHx8IHNjb3BlTWFuYWdlci5fX2lzT3B0aW1pc3RpYygpKTtcbiAgICB9XG5cbiAgICBfX3Nob3VsZFN0YXRpY2FsbHlDbG9zZUZvckdsb2JhbChyZWYpIHtcbiAgICAgICAgLy8gT24gZ2xvYmFsIHNjb3BlLCBsZXQvY29uc3QvY2xhc3MgZGVjbGFyYXRpb25zIHNob3VsZCBiZSByZXNvbHZlZCBzdGF0aWNhbGx5LlxuICAgICAgICB2YXIgbmFtZSA9IHJlZi5pZGVudGlmaWVyLm5hbWU7XG4gICAgICAgIGlmICghdGhpcy5zZXQuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdmFyaWFibGUgPSB0aGlzLnNldC5nZXQobmFtZSk7XG4gICAgICAgIHZhciBkZWZzID0gdmFyaWFibGUuZGVmcztcbiAgICAgICAgcmV0dXJuIGRlZnMubGVuZ3RoID4gMCAmJiBkZWZzLmV2ZXJ5KHNob3VsZEJlU3RhdGljYWxseSk7XG4gICAgfVxuXG4gICAgX19zdGF0aWNDbG9zZVJlZihyZWYpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9fcmVzb2x2ZShyZWYpKSB7XG4gICAgICAgICAgICB0aGlzLl9fZGVsZWdhdGVUb1VwcGVyU2NvcGUocmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9fZHluYW1pY0Nsb3NlUmVmKHJlZikge1xuICAgICAgICAvLyBub3RpZnkgYWxsIG5hbWVzIGFyZSB0aHJvdWdoIHRvIGdsb2JhbFxuICAgICAgICBsZXQgY3VycmVudCA9IHRoaXM7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGN1cnJlbnQudGhyb3VnaC5wdXNoKHJlZik7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC51cHBlcjtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7XG4gICAgfVxuXG4gICAgX19nbG9iYWxDbG9zZVJlZihyZWYpIHtcbiAgICAgICAgLy8gbGV0L2NvbnN0L2NsYXNzIGRlY2xhcmF0aW9ucyBzaG91bGQgYmUgcmVzb2x2ZWQgc3RhdGljYWxseS5cbiAgICAgICAgLy8gb3RoZXJzIHNob3VsZCBiZSByZXNvbHZlZCBkeW5hbWljYWxseS5cbiAgICAgICAgaWYgKHRoaXMuX19zaG91bGRTdGF0aWNhbGx5Q2xvc2VGb3JHbG9iYWwocmVmKSkge1xuICAgICAgICAgICAgdGhpcy5fX3N0YXRpY0Nsb3NlUmVmKHJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9fZHluYW1pY0Nsb3NlUmVmKHJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfX2Nsb3NlKHNjb3BlTWFuYWdlcikge1xuICAgICAgICB2YXIgY2xvc2VSZWY7XG4gICAgICAgIGlmICh0aGlzLl9fc2hvdWxkU3RhdGljYWxseUNsb3NlKHNjb3BlTWFuYWdlcikpIHtcbiAgICAgICAgICAgIGNsb3NlUmVmID0gdGhpcy5fX3N0YXRpY0Nsb3NlUmVmO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSAhPT0gJ2dsb2JhbCcpIHtcbiAgICAgICAgICAgIGNsb3NlUmVmID0gdGhpcy5fX2R5bmFtaWNDbG9zZVJlZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb3NlUmVmID0gdGhpcy5fX2dsb2JhbENsb3NlUmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5IFJlc29sdmluZyBhbGwgcmVmZXJlbmNlcyBpbiB0aGlzIHNjb3BlLlxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaXogPSB0aGlzLl9fbGVmdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBsZXQgcmVmID0gdGhpcy5fX2xlZnRbaV07XG4gICAgICAgICAgICBjbG9zZVJlZi5jYWxsKHRoaXMsIHJlZik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fX2xlZnQgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVwcGVyO1xuICAgIH1cblxuICAgIF9fcmVzb2x2ZShyZWYpIHtcbiAgICAgICAgdmFyIHZhcmlhYmxlLCBuYW1lO1xuICAgICAgICBuYW1lID0gcmVmLmlkZW50aWZpZXIubmFtZTtcbiAgICAgICAgaWYgKHRoaXMuc2V0LmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgdmFyaWFibGUgPSB0aGlzLnNldC5nZXQobmFtZSk7XG4gICAgICAgICAgICB2YXJpYWJsZS5yZWZlcmVuY2VzLnB1c2gocmVmKTtcbiAgICAgICAgICAgIHZhcmlhYmxlLnN0YWNrID0gdmFyaWFibGUuc3RhY2sgJiYgcmVmLmZyb20udmFyaWFibGVTY29wZSA9PT0gdGhpcy52YXJpYWJsZVNjb3BlO1xuICAgICAgICAgICAgaWYgKHJlZi50YWludGVkKSB7XG4gICAgICAgICAgICAgICAgdmFyaWFibGUudGFpbnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50YWludHMuc2V0KHZhcmlhYmxlLm5hbWUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmLnJlc29sdmVkID0gdmFyaWFibGU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX19kZWxlZ2F0ZVRvVXBwZXJTY29wZShyZWYpIHtcbiAgICAgICAgaWYgKHRoaXMudXBwZXIpIHtcbiAgICAgICAgICAgIHRoaXMudXBwZXIuX19sZWZ0LnB1c2gocmVmKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRocm91Z2gucHVzaChyZWYpO1xuICAgIH1cblxuICAgIF9fYWRkRGVjbGFyZWRWYXJpYWJsZXNPZk5vZGUodmFyaWFibGUsIG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZhcmlhYmxlcyA9IHRoaXMuX19kZWNsYXJlZFZhcmlhYmxlcy5nZXQobm9kZSk7XG4gICAgICAgIGlmICh2YXJpYWJsZXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyaWFibGVzID0gW107XG4gICAgICAgICAgICB0aGlzLl9fZGVjbGFyZWRWYXJpYWJsZXMuc2V0KG5vZGUsIHZhcmlhYmxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhcmlhYmxlcy5pbmRleE9mKHZhcmlhYmxlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9fZGVmaW5lR2VuZXJpYyhuYW1lLCBzZXQsIHZhcmlhYmxlcywgbm9kZSwgZGVmKSB7XG4gICAgICAgIHZhciB2YXJpYWJsZTtcblxuICAgICAgICB2YXJpYWJsZSA9IHNldC5nZXQobmFtZSk7XG4gICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKG5hbWUsIHRoaXMpO1xuICAgICAgICAgICAgc2V0LnNldChuYW1lLCB2YXJpYWJsZSk7XG4gICAgICAgICAgICB2YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVmKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2goZGVmKTtcbiAgICAgICAgICAgIGlmIChkZWYudHlwZSAhPT0gVmFyaWFibGUuVERaKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2FkZERlY2xhcmVkVmFyaWFibGVzT2ZOb2RlKHZhcmlhYmxlLCBkZWYubm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2FkZERlY2xhcmVkVmFyaWFibGVzT2ZOb2RlKHZhcmlhYmxlLCBkZWYucGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmllcnMucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9fZGVmaW5lKG5vZGUsIGRlZikge1xuICAgICAgICBpZiAobm9kZSAmJiBub2RlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB0aGlzLl9fZGVmaW5lR2VuZXJpYyhcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGRlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfX3JlZmVyZW5jaW5nKG5vZGUsIGFzc2lnbiwgd3JpdGVFeHByLCBtYXliZUltcGxpY2l0R2xvYmFsLCBwYXJ0aWFsLCBpbml0KSB7XG4gICAgICAgIC8vIGJlY2F1c2UgQXJyYXkgZWxlbWVudCBtYXkgYmUgbnVsbFxuICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZS50eXBlICE9PSBTeW50YXguSWRlbnRpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3BlY2lhbGx5IGhhbmRsZSBsaWtlIGB0aGlzYC5cbiAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gJ3N1cGVyJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlZiA9IG5ldyBSZWZlcmVuY2Uobm9kZSwgdGhpcywgYXNzaWduIHx8IFJlZmVyZW5jZS5SRUFELCB3cml0ZUV4cHIsIG1heWJlSW1wbGljaXRHbG9iYWwsICEhcGFydGlhbCwgISFpbml0KTtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VzLnB1c2gocmVmKTtcbiAgICAgICAgdGhpcy5fX2xlZnQucHVzaChyZWYpO1xuICAgIH1cblxuICAgIF9fZGV0ZWN0RXZhbCgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQ7XG4gICAgICAgIGN1cnJlbnQgPSB0aGlzO1xuICAgICAgICB0aGlzLmRpcmVjdENhbGxUb0V2YWxTY29wZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGN1cnJlbnQuZHluYW1pYyA9IHRydWU7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC51cHBlcjtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7XG4gICAgfVxuXG4gICAgX19kZXRlY3RUaGlzKCkge1xuICAgICAgICB0aGlzLnRoaXNGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgX19pc0Nsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19sZWZ0ID09PSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgcmVzb2x2ZWQge1JlZmVyZW5jZX1cbiAgICAgKiBAbWV0aG9kIFNjb3BlI3Jlc29sdmVcbiAgICAgKiBAcGFyYW0ge0VzcHJpbWEuSWRlbnRpZmllcn0gaWRlbnQgLSBpZGVudGlmaWVyIHRvIGJlIHJlc29sdmVkLlxuICAgICAqIEByZXR1cm4ge1JlZmVyZW5jZX1cbiAgICAgKi9cbiAgICByZXNvbHZlKGlkZW50KSB7XG4gICAgICAgIHZhciByZWYsIGksIGl6O1xuICAgICAgICBhc3NlcnQodGhpcy5fX2lzQ2xvc2VkKCksICdTY29wZSBzaG91bGQgYmUgY2xvc2VkLicpO1xuICAgICAgICBhc3NlcnQoaWRlbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIsICdUYXJnZXQgc2hvdWxkIGJlIGlkZW50aWZpZXIuJyk7XG4gICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5yZWZlcmVuY2VzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIHJlZiA9IHRoaXMucmVmZXJlbmNlc1tpXTtcbiAgICAgICAgICAgIGlmIChyZWYuaWRlbnRpZmllciA9PT0gaWRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdGhpcyBzY29wZSBpcyBzdGF0aWNcbiAgICAgKiBAbWV0aG9kIFNjb3BlI2lzU3RhdGljXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1N0YXRpYygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmR5bmFtaWM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0aGlzIHNjb3BlIGhhcyBtYXRlcmlhbGl6ZWQgYXJndW1lbnRzXG4gICAgICogQG1ldGhvZCBTY29wZSNpc0FyZ3VtZW50c01hdGVyaWFsaXplZFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdGhpcyBzY29wZSBoYXMgbWF0ZXJpYWxpemVkIGB0aGlzYCByZWZlcmVuY2VcbiAgICAgKiBAbWV0aG9kIFNjb3BlI2lzVGhpc01hdGVyaWFsaXplZFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNUaGlzTWF0ZXJpYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc1VzZWROYW1lKG5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0LmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGl6ID0gdGhpcy50aHJvdWdoLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRocm91Z2hbaV0uaWRlbnRpZmllci5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdsb2JhbFNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlTWFuYWdlciwgYmxvY2spIHtcbiAgICAgICAgc3VwZXIoc2NvcGVNYW5hZ2VyLCAnZ2xvYmFsJywgbnVsbCwgYmxvY2ssIGZhbHNlKTtcbiAgICAgICAgdGhpcy5pbXBsaWNpdCA9IHtcbiAgICAgICAgICAgIHNldDogbmV3IE1hcCgpLFxuICAgICAgICAgICAgdmFyaWFibGVzOiBbXSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBMaXN0IG9mIHtAbGluayBSZWZlcmVuY2V9cyB0aGF0IGFyZSBsZWZ0IHRvIGJlIHJlc29sdmVkIChpLmUuIHdoaWNoXG4gICAgICAgICAgICAqIG5lZWQgdG8gYmUgbGlua2VkIHRvIHRoZSB2YXJpYWJsZSB0aGV5IHJlZmVyIHRvKS5cbiAgICAgICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119IFNjb3BlI2ltcGxpY2l0I2xlZnRcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBsZWZ0OiBbXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9fY2xvc2Uoc2NvcGVNYW5hZ2VyKSB7XG4gICAgICAgIGxldCBpbXBsaWNpdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgaXogPSB0aGlzLl9fbGVmdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBsZXQgcmVmID0gdGhpcy5fX2xlZnRbaV07XG4gICAgICAgICAgICBpZiAocmVmLl9fbWF5YmVJbXBsaWNpdEdsb2JhbCAmJiAhdGhpcy5zZXQuaGFzKHJlZi5pZGVudGlmaWVyLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgaW1wbGljaXQucHVzaChyZWYuX19tYXliZUltcGxpY2l0R2xvYmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNyZWF0ZSBhbiBpbXBsaWNpdCBnbG9iYWwgdmFyaWFibGUgZnJvbSBhc3NpZ25tZW50IGV4cHJlc3Npb25cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGl6ID0gaW1wbGljaXQubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgbGV0IGluZm8gPSBpbXBsaWNpdFtpXTtcbiAgICAgICAgICAgIHRoaXMuX19kZWZpbmVJbXBsaWNpdChpbmZvLnBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBEZWZpbml0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUuSW1wbGljaXRHbG9iYWxWYXJpYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgICApKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbXBsaWNpdC5sZWZ0ID0gdGhpcy5fX2xlZnQ7XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLl9fY2xvc2Uoc2NvcGVNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICBfX2RlZmluZUltcGxpY2l0KG5vZGUsIGRlZikge1xuICAgICAgICBpZiAobm9kZSAmJiBub2RlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB0aGlzLl9fZGVmaW5lR2VuZXJpYyhcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmltcGxpY2l0LnNldCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbXBsaWNpdC52YXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGRlZik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVTY29wZSBleHRlbmRzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZU1hbmFnZXIsIHVwcGVyU2NvcGUsIGJsb2NrKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlTWFuYWdlciwgJ21vZHVsZScsIHVwcGVyU2NvcGUsIGJsb2NrLCBmYWxzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25FeHByZXNzaW9uTmFtZVNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlTWFuYWdlciwgdXBwZXJTY29wZSwgYmxvY2spIHtcbiAgICAgICAgc3VwZXIoc2NvcGVNYW5hZ2VyLCAnZnVuY3Rpb24tZXhwcmVzc2lvbi1uYW1lJywgdXBwZXJTY29wZSwgYmxvY2ssIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fX2RlZmluZShibG9jay5pZCxcbiAgICAgICAgICAgICAgICBuZXcgRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUuRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBibG9jay5pZCxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgdGhpcy5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSA9IHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2F0Y2hTY29wZSBleHRlbmRzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZU1hbmFnZXIsIHVwcGVyU2NvcGUsIGJsb2NrKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlTWFuYWdlciwgJ2NhdGNoJywgdXBwZXJTY29wZSwgYmxvY2ssIGZhbHNlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXaXRoU2NvcGUgZXh0ZW5kcyBTY29wZSB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGVNYW5hZ2VyLCB1cHBlclNjb3BlLCBibG9jaykge1xuICAgICAgICBzdXBlcihzY29wZU1hbmFnZXIsICd3aXRoJywgdXBwZXJTY29wZSwgYmxvY2ssIGZhbHNlKTtcbiAgICB9XG5cbiAgICBfX2Nsb3NlKHNjb3BlTWFuYWdlcikge1xuICAgICAgICBpZiAodGhpcy5fX3Nob3VsZFN0YXRpY2FsbHlDbG9zZShzY29wZU1hbmFnZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuX19jbG9zZShzY29wZU1hbmFnZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGl6ID0gdGhpcy5fX2xlZnQubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgbGV0IHJlZiA9IHRoaXMuX19sZWZ0W2ldO1xuICAgICAgICAgICAgcmVmLnRhaW50ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fX2RlbGVnYXRlVG9VcHBlclNjb3BlKHJlZik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fX2xlZnQgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVwcGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFREWlNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlTWFuYWdlciwgdXBwZXJTY29wZSwgYmxvY2spIHtcbiAgICAgICAgc3VwZXIoc2NvcGVNYW5hZ2VyLCAnVERaJywgdXBwZXJTY29wZSwgYmxvY2ssIGZhbHNlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja1Njb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlTWFuYWdlciwgdXBwZXJTY29wZSwgYmxvY2spIHtcbiAgICAgICAgc3VwZXIoc2NvcGVNYW5hZ2VyLCAnYmxvY2snLCB1cHBlclNjb3BlLCBibG9jaywgZmFsc2UpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN3aXRjaFNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlTWFuYWdlciwgdXBwZXJTY29wZSwgYmxvY2spIHtcbiAgICAgICAgc3VwZXIoc2NvcGVNYW5hZ2VyLCAnc3dpdGNoJywgdXBwZXJTY29wZSwgYmxvY2ssIGZhbHNlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvblNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlTWFuYWdlciwgdXBwZXJTY29wZSwgYmxvY2ssIGlzTWV0aG9kRGVmaW5pdGlvbikge1xuICAgICAgICBzdXBlcihzY29wZU1hbmFnZXIsICdmdW5jdGlvbicsIHVwcGVyU2NvcGUsIGJsb2NrLCBpc01ldGhvZERlZmluaXRpb24pO1xuXG4gICAgICAgIC8vIHNlY3Rpb24gOS4yLjEzLCBGdW5jdGlvbkRlY2xhcmF0aW9uSW5zdGFudGlhdGlvbi5cbiAgICAgICAgLy8gTk9URSBBcnJvdyBmdW5jdGlvbnMgbmV2ZXIgaGF2ZSBhbiBhcmd1bWVudHMgb2JqZWN0cy5cbiAgICAgICAgaWYgKHRoaXMuYmxvY2sudHlwZSAhPT0gU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9fZGVmaW5lQXJndW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0FyZ3VtZW50c01hdGVyaWFsaXplZCgpIHtcbiAgICAgICAgLy8gVE9ETyhDb25zdGVsbGF0aW9uKVxuICAgICAgICAvLyBXZSBjYW4gbW9yZSBhZ2dyZXNzaXZlIG9uIHRoaXMgY29uZGl0aW9uIGxpa2UgdGhpcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gZnVuY3Rpb24gdCgpIHtcbiAgICAgICAgLy8gICAgIC8vIGFyZ3VtZW50cyBvZiB0IGlzIGFsd2F5cyBoaWRkZW4uXG4gICAgICAgIC8vICAgICBmdW5jdGlvbiBhcmd1bWVudHMoKSB7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKHRoaXMuYmxvY2sudHlwZSA9PT0gU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNTdGF0aWMoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFyaWFibGUgPSB0aGlzLnNldC5nZXQoJ2FyZ3VtZW50cycpO1xuICAgICAgICBhc3NlcnQodmFyaWFibGUsICdBbHdheXMgaGF2ZSBhcmd1bWVudHMgdmFyaWFibGUuJyk7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS50YWludGVkIHx8IHZhcmlhYmxlLnJlZmVyZW5jZXMubGVuZ3RoICAhPT0gMDtcbiAgICB9XG5cbiAgICBpc1RoaXNNYXRlcmlhbGl6ZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0YXRpYygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50aGlzRm91bmQ7XG4gICAgfVxuXG4gICAgX19kZWZpbmVBcmd1bWVudHMoKSB7XG4gICAgICAgIHRoaXMuX19kZWZpbmVHZW5lcmljKFxuICAgICAgICAgICAgICAgICdhcmd1bWVudHMnLFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0LFxuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgbnVsbCk7XG4gICAgICAgIHRoaXMudGFpbnRzLnNldCgnYXJndW1lbnRzJywgdHJ1ZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRm9yU2NvcGUgZXh0ZW5kcyBTY29wZSB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGVNYW5hZ2VyLCB1cHBlclNjb3BlLCBibG9jaykge1xuICAgICAgICBzdXBlcihzY29wZU1hbmFnZXIsICdmb3InLCB1cHBlclNjb3BlLCBibG9jaywgZmFsc2UpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsYXNzU2NvcGUgZXh0ZW5kcyBTY29wZSB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGVNYW5hZ2VyLCB1cHBlclNjb3BlLCBibG9jaykge1xuICAgICAgICBzdXBlcihzY29wZU1hbmFnZXIsICdjbGFzcycsIHVwcGVyU2NvcGUsIGJsb2NrLCBmYWxzZSk7XG4gICAgfVxufVxuXG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/node_modules/escope/lib/variable.js b/node_modules/escope/lib/variable.js new file mode 100644 index 000000000..2f972c231 --- /dev/null +++ b/node_modules/escope/lib/variable.js @@ -0,0 +1,94 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/* + Copyright (C) 2015 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. +*/ + +/** + * A Variable represents a locally scoped identifier. These include arguments to + * functions. + * @class Variable + */ + +var Variable = function Variable(name, scope) { + _classCallCheck(this, Variable); + + /** + * The variable name, as given in the source code. + * @member {String} Variable#name + */ + this.name = name; + /** + * List of defining occurrences of this variable (like in 'var ...' + * statements or as parameter), as AST nodes. + * @member {esprima.Identifier[]} Variable#identifiers + */ + this.identifiers = []; + /** + * List of {@link Reference|references} of this variable (excluding parameter entries) + * in its defining scope and all nested scopes. For defining + * occurrences only see {@link Variable#defs}. + * @member {Reference[]} Variable#references + */ + this.references = []; + + /** + * List of defining occurrences of this variable (like in 'var ...' + * statements or as parameter), as custom objects. + * @member {Definition[]} Variable#defs + */ + this.defs = []; + + this.tainted = false; + /** + * Whether this is a stack variable. + * @member {boolean} Variable#stack + */ + this.stack = true; + /** + * Reference to the enclosing Scope. + * @member {Scope} Variable#scope + */ + this.scope = scope; +}; + +exports.default = Variable; + + +Variable.CatchClause = 'CatchClause'; +Variable.Parameter = 'Parameter'; +Variable.FunctionName = 'FunctionName'; +Variable.ClassName = 'ClassName'; +Variable.Variable = 'Variable'; +Variable.ImportBinding = 'ImportBinding'; +Variable.TDZ = 'TDZ'; +Variable.ImplicitGlobalVariable = 'ImplicitGlobalVariable'; + +/* vim: set sw=4 ts=4 et tw=80 : */ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZhcmlhYmxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBNkJxQixXQUNqQixTQURpQixRQUNqQixDQUFZLElBQVosRUFBa0IsS0FBbEIsRUFBeUI7d0JBRFIsVUFDUTs7Ozs7O0FBS3JCLE9BQUssSUFBTCxHQUFZLElBQVo7Ozs7OztBQUxxQixNQVdyQixDQUFLLFdBQUwsR0FBbUIsRUFBbkI7Ozs7Ozs7QUFYcUIsTUFrQnJCLENBQUssVUFBTCxHQUFrQixFQUFsQjs7Ozs7OztBQWxCcUIsTUF5QnJCLENBQUssSUFBTCxHQUFZLEVBQVosQ0F6QnFCOztBQTJCckIsT0FBSyxPQUFMLEdBQWUsS0FBZjs7Ozs7QUEzQnFCLE1BZ0NyQixDQUFLLEtBQUwsR0FBYSxJQUFiOzs7OztBQWhDcUIsTUFxQ3JCLENBQUssS0FBTCxHQUFhLEtBQWIsQ0FyQ3FCO0NBQXpCOztrQkFEaUI7OztBQTBDckIsU0FBUyxXQUFULEdBQXVCLGFBQXZCO0FBQ0EsU0FBUyxTQUFULEdBQXFCLFdBQXJCO0FBQ0EsU0FBUyxZQUFULEdBQXdCLGNBQXhCO0FBQ0EsU0FBUyxTQUFULEdBQXFCLFdBQXJCO0FBQ0EsU0FBUyxRQUFULEdBQW9CLFVBQXBCO0FBQ0EsU0FBUyxhQUFULEdBQXlCLGVBQXpCO0FBQ0EsU0FBUyxHQUFULEdBQWUsS0FBZjtBQUNBLFNBQVMsc0JBQVQsR0FBa0Msd0JBQWxDIiwiZmlsZSI6InZhcmlhYmxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4vKipcbiAqIEEgVmFyaWFibGUgcmVwcmVzZW50cyBhIGxvY2FsbHkgc2NvcGVkIGlkZW50aWZpZXIuIFRoZXNlIGluY2x1ZGUgYXJndW1lbnRzIHRvXG4gKiBmdW5jdGlvbnMuXG4gKiBAY2xhc3MgVmFyaWFibGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFyaWFibGUge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHNjb3BlKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdmFyaWFibGUgbmFtZSwgYXMgZ2l2ZW4gaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgICAgICAgKiBAbWVtYmVyIHtTdHJpbmd9IFZhcmlhYmxlI25hbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaXN0IG9mIGRlZmluaW5nIG9jY3VycmVuY2VzIG9mIHRoaXMgdmFyaWFibGUgKGxpa2UgaW4gJ3ZhciAuLi4nXG4gICAgICAgICAqIHN0YXRlbWVudHMgb3IgYXMgcGFyYW1ldGVyKSwgYXMgQVNUIG5vZGVzLlxuICAgICAgICAgKiBAbWVtYmVyIHtlc3ByaW1hLklkZW50aWZpZXJbXX0gVmFyaWFibGUjaWRlbnRpZmllcnNcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaWRlbnRpZmllcnMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExpc3Qgb2Yge0BsaW5rIFJlZmVyZW5jZXxyZWZlcmVuY2VzfSBvZiB0aGlzIHZhcmlhYmxlIChleGNsdWRpbmcgcGFyYW1ldGVyIGVudHJpZXMpXG4gICAgICAgICAqIGluIGl0cyBkZWZpbmluZyBzY29wZSBhbmQgYWxsIG5lc3RlZCBzY29wZXMuIEZvciBkZWZpbmluZ1xuICAgICAgICAgKiBvY2N1cnJlbmNlcyBvbmx5IHNlZSB7QGxpbmsgVmFyaWFibGUjZGVmc30uXG4gICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtdfSBWYXJpYWJsZSNyZWZlcmVuY2VzXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlZmVyZW5jZXMgPSBbXTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogTGlzdCBvZiBkZWZpbmluZyBvY2N1cnJlbmNlcyBvZiB0aGlzIHZhcmlhYmxlIChsaWtlIGluICd2YXIgLi4uJ1xuICAgICAgICAgKiBzdGF0ZW1lbnRzIG9yIGFzIHBhcmFtZXRlciksIGFzIGN1c3RvbSBvYmplY3RzLlxuICAgICAgICAgKiBAbWVtYmVyIHtEZWZpbml0aW9uW119IFZhcmlhYmxlI2RlZnNcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVmcyA9IFtdO1xuXG4gICAgICAgIHRoaXMudGFpbnRlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGlzIGlzIGEgc3RhY2sgdmFyaWFibGUuXG4gICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFZhcmlhYmxlI3N0YWNrXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YWNrID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgZW5jbG9zaW5nIFNjb3BlLlxuICAgICAgICAgKiBAbWVtYmVyIHtTY29wZX0gVmFyaWFibGUjc2NvcGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB9XG59XG5cblZhcmlhYmxlLkNhdGNoQ2xhdXNlID0gJ0NhdGNoQ2xhdXNlJztcblZhcmlhYmxlLlBhcmFtZXRlciA9ICdQYXJhbWV0ZXInO1xuVmFyaWFibGUuRnVuY3Rpb25OYW1lID0gJ0Z1bmN0aW9uTmFtZSc7XG5WYXJpYWJsZS5DbGFzc05hbWUgPSAnQ2xhc3NOYW1lJztcblZhcmlhYmxlLlZhcmlhYmxlID0gJ1ZhcmlhYmxlJztcblZhcmlhYmxlLkltcG9ydEJpbmRpbmcgPSAnSW1wb3J0QmluZGluZyc7XG5WYXJpYWJsZS5URFogPSAnVERaJztcblZhcmlhYmxlLkltcGxpY2l0R2xvYmFsVmFyaWFibGUgPSAnSW1wbGljaXRHbG9iYWxWYXJpYWJsZSc7XG5cbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/node_modules/escope/package.json b/node_modules/escope/package.json new file mode 100644 index 000000000..32369d009 --- /dev/null +++ b/node_modules/escope/package.json @@ -0,0 +1,85 @@ +{ + "_from": "escope@^3.6.0", + "_id": "escope@3.6.0", + "_inBundle": false, + "_integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "_location": "/escope", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "escope@^3.6.0", + "name": "escope", + "escapedName": "escope", + "rawSpec": "^3.6.0", + "saveSpec": null, + "fetchSpec": "^3.6.0" + }, + "_requiredBy": [ + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "_shasum": "e01975e812781a163a6dadfdd80398dc64c889c3", + "_spec": "escope@^3.6.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack", + "bugs": { + "url": "https://github.com/estools/escope/issues" + }, + "bundleDependencies": false, + "dependencies": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "deprecated": false, + "description": "ECMAScript scope analyzer", + "devDependencies": { + "babel": "^6.3.26", + "babel-preset-es2015": "^6.3.13", + "babel-register": "^6.3.13", + "browserify": "^13.0.0", + "chai": "^3.4.1", + "espree": "^3.1.1", + "esprima": "^2.7.1", + "gulp": "^3.9.0", + "gulp-babel": "^6.1.1", + "gulp-bump": "^1.0.0", + "gulp-eslint": "^1.1.1", + "gulp-espower": "^1.0.2", + "gulp-filter": "^3.0.1", + "gulp-git": "^1.6.1", + "gulp-mocha": "^2.2.0", + "gulp-plumber": "^1.0.1", + "gulp-sourcemaps": "^1.6.0", + "gulp-tag-version": "^1.3.0", + "jsdoc": "^3.4.0", + "lazypipe": "^1.0.1", + "vinyl-source-stream": "^1.1.0" + }, + "engines": { + "node": ">=0.4.0" + }, + "homepage": "http://github.com/estools/escope", + "license": "BSD-2-Clause", + "main": "lib/index.js", + "maintainers": [ + { + "name": "Yusuke Suzuki", + "email": "utatane.tea@gmail.com", + "url": "http://github.com/Constellation" + } + ], + "name": "escope", + "repository": { + "type": "git", + "url": "git+https://github.com/estools/escope.git" + }, + "scripts": { + "jsdoc": "jsdoc src/*.js README.md", + "lint": "gulp lint", + "test": "gulp travis", + "unit-test": "gulp test" + }, + "version": "3.6.0" +} diff --git a/node_modules/escope/powered-test/arguments.js b/node_modules/escope/powered-test/arguments.js new file mode 100644 index 000000000..5b841062a --- /dev/null +++ b/node_modules/escope/powered-test/arguments.js @@ -0,0 +1,34 @@ +(function() { + var escope, esprima, expect, harmony; + + expect = require('chai').expect; + + esprima = require('esprima'); + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('arguments', function() { + return it('arguments are correctly materialized', function() { + var ast, globalScope, scope, scopeManager; + ast = esprima.parse("(function () {\n arguments;\n}());"); + scopeManager = escope.analyze(ast); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.isArgumentsMaterialized()).to.be["true"]; + expect(scope.references).to.have.length(1); + return expect(scope.references[0].resolved).to.be.equal(scope.variables[0]); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFyZ3VtZW50cy5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJBO0FBQUEsTUFBQSxnQ0FBQTs7QUFBQSxFQUFBLE1BQUEsR0FBUyxPQUFBLENBQVMsTUFBVCxDQUFlLENBQUMsTUFBekIsQ0FBQTs7QUFBQSxFQUNBLE9BQUEsR0FBVSxPQUFBLENBQVMsU0FBVCxDQURWLENBQUE7O0FBQUEsRUFFQSxPQUFBLEdBQVUsT0FBQSxDQUFTLHdCQUFULENBRlYsQ0FBQTs7QUFBQSxFQUdBLE1BQUEsR0FBUyxPQUFBLENBQVMsSUFBVCxDQUhULENBQUE7O0FBQUEsRUFLQSxRQUFBLENBQVUsV0FBVixFQUFzQixTQUFBLEdBQUE7V0FDbEIsRUFBQSxDQUFJLHNDQUFKLEVBQTJDLFNBQUEsR0FBQTtBQUN2QyxVQUFBLHFDQUFBO0FBQUEsTUFBQSxHQUFBLEdBQU0sT0FBTyxDQUFDLEtBQVIsQ0FBaUIsdUNBQWpCLENBQU4sQ0FBQTtBQUFBLE1BTUEsWUFBQSxHQUFlLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixDQU5mLENBQUE7QUFBQSxNQU9BLE1BQUEsQ0FBTyxZQUFZLENBQUMsTUFBcEIsQ0FBMkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXBDLENBQTJDLENBQTNDLENBUEEsQ0FBQTtBQUFBLE1BUUEsV0FBQSxHQUFjLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVJsQyxDQUFBO0FBQUEsTUFTQSxNQUFBLENBQU8sV0FBVyxDQUFDLElBQW5CLENBQXdCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUEvQixDQUFzQyxRQUF0QyxDQVRBLENBQUE7QUFBQSxNQVVBLE1BQUEsQ0FBTyxXQUFXLENBQUMsU0FBbkIsQ0FBNkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXRDLENBQTZDLENBQTdDLENBVkEsQ0FBQTtBQUFBLE1BV0EsTUFBQSxDQUFPLFdBQVcsQ0FBQyxVQUFuQixDQUE4QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBdkMsQ0FBOEMsQ0FBOUMsQ0FYQSxDQUFBO0FBQUEsTUFhQSxLQUFBLEdBQVEsWUFBWSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBYjVCLENBQUE7QUFBQSxNQWNBLE1BQUEsQ0FBTyxLQUFLLENBQUMsSUFBYixDQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBekIsQ0FBZ0MsVUFBaEMsQ0FkQSxDQUFBO0FBQUEsTUFlQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQWIsQ0FBdUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWhDLENBQXVDLENBQXZDLENBZkEsQ0FBQTtBQUFBLE1BZ0JBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxXQUE3QyxDQWhCQSxDQUFBO0FBQUEsTUFpQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyx1QkFBTixDQUFBLENBQVAsQ0FBdUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQUQsQ0FqQjdDLENBQUE7QUFBQSxNQWtCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLENBbEJBLENBQUE7YUFtQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFXLENBQUEsQ0FBQSxDQUFFLENBQUMsUUFBM0IsQ0FBb0MsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQTNDLENBQWlELEtBQUssQ0FBQyxTQUFVLENBQUEsQ0FBQSxDQUFqRSxFQXBCdUM7SUFBQSxDQUEzQyxFQURrQjtFQUFBLENBQXRCLENBTEEsQ0FBQTtBQUFBIiwiZmlsZSI6ImFyZ3VtZW50cy5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5lc3ByaW1hID0gcmVxdWlyZSAnZXNwcmltYSdcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdhcmd1bWVudHMnLCAtPlxuICAgIGl0ICdhcmd1bWVudHMgYXJlIGNvcnJlY3RseSBtYXRlcmlhbGl6ZWQnLCAtPlxuICAgICAgICBhc3QgPSBlc3ByaW1hLnBhcnNlIFwiXCJcIlxuICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXJndW1lbnRzO1xuICAgICAgICB9KCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3RcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgc2NvcGUudmFyaWFibGVzWzBdXG5cbiMgdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDpcbiJdfQ== \ No newline at end of file diff --git a/node_modules/escope/powered-test/catch-scope.js b/node_modules/escope/powered-test/catch-scope.js new file mode 100644 index 000000000..34fa16526 --- /dev/null +++ b/node_modules/escope/powered-test/catch-scope.js @@ -0,0 +1,39 @@ +(function() { + var escope, esprima, expect, harmony; + + expect = require('chai').expect; + + esprima = require('esprima'); + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('catch', function() { + return it('creates scope', function() { + var ast, globalScope, scope, scopeManager; + ast = esprima.parse("(function () {\n try {\n } catch (e) {\n }\n}());"); + scopeManager = escope.analyze(ast); + expect(scopeManager.scopes).to.have.length(3); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.isArgumentsMaterialized()).to.be["false"]; + expect(scope.references).to.have.length(0); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('catch'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('e'); + expect(scope.isArgumentsMaterialized()).to.be["true"]; + return expect(scope.references).to.have.length(0); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,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QTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxHQUE3QyxDQXpCQSxDQUFBO0FBQUEsTUEwQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyx1QkFBTixDQUFBLENBQVAsQ0FBdUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQUQsQ0ExQjdDLENBQUE7YUEyQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFiLENBQXdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFqQyxDQUF3QyxDQUF4QyxFQTVCZ0I7SUFBQSxDQUFwQixFQURjO0VBQUEsQ0FBbEIsQ0FMQSxDQUFBO0FBQUEiLCJmaWxlIjoiY2F0Y2gtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8iLCJzb3VyY2VzQ29udGVudCI6WyIjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuIyAgQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiNcbiMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4jXG4jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4jICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiNcbiMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4jICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4jICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuIyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiMgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiMgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuIyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiMgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuIyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuZXhwZWN0ID0gcmVxdWlyZSgnY2hhaScpLmV4cGVjdFxuZXNwcmltYSA9IHJlcXVpcmUgJ2VzcHJpbWEnXG5oYXJtb255ID0gcmVxdWlyZSAnLi4vdGhpcmRfcGFydHkvZXNwcmltYSdcbmVzY29wZSA9IHJlcXVpcmUgJy4uJ1xuXG5kZXNjcmliZSAnY2F0Y2gnLCAtPlxuICAgIGl0ICdjcmVhdGVzIHNjb3BlJywgLT5cbiAgICAgICAgYXN0ID0gZXNwcmltYS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0oKSk7XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdFxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggM1xuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS5pc0FyZ3VtZW50c01hdGVyaWFsaXplZCgpKS50by5iZS5mYWxzZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1syXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2NhdGNoJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2UnXG4gICAgICAgIGV4cGVjdChzY29wZS5pc0FyZ3VtZW50c01hdGVyaWFsaXplZCgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiMgdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDpcbiJdfQ== \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-arrow-function-expression.js b/node_modules/escope/powered-test/es6-arrow-function-expression.js new file mode 100644 index 000000000..cf616c19f --- /dev/null +++ b/node_modules/escope/powered-test/es6-arrow-function-expression.js @@ -0,0 +1,57 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 arrow function expression', function() { + it('materialize scope for arrow function expression', function() { + var ast, scope, scopeManager; + ast = harmony.parse("var arrow = () => {\n let i = 0;\n var j = 20;\n console.log(i);\n}"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(1); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('ArrowFunctionExpression'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('i'); + return expect(scope.variables[1].name).to.be.equal('j'); + }); + return it('generate bindings for parameters', function() { + var ast, scope, scopeManager; + ast = harmony.parse("var arrow = (a, b, c, d) => {\n}"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(1); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('ArrowFunctionExpression'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(4); + expect(scope.variables[0].name).to.be.equal('a'); + expect(scope.variables[1].name).to.be.equal('b'); + expect(scope.variables[2].name).to.be.equal('c'); + return expect(scope.variables[3].name).to.be.equal('d'); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVzNi1hcnJvdy1mdW5jdGlvbi1leHByZXNzaW9uLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QkE7QUFBQSxNQUFBLHVCQUFBOztBQUFBLEVBQUEsTUFBQSxHQUFTLE9BQUEsQ0FBUyxNQUFULENBQWUsQ0FBQyxNQUF6QixDQUFBOztBQUFBLEVBQ0EsT0FBQSxHQUFVLE9BQUEsQ0FBUyx3QkFBVCxDQURWLENBQUE7O0FBQUEsRUFFQSxNQUFBLEdBQVMsT0FBQSxDQUFTLElBQVQsQ0FGVCxDQUFBOztBQUFBLEVBSUEsUUFBQSxDQUFVLCtCQUFWLEVBQTBDLFNBQUEsR0FBQTtBQUN0QyxJQUFBLEVBQUEsQ0FBSSxpREFBSixFQUFzRCxTQUFBLEdBQUE7QUFDbEQsVUFBQSx3QkFBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLDhFQUFqQixDQUFOLENBQUE7QUFBQSxNQVFBLFlBQUEsR0FBZSxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWYsRUFBb0I7QUFBQSxRQUFBLFdBQUEsRUFBYSxDQUFiO09BQXBCLENBUmYsQ0FBQTtBQUFBLE1BU0EsTUFBQSxDQUFPLFlBQVksQ0FBQyxNQUFwQixDQUEyQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBcEMsQ0FBMkMsQ0FBM0MsQ0FUQSxDQUFBO0FBQUEsTUFXQSxLQUFBLEdBQVEsWUFBWSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBWDVCLENBQUE7QUFBQSxNQVlBLE1BQUEsQ0FBTyxLQUFLLENBQUMsSUFBYixDQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBekIsQ0FBZ0MsUUFBaEMsQ0FaQSxDQUFBO0FBQUEsTUFhQSxNQUFBLENBQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsU0FBdEMsQ0FiQSxDQUFBO0FBQUEsTUFjQSxNQUFBLENBQU8sS0FBSyxDQUFDLFFBQWIsQ0FB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LENBQXNDLHlCQUF0QyxDQWhCQSxDQUFBO0FBQUEsTUFpQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxRQUFiLENBQXNCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFELENBakI1QixDQUFBO0FBQUEsTUFrQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQWxCQSxDQUFBO0FBQUEsTUFvQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFVLENBQUEsQ0FBQSxDQUFFLENBQUMsSUFBMUIsQ0FBK0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXRDLENBQTZDLEdBQTdDLENBcEJBLENBQUE7QUFBQSxNQXFCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQUUsQ0FBQyxJQUExQixDQUErQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBdEMsQ0FBNkMsR0FBN0MsQ0FyQkEsQ0FBQTtBQUFBLE1Bc0JBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxHQUE3QyxDQXRCQSxDQUFBO2FBdUJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxHQUE3QyxFQXhCbUM7SUFBQSxDQUF2QyxFQTVCc0M7RUFBQSxDQUExQyxDQUpBLENBQUE7QUFBQSIsImZpbGUiOiJlczYtYXJyb3ctZnVuY3Rpb24tZXhwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5oYXJtb255ID0gcmVxdWlyZSAnLi4vdGhpcmRfcGFydHkvZXNwcmltYSdcbmVzY29wZSA9IHJlcXVpcmUgJy4uJ1xuXG5kZXNjcmliZSAnRVM2IGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb24nLCAtPlxuICAgIGl0ICdtYXRlcmlhbGl6ZSBzY29wZSBmb3IgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvbicsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIHZhciBhcnJvdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIHZhciBqID0gMjA7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpKTtcbiAgICAgICAgfVxuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuYmxvY2sudHlwZSkudG8uYmUuZXF1YWwgJ1Byb2dyYW0nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUuZmFsc2VcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuYmxvY2sudHlwZSkudG8uYmUuZXF1YWwgJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICAjIFRoZXJlJ3Mgbm8gXCJhcmd1bWVudHNcIlxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICdqJ1xuXG4gICAgaXQgJ2dlbmVyYXRlIGJpbmRpbmdzIGZvciBwYXJhbWV0ZXJzJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgdmFyIGFycm93ID0gKGEsIGIsIGMsIGQpID0+IHtcbiAgICAgICAgfVxuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuYmxvY2sudHlwZSkudG8uYmUuZXF1YWwgJ1Byb2dyYW0nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUuZmFsc2VcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuYmxvY2sudHlwZSkudG8uYmUuZXF1YWwgJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggNFxuICAgICAgICAjIFRoZXJlJ3Mgbm8gXCJhcmd1bWVudHNcIlxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICdiJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzJdLm5hbWUpLnRvLmJlLmVxdWFsICdjJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzNdLm5hbWUpLnRvLmJlLmVxdWFsICdkJ1xuXG4jIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6XG4iXX0= \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-block-scope.js b/node_modules/escope/powered-test/es6-block-scope.js new file mode 100644 index 000000000..89c687758 --- /dev/null +++ b/node_modules/escope/powered-test/es6-block-scope.js @@ -0,0 +1,136 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 block scope', function() { + it('let is materialized in ES6 block scope#1', function() { + var ast, scope, scopeManager; + ast = harmony.parse("{\n let i = 20;\n i;\n}"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('block'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('i'); + expect(scope.references).to.have.length(2); + expect(scope.references[0].identifier.name).to.be.equal('i'); + return expect(scope.references[1].identifier.name).to.be.equal('i'); + }); + it('let is materialized in ES6 block scope#2', function() { + var ast, scope, scopeManager; + ast = harmony.parse("{\n let i = 20;\n var i = 20;\n i;\n}"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('i'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('block'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('i'); + expect(scope.references).to.have.length(3); + expect(scope.references[0].identifier.name).to.be.equal('i'); + expect(scope.references[1].identifier.name).to.be.equal('i'); + return expect(scope.references[2].identifier.name).to.be.equal('i'); + }); + it('function delaration is materialized in ES6 block scope', function() { + var ast, scope, scopeManager; + ast = harmony.parse("{\n function test() {\n }\n test();\n}"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(3); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('block'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('test'); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('test'); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + return expect(scope.references).to.have.length(0); + }); + it('let is not hoistable#1', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("var i = 42; (1)\n{\n i; // (2) ReferenceError at runtime.\n let i = 20; // (2)\n i; // (2)\n}"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(1); + expect(globalScope.variables[0].name).to.be.equal('i'); + expect(globalScope.references).to.have.length(1); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('block'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('i'); + expect(scope.references).to.have.length(3); + expect(scope.references[0].resolved).to.be.equal(scope.variables[0]); + expect(scope.references[1].resolved).to.be.equal(scope.variables[0]); + return expect(scope.references[2].resolved).to.be.equal(scope.variables[0]); + }); + return it('let is not hoistable#2', function() { + var ast, globalScope, scope, scopeManager, v1, v2, v3; + ast = harmony.parse("(function () {\n var i = 42; // (1)\n i; // (1)\n {\n i; // (3)\n {\n i; // (2)\n let i = 20; // (2)\n i; // (2)\n }\n let i = 30; // (3)\n i; // (3)\n }\n i; // (1)\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(4); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('i'); + v1 = scope.variables[1]; + expect(scope.references).to.have.length(3); + expect(scope.references[0].resolved).to.be.equal(v1); + expect(scope.references[1].resolved).to.be.equal(v1); + expect(scope.references[2].resolved).to.be.equal(v1); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('block'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('i'); + v3 = scope.variables[0]; + expect(scope.references).to.have.length(3); + expect(scope.references[0].resolved).to.be.equal(v3); + expect(scope.references[1].resolved).to.be.equal(v3); + expect(scope.references[2].resolved).to.be.equal(v3); + scope = scopeManager.scopes[3]; + expect(scope.type).to.be.equal('block'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('i'); + v2 = scope.variables[0]; + expect(scope.references).to.have.length(3); + expect(scope.references[0].resolved).to.be.equal(v2); + expect(scope.references[1].resolved).to.be.equal(v2); + return expect(scope.references[2].resolved).to.be.equal(v2); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVzNi1ibG9jay1zY29wZS5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJBO0FBQUEsTUFBQSx1QkFBQTs7QUFBQSxFQUFBLE1BQUEsR0FBUyxPQUFBLENBQVMsTUFBVCxDQUFlLENBQUMsTUFBekIsQ0FBQTs7QUFBQSxFQUNBLE9BQUEsR0FBVSxPQUFBLENBQVMsd0JBQVQsQ0FEVixDQUFBOztBQUFBLEVBRUEsTUFBQSxHQUFTLE9BQUEsQ0FBUyxJQUFULENBRlQsQ0FBQTs7QUFBQSxFQUlBLFFBQUEsQ0FBVSxpQkFBVixFQUE0QixTQUFBLEdBQUE7QUFDeEIsSUFBQSxFQUFBLENBQUksMENBQUosRUFBK0MsU0FBQSxHQUFBO0FBQzNDLFVBQUEsd0JBQUE7QUFBQSxNQUFBLEdBQUEsR0FBTSxPQUFPLENBQUMsS0FBUixDQUFpQiwrQkFBakIsQ0FBTixDQUFBO0FBQUEsTUFPQSxZQUFBLEdBQWUsTUFBTSxDQUFDLE9BQVAsQ0FBZSxHQUFmLEVBQW9CO0FBQUEsUUFBQSxXQUFBLEVBQWEsQ0FBYjtPQUFwQixDQVBmLENBQUE7QUFBQSxNQVFBLE1BQUEsQ0FBTyxZQUFZLENBQUMsTUFBcEIsQ0FBMkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXBDLENBQTJDLENBQTNDLENBUkEsQ0FBQTtBQUFBLE1BVUEsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVY1QixDQUFBO0FBQUEsTUFXQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFFBQWhDLENBWEEsQ0FBQTtBQUFBLE1BWUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQVpBLENBQUE7QUFBQSxNQWNBLEtBQUEsR0FBUSxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FkNUIsQ0FBQTtBQUFBLE1B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O0VBQUEsQ0FBNUIsQ0FKQSxDQUFBO0FBQUEiLCJmaWxlIjoiZXM2LWJsb2NrLXNjb3BlLmpzIiwic291cmNlUm9vdCI6Ii9zb3VyY2UvIiwic291cmNlc0NvbnRlbnQiOlsiIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbiMgIENvcHlyaWdodCAoQykgMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4jXG4jICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuI1xuIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuIyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4jXG4jICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiMgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4jICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4jICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiMgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4jICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiMgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbmV4cGVjdCA9IHJlcXVpcmUoJ2NoYWknKS5leHBlY3Rcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdFUzYgYmxvY2sgc2NvcGUnLCAtPlxuICAgIGl0ICdsZXQgaXMgbWF0ZXJpYWxpemVkIGluIEVTNiBibG9jayBzY29wZSMxJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGkgPSAyMDtcbiAgICAgICAgICAgIGk7XG4gICAgICAgIH1cbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMiAgIyBQcm9ncmFtIGFuZCBCbGNva1N0YXRlbWVudCBzY29wZS5cblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDAgICMgTm8gdmFyaWFibGUgaW4gUHJvZ3JhbSBzY29wZS5cblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdibG9jaydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMSAgIyBgaWAgaW4gYmxvY2sgc2NvcGUuXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwoJ2knKVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsKCdpJylcblxuICAgIGl0ICdsZXQgaXMgbWF0ZXJpYWxpemVkIGluIEVTNiBibG9jayBzY29wZSMyJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGkgPSAyMDtcbiAgICAgICAgICAgIHZhciBpID0gMjA7XG4gICAgICAgICAgICBpO1xuICAgICAgICB9XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDIgICMgUHJvZ3JhbSBhbmQgQmxjb2tTdGF0ZW1lbnQgc2NvcGUuXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxICAjIE5vIHZhcmlhYmxlIGluIFByb2dyYW0gc2NvcGUuXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2knXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnYmxvY2snXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDEgICMgYGlgIGluIGJsb2NrIHNjb3BlLlxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggM1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsKCdpJylcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCgnaScpXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwoJ2knKVxuXG4gICAgaXQgJ2Z1bmN0aW9uIGRlbGFyYXRpb24gaXMgbWF0ZXJpYWxpemVkIGluIEVTNiBibG9jayBzY29wZScsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggM1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Jsb2NrJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ3Rlc3QnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwoJ3Rlc3QnKVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1syXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2FyZ3VtZW50cydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgIGl0ICdsZXQgaXMgbm90IGhvaXN0YWJsZSMxJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgdmFyIGkgPSA0MjsgKDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGk7ICAvLyAoMikgUmVmZXJlbmNlRXJyb3IgYXQgcnVudGltZS5cbiAgICAgICAgICAgIGxldCBpID0gMjA7ICAvLyAoMilcbiAgICAgICAgICAgIGk7ICAvLyAoMilcbiAgICAgICAgfVxuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAxXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnYmxvY2snXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDNcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgc2NvcGUudmFyaWFibGVzWzBdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLnJlc29sdmVkKS50by5iZS5lcXVhbCBzY29wZS52YXJpYWJsZXNbMF1cblxuICAgIGl0ICdsZXQgaXMgbm90IGhvaXN0YWJsZSMyJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpID0gNDI7IC8vICgxKVxuICAgICAgICAgICAgaTsgIC8vICgxKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGk7ICAvLyAoMylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGk7ICAvLyAoMilcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAyMDsgIC8vICgyKVxuICAgICAgICAgICAgICAgICAgICBpOyAgLy8gKDIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBpID0gMzA7ICAvLyAoMylcbiAgICAgICAgICAgICAgICBpOyAgLy8gKDMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpOyAgLy8gKDEpXG4gICAgICAgIH0oKSk7XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDRcblxuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMV0ubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIHYxID0gc2NvcGUudmFyaWFibGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAzXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5lcXVhbCB2MVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgdjFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHYxXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzJdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnYmxvY2snXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgdjMgPSBzY29wZS52YXJpYWJsZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDNcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHYzXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnJlc29sdmVkKS50by5iZS5lcXVhbCB2M1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgdjNcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbM11cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdibG9jaydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICB2MiA9IHNjb3BlLnZhcmlhYmxlc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggM1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgdjJcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHYyXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLnJlc29sdmVkKS50by5iZS5lcXVhbCB2MlxuXG4jIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6XG4iXX0= \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-catch.js b/node_modules/escope/powered-test/es6-catch.js new file mode 100644 index 000000000..986c5eb51 --- /dev/null +++ b/node_modules/escope/powered-test/es6-catch.js @@ -0,0 +1,39 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 catch', function() { + return it('takes binding pattern', function() { + var ast, scope, scopeManager; + ast = harmony.parse("try {\n} catch ({ a, b, c, d }) {\n let e = 20;\n a;\n b;\n let c = 30;\n c;\n d;\n}"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(4); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('block'); + expect(scope.block.type).to.be.equal('BlockStatement'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('catch'); + expect(scope.block.type).to.be.equal('CatchClause'); + return expect(scope.isStrict).to.be["false"]; + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,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LENBQUE7QUFBQSxNQThCQSxNQUFBLENBQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsYUFBdEMsQ0E5QkEsQ0FBQTthQStCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFFBQWIsQ0FBc0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQUQsRUFoQ0o7SUFBQSxDQUE1QixFQURrQjtFQUFBLENBQXRCLENBSkEsQ0FBQTtBQUFBIiwiZmlsZSI6ImVzNi1jYXRjaC5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuZXhwZWN0ID0gcmVxdWlyZSgnY2hhaScpLmV4cGVjdFxuaGFybW9ueSA9IHJlcXVpcmUgJy4uL3RoaXJkX3BhcnR5L2VzcHJpbWEnXG5lc2NvcGUgPSByZXF1aXJlICcuLidcblxuZGVzY3JpYmUgJ0VTNiBjYXRjaCcsIC0+XG4gICAgaXQgJ3Rha2VzIGJpbmRpbmcgcGF0dGVybicsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIHRyeSB7XG4gICAgICAgIH0gY2F0Y2ggKHsgYSwgYiwgYywgZCB9KSB7XG4gICAgICAgICAgICBsZXQgZSA9IDIwO1xuICAgICAgICAgICAgYTtcbiAgICAgICAgICAgIGI7XG4gICAgICAgICAgICBsZXQgYyA9IDMwO1xuICAgICAgICAgICAgYztcbiAgICAgICAgICAgIGQ7XG4gICAgICAgIH1cbiAgICAgICAgXCJcIlwiXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDRcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnUHJvZ3JhbSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmlzU3RyaWN0KS50by5iZS5mYWxzZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnYmxvY2snXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnQmxvY2tTdGF0ZW1lbnQnXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUuZmFsc2VcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1syXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2NhdGNoJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuYmxvY2sudHlwZSkudG8uYmUuZXF1YWwgJ0NhdGNoQ2xhdXNlJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG5cbiAgICAgICAgIyBGSVhNRSBBZnRlciBFc3ByaW1hJ3MgYnVnIGlzIGZpeGVkLCBJJ2xsIGFkZCB0ZXN0cyAjMzNcbiAgICAgICAgIyBodHRwczovL2dpdGh1Yi5jb20vZXN0b29scy9lc2NvcGUvaXNzdWVzLzMzI2lzc3VlY29tbWVudC02NDEzNTgzMlxuICAgICAgICAjXG4gICAgICAgICMgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggNFxuICAgICAgICAjIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2EnXG4gICAgICAgICMgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1sxXS5uYW1lKS50by5iZS5lcXVhbCAnYidcbiAgICAgICAgIyBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzJdLm5hbWUpLnRvLmJlLmVxdWFsICdjJ1xuICAgICAgICAjIGV4cGVjdChzY29wZS52YXJpYWJsZXNbM10ubmFtZSkudG8uYmUuZXF1YWwgJ2QnXG4gICAgICAgICMgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuIyB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOlxuIl19 \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-class.js b/node_modules/escope/powered-test/es6-class.js new file mode 100644 index 000000000..9fcbe8ebd --- /dev/null +++ b/node_modules/escope/powered-test/es6-class.js @@ -0,0 +1,155 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 class', function() { + it('declaration name creates class scope', function() { + var ast, scope, scopeManager; + ast = harmony.parse("class Derived extends Base {\n constructor() {\n }\n}\nnew Derived();"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(3); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('Derived'); + expect(scope.references).to.have.length(2); + expect(scope.references[0].identifier.name).to.be.equal('Base'); + expect(scope.references[1].identifier.name).to.be.equal('Derived'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('class'); + expect(scope.block.type).to.be.equal('ClassDeclaration'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('Derived'); + expect(scope.references).to.have.length(0); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('FunctionExpression'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + return expect(scope.references).to.have.length(0); + }); + it('declaration name creates class scope', function() { + var ast, scope, scopeManager; + ast = harmony.parse("class Base {\n constructor() {\n }\n}\nlet foo = new Base();"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(3); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('Base'); + expect(scope.variables[1].name).to.be.equal('foo'); + expect(scope.through).to.have.length(0); + expect(scope.references).to.have.length(2); + expect(scope.references[0].identifier.name).to.be.equal('foo'); + expect(scope.references[1].identifier.name).to.be.equal('Base'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('class'); + expect(scope.block.type).to.be.equal('ClassDeclaration'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + console.dir(scope.variables); + expect(scope.variables[0].name).to.be.equal('Base'); + expect(scope.references).to.have.length(0); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('FunctionExpression'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + return expect(scope.references).to.have.length(0); + }); + it('expression name creates class scope#1', function() { + var ast, scope, scopeManager; + ast = harmony.parse("(class Derived extends Base {\n constructor() {\n }\n});"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(3); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('Base'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('class'); + expect(scope.block.type).to.be.equal('ClassExpression'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('Derived'); + expect(scope.references).to.have.length(0); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('function'); + return expect(scope.block.type).to.be.equal('FunctionExpression'); + }); + it('expression name creates class scope#2', function() { + var ast, scope, scopeManager; + ast = harmony.parse("(class extends Base {\n constructor() {\n }\n});"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(3); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('Base'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('class'); + expect(scope.block.type).to.be.equal('ClassExpression'); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('function'); + return expect(scope.block.type).to.be.equal('FunctionExpression'); + }); + return it('computed property key may refer variables', function() { + var ast, scope, scopeManager; + ast = harmony.parse("(function () {\n var yuyushiki = 42;\n (class {\n [yuyushiki]() {\n }\n\n [yuyushiki + 40]() {\n }\n });\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(5); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('FunctionExpression'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('yuyushiki'); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('yuyushiki'); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('class'); + expect(scope.block.type).to.be.equal('ClassExpression'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(2); + expect(scope.references[0].identifier.name).to.be.equal('yuyushiki'); + return expect(scope.references[1].identifier.name).to.be.equal('yuyushiki'); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,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QUssQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsaUJBQXRDLENBakNBLENBQUE7QUFBQSxNQWtDQSxNQUFBLENBQU8sS0FBSyxDQUFDLFFBQWIsQ0FBc0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQUQsQ0FsQzVCLENBQUE7QUFBQSxNQW1DQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQWIsQ0FBdUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWhDLENBQXVDLENBQXZDLENBbkNBLENBQUE7QUFBQSxNQW9DQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLENBcENBLENBQUE7QUFBQSxNQXFDQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxVQUFVLENBQUMsSUFBdEMsQ0FBMkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQWxELENBQXlELFdBQXpELENBckNBLENBQUE7YUFzQ0EsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFXLENBQUEsQ0FBQSxDQUFFLENBQUMsVUFBVSxDQUFDLElBQXRDLENBQTJDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFsRCxDQUF5RCxXQUF6RCxFQXZDNEM7SUFBQSxDQUFoRCxFQTFJa0I7RUFBQSxDQUF0QixDQUpBLENBQUE7QUFBQSIsImZpbGUiOiJlczYtY2xhc3MuanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8iLCJzb3VyY2VzQ29udGVudCI6WyIjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuIyAgQ29weXJpZ2h0IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiNcbiMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4jXG4jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4jICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiNcbiMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4jICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4jICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuIyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiMgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiMgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuIyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiMgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuIyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuZXhwZWN0ID0gcmVxdWlyZSgnY2hhaScpLmV4cGVjdFxuaGFybW9ueSA9IHJlcXVpcmUgJy4uL3RoaXJkX3BhcnR5L2VzcHJpbWEnXG5lc2NvcGUgPSByZXF1aXJlICcuLidcblxuZGVzY3JpYmUgJ0VTNiBjbGFzcycsIC0+XG4gICAgaXQgJ2RlY2xhcmF0aW9uIG5hbWUgY3JlYXRlcyBjbGFzcyBzY29wZScsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5ldyBEZXJpdmVkKCk7XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDNcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnUHJvZ3JhbSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmlzU3RyaWN0KS50by5iZS5mYWxzZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ0Rlcml2ZWQnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ0Jhc2UnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ0Rlcml2ZWQnXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnY2xhc3MnXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnQ2xhc3NEZWNsYXJhdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLmlzU3RyaWN0KS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnRGVyaXZlZCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMl1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdGdW5jdGlvbkV4cHJlc3Npb24nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2FyZ3VtZW50cydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgIGl0ICdkZWNsYXJhdGlvbiBuYW1lIGNyZWF0ZXMgY2xhc3Mgc2NvcGUnLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICBjbGFzcyBCYXNlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBmb28gPSBuZXcgQmFzZSgpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAzXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuYmxvY2sudHlwZSkudG8uYmUuZXF1YWwgJ1Byb2dyYW0nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUuZmFsc2VcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdCYXNlJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICdmb28nXG4gICAgICAgIGV4cGVjdChzY29wZS50aHJvdWdoKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2ZvbydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnQmFzZSdcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdjbGFzcydcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdDbGFzc0RlY2xhcmF0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBjb25zb2xlLmRpciBzY29wZS52YXJpYWJsZXNcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnQmFzZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMl1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdGdW5jdGlvbkV4cHJlc3Npb24nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2FyZ3VtZW50cydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgIGl0ICdleHByZXNzaW9uIG5hbWUgY3JlYXRlcyBjbGFzcyBzY29wZSMxJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggM1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdQcm9ncmFtJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnQmFzZSdcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdjbGFzcydcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdDbGFzc0V4cHJlc3Npb24nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ0Rlcml2ZWQnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzJdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnRnVuY3Rpb25FeHByZXNzaW9uJ1xuXG4gICAgaXQgJ2V4cHJlc3Npb24gbmFtZSBjcmVhdGVzIGNsYXNzIHNjb3BlIzInLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICAoY2xhc3MgZXh0ZW5kcyBCYXNlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggM1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdQcm9ncmFtJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnQmFzZSdcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdjbGFzcydcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdDbGFzc0V4cHJlc3Npb24nXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzJdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnRnVuY3Rpb25FeHByZXNzaW9uJ1xuXG4gICAgaXQgJ2NvbXB1dGVkIHByb3BlcnR5IGtleSBtYXkgcmVmZXIgdmFyaWFibGVzJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB5dXl1c2hpa2kgPSA0MjtcbiAgICAgICAgICAgIChjbGFzcyB7XG4gICAgICAgICAgICAgICAgW3l1eXVzaGlraV0oKSB7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgW3l1eXVzaGlraSArIDQwXSgpIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSgpKTtcbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggNVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdQcm9ncmFtJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnRnVuY3Rpb25FeHByZXNzaW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDJcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICd5dXl1c2hpa2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ3l1eXVzaGlraSdcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMl1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdjbGFzcydcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdDbGFzc0V4cHJlc3Npb24nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ3l1eXVzaGlraSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAneXV5dXNoaWtpJ1xuXG4jIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6XG4iXX0= \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-destructuring-assignments.js b/node_modules/escope/powered-test/es6-destructuring-assignments.js new file mode 100644 index 000000000..5f23b274f --- /dev/null +++ b/node_modules/escope/powered-test/es6-destructuring-assignments.js @@ -0,0 +1,504 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 destructuring assignments', function() { + it('Pattern in var in ForInStatement', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("(function () {\n for (var [a, b, c] in array);\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('array'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(4); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('a'); + expect(scope.variables[2].name).to.be.equal('b'); + expect(scope.variables[3].name).to.be.equal('c'); + expect(scope.references).to.have.length(4); + expect(scope.references[0].identifier.name).to.be.equal('a'); + expect(scope.references[0].isWrite()).to.be["true"]; + expect(scope.references[0].partial).to.be["true"]; + expect(scope.references[0].resolved).to.be.equal(scope.variables[1]); + expect(scope.references[1].identifier.name).to.be.equal('b'); + expect(scope.references[1].isWrite()).to.be["true"]; + expect(scope.references[1].partial).to.be["true"]; + expect(scope.references[1].resolved).to.be.equal(scope.variables[2]); + expect(scope.references[2].identifier.name).to.be.equal('c'); + expect(scope.references[2].isWrite()).to.be["true"]; + expect(scope.references[2].partial).to.be["true"]; + expect(scope.references[2].resolved).to.be.equal(scope.variables[3]); + expect(scope.references[3].identifier.name).to.be.equal('array'); + return expect(scope.references[3].isWrite()).to.be["false"]; + }); + it('ArrayPattern in var', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("(function () {\n var [a, b, c] = array;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('array'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(4); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('a'); + expect(scope.variables[2].name).to.be.equal('b'); + expect(scope.variables[3].name).to.be.equal('c'); + expect(scope.references).to.have.length(4); + expect(scope.references[0].identifier.name).to.be.equal('a'); + expect(scope.references[0].isWrite()).to.be["true"]; + expect(scope.references[0].partial).to.be["true"]; + expect(scope.references[0].resolved).to.be.equal(scope.variables[1]); + expect(scope.references[1].identifier.name).to.be.equal('b'); + expect(scope.references[1].isWrite()).to.be["true"]; + expect(scope.references[1].partial).to.be["true"]; + expect(scope.references[1].resolved).to.be.equal(scope.variables[2]); + expect(scope.references[2].identifier.name).to.be.equal('c'); + expect(scope.references[2].isWrite()).to.be["true"]; + expect(scope.references[2].partial).to.be["true"]; + expect(scope.references[2].resolved).to.be.equal(scope.variables[3]); + expect(scope.references[3].identifier.name).to.be.equal('array'); + return expect(scope.references[3].isWrite()).to.be["false"]; + }); + it('SpreadElement in var', function() { + var ast, globalScope, index, name, scope, scopeManager, _i, _j, _len, _len1, _ref, _ref1; + ast = harmony.parse("(function () {\n var [a, b, ...rest] = array;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('array'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(4); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('a'); + expect(scope.variables[2].name).to.be.equal('b'); + expect(scope.variables[3].name).to.be.equal('rest'); + expect(scope.references).to.have.length(4); + expect(scope.references[0].identifier.name).to.be.equal('a'); + expect(scope.references[0].isWrite()).to.be["true"]; + expect(scope.references[0].partial).to.be["true"]; + expect(scope.references[0].resolved).to.be.equal(scope.variables[1]); + expect(scope.references[1].identifier.name).to.be.equal('b'); + expect(scope.references[1].isWrite()).to.be["true"]; + expect(scope.references[1].partial).to.be["true"]; + expect(scope.references[1].resolved).to.be.equal(scope.variables[2]); + expect(scope.references[2].identifier.name).to.be.equal('rest'); + expect(scope.references[2].isWrite()).to.be["true"]; + expect(scope.references[2].partial).to.be["true"]; + expect(scope.references[2].resolved).to.be.equal(scope.variables[3]); + expect(scope.references[3].identifier.name).to.be.equal('array'); + expect(scope.references[3].isWrite()).to.be["false"]; + ast = harmony.parse("(function () {\n var [a, b, ...[c, d, ...rest]] = array;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('array'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(6); + _ref = ['arguments', 'a', 'b', 'c', 'd', 'rest']; + for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { + name = _ref[index]; + expect(scope.variables[index].name).to.be.equal(name); + } + expect(scope.references).to.have.length(6); + _ref1 = ['a', 'b', 'c', 'd', 'rest']; + for (index = _j = 0, _len1 = _ref1.length; _j < _len1; index = ++_j) { + name = _ref1[index]; + expect(scope.references[index].identifier.name).to.be.equal(name); + expect(scope.references[index].isWrite()).to.be["true"]; + expect(scope.references[index].partial).to.be["true"]; + } + expect(scope.references[5].identifier.name).to.be.equal('array'); + return expect(scope.references[5].isWrite()).to.be["false"]; + }); + it('ObjectPattern in var', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("(function () {\n var {\n shorthand,\n key: value,\n hello: {\n world\n }\n } = object;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('object'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(4); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('shorthand'); + expect(scope.variables[2].name).to.be.equal('value'); + expect(scope.variables[3].name).to.be.equal('world'); + expect(scope.references).to.have.length(4); + expect(scope.references[0].identifier.name).to.be.equal('shorthand'); + expect(scope.references[0].isWrite()).to.be["true"]; + expect(scope.references[0].partial).to.be["true"]; + expect(scope.references[0].resolved).to.be.equal(scope.variables[1]); + expect(scope.references[1].identifier.name).to.be.equal('value'); + expect(scope.references[1].isWrite()).to.be["true"]; + expect(scope.references[1].partial).to.be["true"]; + expect(scope.references[1].resolved).to.be.equal(scope.variables[2]); + expect(scope.references[2].identifier.name).to.be.equal('world'); + expect(scope.references[2].isWrite()).to.be["true"]; + expect(scope.references[2].partial).to.be["true"]; + expect(scope.references[2].resolved).to.be.equal(scope.variables[3]); + expect(scope.references[3].identifier.name).to.be.equal('object'); + return expect(scope.references[3].isWrite()).to.be["false"]; + }); + it('complex pattern in var', function() { + var ast, globalScope, index, name, scope, scopeManager, _i, _j, _len, _len1, _ref, _ref1; + ast = harmony.parse("(function () {\n var {\n shorthand,\n key: [ a, b, c, d, e ],\n hello: {\n world\n }\n } = object;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('object'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(8); + _ref = ['arguments', 'shorthand', 'a', 'b', 'c', 'd', 'e', 'world']; + for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { + name = _ref[index]; + expect(scope.variables[index].name).to.be.equal(name); + } + expect(scope.references).to.have.length(8); + _ref1 = ['shorthand', 'a', 'b', 'c', 'd', 'e', 'world']; + for (index = _j = 0, _len1 = _ref1.length; _j < _len1; index = ++_j) { + name = _ref1[index]; + expect(scope.references[index].identifier.name).to.be.equal(name); + expect(scope.references[index].isWrite()).to.be["true"]; + expect(scope.references[index].partial).to.be["true"]; + } + expect(scope.references[7].identifier.name).to.be.equal('object'); + return expect(scope.references[7].isWrite()).to.be["false"]; + }); + it('ArrayPattern in AssignmentExpression', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("(function () {\n [a, b, c] = array;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(4); + expect(scope.implicit.left.map((function(_this) { + return function(ref) { + return ref.identifier.name; + }; + })(this))).to.deep.equal(['a', 'b', 'c', 'array']); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.references).to.have.length(4); + expect(scope.references[0].identifier.name).to.be.equal('a'); + expect(scope.references[0].isWrite()).to.be["true"]; + expect(scope.references[0].partial).to.be["true"]; + expect(scope.references[0].resolved).to.be["null"]; + expect(scope.references[1].identifier.name).to.be.equal('b'); + expect(scope.references[1].isWrite()).to.be["true"]; + expect(scope.references[1].partial).to.be["true"]; + expect(scope.references[1].resolved).to.be["null"]; + expect(scope.references[2].identifier.name).to.be.equal('c'); + expect(scope.references[2].isWrite()).to.be["true"]; + expect(scope.references[2].partial).to.be["true"]; + expect(scope.references[2].resolved).to.be["null"]; + expect(scope.references[3].identifier.name).to.be.equal('array'); + return expect(scope.references[3].isWrite()).to.be["false"]; + }); + it('SpreadElement in AssignmentExpression', function() { + var ast, globalScope, index, name, scope, scopeManager, _i, _len, _ref; + ast = harmony.parse("(function () {\n [a, b, ...rest] = array;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(4); + expect(scope.implicit.left.map((function(_this) { + return function(ref) { + return ref.identifier.name; + }; + })(this))).to.deep.equal(['a', 'b', 'rest', 'array']); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.references).to.have.length(4); + expect(scope.references[0].identifier.name).to.be.equal('a'); + expect(scope.references[0].isWrite()).to.be["true"]; + expect(scope.references[0].partial).to.be["true"]; + expect(scope.references[0].resolved).to.be["null"]; + expect(scope.references[1].identifier.name).to.be.equal('b'); + expect(scope.references[1].isWrite()).to.be["true"]; + expect(scope.references[1].partial).to.be["true"]; + expect(scope.references[1].resolved).to.be["null"]; + expect(scope.references[2].identifier.name).to.be.equal('rest'); + expect(scope.references[2].isWrite()).to.be["true"]; + expect(scope.references[2].partial).to.be["true"]; + expect(scope.references[2].resolved).to.be["null"]; + expect(scope.references[3].identifier.name).to.be.equal('array'); + expect(scope.references[3].isWrite()).to.be["false"]; + ast = harmony.parse("(function () {\n [a, b, ...[c, d, ...rest]] = array;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(6); + expect(scope.implicit.left.map((function(_this) { + return function(ref) { + return ref.identifier.name; + }; + })(this))).to.deep.equal(['a', 'b', 'c', 'd', 'rest', 'array']); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.references).to.have.length(6); + _ref = ['a', 'b', 'c', 'd', 'rest']; + for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { + name = _ref[index]; + expect(scope.references[index].identifier.name).to.be.equal(name); + expect(scope.references[index].isWrite()).to.be["true"]; + expect(scope.references[index].partial).to.be["true"]; + expect(scope.references[index].resolved).to.be["null"]; + } + expect(scope.references[5].identifier.name).to.be.equal('array'); + return expect(scope.references[5].isWrite()).to.be["false"]; + }); + it('ObjectPattern in AssignmentExpression', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("(function () {\n ({\n shorthand,\n key: value,\n hello: {\n world\n }\n }) = object;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(4); + expect(scope.implicit.left.map((function(_this) { + return function(ref) { + return ref.identifier.name; + }; + })(this))).to.deep.equal(['shorthand', 'value', 'world', 'object']); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.references).to.have.length(4); + expect(scope.references[0].identifier.name).to.be.equal('shorthand'); + expect(scope.references[0].isWrite()).to.be["true"]; + expect(scope.references[0].partial).to.be["true"]; + expect(scope.references[0].resolved).to["null"]; + expect(scope.references[1].identifier.name).to.be.equal('value'); + expect(scope.references[1].isWrite()).to.be["true"]; + expect(scope.references[1].partial).to.be["true"]; + expect(scope.references[1].resolved).to["null"]; + expect(scope.references[2].identifier.name).to.be.equal('world'); + expect(scope.references[2].isWrite()).to.be["true"]; + expect(scope.references[2].partial).to.be["true"]; + expect(scope.references[2].resolved).to["null"]; + expect(scope.references[3].identifier.name).to.be.equal('object'); + return expect(scope.references[3].isWrite()).to.be["false"]; + }); + it('complex pattern in AssignmentExpression', function() { + var ast, globalScope, index, name, scope, scopeManager, _i, _len, _ref; + ast = harmony.parse("(function () {\n ({\n shorthand,\n key: [ a, b, c, d, e ],\n hello: {\n world\n }\n }) = object;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + expect(scope.implicit.left).to.have.length(8); + expect(scope.implicit.left.map((function(_this) { + return function(ref) { + return ref.identifier.name; + }; + })(this))).to.deep.equal(['shorthand', 'a', 'b', 'c', 'd', 'e', 'world', 'object']); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.references).to.have.length(8); + _ref = ['shorthand', 'a', 'b', 'c', 'd', 'e', 'world']; + for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { + name = _ref[index]; + expect(scope.references[index].identifier.name).to.be.equal(name); + expect(scope.references[index].isWrite()).to.be["true"]; + expect(scope.references[index].partial).to.be["true"]; + } + expect(scope.references[7].identifier.name).to.be.equal('object'); + return expect(scope.references[7].isWrite()).to.be["false"]; + }); + it('ArrayPattern in parameters', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("(function ([a, b, c]) {\n}(array));"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('array'); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('array'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(4); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('a'); + expect(scope.variables[2].name).to.be.equal('b'); + expect(scope.variables[3].name).to.be.equal('c'); + return expect(scope.references).to.have.length(0); + }); + it('SpreadElement in parameters', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("(function ([a, b, ...rest], ...rest2) {\n}(array));"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('array'); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('array'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(5); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('a'); + expect(scope.variables[2].name).to.be.equal('b'); + expect(scope.variables[3].name).to.be.equal('rest'); + expect(scope.variables[3].defs[0].rest).to.be["false"]; + expect(scope.variables[4].name).to.be.equal('rest2'); + expect(scope.variables[4].defs[0].rest).to.be["true"]; + return expect(scope.references).to.have.length(0); + }); + it('ObjectPattern in parameters', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("(function ({\n shorthand,\n key: value,\n hello: {\n world\n }\n }) {\n}(object));"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('object'); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('object'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(4); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('shorthand'); + expect(scope.variables[2].name).to.be.equal('value'); + expect(scope.variables[3].name).to.be.equal('world'); + return expect(scope.references).to.have.length(0); + }); + return it('complex pattern in parameters', function() { + var ast, globalScope, index, name, scope, scopeManager, _i, _len, _ref; + ast = harmony.parse("(function ({\n shorthand,\n key: [ a, b, c, d, e ],\n hello: {\n world\n }\n }) {\n}(object));"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + globalScope = scope; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('object'); + expect(scope.implicit.left).to.have.length(1); + expect(scope.implicit.left[0].identifier.name).to.be.equal('object'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(8); + _ref = ['arguments', 'shorthand', 'a', 'b', 'c', 'd', 'e', 'world']; + for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { + name = _ref[index]; + expect(scope.variables[index].name).to.be.equal(name); + } + return expect(scope.references).to.have.length(0); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVzNi1kZXN0cnVjdHVyaW5nLWFzc2lnbm1lbnRzLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QkE7QUFBQSxNQUFBLHVCQUFBOztBQUFBLEVBQUEsTUFBQSxHQUFTLE9BQUEsQ0FBUyxNQUFULENBQWUsQ0FBQyxNQUF6QixDQUFBOztBQUFBLEVBQ0EsT0FBQSxHQUFVLE9BQUEsQ0FBUyx3QkFBVCxDQURWLENBQUE7O0FBQUEsRUFFQSxNQUFBLEdBQVMsT0FBQSxDQUFTLElBQVQsQ0FGVCxDQUFBOztBQUFBLEVBSUEsUUFBQSxDQUFVLCtCQUFWLEVBQTBDLFNBQUEsR0FBQTtBQUN0QyxJQUFBLEVBQUEsQ0FBSSxrQ0FBSixFQUF1QyxTQUFBLEdBQUE7QUFDbkMsVUFBQSxxQ0FBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLDBEQUFqQixDQUFOLENBQUE7QUFBQSxNQU1BLFlBQUEsR0FBZSxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWYsRUFBb0I7QUFBQSxRQUFBLFdBQUEsRUFBYSxDQUFiO09BQXBCLENBTmYsQ0FBQTtBQUFBLE1BT0EsTUFBQSxDQUFPLFlBQVksQ0FBQyxNQUFwQixDQUEyQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBcEMsQ0FBMkMsQ0FBM0MsQ0FQQSxDQUFBO0FBQUEsTUFTQSxLQUFBLEdBQVEsWUFBWSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBVDVCLENBQUE7QUFBQSxNQVVBLFdBQUEsR0FBYyxLQVZkLENBQUE7QUFBQSxNQVdBLE1BQUEsQ0FBTyxLQUFLLENBQUMsSUFBYixDQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBekIsQ0FBZ0MsUUFBaEMsQ0FYQSxDQUFBO0FBQUEsTUFZQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQWIsQ0FBdUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWhDLENBQXVDLENBQXZDLENBWkEsQ0FBQTtBQUFBLE1BYUEsTUFBQSxDQUFP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cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5oYXJtb255ID0gcmVxdWlyZSAnLi4vdGhpcmRfcGFydHkvZXNwcmltYSdcbmVzY29wZSA9IHJlcXVpcmUgJy4uJ1xuXG5kZXNjcmliZSAnRVM2IGRlc3RydWN0dXJpbmcgYXNzaWdubWVudHMnLCAtPlxuICAgIGl0ICdQYXR0ZXJuIGluIHZhciBpbiBGb3JJblN0YXRlbWVudCcsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBbYSwgYiwgY10gaW4gYXJyYXkpO1xuICAgICAgICB9KCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnQpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnRbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnYXJyYXknXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDRcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICdhJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzJdLm5hbWUpLnRvLmJlLmVxdWFsICdiJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzNdLm5hbWUpLnRvLmJlLmVxdWFsICdjJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggNFxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdhJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pc1dyaXRlKCkpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucGFydGlhbCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgc2NvcGUudmFyaWFibGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2InXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnJlc29sdmVkKS50by5iZS5lcXVhbCBzY29wZS52YXJpYWJsZXNbMl1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnYydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLnBhcnRpYWwpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1szXVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1szXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdhcnJheSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbM10uaXNXcml0ZSgpKS50by5iZS5mYWxzZVxuXG5cbiAgICBpdCAnQXJyYXlQYXR0ZXJuIGluIHZhcicsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgW2EsIGIsIGNdID0gYXJyYXk7XG4gICAgICAgIH0oKSk7XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdCkudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdFswXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdhcnJheSdcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggNFxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMV0ubmFtZSkudG8uYmUuZXF1YWwgJ2EnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMl0ubmFtZSkudG8uYmUuZXF1YWwgJ2InXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbM10ubmFtZSkudG8uYmUuZXF1YWwgJ2MnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2EnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5lcXVhbCBzY29wZS52YXJpYWJsZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnYidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnBhcnRpYWwpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1syXVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdjJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5pc1dyaXRlKCkpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0ucGFydGlhbCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgc2NvcGUudmFyaWFibGVzWzNdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzNdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2FycmF5J1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1szXS5pc1dyaXRlKCkpLnRvLmJlLmZhbHNlXG5cbiAgICBpdCAnU3ByZWFkRWxlbWVudCBpbiB2YXInLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIFthLCBiLCAuLi5yZXN0XSA9IGFycmF5O1xuICAgICAgICB9KCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnQpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnRbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnYXJyYXknXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDRcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICdhJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzJdLm5hbWUpLnRvLmJlLmVxdWFsICdiJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzNdLm5hbWUpLnRvLmJlLmVxdWFsICdyZXN0J1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggNFxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdhJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pc1dyaXRlKCkpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucGFydGlhbCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgc2NvcGUudmFyaWFibGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2InXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnJlc29sdmVkKS50by5iZS5lcXVhbCBzY29wZS52YXJpYWJsZXNbMl1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAncmVzdCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLnBhcnRpYWwpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1szXVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1szXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdhcnJheSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbM10uaXNXcml0ZSgpKS50by5iZS5mYWxzZVxuXG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgW2EsIGIsIC4uLltjLCBkLCAuLi5yZXN0XV0gPSBhcnJheTtcbiAgICAgICAgfSgpKTtcbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMlxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0KS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0WzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2FycmF5J1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDZcbiAgICAgICAgZm9yIG5hbWUsIGluZGV4IGluIFtcbiAgICAgICAgICAgICAgICAnYXJndW1lbnRzJ1xuICAgICAgICAgICAgICAgICdhJ1xuICAgICAgICAgICAgICAgICdiJ1xuICAgICAgICAgICAgICAgICdjJ1xuICAgICAgICAgICAgICAgICdkJ1xuICAgICAgICAgICAgICAgICdyZXN0J1xuICAgICAgICAgICAgXVxuICAgICAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1tpbmRleF0ubmFtZSkudG8uYmUuZXF1YWwgbmFtZVxuXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA2XG4gICAgICAgIGZvciBuYW1lLCBpbmRleCBpbiBbXG4gICAgICAgICAgICAgICAgJ2EnXG4gICAgICAgICAgICAgICAgJ2InXG4gICAgICAgICAgICAgICAgJ2MnXG4gICAgICAgICAgICAgICAgJ2QnXG4gICAgICAgICAgICAgICAgJ3Jlc3QnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1tpbmRleF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCBuYW1lXG4gICAgICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1tpbmRleF0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1tpbmRleF0ucGFydGlhbCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1s1XS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdhcnJheSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbNV0uaXNXcml0ZSgpKS50by5iZS5mYWxzZVxuXG4gICAgaXQgJ09iamVjdFBhdHRlcm4gaW4gdmFyJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB7XG4gICAgICAgICAgICAgICAgc2hvcnRoYW5kLFxuICAgICAgICAgICAgICAgIGtleTogdmFsdWUsXG4gICAgICAgICAgICAgICAgaGVsbG86IHtcbiAgICAgICAgICAgICAgICAgICAgd29ybGRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ID0gb2JqZWN0O1xuICAgICAgICB9KCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnQpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnRbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnb2JqZWN0J1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2FyZ3VtZW50cydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1sxXS5uYW1lKS50by5iZS5lcXVhbCAnc2hvcnRoYW5kJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzJdLm5hbWUpLnRvLmJlLmVxdWFsICd2YWx1ZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1szXS5uYW1lKS50by5iZS5lcXVhbCAnd29ybGQnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ3Nob3J0aGFuZCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnBhcnRpYWwpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICd2YWx1ZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnBhcnRpYWwpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1syXVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICd3b3JsZCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLnBhcnRpYWwpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1szXVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1szXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdvYmplY3QnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzNdLmlzV3JpdGUoKSkudG8uYmUuZmFsc2VcblxuICAgIGl0ICdjb21wbGV4IHBhdHRlcm4gaW4gdmFyJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB7XG4gICAgICAgICAgICAgICAgc2hvcnRoYW5kLFxuICAgICAgICAgICAgICAgIGtleTogWyBhLCBiLCBjLCBkLCBlIF0sXG4gICAgICAgICAgICAgICAgaGVsbG86IHtcbiAgICAgICAgICAgICAgICAgICAgd29ybGRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ID0gb2JqZWN0O1xuICAgICAgICB9KCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnQpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnRbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnb2JqZWN0J1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCA4XG4gICAgICAgIGZvciBuYW1lLCBpbmRleCBpbiBbXG4gICAgICAgICAgICAgICAgJ2FyZ3VtZW50cydcbiAgICAgICAgICAgICAgICAnc2hvcnRoYW5kJ1xuICAgICAgICAgICAgICAgICdhJ1xuICAgICAgICAgICAgICAgICdiJ1xuICAgICAgICAgICAgICAgICdjJ1xuICAgICAgICAgICAgICAgICdkJ1xuICAgICAgICAgICAgICAgICdlJ1xuICAgICAgICAgICAgICAgICd3b3JsZCdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbaW5kZXhdLm5hbWUpLnRvLmJlLmVxdWFsIG5hbWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDhcbiAgICAgICAgZm9yIG5hbWUsIGluZGV4IGluIFtcbiAgICAgICAgICAgICAgICAnc2hvcnRoYW5kJ1xuICAgICAgICAgICAgICAgICdhJ1xuICAgICAgICAgICAgICAgICdiJ1xuICAgICAgICAgICAgICAgICdjJ1xuICAgICAgICAgICAgICAgICdkJ1xuICAgICAgICAgICAgICAgICdlJ1xuICAgICAgICAgICAgICAgICd3b3JsZCdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzW2luZGV4XS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsIG5hbWVcbiAgICAgICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzW2luZGV4XS5pc1dyaXRlKCkpLnRvLmJlLnRydWVcbiAgICAgICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzW2luZGV4XS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzddLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ29iamVjdCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbN10uaXNXcml0ZSgpKS50by5iZS5mYWxzZVxuXG4gICAgaXQgJ0FycmF5UGF0dGVybiBpbiBBc3NpZ25tZW50RXhwcmVzc2lvbicsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbYSwgYiwgY10gPSBhcnJheTtcbiAgICAgICAgfSgpKTtcbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMlxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0KS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0Lm1hcCgocmVmKSA9PiByZWYuaWRlbnRpZmllci5uYW1lKSkudG8uZGVlcC5lcXVhbCBbXG4gICAgICAgICAgICAnYSdcbiAgICAgICAgICAgICdiJ1xuICAgICAgICAgICAgJ2MnXG4gICAgICAgICAgICAnYXJyYXknXG4gICAgICAgIF1cblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2EnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5udWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2InXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnJlc29sdmVkKS50by5iZS5udWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2MnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLnJlc29sdmVkKS50by5iZS5udWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzNdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2FycmF5J1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1szXS5pc1dyaXRlKCkpLnRvLmJlLmZhbHNlXG5cbiAgICBpdCAnU3ByZWFkRWxlbWVudCBpbiBBc3NpZ25tZW50RXhwcmVzc2lvbicsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbYSwgYiwgLi4ucmVzdF0gPSBhcnJheTtcbiAgICAgICAgfSgpKTtcbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMlxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0KS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0Lm1hcCgocmVmKSA9PiByZWYuaWRlbnRpZmllci5uYW1lKSkudG8uZGVlcC5lcXVhbCBbXG4gICAgICAgICAgICAnYSdcbiAgICAgICAgICAgICdiJ1xuICAgICAgICAgICAgJ3Jlc3QnXG4gICAgICAgICAgICAnYXJyYXknXG4gICAgICAgIF1cblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2EnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5udWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2InXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnJlc29sdmVkKS50by5iZS5udWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ3Jlc3QnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLnJlc29sdmVkKS50by5iZS5udWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzNdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2FycmF5J1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1szXS5pc1dyaXRlKCkpLnRvLmJlLmZhbHNlXG5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFthLCBiLCAuLi5bYywgZCwgLi4ucmVzdF1dID0gYXJyYXk7XG4gICAgICAgIH0oKSk7XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdCkudG8uaGF2ZS5sZW5ndGggNlxuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdC5tYXAoKHJlZikgPT4gcmVmLmlkZW50aWZpZXIubmFtZSkpLnRvLmRlZXAuZXF1YWwgW1xuICAgICAgICAgICAgJ2EnXG4gICAgICAgICAgICAnYidcbiAgICAgICAgICAgICdjJ1xuICAgICAgICAgICAgJ2QnXG4gICAgICAgICAgICAncmVzdCdcbiAgICAgICAgICAgICdhcnJheSdcbiAgICAgICAgXVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA2XG4gICAgICAgIGZvciBuYW1lLCBpbmRleCBpbiBbXG4gICAgICAgICAgICAgICAgJ2EnXG4gICAgICAgICAgICAgICAgJ2InXG4gICAgICAgICAgICAgICAgJ2MnXG4gICAgICAgICAgICAgICAgJ2QnXG4gICAgICAgICAgICAgICAgJ3Jlc3QnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1tpbmRleF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCBuYW1lXG4gICAgICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1tpbmRleF0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1tpbmRleF0ucGFydGlhbCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbaW5kZXhdLnJlc29sdmVkKS50by5iZS5udWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzVdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2FycmF5J1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1s1XS5pc1dyaXRlKCkpLnRvLmJlLmZhbHNlXG5cbiAgICBpdCAnT2JqZWN0UGF0dGVybiBpbiBBc3NpZ25tZW50RXhwcmVzc2lvbicsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIHNob3J0aGFuZCxcbiAgICAgICAgICAgICAgICBrZXk6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGhlbGxvOiB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmxkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkgPSBvYmplY3Q7XG4gICAgICAgIH0oKSk7XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdCkudG8uaGF2ZS5sZW5ndGggNFxuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdC5tYXAoKHJlZikgPT4gcmVmLmlkZW50aWZpZXIubmFtZSkpLnRvLmRlZXAuZXF1YWwgW1xuICAgICAgICAgICAgJ3Nob3J0aGFuZCdcbiAgICAgICAgICAgICd2YWx1ZSdcbiAgICAgICAgICAgICd3b3JsZCdcbiAgICAgICAgICAgICdvYmplY3QnXG4gICAgICAgIF1cblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ3Nob3J0aGFuZCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnBhcnRpYWwpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucmVzb2x2ZWQpLnRvLm51bGxcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAndmFsdWUnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlzV3JpdGUoKSkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnJlc29sdmVkKS50by5udWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ3dvcmxkJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5pc1dyaXRlKCkpLnRvLmJlLnRydWVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0ucGFydGlhbCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5yZXNvbHZlZCkudG8ubnVsbFxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1szXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdvYmplY3QnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzNdLmlzV3JpdGUoKSkudG8uYmUuZmFsc2VcblxuICAgIGl0ICdjb21wbGV4IHBhdHRlcm4gaW4gQXNzaWdubWVudEV4cHJlc3Npb24nLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBzaG9ydGhhbmQsXG4gICAgICAgICAgICAgICAga2V5OiBbIGEsIGIsIGMsIGQsIGUgXSxcbiAgICAgICAgICAgICAgICBoZWxsbzoge1xuICAgICAgICAgICAgICAgICAgICB3b3JsZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pID0gb2JqZWN0O1xuICAgICAgICB9KCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnQpLnRvLmhhdmUubGVuZ3RoIDhcbiAgICAgICAgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnQubWFwKChyZWYpID0+IHJlZi5pZGVudGlmaWVyLm5hbWUpKS50by5kZWVwLmVxdWFsIFtcbiAgICAgICAgICAgICdzaG9ydGhhbmQnXG4gICAgICAgICAgICAnYSdcbiAgICAgICAgICAgICdiJ1xuICAgICAgICAgICAgJ2MnXG4gICAgICAgICAgICAnZCdcbiAgICAgICAgICAgICdlJ1xuICAgICAgICAgICAgJ3dvcmxkJ1xuICAgICAgICAgICAgJ29iamVjdCdcbiAgICAgICAgXVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2FyZ3VtZW50cydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDhcbiAgICAgICAgZm9yIG5hbWUsIGluZGV4IGluIFtcbiAgICAgICAgICAgICAgICAnc2hvcnRoYW5kJ1xuICAgICAgICAgICAgICAgICdhJ1xuICAgICAgICAgICAgICAgICdiJ1xuICAgICAgICAgICAgICAgICdjJ1xuICAgICAgICAgICAgICAgICdkJ1xuICAgICAgICAgICAgICAgICdlJ1xuICAgICAgICAgICAgICAgICd3b3JsZCdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzW2luZGV4XS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsIG5hbWVcbiAgICAgICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzW2luZGV4XS5pc1dyaXRlKCkpLnRvLmJlLnRydWVcbiAgICAgICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzW2luZGV4XS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzddLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ29iamVjdCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbN10uaXNXcml0ZSgpKS50by5iZS5mYWxzZVxuXG4gICAgaXQgJ0FycmF5UGF0dGVybiBpbiBwYXJhbWV0ZXJzJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uIChbYSwgYiwgY10pIHtcbiAgICAgICAgfShhcnJheSkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnYXJyYXknXG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0KS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0WzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2FycmF5J1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2FyZ3VtZW50cydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1sxXS5uYW1lKS50by5iZS5lcXVhbCAnYSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1syXS5uYW1lKS50by5iZS5lcXVhbCAnYidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1szXS5uYW1lKS50by5iZS5lcXVhbCAnYydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgIGl0ICdTcHJlYWRFbGVtZW50IGluIHBhcmFtZXRlcnMnLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICAoZnVuY3Rpb24gKFthLCBiLCAuLi5yZXN0XSwgLi4ucmVzdDIpIHtcbiAgICAgICAgfShhcnJheSkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnYXJyYXknXG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0KS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS5pbXBsaWNpdC5sZWZ0WzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2FycmF5J1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCA1XG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2FyZ3VtZW50cydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1sxXS5uYW1lKS50by5iZS5lcXVhbCAnYSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1syXS5uYW1lKS50by5iZS5lcXVhbCAnYidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1szXS5uYW1lKS50by5iZS5lcXVhbCAncmVzdCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1szXS5kZWZzWzBdLnJlc3QpLnRvLmJlLmZhbHNlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbNF0ubmFtZSkudG8uYmUuZXF1YWwgJ3Jlc3QyJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzRdLmRlZnNbMF0ucmVzdCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgICMgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgIyAoZnVuY3Rpb24gKFthLCBiLCAuLi5bYywgZCwgLi4ucmVzdF1dKSB7XG4gICAgICAgICMgfShhcnJheSkpO1xuICAgICAgICAjIFwiXCJcIlxuXG4gICAgICAgICMgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICAjIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgIyBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgIyBnbG9iYWxTY29wZSA9IHNjb3BlXG4gICAgICAgICMgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgICMgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICAjIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgICMgZXhwZWN0KHNjb3BlLmltcGxpY2l0LmxlZnQpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgIyBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdFswXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdhcnJheSdcblxuICAgICAgICAjIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICAjIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG5cbiAgICAgICAgIyBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCA2XG4gICAgICAgICMgZm9yIG5hbWUsIGluZGV4IGluIFtcbiAgICAgICAgIyAgICAgICAgICdhcmd1bWVudHMnXG4gICAgICAgICMgICAgICAgICAnYSdcbiAgICAgICAgIyAgICAgICAgICdiJ1xuICAgICAgICAjICAgICAgICAgJ2MnXG4gICAgICAgICMgICAgICAgICAnZCdcbiAgICAgICAgIyAgICAgICAgICdyZXN0J1xuICAgICAgICAjICAgICBdXG4gICAgICAgICMgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbaW5kZXhdLm5hbWUpLnRvLmJlLmVxdWFsIG5hbWVcblxuICAgICAgICAjIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA2XG4gICAgICAgICMgZm9yIG5hbWUsIGluZGV4IGluIFtcbiAgICAgICAgIyAgICAgICAgICdhJ1xuICAgICAgICAjICAgICAgICAgJ2InXG4gICAgICAgICMgICAgICAgICAnYydcbiAgICAgICAgIyAgICAgICAgICdkJ1xuICAgICAgICAjICAgICAgICAgJ3Jlc3QnXG4gICAgICAgICMgICAgIF1cbiAgICAgICAgIyAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbaW5kZXhdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgbmFtZVxuICAgICAgICAjICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1tpbmRleF0uaXNXcml0ZSgpKS50by5iZS50cnVlXG4gICAgICAgICMgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzW2luZGV4XS5wYXJ0aWFsKS50by5iZS50cnVlXG4gICAgICAgICMgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbNV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnYXJyYXknXG4gICAgICAgICMgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbNV0uaXNXcml0ZSgpKS50by5iZS5mYWxzZVxuXG4gICAgaXQgJ09iamVjdFBhdHRlcm4gaW4gcGFyYW1ldGVycycsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiAoe1xuICAgICAgICAgICAgICAgIHNob3J0aGFuZCxcbiAgICAgICAgICAgICAgICBrZXk6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGhlbGxvOiB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmxkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkge1xuICAgICAgICB9KG9iamVjdCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnb2JqZWN0J1xuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdCkudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdFswXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdvYmplY3QnXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDRcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICdzaG9ydGhhbmQnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMl0ubmFtZSkudG8uYmUuZXF1YWwgJ3ZhbHVlJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzNdLm5hbWUpLnRvLmJlLmVxdWFsICd3b3JsZCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgIGl0ICdjb21wbGV4IHBhdHRlcm4gaW4gcGFyYW1ldGVycycsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiAoe1xuICAgICAgICAgICAgICAgIHNob3J0aGFuZCxcbiAgICAgICAgICAgICAgICBrZXk6IFsgYSwgYiwgYywgZCwgZSBdLFxuICAgICAgICAgICAgICAgIGhlbGxvOiB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmxkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkge1xuICAgICAgICB9KG9iamVjdCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2XG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVcbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnb2JqZWN0J1xuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdCkudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUuaW1wbGljaXQubGVmdFswXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdvYmplY3QnXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDhcbiAgICAgICAgZm9yIG5hbWUsIGluZGV4IGluIFtcbiAgICAgICAgICAgICAgICAnYXJndW1lbnRzJ1xuICAgICAgICAgICAgICAgICdzaG9ydGhhbmQnXG4gICAgICAgICAgICAgICAgJ2EnXG4gICAgICAgICAgICAgICAgJ2InXG4gICAgICAgICAgICAgICAgJ2MnXG4gICAgICAgICAgICAgICAgJ2QnXG4gICAgICAgICAgICAgICAgJ2UnXG4gICAgICAgICAgICAgICAgJ3dvcmxkJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1tpbmRleF0ubmFtZSkudG8uYmUuZXF1YWwgbmFtZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4jIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6XG4iXX0= \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-export.js b/node_modules/escope/powered-test/es6-export.js new file mode 100644 index 000000000..194fb0693 --- /dev/null +++ b/node_modules/escope/powered-test/es6-export.js @@ -0,0 +1,202 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('export declaration', function() { + it('should create vairable bindings', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("export var v;", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('v'); + expect(scope.variables[0].defs[0].type).to.be.equal('Variable'); + return expect(scope.references).to.have.length(0); + }); + it('should create function declaration bindings', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("export default function f(){};", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(3); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('f'); + expect(scope.variables[0].defs[0].type).to.be.equal('FunctionName'); + expect(scope.references).to.have.length(0); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + return expect(scope.references).to.have.length(0); + }); + it('should export function expression', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("export default function(){};", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(3); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(0); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + return expect(scope.references).to.have.length(0); + }); + it('should export literal', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("export default 42;", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(0); + return expect(scope.references).to.have.length(0); + }); + it('should refer exported references#1', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("export {x};", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(1); + return expect(scope.references[0].identifier.name).to.be.equal('x'); + }); + it('should refer exported references#2', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("export {v as x};", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(1); + return expect(scope.references[0].identifier.name).to.be.equal('v'); + }); + it('should not refer exported references from other source#1', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("export {x} from \"mod\";", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(0); + return expect(scope.references).to.have.length(0); + }); + it('should not refer exported references from other source#2', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("export {v as x} from \"mod\";", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(0); + return expect(scope.references).to.have.length(0); + }); + return it('should not refer exported references from other source#3', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("export * from \"mod\";", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(0); + return expect(scope.references).to.have.length(0); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVzNi1leHBvcnQuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVCQTtBQUFBLE1BQUEsdUJBQUE7O0FBQUEsRUFBQSxNQUFBLEdBQVMsT0FBQSxDQUFTLE1BQVQsQ0FBZSxDQUFDLE1BQXpCLENBQUE7O0FBQUEsRUFDQSxPQUFBLEdBQVUsT0FBQSxDQUFTLHdCQUFULENBRFYsQ0FBQTs7QUFBQSxFQUVBLE1BQUEsR0FBUyxPQUFBLENBQVMsSUFBVCxDQUZULENBQUE7O0FBQUEsRUFJQSxRQUFBLENBQVUsb0JBQVYsRUFBK0IsU0FBQSxHQUFBO0FBRTNCLElBQUEsRUFBQSxDQUFJLGlDQUFKLEVBQXNDLFNBQUEsR0FBQTtBQUNsQyxVQUFBLHFDQUFBO0FBQUEsTUFBQSxHQUFBLEdBQU0sT0FBTyxDQUFDLEtBQVIsQ0FBaUIsZUFBakIsRUFFRDtBQUFBLFFBQUEsVUFBQSxFQUFhLFFBQWI7T0FGQyxDQUFOLENBQUE7QUFBQSxNQUlBLFlBQUEsR0FBZSxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWYsRUFBb0I7QUFBQSxRQUFBLFdBQUEsRUFBYSxDQUFiO0FBQUEsUUFBZ0IsVUFBQSxFQUFhLFFBQTdCO09BQXBCLENBSmYsQ0FBQTtBQUFBLE1BS0EsTUFBQSxDQUFPLFlBQVksQ0FBQyxNQUFwQixDQUEyQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBcEMsQ0FBMkMsQ0FBM0MsQ0FMQSxDQUFBO0FBQUEsTUFNQSxXQUFBLEdBQWMsWUFBWSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBTmxDLENBQUE7QUFBQSxNQU9BLE1BQUEsQ0FBTyxXQUFXLENBQUMsSUFBbkIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQS9CLENBQXNDLFFBQXRDLENBUEEsQ0FBQTtBQUFBLE1BUUEsTUFBQSxDQUFPLFdBQVcsQ0FBQyxTQUFuQixDQUE2QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBdEMsQ0FBNkMsQ0FBN0MsQ0FSQSxDQUFBO0FBQUEsTUFTQSxNQUFBLENBQU8sV0FBVyxDQUFDLFVBQW5CLENBQThCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF2QyxDQUE4QyxDQUE5QyxDQVRBLENBQUE7QUFBQSxNQVdBLEtBQUEsR0FBUSxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FYNUIsQ0FBQTtBQUFBLE1BWUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxJQUFiLENBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF6QixDQUFnQyxRQUFoQyxDQVpBLENBQUE7QUFBQSxNQWFBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBYixDQUF1QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBaEMsQ0FBdUMsQ0FBdkMsQ0FiQSxDQUFBO0FBQUEsTUFjQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQUUsQ0FBQyxJQUExQixDQUErQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBdEMsQ0FBNkMsR0FBN0MsQ0FkQSxDQUFBO0FBQUEsTUFlQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQUUsQ0FBQyxJQUFLLENBQUEsQ0FBQSxDQUFFLENBQUMsSUFBbEMsQ0FBdUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQTlDLENBQXFELFVBQXJELENBZkEsQ0FBQTthQWdCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLEVBakJrQztJQUFBLENBQXRDLENBQUEsQ0FBQTtBQUFBLElBbUJBLEVBQUEsQ0FBSSw2Q0FBSixFQUFrRCxTQUFBLEdBQUE7QUFDOUMsVUFBQSxxQ0FBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLGdDQUFqQixFQUVEO0FBQUEsUUFBQSxVQUFBLEVBQWEsUUFBYjtPQUZDLENBQU4sQ0FBQTtBQUFBLE1BSUEsWUFBQSxHQUFlLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixFQUFvQjtBQUFBLFFBQUEsV0FBQSxFQUFhLENBQWI7QUFBQSxRQUFnQixVQUFBLEVBQWEsUUFBN0I7T0FBcEIsQ0FKZixDQUFBO0FBQUEsTUFLQSxNQUFBLENBQU8sWUFBWSxDQUFDLE1BQXBCLENBQTJCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFwQyxDQUEyQyxDQUEzQyxDQUxBLENBQUE7QUFBQSxNQU1BLFdBQUEsR0FBYyxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FObEMsQ0FBQTtBQUFBLE1BT0EsTUFBQSxDQUFPLFdBQVcsQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsUUFBdEMsQ0FQQSxDQUFBO0FBQUEsTUFRQSxNQUFBLENBQU8sV0FBVyxDQUFDLFNBQW5CLENBQTZCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF0QyxDQUE2QyxDQUE3QyxDQVJBLENBQUE7QUFBQSxNQVNBLE1BQUEsQ0FBTyxXQUFXLENBQUMsVUFBbkIsQ0FBOEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXZDLENBQThDLENBQTlDLENBVEEsQ0FBQTtBQUFBLE1BV0EsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVg1QixDQUFBO0FBQUEsTUFZQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFFBQWhDLENBWkEsQ0FBQTtBQUFBLE1BYUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQWJBLENBQUE7QUFBQSxNQWNBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxHQUE3QyxDQWRBLENBQUE7QUFBQSxNQWVBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQUssQ0FBQSxDQUFBLENBQUUsQ0FBQyxJQUFsQyxDQUF1QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBOUMsQ0FBcUQsY0FBckQsQ0FmQSxDQUFBO0FBQUEsTUFnQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFiLENBQXdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFqQyxDQUF3QyxDQUF4QyxDQWhCQSxDQUFBO0FBQUEsTUFrQkEsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQWxCNUIsQ0FBQTtBQUFBLE1BbUJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsSUFBYixDQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBekIsQ0FBZ0MsVUFBaEMsQ0FuQkEsQ0FBQTtBQUFBLE1Bb0JBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBYixDQUF1QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBaEMsQ0FBdUMsQ0FBdkMsQ0FwQkEsQ0FBQTtBQUFBLE1BcUJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxXQUE3QyxDQXJCQSxDQUFBO2FBc0JBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBYixDQUF3QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBakMsQ0FBd0MsQ0FBeEMsRUF2QjhDO0lBQUEsQ0FBbEQsQ0FuQkEsQ0FBQTtBQUFBLElBNkNBLEVBQUEsQ0FBSSxtQ0FBSixFQUF3QyxTQUFBLEdBQUE7QUFDcEMsVUFBQSxxQ0FBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLDhCQUFqQixFQUVEO0FBQUEsUUFBQSxVQUFBLEVBQWEsUUFBYjtPQUZDLENBQU4sQ0FBQTtBQUFBLE1BSUEsWUFBQSxHQUFlLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixFQUFvQjtBQUFBLFFBQUEsV0FBQSxFQUFhLENBQWI7QUFBQSxRQUFnQixVQUFBLEVBQWEsUUFBN0I7T0FBcEIsQ0FKZixDQUFBO0FBQUEsTUFLQSxNQUFBLENBQU8sWUFBWSxDQUFDLE1BQXBCLENBQTJCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFwQyxDQUEyQyxDQUEzQyxDQUxBLENBQUE7QUFBQSxNQU1BLFdBQUEsR0FBYyxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FObEMsQ0FBQTtBQUFBLE1BT0EsTUFBQSxDQUFPLFdBQVcsQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsUUFBdEMsQ0FQQSxDQUFBO0FBQUEsTUFRQSxNQUFBLENBQU8sV0FBVyxDQUFDLFNBQW5CLENBQTZCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF0QyxDQUE2QyxDQUE3QyxDQVJBLENBQUE7QUFBQSxNQVNBLE1BQUEsQ0FBTyxXQUFXLENBQUMsVUFBbkIsQ0FBOEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXZDLENBQThDLENBQTlDLENBVEEsQ0FBQTtBQUFBLE1BV0EsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVg1QixDQUFBO0FBQUEsTUFZQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFFBQWhDLENBWkEsQ0FBQTtBQUFBLE1BYUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQWJBLENBQUE7QUFBQSxNQWNBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBYixDQUF3QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBakMsQ0FBd0MsQ0FBeEMsQ0FkQSxDQUFBO0FBQUEsTUFnQkEsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQWhCNUIsQ0FBQTtBQUFBLE1BaUJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsSUFBYixDQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBekIsQ0FBZ0MsVUFBaEMsQ0FqQkEsQ0FBQTtBQUFBLE1Ba0JBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBYixDQUF1QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBaEMsQ0FBdUMsQ0FBdkMsQ0FsQkEsQ0FBQTtBQUFBLE1BbUJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxXQUE3QyxDQW5CQSxDQUFBO2FBb0JBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBYixDQUF3QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBakMsQ0FBd0MsQ0FBeEMsRUFyQm9DO0lBQUEsQ0FBeEMsQ0E3Q0EsQ0FBQTtBQUFBLElBb0VBLEVBQUEsQ0FBSSx1QkFBSixFQUE0QixTQUFBLEdBQUE7QUFDeEIsVUFBQSxxQ0FBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLG9CQUFqQixFQUVEO0FBQUEsUUFBQSxVQUFBLEVBQWEsUUFBYjtPQUZDLENBQU4sQ0FBQTtBQUFBLE1BSUEsWUFBQSxHQUFlLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixFQUFvQjtBQUFBLFFBQUEsV0FBQSxFQUFhLENBQWI7QUFBQSxRQUFnQixVQUFBLEVBQWEsUUFBN0I7T0FBcEIsQ0FKZixDQUFBO0FBQUEsTUFLQSxNQUFBLENBQU8sWUFBWSxDQUFDLE1BQXBCLENBQTJCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFwQyxDQUEyQyxDQUEzQyxDQUxBLENBQUE7QUFBQSxNQU1BLFdBQUEsR0FBYyxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FObEMsQ0FBQTtBQUFBLE1BT0EsTUFBQSxDQUFPLFdBQVcsQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsUUFBdEMsQ0FQQSxDQUFBO0FBQUEsTUFRQSxNQUFBLENBQU8sV0FBVyxDQUFDLFNBQW5CLENBQTZCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF0QyxDQUE2QyxDQUE3QyxDQVJBLENBQUE7QUFBQSxNQVNBLE1BQUEsQ0FBTyxXQUFXLENBQUMsVUFBbkIsQ0FBOEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXZDLENBQThDLENBQTlDLENBVEEsQ0FBQTtBQUFBLE1BV0EsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVg1QixDQUFBO0FBQUEsTUFZQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFFBQWhDLENBWkEsQ0FBQTtBQUFBLE1BYUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQWJBLENBQUE7YUFjQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLEVBZndCO0lBQUEsQ0FBNUIsQ0FwRUEsQ0FBQTtBQUFBLElBcUZBLEVBQUEsQ0FBSSxvQ0FBSixFQUF5QyxTQUFBLEdBQUE7QUFDckMsVUFBQSxxQ0FBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLGFBQWpCLEVBRUQ7QUFBQSxRQUFBLFVBQUEsRUFBYSxRQUFiO09BRkMsQ0FBTixDQUFBO0FBQUEsTUFJQSxZQUFBLEdBQWUsTUFBTSxDQUFDLE9BQVAsQ0FBZSxHQUFmLEVBQW9CO0FBQUEsUUFBQSxXQUFBLEVBQWEsQ0FBYjtBQUFBLFFBQWdCLFVBQUEsRUFBYSxRQUE3QjtPQUFwQixDQUpmLENBQUE7QUFBQSxNQUtBLE1BQUEsQ0FBTyxZQUFZLENBQUMsTUFBcEIsQ0FBMkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXBDLENBQTJDLENBQTNDLENBTEEsQ0FBQTtBQUFBLE1BTUEsV0FBQSxHQUFjLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQU5sQyxDQUFBO0FBQUEsTUFPQSxNQUFBLENBQU8sV0FBVyxDQUFDLElBQW5CLENBQXdCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUEvQixDQUFzQyxRQUF0QyxDQVBBLENBQUE7QUFBQSxNQVFBLE1BQUEsQ0FBTyxXQUFXLENBQUMsU0FBbkIsQ0FBNkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXRDLENBQTZDLENBQTdDLENBUkEsQ0FBQTtBQUFBLE1BU0EsTUFBQSxDQUFPLFdBQVcsQ0FBQyxVQUFuQixDQUE4QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBdkMsQ0FBOEMsQ0FBOUMsQ0FUQSxDQUFBO0FBQUEsTUFXQSxLQUFBLEdBQVEsWUFBWSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBWDVCLENBQUE7QUFBQSxNQVlBLE1BQUEsQ0FBTyxLQUFLLENBQUMsSUFBYixDQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBekIsQ0FBZ0MsUUFBaEMsQ0FaQSxDQUFBO0FBQUEsTUFhQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQWIsQ0FBdUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWhDLENBQXVDLENBQXZDLENBYkEsQ0FBQTtBQUFBLE1BY0EsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFiLENBQXdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFqQyxDQUF3QyxDQUF4QyxDQWRBLENBQUE7YUFlQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxVQUFVLENBQUMsSUFBdEMsQ0FBMkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQWxELENBQXlELEdBQXpELEVBaEJxQztJQUFBLENBQXpDLENBckZBLENBQUE7QUFBQSxJQXVHQSxFQUFBLENBQUksb0NBQUosRUFBeUMsU0FBQSxHQUFBO0FBQ3JDLFVBQUEscUNBQUE7QUFBQSxNQUFBLEdBQUEsR0FBTSxPQUFPLENBQUMsS0FBUixDQUFpQixrQkFBakIsRUFFRDtBQUFBLFFBQUEsVUFBQSxFQUFhLFFBQWI7T0FGQyxDQUFOLENBQUE7QUFBQSxNQUlBLFlBQUEsR0FBZSxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWYsRUFBb0I7QUFBQSxRQUFBLFdBQUEsRUFBYSxDQUFiO0FBQUEsUUFBZ0IsVUFBQSxFQUFhLFFBQTdCO09BQXBCLENBSmYsQ0FBQTtBQUFBLE1BS0EsTUFBQSxDQUFPLFlBQVksQ0FBQyxNQUFwQixDQUEyQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBcEMsQ0FBMkMsQ0FBM0MsQ0FMQSxDQUFBO0FBQUEsTUFNQSxXQUFBLEdBQWMsWUFBWSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBTmxDLENBQUE7QUFBQSxNQU9BLE1BQUEsQ0FBTyxXQUFXLENBQUMsSUFBbkIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQS9CLENBQXNDLFFBQXRDLENBUEEsQ0FBQTtBQUFBLE1BUUEsTUFBQSxDQUFPLFdBQVcsQ0FBQyxTQUFuQixDQUE2QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBdEMsQ0FBNkMsQ0FBN0MsQ0FSQSxDQUFBO0FBQUEsTUFTQSxNQUFBLENBQU8sV0FBVyxDQUFDLFVBQW5CLENBQThCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF2QyxDQUE4QyxDQUE5QyxDQVRBLENBQUE7QUFBQSxNQVdBLEtBQUEsR0FBUSxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FYNUIsQ0FBQTtBQUFBLE1BWUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxJQUFiLENBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF6QixDQUFnQyxRQUFoQyxDQVpBLENBQUE7QUFBQSxNQWFBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBYixDQUF1QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBaEMsQ0FBdUMsQ0FBdkMsQ0FiQSxDQUFBO0FBQUEsTUFjQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLENBZEEsQ0FBQTthQWVBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBVyxDQUFBLENBQUEsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxJQUF0QyxDQUEyQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBbEQsQ0FBeUQsR0FBekQsRUFoQnFDO0lBQUEsQ0FBekMsQ0F2R0EsQ0FBQTtBQUFBLElBeUhBLEVBQUEsQ0FBSSwwREFBSixFQUErRCxTQUFBLEdBQUE7QUFDM0QsVUFBQSxxQ0FBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLDBCQUFqQixFQUVEO0FBQUEsUUFBQSxVQUFBLEVBQWEsUUFBYjtPQUZDLENBQU4sQ0FBQTtBQUFBLE1BSUEsWUFBQSxHQUFlLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixFQUFvQjtBQUFBLFFBQUEsV0FBQSxFQUFhLENBQWI7QUFBQSxRQUFnQixVQUFBLEVBQWEsUUFBN0I7T0FBcEIsQ0FKZixDQUFBO0FBQUEsTUFLQSxNQUFBLENBQU8sWUFBWSxDQUFDLE1BQXBCLENBQTJCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFwQyxDQUEyQyxDQUEzQyxDQUxBLENBQUE7QUFBQSxNQU1BLFdBQUEsR0FBYyxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FObEMsQ0FBQTtBQUFBLE1BT0EsTUFBQSxDQUFPLFdBQVcsQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsUUFBdEMsQ0FQQSxDQUFBO0FBQUEsTUFRQSxNQUFBLENBQU8sV0FBVyxDQUFDLFNBQW5CLENBQTZCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF0QyxDQUE2QyxDQUE3QyxDQVJBLENBQUE7QUFBQSxNQVNBLE1BQUEsQ0FBTyxXQUFXLENBQUMsVUFBbkIsQ0FBOEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXZDLENBQThDLENBQTlDLENBVEEsQ0FBQTtBQUFBLE1BV0EsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVg1QixDQUFBO0FBQUEsTUFZQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFFBQWhDLENBWkEsQ0FBQTtBQUFBLE1BYUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQWJBLENBQUE7YUFjQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLEVBZjJEO0lBQUEsQ0FBL0QsQ0F6SEEsQ0FBQTtBQUFBLElBMElBLEVBQUEsQ0FBSSwwREFBSixFQUErRCxTQUFBLEdBQUE7QUFDM0QsVUFBQSxxQ0FBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLCtCQUFqQixFQUVEO0FBQUEsUUFBQSxVQUFBLEVBQWEsUUFBYjtPQUZDLENBQU4sQ0FBQTtBQUFBLE1BSUEsWUFBQSxHQUFlLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixFQUFvQjtBQUFBLFFBQUEsV0FBQSxFQUFhLENBQWI7QUFBQSxRQUFnQixVQUFBLEVBQWEsUUFBN0I7T0FBcEIsQ0FKZixDQUFBO0FBQUEsTUFLQSxNQUFBLENBQU8sWUFBWSxDQUFDLE1BQXBCLENBQTJCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFwQyxDQUEyQyxDQUEzQyxDQUxBLENBQUE7QUFBQSxNQU1BLFdBQUEsR0FBYyxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FObEMsQ0FBQTtBQUFBLE1BT0EsTUFBQSxDQUFPLFdBQVcsQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsUUFBdEMsQ0FQQSxDQUFBO0FBQUEsTUFRQSxNQUFBLENBQU8sV0FBVyxDQUFDLFNBQW5CLENBQTZCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF0QyxDQUE2QyxDQUE3QyxDQVJBLENBQUE7QUFBQSxNQVNBLE1BQUEsQ0FBTyxXQUFXLENBQUMsVUFBbkIsQ0FBOEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXZDLENBQThDLENBQTlDLENBVEEsQ0FBQTtBQUFBLE1BV0EsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVg1QixDQUFBO0FBQUEsTUFZQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFFBQWhDLENBWkEsQ0FBQTtBQUFBLE1BYUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQWJBLENBQUE7YUFjQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLEVBZjJEO0lBQUEsQ0FBL0QsQ0ExSUEsQ0FBQTtXQTJKQSxFQUFBLENBQUksMERBQUosRUFBK0QsU0FBQSxHQUFBO0FBQzNELFVBQUEscUNBQUE7QUFBQSxNQUFBLEdBQUEsR0FBTSxPQUFPLENBQUMsS0FBUixDQUFpQix3QkFBakIsRUFFRDtBQUFBLFFBQUEsVUFBQSxFQUFhLFFBQWI7T0FGQyxDQUFOLENBQUE7QUFBQSxNQUlBLFlBQUEsR0FBZSxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWYsRUFBb0I7QUFBQSxRQUFBLFdBQUEsRUFBYSxDQUFiO0FBQUEsUUFBZ0IsVUFBQSxFQUFhLFFBQTdCO09BQXBCLENBSmYsQ0FBQTtBQUFBLE1BS0EsTUFBQSxDQUFPLFlBQVksQ0FBQyxNQUFwQixDQUEyQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBcEMsQ0FBMkMsQ0FBM0MsQ0FMQSxDQUFBO0FBQUEsTUFNQSxXQUFBLEdBQWMsWUFBWSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBTmxDLENBQUE7QUFBQSxNQU9BLE1BQUEsQ0FBTyxXQUFXLENBQUMsSUFBbkIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQS9CLENBQXNDLFFBQXRDLENBUEEsQ0FBQTtBQUFBLE1BUUEsTUFBQSxDQUFPLFdBQVcsQ0FBQyxTQUFuQixDQUE2QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBdEMsQ0FBNkMsQ0FBN0MsQ0FSQSxDQUFBO0FBQUEsTUFTQSxNQUFBLENBQU8sV0FBVyxDQUFDLFVBQW5CLENBQThCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF2QyxDQUE4QyxDQUE5QyxDQVRBLENBQUE7QUFBQSxNQVdBLEtBQUEsR0FBUSxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FYNUIsQ0FBQTtBQUFBLE1BWUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxJQUFiLENBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF6QixDQUFnQyxRQUFoQyxDQVpBLENBQUE7QUFBQSxNQWFBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBYixDQUF1QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBaEMsQ0FBdUMsQ0FBdkMsQ0FiQSxDQUFBO2FBY0EsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFiLENBQXdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFqQyxDQUF3QyxDQUF4QyxFQWYyRDtJQUFBLENBQS9ELEVBN0oyQjtFQUFBLENBQS9CLENBSkEsQ0FBQTtBQUFBIiwiZmlsZSI6ImVzNi1leHBvcnQuanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8iLCJzb3VyY2VzQ29udGVudCI6WyIjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuIyAgQ29weXJpZ2h0IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiNcbiMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4jXG4jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4jICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiNcbiMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4jICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4jICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuIyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiMgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiMgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuIyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiMgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuIyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuZXhwZWN0ID0gcmVxdWlyZSgnY2hhaScpLmV4cGVjdFxuaGFybW9ueSA9IHJlcXVpcmUgJy4uL3RoaXJkX3BhcnR5L2VzcHJpbWEnXG5lc2NvcGUgPSByZXF1aXJlICcuLidcblxuZGVzY3JpYmUgJ2V4cG9ydCBkZWNsYXJhdGlvbicsIC0+XG4gICAgIyBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1zdGF0aWMtYW5kLXJ1bnRtZS1zZW1hbnRpY3MtbW9kdWxlLXJlY29yZHNcbiAgICBpdCAnc2hvdWxkIGNyZWF0ZSB2YWlyYWJsZSBiaW5kaW5ncycsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIGV4cG9ydCB2YXIgdjtcbiAgICAgICAgXCJcIlwiLCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDYsIHNvdXJjZVR5cGU6ICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ21vZHVsZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICd2J1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLmRlZnNbMF0udHlwZSkudG8uYmUuZXF1YWwgJ1ZhcmlhYmxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgaXQgJ3Nob3VsZCBjcmVhdGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYmluZGluZ3MnLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmKCl7fTtcbiAgICAgICAgXCJcIlwiLCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDYsIHNvdXJjZVR5cGU6ICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAzXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ21vZHVsZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdmJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLmRlZnNbMF0udHlwZSkudG8uYmUuZXF1YWwgJ0Z1bmN0aW9uTmFtZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMl1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cblxuICAgIGl0ICdzaG91bGQgZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb24nLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpe307XG4gICAgICAgIFwiXCJcIiwgc291cmNlVHlwZTogJ21vZHVsZSdcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2LCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggM1xuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMl1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICBpdCAnc2hvdWxkIGV4cG9ydCBsaXRlcmFsJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgZXhwb3J0IGRlZmF1bHQgNDI7XG4gICAgICAgIFwiXCJcIiwgc291cmNlVHlwZTogJ21vZHVsZSdcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2LCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgIGl0ICdzaG91bGQgcmVmZXIgZXhwb3J0ZWQgcmVmZXJlbmNlcyMxJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgZXhwb3J0IHt4fTtcbiAgICAgICAgXCJcIlwiLCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDYsIHNvdXJjZVR5cGU6ICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ21vZHVsZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICd4J1xuXG4gICAgaXQgJ3Nob3VsZCByZWZlciBleHBvcnRlZCByZWZlcmVuY2VzIzInLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICBleHBvcnQge3YgYXMgeH07XG4gICAgICAgIFwiXCJcIiwgc291cmNlVHlwZTogJ21vZHVsZSdcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2LCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAndidcblxuICAgIGl0ICdzaG91bGQgbm90IHJlZmVyIGV4cG9ydGVkIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBzb3VyY2UjMScsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIGV4cG9ydCB7eH0gZnJvbSBcIm1vZFwiO1xuICAgICAgICBcIlwiXCIsIHNvdXJjZVR5cGU6ICdtb2R1bGUnXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNiwgc291cmNlVHlwZTogJ21vZHVsZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnbW9kdWxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICBpdCAnc2hvdWxkIG5vdCByZWZlciBleHBvcnRlZCByZWZlcmVuY2VzIGZyb20gb3RoZXIgc291cmNlIzInLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICBleHBvcnQge3YgYXMgeH0gZnJvbSBcIm1vZFwiO1xuICAgICAgICBcIlwiXCIsIHNvdXJjZVR5cGU6ICdtb2R1bGUnXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNiwgc291cmNlVHlwZTogJ21vZHVsZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnbW9kdWxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICBpdCAnc2hvdWxkIG5vdCByZWZlciBleHBvcnRlZCByZWZlcmVuY2VzIGZyb20gb3RoZXIgc291cmNlIzMnLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICBleHBvcnQgKiBmcm9tIFwibW9kXCI7XG4gICAgICAgIFwiXCJcIiwgc291cmNlVHlwZTogJ21vZHVsZSdcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2LCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuIyB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOlxuIl19 \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-import.js b/node_modules/escope/powered-test/es6-import.js new file mode 100644 index 000000000..4d6e7f575 --- /dev/null +++ b/node_modules/escope/powered-test/es6-import.js @@ -0,0 +1,103 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('import declaration', function() { + it('should import names from source', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("import v from \"mod\";", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('v'); + expect(scope.variables[0].defs[0].type).to.be.equal('ImportBinding'); + return expect(scope.references).to.have.length(0); + }); + it('should import namespaces', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("import * as ns from \"mod\";", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('ns'); + expect(scope.variables[0].defs[0].type).to.be.equal('ImportBinding'); + return expect(scope.references).to.have.length(0); + }); + it('should import insided names#1', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("import {x} from \"mod\";", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('x'); + expect(scope.variables[0].defs[0].type).to.be.equal('ImportBinding'); + return expect(scope.references).to.have.length(0); + }); + return it('should import insided names#2', function() { + var ast, globalScope, scope, scopeManager; + ast = harmony.parse("import {x as v} from \"mod\";", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('module'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('v'); + expect(scope.variables[0].defs[0].type).to.be.equal('ImportBinding'); + return expect(scope.references).to.have.length(0); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,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Q0FBc0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQUQsQ0FiNUIsQ0FBQTtBQUFBLE1BY0EsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQWRBLENBQUE7QUFBQSxNQWVBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxHQUE3QyxDQWZBLENBQUE7QUFBQSxNQWdCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQUUsQ0FBQyxJQUFLLENBQUEsQ0FBQSxDQUFFLENBQUMsSUFBbEMsQ0FBdUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQTlDLENBQXFELGVBQXJELENBaEJBLENBQUE7YUFpQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFiLENBQXdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFqQyxDQUF3QyxDQUF4QyxFQWxCZ0M7SUFBQSxDQUFwQyxFQTlEMkI7RUFBQSxDQUEvQixDQUpBLENBQUE7QUFBQSIsImZpbGUiOiJlczYtaW1wb3J0LmpzIiwic291cmNlUm9vdCI6Ii9zb3VyY2UvIiwic291cmNlc0NvbnRlbnQiOlsiIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbiMgIENvcHlyaWdodCAoQykgMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4jXG4jICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuI1xuIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuIyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4jXG4jICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiMgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4jICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4jICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiMgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4jICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiMgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbmV4cGVjdCA9IHJlcXVpcmUoJ2NoYWknKS5leHBlY3Rcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdpbXBvcnQgZGVjbGFyYXRpb24nLCAtPlxuICAgICMgaHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtc3RhdGljLWFuZC1ydW50bWUtc2VtYW50aWNzLW1vZHVsZS1yZWNvcmRzXG4gICAgaXQgJ3Nob3VsZCBpbXBvcnQgbmFtZXMgZnJvbSBzb3VyY2UnLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICBpbXBvcnQgdiBmcm9tIFwibW9kXCI7XG4gICAgICAgIFwiXCJcIiwgc291cmNlVHlwZTogJ21vZHVsZSdcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2LCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ3YnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0uZGVmc1swXS50eXBlKS50by5iZS5lcXVhbCAnSW1wb3J0QmluZGluZydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgIGl0ICdzaG91bGQgaW1wb3J0IG5hbWVzcGFjZXMnLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICBpbXBvcnQgKiBhcyBucyBmcm9tIFwibW9kXCI7XG4gICAgICAgIFwiXCJcIiwgc291cmNlVHlwZTogJ21vZHVsZSdcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2LCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBnbG9iYWxTY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ25zJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLmRlZnNbMF0udHlwZSkudG8uYmUuZXF1YWwgJ0ltcG9ydEJpbmRpbmcnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICBpdCAnc2hvdWxkIGltcG9ydCBpbnNpZGVkIG5hbWVzIzEnLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICBpbXBvcnQge3h9IGZyb20gXCJtb2RcIjtcbiAgICAgICAgXCJcIlwiLCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDYsIHNvdXJjZVR5cGU6ICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ21vZHVsZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmlzU3RyaWN0KS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAneCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5kZWZzWzBdLnR5cGUpLnRvLmJlLmVxdWFsICdJbXBvcnRCaW5kaW5nJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgaXQgJ3Nob3VsZCBpbXBvcnQgaW5zaWRlZCBuYW1lcyMyJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgaW1wb3J0IHt4IGFzIHZ9IGZyb20gXCJtb2RcIjtcbiAgICAgICAgXCJcIlwiLCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDYsIHNvdXJjZVR5cGU6ICdtb2R1bGUnXG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGdsb2JhbFNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ21vZHVsZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmlzU3RyaWN0KS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAndidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5kZWZzWzBdLnR5cGUpLnRvLmJlLmVxdWFsICdJbXBvcnRCaW5kaW5nJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgIyBUT0RPOiBTaG91bGQgcGFyc2UgaXQuXG4gICAgIyBpbXBvcnQgZnJvbSBcIm1vZFwiO1xuXG4jIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6XG4iXX0= \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-iteration-scope.js b/node_modules/escope/powered-test/es6-iteration-scope.js new file mode 100644 index 000000000..79dbf8de2 --- /dev/null +++ b/node_modules/escope/powered-test/es6-iteration-scope.js @@ -0,0 +1,167 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 iteration scope', function() { + it('let materialize iteration scope for ForInStatement#1', function() { + var ast, iterScope, scope, scopeManager; + ast = harmony.parse("(function () {\n let i = 20;\n for (let i in i) {\n console.log(i);\n }\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(5); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('i'); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('i'); + expect(scope.references[0].resolved).to.be.equal(scope.variables[1]); + iterScope = scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('TDZ'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('i'); + expect(scope.variables[0].defs[0].type).to.be.equal('TDZ'); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('i'); + expect(scope.references[0].resolved).to.be.equal(scope.variables[0]); + iterScope = scope = scopeManager.scopes[3]; + expect(scope.type).to.be.equal('for'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('i'); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('i'); + expect(scope.references[0].resolved).to.be.equal(scope.variables[0]); + scope = scopeManager.scopes[4]; + expect(scope.type).to.be.equal('block'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(2); + expect(scope.references[0].identifier.name).to.be.equal('console'); + expect(scope.references[0].resolved).to.be.equal(null); + expect(scope.references[1].identifier.name).to.be.equal('i'); + return expect(scope.references[1].resolved).to.be.equal(iterScope.variables[0]); + }); + it('let materialize iteration scope for ForInStatement#2', function() { + var ast, iterScope, scope, scopeManager; + ast = harmony.parse("(function () {\n let i = 20;\n for (let { i, j, k } in i) {\n console.log(i);\n }\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(5); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('i'); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('i'); + expect(scope.references[0].resolved).to.be.equal(scope.variables[1]); + iterScope = scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('TDZ'); + expect(scope.variables).to.have.length(3); + expect(scope.variables[0].name).to.be.equal('i'); + expect(scope.variables[0].defs[0].type).to.be.equal('TDZ'); + expect(scope.variables[1].name).to.be.equal('j'); + expect(scope.variables[1].defs[0].type).to.be.equal('TDZ'); + expect(scope.variables[2].name).to.be.equal('k'); + expect(scope.variables[2].defs[0].type).to.be.equal('TDZ'); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('i'); + expect(scope.references[0].resolved).to.be.equal(scope.variables[0]); + iterScope = scope = scopeManager.scopes[3]; + expect(scope.type).to.be.equal('for'); + expect(scope.variables).to.have.length(3); + expect(scope.variables[0].name).to.be.equal('i'); + expect(scope.variables[1].name).to.be.equal('j'); + expect(scope.variables[2].name).to.be.equal('k'); + expect(scope.references).to.have.length(3); + expect(scope.references[0].identifier.name).to.be.equal('i'); + expect(scope.references[0].resolved).to.be.equal(scope.variables[0]); + expect(scope.references[1].identifier.name).to.be.equal('j'); + expect(scope.references[1].resolved).to.be.equal(scope.variables[1]); + expect(scope.references[2].identifier.name).to.be.equal('k'); + expect(scope.references[2].resolved).to.be.equal(scope.variables[2]); + scope = scopeManager.scopes[4]; + expect(scope.type).to.be.equal('block'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(2); + expect(scope.references[0].identifier.name).to.be.equal('console'); + expect(scope.references[0].resolved).to.be.equal(null); + expect(scope.references[1].identifier.name).to.be.equal('i'); + return expect(scope.references[1].resolved).to.be.equal(iterScope.variables[0]); + }); + return it('let materialize iteration scope for ForStatement#2', function() { + var ast, functionScope, iterScope, scope, scopeManager; + ast = harmony.parse("(function () {\n let i = 20;\n let obj = {};\n for (let { i, j, k } = obj; i < okok; ++i) {\n console.log(i, j, k);\n }\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(4); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.variables).to.have.length(0); + functionScope = scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(3); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('i'); + expect(scope.variables[2].name).to.be.equal('obj'); + expect(scope.references).to.have.length(2); + expect(scope.references[0].identifier.name).to.be.equal('i'); + expect(scope.references[0].resolved).to.be.equal(scope.variables[1]); + expect(scope.references[1].identifier.name).to.be.equal('obj'); + expect(scope.references[1].resolved).to.be.equal(scope.variables[2]); + iterScope = scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('for'); + expect(scope.variables).to.have.length(3); + expect(scope.variables[0].name).to.be.equal('i'); + expect(scope.variables[0].defs[0].type).to.be.equal('Variable'); + expect(scope.variables[1].name).to.be.equal('j'); + expect(scope.variables[1].defs[0].type).to.be.equal('Variable'); + expect(scope.variables[2].name).to.be.equal('k'); + expect(scope.variables[2].defs[0].type).to.be.equal('Variable'); + expect(scope.references).to.have.length(7); + expect(scope.references[0].identifier.name).to.be.equal('i'); + expect(scope.references[0].resolved).to.be.equal(scope.variables[0]); + expect(scope.references[1].identifier.name).to.be.equal('j'); + expect(scope.references[1].resolved).to.be.equal(scope.variables[1]); + expect(scope.references[2].identifier.name).to.be.equal('k'); + expect(scope.references[2].resolved).to.be.equal(scope.variables[2]); + expect(scope.references[3].identifier.name).to.be.equal('obj'); + expect(scope.references[3].resolved).to.be.equal(functionScope.variables[2]); + expect(scope.references[4].identifier.name).to.be.equal('i'); + expect(scope.references[4].resolved).to.be.equal(scope.variables[0]); + expect(scope.references[5].identifier.name).to.be.equal('okok'); + expect(scope.references[5].resolved).to.be["null"]; + expect(scope.references[6].identifier.name).to.be.equal('i'); + expect(scope.references[6].resolved).to.be.equal(scope.variables[0]); + scope = scopeManager.scopes[3]; + expect(scope.type).to.be.equal('block'); + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(4); + expect(scope.references[0].identifier.name).to.be.equal('console'); + expect(scope.references[0].resolved).to.be["null"]; + expect(scope.references[1].identifier.name).to.be.equal('i'); + expect(scope.references[1].resolved).to.be.equal(iterScope.variables[0]); + expect(scope.references[2].identifier.name).to.be.equal('j'); + expect(scope.references[2].resolved).to.be.equal(iterScope.variables[1]); + expect(scope.references[3].identifier.name).to.be.equal('k'); + return expect(scope.references[3].resolved).to.be.equal(iterScope.variables[2]); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVzNi1pdGVyYXRpb24tc2NvcGUuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVCQTtBQUFBLE1BQUEsdUJBQUE7O0FBQUEsRUFBQSxNQUFBLEdBQVMsT0FBQSxDQUFTLE1BQVQsQ0FBZSxDQUFDLE1BQXpCLENBQUE7O0FBQUEsRUFDQSxPQUFBLEdBQVUsT0FBQSxDQUFTLHdCQUFULENBRFYsQ0FBQTs7QUFBQSxFQUVBLE1BQUEsR0FBUyxPQUFBLENBQVMsSUFBVCxDQUZULENBQUE7O0FBQUEsRUFJQSxRQUFBLENBQVUscUJBQVYsRUFBZ0MsU0FBQSxHQUFBO0FBQzVCLElBQUEsRUFBQSxDQUFJLHNEQUFKLEVBQTJELFNBQUEsR0FBQTtBQUN2RCxVQUFBLG1DQUFBO0FBQUEsTUFBQSxHQUFBLEdBQU0sT0FBTyxDQUFDLEtBQVIsQ0FBaUIsZ0dBQWpCLENBQU4sQ0FBQTtBQUFBLE1BU0EsWUFBQSxHQUFlLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixFQUFvQjtBQUFBLFFBQUEsV0FBQSxFQUFhLENBQWI7T0FBcEIsQ0FUZixDQUFBO0FBQUEsTUFVQSxNQUFBLENBQU8sWUFBWSxDQUFDLE1BQXBCLENBQTJCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFwQyxDQUEyQyxDQUEzQyxDQVZBLENBQUE7QUFBQSxNQVlBLEtBQUEsR0FBUSxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FaNUIsQ0FBQTtBQUFBLE1BYUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxJQUFiLENBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF6QixDQUFnQyxRQUFoQyxDQWJBLENBQUE7QUFBQSxNQWNBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBYixDQUF1QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBaEMsQ0FBdUMsQ0FBdkMsQ0FkQSxDQUFBO0FBQUEsTUFnQkEsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQWhCNUIsQ0FBQTtB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QSxDQUFBLENBQUUsQ0FBQyxVQUFVLENBQUMsSUFBdEMsQ0FBMkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQWxELENBQXlELEdBQXpELENBdkNBLENBQUE7QUFBQSxNQXdDQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxRQUEzQixDQUFvQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBM0MsQ0FBaUQsS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQWpFLENBeENBLENBQUE7QUFBQSxNQXlDQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxVQUFVLENBQUMsSUFBdEMsQ0FBMkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQWxELENBQXlELEdBQXpELENBekNBLENBQUE7QUFBQSxNQTBDQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxRQUEzQixDQUFvQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBM0MsQ0FBaUQsS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQWpFLENBMUNBLENBQUE7QUFBQSxNQTJDQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxVQUFVLENBQUMsSUFBdEMsQ0FBMkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQWxELENBQXlELEdBQXpELENBM0NBLENBQUE7QUFBQSxNQTRDQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxRQUEzQixDQUFvQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBM0MsQ0FBaUQsS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQWpFLENBNUNBLENBQUE7QUFBQSxNQTZDQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxVQUFVLENBQUMsSUFBdEMsQ0FBMkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFD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RCxTQUFTLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBckUsQ0E3REEsQ0FBQTtBQUFBLE1BOERBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBVyxDQUFBLENBQUEsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxJQUF0QyxDQUEyQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBbEQsQ0FBeUQsR0FBekQsQ0E5REEsQ0FBQTtBQUFBLE1BK0RBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBVyxDQUFBLENBQUEsQ0FBRSxDQUFDLFFBQTNCLENBQW9DLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUEzQyxDQUFpRCxTQUFTLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBckUsQ0EvREEsQ0FBQTtBQUFBLE1BZ0VBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBVyxDQUFBLENBQUEsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxJQUF0QyxDQUEyQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBbEQsQ0FBeUQsR0FBekQsQ0FoRUEsQ0FBQTthQWlFQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxRQUEzQixDQUFvQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBM0MsQ0FBaUQsU0FBUyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQXJFLEVBbEVxRDtJQUFBLENBQXpELEVBbkg0QjtFQUFBLENBQWhDLENBSkEsQ0FBQTtBQUFBIiwiZmlsZSI6ImVzNi1pdGVyYXRpb24tc2NvcGUuanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8iLCJzb3VyY2VzQ29udGVudCI6WyIjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuIyAgQ29weXJpZ2h0IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiNcbiMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4jXG4jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4jICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiNcbiMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4jICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4jICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuIyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiMgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiMgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuIyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiMgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuIyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuZXhwZWN0ID0gcmVxdWlyZSgnY2hhaScpLmV4cGVjdFxuaGFybW9ueSA9IHJlcXVpcmUgJy4uL3RoaXJkX3BhcnR5L2VzcHJpbWEnXG5lc2NvcGUgPSByZXF1aXJlICcuLidcblxuZGVzY3JpYmUgJ0VTNiBpdGVyYXRpb24gc2NvcGUnLCAtPlxuICAgIGl0ICdsZXQgbWF0ZXJpYWxpemUgaXRlcmF0aW9uIHNjb3BlIGZvciBGb3JJblN0YXRlbWVudCMxJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBpID0gMjA7XG4gICAgICAgICAgICBmb3IgKGxldCBpIGluIGkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSgpKTtcbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggNVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2FyZ3VtZW50cydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1sxXS5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1sxXVxuXG4gICAgICAgIGl0ZXJTY29wZSA9IHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1syXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ1REWidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLmRlZnNbMF0udHlwZSkudG8uYmUuZXF1YWwgJ1REWidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1swXVxuXG4gICAgICAgIGl0ZXJTY29wZSA9IHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1szXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2ZvcidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgc2NvcGUudmFyaWFibGVzWzBdXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzRdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnYmxvY2snXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDJcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnY29uc29sZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIG51bGxcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIGl0ZXJTY29wZS52YXJpYWJsZXNbMF1cblxuICAgIGl0ICdsZXQgbWF0ZXJpYWxpemUgaXRlcmF0aW9uIHNjb3BlIGZvciBGb3JJblN0YXRlbWVudCMyJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBpID0gMjA7XG4gICAgICAgICAgICBmb3IgKGxldCB7IGksIGosIGsgfSBpbiBpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0oKSk7XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDVcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMV0ubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5lcXVhbCBzY29wZS52YXJpYWJsZXNbMV1cblxuICAgICAgICBpdGVyU2NvcGUgPSBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMl1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdURFonXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDNcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5kZWZzWzBdLnR5cGUpLnRvLmJlLmVxdWFsICdURFonXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMV0ubmFtZSkudG8uYmUuZXF1YWwgJ2onXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMV0uZGVmc1swXS50eXBlKS50by5iZS5lcXVhbCAnVERaJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzJdLm5hbWUpLnRvLmJlLmVxdWFsICdrJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzJdLmRlZnNbMF0udHlwZSkudG8uYmUuZXF1YWwgJ1REWidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1swXVxuXG4gICAgICAgIGl0ZXJTY29wZSA9IHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1szXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2ZvcidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggM1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICdqJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzJdLm5hbWUpLnRvLmJlLmVxdWFsICdrJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggM1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgc2NvcGUudmFyaWFibGVzWzBdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2onXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnJlc29sdmVkKS50by5iZS5lcXVhbCBzY29wZS52YXJpYWJsZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1syXVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1s0XVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Jsb2NrJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2NvbnNvbGUnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5lcXVhbCBudWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnJlc29sdmVkKS50by5iZS5lcXVhbCBpdGVyU2NvcGUudmFyaWFibGVzWzBdXG5cbiAgICBpdCAnbGV0IG1hdGVyaWFsaXplIGl0ZXJhdGlvbiBzY29wZSBmb3IgRm9yU3RhdGVtZW50IzInLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGkgPSAyMDtcbiAgICAgICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IHsgaSwgaiwgayB9ID0gb2JqOyBpIDwgb2tvazsgKytpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coaSwgaiwgayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0oKSk7XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDRcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBmdW5jdGlvblNjb3BlID0gc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDNcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzJdLm5hbWUpLnRvLmJlLmVxdWFsICdvYmonXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5lcXVhbCBzY29wZS52YXJpYWJsZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnb2JqJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1sxXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgc2NvcGUudmFyaWFibGVzWzJdXG5cbiAgICAgICAgaXRlclNjb3BlID0gc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzJdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZm9yJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAzXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0uZGVmc1swXS50eXBlKS50by5iZS5lcXVhbCAnVmFyaWFibGUnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMV0ubmFtZSkudG8uYmUuZXF1YWwgJ2onXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMV0uZGVmc1swXS50eXBlKS50by5iZS5lcXVhbCAnVmFyaWFibGUnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMl0ubmFtZSkudG8uYmUuZXF1YWwgJ2snXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMl0uZGVmc1swXS50eXBlKS50by5iZS5lcXVhbCAnVmFyaWFibGUnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA3XG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5lcXVhbCBzY29wZS52YXJpYWJsZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdrJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5yZXNvbHZlZCkudG8uYmUuZXF1YWwgc2NvcGUudmFyaWFibGVzWzJdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzNdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ29iaidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbM10ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIGZ1bmN0aW9uU2NvcGUudmFyaWFibGVzWzJdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzRdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzRdLnJlc29sdmVkKS50by5iZS5lcXVhbCBzY29wZS52YXJpYWJsZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbNV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnb2tvaydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbNV0ucmVzb2x2ZWQpLnRvLmJlLm51bGxcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbNl0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbNl0ucmVzb2x2ZWQpLnRvLmJlLmVxdWFsIHNjb3BlLnZhcmlhYmxlc1swXVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1szXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Jsb2NrJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCA0XG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2NvbnNvbGUnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5udWxsXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzFdLnJlc29sdmVkKS50by5iZS5lcXVhbCBpdGVyU2NvcGUudmFyaWFibGVzWzBdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2onXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzJdLnJlc29sdmVkKS50by5iZS5lcXVhbCBpdGVyU2NvcGUudmFyaWFibGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzNdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ2snXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzNdLnJlc29sdmVkKS50by5iZS5lcXVhbCBpdGVyU2NvcGUudmFyaWFibGVzWzJdXG5cbiMgdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDpcbiJdfQ== \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-object.js b/node_modules/escope/powered-test/es6-object.js new file mode 100644 index 000000000..2241d2558 --- /dev/null +++ b/node_modules/escope/powered-test/es6-object.js @@ -0,0 +1,57 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 object', function() { + it('method definition', function() { + var ast, scope, scopeManager; + ast = harmony.parse("({\n constructor() {\n }\n})"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('FunctionExpression'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + return expect(scope.references).to.have.length(0); + }); + return it('computed property key may refer variables', function() { + var ast, scope, scopeManager; + ast = harmony.parse("(function () {\n var yuyushiki = 42;\n ({\n [yuyushiki]() {\n },\n\n [yuyushiki + 40]() {\n }\n })\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(4); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('FunctionExpression'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('yuyushiki'); + expect(scope.references).to.have.length(3); + expect(scope.references[0].identifier.name).to.be.equal('yuyushiki'); + expect(scope.references[1].identifier.name).to.be.equal('yuyushiki'); + return expect(scope.references[2].identifier.name).to.be.equal('yuyushiki'); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,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TyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxXQUE3QyxDQTFCQSxDQUFBO0FBQUEsTUEyQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFVLENBQUEsQ0FBQSxDQUFFLENBQUMsSUFBMUIsQ0FBK0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXRDLENBQTZDLFdBQTdDLENBM0JBLENBQUE7QUFBQSxNQTRCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLENBNUJBLENBQUE7QUFBQSxNQTZCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxVQUFVLENBQUMsSUFBdEMsQ0FBMkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQWxELENBQXlELFdBQXpELENBN0JBLENBQUE7QUFBQSxNQThCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxVQUFVLENBQUMsSUFBdEMsQ0FBMkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQWxELENBQXlELFdBQXpELENBOUJBLENBQUE7YUErQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFXLENBQUEsQ0FBQSxDQUFFLENBQUMsVUFBVSxDQUFDLElBQXRDLENBQTJDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFsRCxDQUF5RCxXQUF6RCxFQWhDNEM7SUFBQSxDQUFoRCxFQXpCbUI7RUFBQSxDQUF2QixDQUpBLENBQUE7QUFBQSIsImZpbGUiOiJlczYtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6Ii9zb3VyY2UvIiwic291cmNlc0NvbnRlbnQiOlsiIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbiMgIENvcHlyaWdodCAoQykgMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4jXG4jICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuI1xuIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuIyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4jXG4jICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiMgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4jICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4jICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiMgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4jICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiMgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbmV4cGVjdCA9IHJlcXVpcmUoJ2NoYWknKS5leHBlY3Rcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdFUzYgb2JqZWN0JywgLT5cbiAgICBpdCAnbWV0aG9kIGRlZmluaXRpb24nLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICAoe1xuICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnUHJvZ3JhbSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmlzU3RyaWN0KS50by5iZS5mYWxzZVxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuYmxvY2sudHlwZSkudG8uYmUuZXF1YWwgJ0Z1bmN0aW9uRXhwcmVzc2lvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLmlzU3RyaWN0KS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgaXQgJ2NvbXB1dGVkIHByb3BlcnR5IGtleSBtYXkgcmVmZXIgdmFyaWFibGVzJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB5dXl1c2hpa2kgPSA0MjtcbiAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgW3l1eXVzaGlraV0oKSB7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIFt5dXl1c2hpa2kgKyA0MF0oKSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSgpKTtcbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggNFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdQcm9ncmFtJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnRnVuY3Rpb25FeHByZXNzaW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDJcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICd5dXl1c2hpa2knXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAzXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ3l1eXVzaGlraSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAneXV5dXNoaWtpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1syXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICd5dXl1c2hpa2knXG5cbiMgdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDpcbiJdfQ== \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-rest-args.js b/node_modules/escope/powered-test/es6-rest-args.js new file mode 100644 index 000000000..3342b7ed8 --- /dev/null +++ b/node_modules/escope/powered-test/es6-rest-args.js @@ -0,0 +1,35 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 rest arguments', function() { + return it('materialize rest argument in scope', function() { + var ast, scope, scopeManager; + ast = harmony.parse("function foo(...bar) {\n return bar;\n}"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(1); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('bar'); + expect(scope.variables[1].defs[0].name.name).to.be.equal('bar'); + return expect(scope.variables[1].defs[0].rest).to.be["true"]; + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVzNi1yZXN0LWFyZ3MuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVCQTtBQUFBLE1BQUEsdUJBQUE7O0FBQUEsRUFBQSxNQUFBLEdBQVMsT0FBQSxDQUFTLE1BQVQsQ0FBZSxDQUFDLE1BQXpCLENBQUE7O0FBQUEsRUFDQSxPQUFBLEdBQVUsT0FBQSxDQUFTLHdCQUFULENBRFYsQ0FBQTs7QUFBQSxFQUVBLE1BQUEsR0FBUyxPQUFBLENBQVMsSUFBVCxDQUZULENBQUE7O0FBQUEsRUFJQSxRQUFBLENBQVUsb0JBQVYsRUFBK0IsU0FBQSxHQUFBO1dBQzNCLEVBQUEsQ0FBSSxvQ0FBSixFQUF5QyxTQUFBLEdBQUE7QUFDckMsVUFBQSx3QkFBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLDRDQUFqQixDQUFOLENBQUE7QUFBQSxNQU1BLFlBQUEsR0FBZSxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWYsRUFBb0I7QUFBQSxRQUFBLFdBQUEsRUFBYSxDQUFiO09BQXBCLENBTmYsQ0FBQTtBQUFBLE1BT0EsTUFBQSxDQUFPLFlBQVksQ0FBQyxNQUFwQixDQUEyQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBcEMsQ0FBMkMsQ0FBM0MsQ0FQQSxDQUFBO0FBQUEsTUFTQSxLQUFBLEdBQVEsWUFBWSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBVDVCLENBQUE7QUFBQSxNQVVBLE1BQUEsQ0FBTyxLQUFLLENBQUMsSUFBYixDQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBekIsQ0FBZ0MsUUFBaEMsQ0FWQSxDQUFBO0FBQUEsTUFXQSxNQUFBLENBQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsU0FBdEMsQ0FYQSxDQUFBO0FBQUEsTUFZQSxNQUFBLENBQU8sS0FBSyxDQUFDLFFBQWIsQ0FBc0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQUQsQ0FaNUIsQ0FBQTtBQUFBLE1BYUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQWJBLENBQUE7QUFBQSxNQWVBLEtBQUEsR0FBUSxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FmNUIsQ0FBQTtBQUFBLE1BZ0JBLE1BQUEsQ0FBTyxLQUFLLENBQUMsSUFBYixDQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBekIsQ0FBZ0MsVUFBaEMsQ0FoQkEsQ0FBQTtBQUFBLE1BaUJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBYixDQUF1QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBaEMsQ0FBdUMsQ0FBdkMsQ0FqQkEsQ0FBQTtBQUFBLE1Ba0JBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxXQUE3QyxDQWxCQSxDQUFBO0FBQUEsTUFtQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFVLENBQUEsQ0FBQSxDQUFFLENBQUMsSUFBMUIsQ0FBK0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXRDLENBQTZDLEtBQTdDLENBbkJBLENBQUE7QUFBQSxNQW9CQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQUUsQ0FBQyxJQUFLLENBQUEsQ0FBQSxDQUFFLENBQUMsSUFBSSxDQUFDLElBQXZDLENBQTRDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFuRCxDQUEwRCxLQUExRCxDQXBCQSxDQUFBO2FBcUJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQUssQ0FBQSxDQUFBLENBQUUsQ0FBQyxJQUFsQyxDQUF1QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBRCxFQXRCUjtJQUFBLENBQXpDLEVBRDJCO0VBQUEsQ0FBL0IsQ0FKQSxDQUFBO0FBQUEiLCJmaWxlIjoiZXM2LXJlc3QtYXJncy5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5oYXJtb255ID0gcmVxdWlyZSAnLi4vdGhpcmRfcGFydHkvZXNwcmltYSdcbmVzY29wZSA9IHJlcXVpcmUgJy4uJ1xuXG5kZXNjcmliZSAnRVM2IHJlc3QgYXJndW1lbnRzJywgLT5cbiAgICBpdCAnbWF0ZXJpYWxpemUgcmVzdCBhcmd1bWVudCBpbiBzY29wZScsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIGZ1bmN0aW9uIGZvbyguLi5iYXIpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXI7XG4gICAgICAgIH1cbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMlxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdQcm9ncmFtJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMV0ubmFtZSkudG8uYmUuZXF1YWwgJ2JhcidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1sxXS5kZWZzWzBdLm5hbWUubmFtZSkudG8uYmUuZXF1YWwgJ2JhcidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1sxXS5kZWZzWzBdLnJlc3QpLnRvLmJlLnRydWVcblxuIyB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOlxuIl19 \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-switch.js b/node_modules/escope/powered-test/es6-switch.js new file mode 100644 index 000000000..44336f0f9 --- /dev/null +++ b/node_modules/escope/powered-test/es6-switch.js @@ -0,0 +1,43 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 switch', function() { + return it('materialize scope', function() { + var ast, scope, scopeManager; + ast = harmony.parse("switch (ok) {\n case hello:\n let i = 20;\n i;\n break;\n\n default:\n let test = 30;\n test;\n}"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(0); + expect(scope.references).to.have.length(1); + expect(scope.references[0].identifier.name).to.be.equal('ok'); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('switch'); + expect(scope.block.type).to.be.equal('SwitchStatement'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('i'); + expect(scope.variables[1].name).to.be.equal('test'); + expect(scope.references).to.have.length(5); + expect(scope.references[0].identifier.name).to.be.equal('hello'); + expect(scope.references[1].identifier.name).to.be.equal('i'); + expect(scope.references[2].identifier.name).to.be.equal('i'); + expect(scope.references[3].identifier.name).to.be.equal('test'); + return expect(scope.references[4].identifier.name).to.be.equal('test'); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,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O0VBQUEsQ0FBdkIsQ0FKQSxDQUFBO0FBQUEiLCJmaWxlIjoiZXM2LXN3aXRjaC5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5oYXJtb255ID0gcmVxdWlyZSAnLi4vdGhpcmRfcGFydHkvZXNwcmltYSdcbmVzY29wZSA9IHJlcXVpcmUgJy4uJ1xuXG5kZXNjcmliZSAnRVM2IHN3aXRjaCcsIC0+XG4gICAgaXQgJ21hdGVyaWFsaXplIHNjb3BlJywgLT5cbiAgICAgICAgYXN0ID0gaGFybW9ueS5wYXJzZSBcIlwiXCJcbiAgICAgICAgc3dpdGNoIChvaykge1xuICAgICAgICAgICAgY2FzZSBoZWxsbzpcbiAgICAgICAgICAgICAgICBsZXQgaSA9IDIwO1xuICAgICAgICAgICAgICAgIGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbGV0IHRlc3QgPSAzMDtcbiAgICAgICAgICAgICAgICB0ZXN0O1xuICAgICAgICB9XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlTWFuYWdlciA9IGVzY29wZS5hbmFseXplIGFzdCwgZWNtYVZlcnNpb246IDZcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdnbG9iYWwnXG4gICAgICAgIGV4cGVjdChzY29wZS5ibG9jay50eXBlKS50by5iZS5lcXVhbCAnUHJvZ3JhbSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmlzU3RyaWN0KS50by5iZS5mYWxzZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLmlkZW50aWZpZXIubmFtZSkudG8uYmUuZXF1YWwgJ29rJ1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ3N3aXRjaCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdTd2l0Y2hTdGF0ZW1lbnQnXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUuZmFsc2VcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMlxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdpJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzFdLm5hbWUpLnRvLmJlLmVxdWFsICd0ZXN0J1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggNVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICdoZWxsbydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbM10uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAndGVzdCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbNF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAndGVzdCdcblxuIyB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOlxuIl19 \ No newline at end of file diff --git a/node_modules/escope/powered-test/es6-template-literal.js b/node_modules/escope/powered-test/es6-template-literal.js new file mode 100644 index 000000000..5e71ad217 --- /dev/null +++ b/node_modules/escope/powered-test/es6-template-literal.js @@ -0,0 +1,45 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('ES6 template literal', function() { + return it('refer variables', function() { + var ast, scope, scopeManager; + ast = harmony.parse("(function () {\n let i, j, k;\n function testing() { }\n let template = testing`testing ${i} and ${j}`\n return template;\n}());"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6 + }); + expect(scopeManager.scopes).to.have.length(3); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('FunctionExpression'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(6); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.variables[1].name).to.be.equal('i'); + expect(scope.variables[2].name).to.be.equal('j'); + expect(scope.variables[3].name).to.be.equal('k'); + expect(scope.variables[4].name).to.be.equal('testing'); + expect(scope.variables[5].name).to.be.equal('template'); + expect(scope.references).to.have.length(5); + expect(scope.references[0].identifier.name).to.be.equal('template'); + expect(scope.references[1].identifier.name).to.be.equal('testing'); + expect(scope.references[2].identifier.name).to.be.equal('i'); + expect(scope.references[3].identifier.name).to.be.equal('j'); + return expect(scope.references[4].identifier.name).to.be.equal('template'); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVzNi10ZW1wbGF0ZS1saXRlcmFsLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QkE7QUFBQSxNQUFBLHVCQUFBOztBQUFBLEVBQUEsTUFBQSxHQUFTLE9BQUEsQ0FBUyxNQUFULENBQWUsQ0FBQyxNQUF6QixDQUFBOztBQUFBLEVBQ0EsT0FBQSxHQUFVLE9BQUEsQ0FBUyx3QkFBVCxDQURWLENBQUE7O0FBQUEsRUFFQSxNQUFBLEdBQVMsT0FBQSxDQUFTLElBQVQsQ0FGVCxDQUFBOztBQUFBLEVBSUEsUUFBQSxDQUFVLHNCQUFWLEVBQWlDLFNBQUEsR0FBQTtXQUM3QixFQUFBLENBQUksaUJBQUosRUFBc0IsU0FBQSxHQUFBO0FBQ2xCLFVBQUEsd0JBQUE7QUFBQSxNQUFBLEdBQUEsR0FBTSxPQUFPLENBQUMsS0FBUixDQUFpQiw4SUFBakIsQ0FBTixDQUFBO0FBQUEsTUFTQSxZQUFBLEdBQWUsTUFBTSxDQUFDLE9BQVAsQ0FBZSxHQUFmLEVBQW9CO0FBQUEsUUFBQSxXQUFBLEVBQWEsQ0FBYjtPQUFwQixDQVRmLENBQUE7QUFBQSxNQVVBLE1BQUEsQ0FBTyxZQUFZLENBQUMsTUFBcEIsQ0FBMkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXBDLENBQTJDLENBQTNDLENBVkEsQ0FBQTtBQUFBLE1BWUEsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVo1QixDQUFBO0FBQUEsTUFhQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFFBQWhDLENBYkEsQ0FBQTtBQUFBLE1BY0EsTUFBQSxDQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBbkIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQS9CLENBQXNDLFNBQXRDLENBZEEsQ0FBQTtBQUFBLE1BZUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxRQUFiLENBQXNCLENBQUMsRUFBRSxD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Q0EsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFXLENBQUEsQ0FBQSxDQUFFLENBQUMsVUFBVSxDQUFDLElBQXRDLENBQTJDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFsRCxDQUF5RCxHQUF6RCxDQWpDQSxDQUFBO2FBa0NBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBVyxDQUFBLENBQUEsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxJQUF0QyxDQUEyQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBbEQsQ0FBeUQsVUFBekQsRUFuQ2tCO0lBQUEsQ0FBdEIsRUFENkI7RUFBQSxDQUFqQyxDQUpBLENBQUE7QUFBQSIsImZpbGUiOiJlczYtdGVtcGxhdGUtbGl0ZXJhbC5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5oYXJtb255ID0gcmVxdWlyZSAnLi4vdGhpcmRfcGFydHkvZXNwcmltYSdcbmVzY29wZSA9IHJlcXVpcmUgJy4uJ1xuXG5kZXNjcmliZSAnRVM2IHRlbXBsYXRlIGxpdGVyYWwnLCAtPlxuICAgIGl0ICdyZWZlciB2YXJpYWJsZXMnLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGksIGosIGs7XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZXN0aW5nKCkgeyB9XG4gICAgICAgICAgICBsZXQgdGVtcGxhdGUgPSB0ZXN0aW5nYHRlc3RpbmcgJHtpfSBhbmQgJHtqfWBcbiAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgICAgfSgpKTtcbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0LCBlY21hVmVyc2lvbjogNlxuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggM1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdQcm9ncmFtJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdGdW5jdGlvbkV4cHJlc3Npb24nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUuZmFsc2VcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggNlxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMV0ubmFtZSkudG8uYmUuZXF1YWwgJ2knXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMl0ubmFtZSkudG8uYmUuZXF1YWwgJ2onXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbM10ubmFtZSkudG8uYmUuZXF1YWwgJ2snXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbNF0ubmFtZSkudG8uYmUuZXF1YWwgJ3Rlc3RpbmcnXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbNV0ubmFtZSkudG8uYmUuZXF1YWwgJ3RlbXBsYXRlJ1xuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggNVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsICd0ZW1wbGF0ZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAndGVzdGluZydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMl0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbM10uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnaidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbNF0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAndGVtcGxhdGUnXG5cbiMgdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDpcbiJdfQ== \ No newline at end of file diff --git a/node_modules/escope/powered-test/function-expression-name.js b/node_modules/escope/powered-test/function-expression-name.js new file mode 100644 index 000000000..7df084185 --- /dev/null +++ b/node_modules/escope/powered-test/function-expression-name.js @@ -0,0 +1,42 @@ +(function() { + var escope, esprima, expect, harmony; + + expect = require('chai').expect; + + esprima = require('esprima'); + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('function name', function() { + return it('should create its special scope', function() { + var ast, globalScope, scope, scopeManager; + ast = esprima.parse("(function name() {\n}());"); + scopeManager = escope.analyze(ast); + expect(scopeManager.scopes).to.have.length(3); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + expect(globalScope.isArgumentsMaterialized()).to.be["true"]; + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function-expression-name'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('name'); + expect(scope.isArgumentsMaterialized()).to.be["true"]; + expect(scope.references).to.have.length(0); + expect(scope.upper === globalScope).to.be["true"]; + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.isArgumentsMaterialized()).to.be["false"]; + expect(scope.references).to.have.length(0); + return expect(scope.upper === scopeManager.scopes[1]).to.be["true"]; + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZ1bmN0aW9uLWV4cHJlc3Npb24tbmFtZS5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJBO0FBQUEsTUFBQSxnQ0FBQTs7QUFBQSxFQUFBLE1BQUEsR0FBUyxPQUFBLENBQVMsTUFBVCxDQUFlLENBQUMsTUFBekIsQ0FBQTs7QUFBQSxFQUNBLE9BQUEsR0FBVSxPQUFBLENBQVMsU0FBVCxDQURWLENBQUE7O0FBQUEsRUFFQSxPQUFBLEdBQVUsT0FBQSxDQUFTLHdCQUFULENBRlYsQ0FBQTs7QUFBQSxFQUdBLE1BQUEsR0FBUyxPQUFBLENBQVMsSUFBVCxDQUhULENBQUE7O0FBQUEsRUFLQSxRQUFBLENBQVUsZUFBVixFQUEwQixTQUFBLEdBQUE7V0FDdEIsRUFBQSxDQUFJLGlDQUFKLEVBQXNDLFNBQUEsR0FBQTtBQUNsQyxVQUFBLHFDQUFBO0FBQUEsTUFBQSxHQUFBLEdBQU0sT0FBTyxDQUFDLEtBQVIsQ0FBaUIsMkJBQWpCLENBQU4sQ0FBQTtBQUFBLE1BS0EsWUFBQSxHQUFlLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixDQUxmLENBQUE7QUFBQSxNQU1BLE1BQUEsQ0FBTyxZQUFZLENBQUMsTUFBcEIsQ0FBMkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXBDLENBQTJDLENBQTNDLENBTkEsQ0FBQTtBQUFBLE1BT0EsV0FBQSxHQUFjLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVBsQyxDQUFBO0FBQUEsTUFRQSxNQUFBLENBQU8sV0FBVyxDQUFDLElBQW5CLENBQXdCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUEvQixDQUFzQyxRQUF0QyxDQVJBLENBQUE7QUFBQSxNQVNBLE1BQUEsQ0FBTyxXQUFXLENBQUMsU0FBbkIsQ0FBNkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXRDLENBQTZDLENBQTdDLENBVEEsQ0FBQTtBQUFBLE1BVUEsTUFBQSxDQUFPLFdBQVcsQ0FBQyxVQUFuQixDQUE4QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBdkMsQ0FBOEMsQ0FBOUMsQ0FWQSxDQUFBO0FBQUEsTUFXQSxNQUFBLENBQU8sV0FBVyxDQUFDLHVCQUFaLENBQUEsQ0FBUCxDQUE2QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBRCxDQVhuRCxDQUFBO0FBQUEsTUFjQSxLQUFBLEdBQVEsWUFBWSxDQUFDLE1BQU8sQ0FBQSxDQUFBLENBZDVCLENBQUE7QUFBQSxNQWVBLE1BQUEsQ0FBTyxLQUFLLENBQUMsSUFBYixDQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBekIsQ0FBZ0MsMEJBQWhDLENBZkEsQ0FBQTtBQUFBLE1BZ0JBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBYixDQUF1QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBaEMsQ0FBdUMsQ0FBdkMsQ0FoQkEsQ0FBQTtBQUFBLE1BaUJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxNQUE3QyxDQWpCQSxDQUFBO0FBQUEsTUFrQkEsTUFBQSxDQUFPLEtBQUssQ0FBQyx1QkFBTixDQUFBLENBQVAsQ0FBdUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQUQsQ0FsQjdDLENBQUE7QUFBQSxNQW1CQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLENBbkJBLENBQUE7QUFBQSxNQW9CQSxNQUFBLENBQU8sS0FBSyxDQUFDLEtBQU4sS0FBZSxXQUF0QixDQUFrQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBRCxDQXBCeEMsQ0FBQTtBQUFBLE1BdUJBLEtBQUEsR0FBUSxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0F2QjVCLENBQUE7QUFBQSxNQXdCQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFVBQWhDLENBeEJBLENBQUE7QUFBQSxNQXlCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQWIsQ0FBdUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWhDLENBQXVDLENBQXZDLENBekJBLENBQUE7QUFBQSxNQTBCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQUUsQ0FBQyxJQUExQixDQUErQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBdEMsQ0FBNkMsV0FBN0MsQ0ExQkEsQ0FBQTtBQUFBLE1BMkJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsdUJBQU4sQ0FBQSxDQUFQLENBQXVDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFELENBM0I3QyxDQUFBO0FBQUEsTUE0QkEsTUFBQSxDQUFPLEtBQUssQ0FBQyxVQUFiLENBQXdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFqQyxDQUF3QyxDQUF4QyxDQTVCQSxDQUFBO2FBNkJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsS0FBTixLQUFlLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQUExQyxDQUE2QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBRCxFQTlCakI7SUFBQSxDQUF0QyxFQURzQjtFQUFBLENBQTFCLENBTEEsQ0FBQTtBQUFBIiwiZmlsZSI6ImZ1bmN0aW9uLWV4cHJlc3Npb24tbmFtZS5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5lc3ByaW1hID0gcmVxdWlyZSAnZXNwcmltYSdcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdmdW5jdGlvbiBuYW1lJywgLT5cbiAgICBpdCAnc2hvdWxkIGNyZWF0ZSBpdHMgc3BlY2lhbCBzY29wZScsIC0+XG4gICAgICAgIGFzdCA9IGVzcHJpbWEucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiBuYW1lKCkge1xuICAgICAgICB9KCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3RcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDNcbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS5pc0FyZ3VtZW50c01hdGVyaWFsaXplZCgpKS50by5iZS50cnVlXG5cbiAgICAgICAgIyBGdW5jdGlvbiBleHByZXNzaW9uIG5hbWUgc2NvcGVcbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24tZXhwcmVzc2lvbi1uYW1lJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ25hbWUnXG4gICAgICAgIGV4cGVjdChzY29wZS5pc0FyZ3VtZW50c01hdGVyaWFsaXplZCgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS51cHBlciBpcyBnbG9iYWxTY29wZSkudG8uYmUudHJ1ZVxuXG4gICAgICAgICMgRnVuY3Rpb24gc2NvcGVcbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzJdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQoKSkudG8uYmUuZmFsc2VcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcbiAgICAgICAgZXhwZWN0KHNjb3BlLnVwcGVyIGlzIHNjb3BlTWFuYWdlci5zY29wZXNbMV0pLnRvLmJlLnRydWVcblxuXG4jIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6XG4iXX0= \ No newline at end of file diff --git a/node_modules/escope/powered-test/global-increment.js b/node_modules/escope/powered-test/global-increment.js new file mode 100644 index 000000000..39024ff15 --- /dev/null +++ b/node_modules/escope/powered-test/global-increment.js @@ -0,0 +1,28 @@ +(function() { + var escope, esprima, expect, harmony; + + expect = require('chai').expect; + + esprima = require('esprima'); + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('global increment', function() { + return it('becomes read/write', function() { + var ast, globalScope, scopeManager; + ast = esprima.parse("b++;"); + scopeManager = escope.analyze(ast); + expect(scopeManager.scopes).to.have.length(1); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(1); + return expect(globalScope.references[0].isReadWrite()).to.be["true"]; + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdsb2JhbC1pbmNyZW1lbnQuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVCQTtBQUFBLE1BQUEsZ0NBQUE7O0FBQUEsRUFBQSxNQUFBLEdBQVMsT0FBQSxDQUFTLE1BQVQsQ0FBZSxDQUFDLE1BQXpCLENBQUE7O0FBQUEsRUFDQSxPQUFBLEdBQVUsT0FBQSxDQUFTLFNBQVQsQ0FEVixDQUFBOztBQUFBLEVBRUEsT0FBQSxHQUFVLE9BQUEsQ0FBUyx3QkFBVCxDQUZWLENBQUE7O0FBQUEsRUFHQSxNQUFBLEdBQVMsT0FBQSxDQUFTLElBQVQsQ0FIVCxDQUFBOztBQUFBLEVBS0EsUUFBQSxDQUFVLGtCQUFWLEVBQTZCLFNBQUEsR0FBQTtXQUN6QixFQUFBLENBQUksb0JBQUosRUFBeUIsU0FBQSxHQUFBO0FBQ3JCLFVBQUEsOEJBQUE7QUFBQSxNQUFBLEdBQUEsR0FBTSxPQUFPLENBQUMsS0FBUixDQUFpQixNQUFqQixDQUFOLENBQUE7QUFBQSxNQUlBLFlBQUEsR0FBZSxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWYsQ0FKZixDQUFBO0FBQUEsTUFLQSxNQUFBLENBQU8sWUFBWSxDQUFDLE1BQXBCLENBQTJCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFwQyxDQUEyQyxDQUEzQyxDQUxBLENBQUE7QUFBQSxNQU1BLFdBQUEsR0FBYyxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FObEMsQ0FBQTtBQUFBLE1BT0EsTUFBQSxDQUFPLFdBQVcsQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsUUFBdEMsQ0FQQSxDQUFBO0FBQUEsTUFRQSxNQUFBLENBQU8sV0FBVyxDQUFDLFNBQW5CLENBQTZCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF0QyxDQUE2QyxDQUE3QyxDQVJBLENBQUE7QUFBQSxNQVNBLE1BQUEsQ0FBTyxXQUFXLENBQUMsVUFBbkIsQ0FBOEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXZDLENBQThDLENBQTlDLENBVEEsQ0FBQTthQVVBLE1BQUEsQ0FBTyxXQUFXLENBQUMsVUFBVyxDQUFBLENBQUEsQ0FBRSxDQUFDLFdBQTFCLENBQUEsQ0FBUCxDQUErQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBRCxFQVhoQztJQUFBLENBQXpCLEVBRHlCO0VBQUEsQ0FBN0IsQ0FMQSxDQUFBO0FBQUEiLCJmaWxlIjoiZ2xvYmFsLWluY3JlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5lc3ByaW1hID0gcmVxdWlyZSAnZXNwcmltYSdcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdnbG9iYWwgaW5jcmVtZW50JywgLT5cbiAgICBpdCAnYmVjb21lcyByZWFkL3dyaXRlJywgLT5cbiAgICAgICAgYXN0ID0gZXNwcmltYS5wYXJzZSBcIlwiXCJcbiAgICAgICAgYisrO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3RcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS5yZWZlcmVuY2VzWzBdLmlzUmVhZFdyaXRlKCkpLnRvLmJlLnRydWVcblxuIyB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOlxuIl19 \ No newline at end of file diff --git a/node_modules/escope/powered-test/implicit-global-reference.js b/node_modules/escope/powered-test/implicit-global-reference.js new file mode 100644 index 000000000..b6cf989d9 --- /dev/null +++ b/node_modules/escope/powered-test/implicit-global-reference.js @@ -0,0 +1,113 @@ +(function() { + 'use strict'; + var escope, esprima, expect; + + expect = require('chai').expect; + + escope = require('..'); + + esprima = require('esprima'); + + describe('implicit global reference', function() { + it('assignments global scope', function() { + var ast, scopes; + ast = esprima.parse("var x = 20;\nx = 300;"); + scopes = escope.analyze(ast).scopes; + expect(scopes.map(function(scope) { + return scope.variables.map(function(variable) { + return variable.defs.map(function(def) { + return def.type; + }); + }); + })).to.be.eql([[['Variable']]]); + return expect(scopes[0].implicit.variables.map(function(variable) { + return variable.name; + })).to.be.eql([]); + }); + it('assignments global scope without definition', function() { + var ast, scopes; + ast = esprima.parse("x = 300;\nx = 300;"); + scopes = escope.analyze(ast).scopes; + expect(scopes.map(function(scope) { + return scope.variables.map(function(variable) { + return variable.defs.map(function(def) { + return def.type; + }); + }); + })).to.be.eql([[]]); + return expect(scopes[0].implicit.variables.map(function(variable) { + return variable.name; + })).to.be.eql(['x']); + }); + it('assignments global scope without definition eval', function() { + var ast, scopes; + ast = esprima.parse("function inner() {\n eval(str);\n x = 300;\n}"); + scopes = escope.analyze(ast).scopes; + expect(scopes.map(function(scope) { + return scope.variables.map(function(variable) { + return variable.defs.map(function(def) { + return def.type; + }); + }); + })).to.be.eql([[['FunctionName']], [[]]]); + return expect(scopes[0].implicit.variables.map(function(variable) { + return variable.name; + })).to.be.eql([]); + }); + it('assignment leaks', function() { + var ast, scopes; + ast = esprima.parse("function outer() {\n x = 20;\n}"); + scopes = escope.analyze(ast).scopes; + expect(scopes.map(function(scope) { + return scope.variables.map(function(variable) { + return variable.name; + }); + })).to.be.eql([['outer'], ['arguments']]); + return expect(scopes[0].implicit.variables.map(function(variable) { + return variable.name; + })).to.be.eql(['x']); + }); + it('assignment doesn\'t leak', function() { + var ast, scopes; + ast = esprima.parse("function outer() {\n function inner() {\n x = 20;\n }\n var x;\n}"); + scopes = escope.analyze(ast).scopes; + expect(scopes.map(function(scope) { + return scope.variables.map(function(variable) { + return variable.name; + }); + })).to.be.eql([['outer'], ['arguments', 'inner', 'x'], ['arguments']]); + return expect(scopes[0].implicit.variables.map(function(variable) { + return variable.name; + })).to.be.eql([]); + }); + it('for-in-statement leaks', function() { + var ast, scopes; + ast = esprima.parse("function outer() {\n for (x in y) { }\n}"); + scopes = escope.analyze(ast).scopes; + expect(scopes.map(function(scope) { + return scope.variables.map(function(variable) { + return variable.name; + }); + })).to.be.eql([['outer'], ['arguments']]); + return expect(scopes[0].implicit.variables.map(function(variable) { + return variable.name; + })).to.be.eql(['x']); + }); + return it('for-in-statement doesn\'t leaks', function() { + var ast, scopes; + ast = esprima.parse("function outer() {\n function inner() {\n for (x in y) { }\n }\n var x;\n}"); + scopes = escope.analyze(ast).scopes; + expect(scopes.map(function(scope) { + return scope.variables.map(function(variable) { + return variable.name; + }); + })).to.be.eql([['outer'], ['arguments', 'inner', 'x'], ['arguments']]); + return expect(scopes[0].implicit.variables.map(function(variable) { + return variable.name; + })).to.be.eql([]); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImltcGxpY2l0LWdsb2JhbC1yZWZlcmVuY2UuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNCQztBQUFBLEVBQUEsWUFBQSxDQUFBO0FBQUEsTUFBQSx1QkFBQTs7QUFBQSxFQUVELE1BQUEsR0FBUyxPQUFBLENBQVMsTUFBVCxDQUFlLENBQUMsTUFGeEIsQ0FBQTs7QUFBQSxFQUdELE1BQUEsR0FBUyxPQUFBLENBQVMsSUFBVCxDQUhSLENBQUE7O0FBQUEsRUFJRCxPQUFBLEdBQVUsT0FBQSxDQUFTLFNBQVQsQ0FKVCxDQUFBOztBQUFBLEVBTUQsUUFBQSxDQUFVLDJCQUFWLEVBQXNDLFNBQUEsR0FBQTtBQUNsQyxJQUFBLEVBQUEsQ0FBSSwwQkFBSixFQUErQixTQUFBLEdBQUE7QUFDM0IsVUFBQSxXQUFBO0FBQUEsTUFBQSxHQUFBLEdBQU0sT0FBTyxDQUFDLEtBQVIsQ0FBaUIsdUJBQWpCLENBQU4sQ0FBQTtBQUFBLE1BS0EsTUFBQSxHQUFTLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixDQUFtQixDQUFDLE1BTDdCLENBQUE7QUFBQSxNQU9BLE1BQUEsQ0FBTyxNQUFNLENBQUMsR0FBUCxDQUFXLFNBQUMsS0FBRCxHQUFBO2VBQ2QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFoQixDQUFvQixTQUFDLFFBQUQsR0FBQTtpQkFDaEIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFkLENBQWtCLFNBQUMsR0FBRCxHQUFBO21CQUFTLEdBQUcsQ0FBQyxLQUFiO1VBQUEsQ0FBbEIsRUFEZ0I7UUFBQSxDQUFwQixFQURjO01BQUEsQ0FBWCxDQUFQLENBRStDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUZ0RCxDQUdJLENBQ0ksQ0FDSSxDQUNLLFVBREwsQ0FESixDQURKLENBSEosQ0FQQSxDQUFBO2FBbUJBLE1BQUEsQ0FBTyxNQUFPLENBQUEsQ0FBQSxDQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUE3QixDQUFpQyxTQUFDLFFBQUQs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Q0FBQyxLQUFSLENBQWlCLDRGQUFqQixDQUFOLENBQUE7QUFBQSxNQVNBLE1BQUEsR0FBUyxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWYsQ0FBbUIsQ0FBQyxNQVQ3QixDQUFBO0FBQUEsTUFXQSxNQUFBLENBQU8sTUFBTSxDQUFDLEdBQVAsQ0FBVyxTQUFDLEtBQUQsR0FBQTtlQUNkLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBaEIsQ0FBb0IsU0FBQyxRQUFELEdBQUE7aUJBQWMsUUFBUSxDQUFDLEtBQXZCO1FBQUEsQ0FBcEIsRUFEYztNQUFBLENBQVgsQ0FBUCxDQUNzRCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FEN0QsQ0FFSSxDQUNJLENBQ0ssT0FETCxDQURKLEVBSUksQ0FDSyxXQURMLEVBRUssT0FGTCxFQUdLLEdBSEwsQ0FKSixFQVNJLENBQ0ssV0FETCxDQVRKLENBRkosQ0FYQSxDQUFBO2FBNEJBLE1BQUEsQ0FBTyxNQUFPLENBQUEsQ0FBQSxDQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUE3QixDQUFpQyxTQUFDLFFBQUQsR0FBQTtlQUFjLFFBQVEsQ0FBQyxLQUF2QjtNQUFBLENBQWpDLENBQVAsQ0FBcUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQTVFLENBQWdGLEVBQWhGLEVBN0JrQztJQUFBLENBQXRDLEVBaEtrQztFQUFBLENBQXRDLENBTkMsQ0FBQTtBQUFBIiwiZmlsZSI6ImltcGxpY2l0LWdsb2JhbC1yZWZlcmVuY2UuanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8iLCJzb3VyY2VzQ29udGVudCI6WyIjIENvcHlyaWdodCAoQykgMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4jXG4jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4jICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiNcbiMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4jIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG4ndXNlIHN0cmljdCdcblxuZXhwZWN0ID0gcmVxdWlyZSgnY2hhaScpLmV4cGVjdFxuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5lc3ByaW1hID0gcmVxdWlyZSAnZXNwcmltYSdcblxuZGVzY3JpYmUgJ2ltcGxpY2l0IGdsb2JhbCByZWZlcmVuY2UnLCAtPlxuICAgIGl0ICdhc3NpZ25tZW50cyBnbG9iYWwgc2NvcGUnLCAtPlxuICAgICAgICBhc3QgPSBlc3ByaW1hLnBhcnNlIFwiXCJcIlxuICAgICAgICB2YXIgeCA9IDIwO1xuICAgICAgICB4ID0gMzAwO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZXMgPSBlc2NvcGUuYW5hbHl6ZShhc3QpLnNjb3Blc1xuXG4gICAgICAgIGV4cGVjdChzY29wZXMubWFwKChzY29wZSkgLT5cbiAgICAgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSAtPlxuICAgICAgICAgICAgICAgIHZhcmlhYmxlLmRlZnMubWFwKChkZWYpIC0+IGRlZi50eXBlKSkpKS50by5iZS5lcWwoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAnVmFyaWFibGUnXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICBdXG4gICAgICAgIClcblxuICAgICAgICBleHBlY3Qoc2NvcGVzWzBdLmltcGxpY2l0LnZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSAtPiB2YXJpYWJsZS5uYW1lKSkudG8uYmUuZXFsKFtdKVxuXG4gICAgaXQgJ2Fzc2lnbm1lbnRzIGdsb2JhbCBzY29wZSB3aXRob3V0IGRlZmluaXRpb24nLCAtPlxuICAgICAgICBhc3QgPSBlc3ByaW1hLnBhcnNlIFwiXCJcIlxuICAgICAgICB4ID0gMzAwO1xuICAgICAgICB4ID0gMzAwO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZXMgPSBlc2NvcGUuYW5hbHl6ZShhc3QpLnNjb3Blc1xuXG4gICAgICAgIGV4cGVjdChzY29wZXMubWFwKChzY29wZSkgLT5cbiAgICAgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSAtPlxuICAgICAgICAgICAgICAgIHZhcmlhYmxlLmRlZnMubWFwKChkZWYpIC0+IGRlZi50eXBlKSkpKS50by5iZS5lcWwoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF1cbiAgICAgICAgKVxuXG4gICAgICAgIGV4cGVjdChzY29wZXNbMF0uaW1wbGljaXQudmFyaWFibGVzLm1hcCgodmFyaWFibGUpIC0+IHZhcmlhYmxlLm5hbWUpKS50by5iZS5lcWwoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ3gnXG4gICAgICAgICAgICBdXG4gICAgICAgIClcblxuICAgIGl0ICdhc3NpZ25tZW50cyBnbG9iYWwgc2NvcGUgd2l0aG91dCBkZWZpbml0aW9uIGV2YWwnLCAtPlxuICAgICAgICBhc3QgPSBlc3ByaW1hLnBhcnNlIFwiXCJcIlxuICAgICAgICBmdW5jdGlvbiBpbm5lcigpIHtcbiAgICAgICAgICAgIGV2YWwoc3RyKTtcbiAgICAgICAgICAgIHggPSAzMDA7XG4gICAgICAgIH1cbiAgICAgICAgXCJcIlwiXG5cbiAgICAgICAgc2NvcGVzID0gZXNjb3BlLmFuYWx5emUoYXN0KS5zY29wZXNcblxuICAgICAgICBleHBlY3Qoc2NvcGVzLm1hcCgoc2NvcGUpIC0+XG4gICAgICAgICAgICBzY29wZS52YXJpYWJsZXMubWFwKCh2YXJpYWJsZSkgLT5cbiAgICAgICAgICAgICAgICB2YXJpYWJsZS5kZWZzLm1hcCgoZGVmKSAtPiBkZWYudHlwZSkpKSkudG8uYmUuZXFsKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0Z1bmN0aW9uTmFtZSdcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF1cbiAgICAgICAgKVxuXG4gICAgICAgIGV4cGVjdChzY29wZXNbMF0uaW1wbGljaXQudmFyaWFibGVzLm1hcCgodmFyaWFibGUpIC0+IHZhcmlhYmxlLm5hbWUpKS50by5iZS5lcWwoW10pXG5cbiAgICBpdCAnYXNzaWdubWVudCBsZWFrcycsIC0+XG4gICAgICAgIGFzdCA9IGVzcHJpbWEucGFyc2UgXCJcIlwiXG4gICAgICAgIGZ1bmN0aW9uIG91dGVyKCkge1xuICAgICAgICAgICAgeCA9IDIwO1xuICAgICAgICB9XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlcyA9IGVzY29wZS5hbmFseXplKGFzdCkuc2NvcGVzXG5cbiAgICAgICAgZXhwZWN0KHNjb3Blcy5tYXAoKHNjb3BlKSAtPlxuICAgICAgICAgICAgc2NvcGUudmFyaWFibGVzLm1hcCgodmFyaWFibGUpIC0+IHZhcmlhYmxlLm5hbWUpKSkudG8uYmUuZXFsKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ291dGVyJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdhcmd1bWVudHMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXVxuICAgICAgICApXG5cbiAgICAgICAgZXhwZWN0KHNjb3Blc1swXS5pbXBsaWNpdC52YXJpYWJsZXMubWFwKCh2YXJpYWJsZSkgLT4gdmFyaWFibGUubmFtZSkpLnRvLmJlLmVxbChcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAneCdcbiAgICAgICAgICAgIF1cbiAgICAgICAgKVxuXG4gICAgaXQgJ2Fzc2lnbm1lbnQgZG9lc25cXCd0IGxlYWsnLCAtPlxuICAgICAgICBhc3QgPSBlc3ByaW1hLnBhcnNlIFwiXCJcIlxuICAgICAgICBmdW5jdGlvbiBvdXRlcigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGlubmVyKCkge1xuICAgICAgICAgICAgICAgIHggPSAyMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB4O1xuICAgICAgICB9XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlcyA9IGVzY29wZS5hbmFseXplKGFzdCkuc2NvcGVzXG5cbiAgICAgICAgZXhwZWN0KHNjb3Blcy5tYXAoKHNjb3BlKSAtPlxuICAgICAgICAgICAgc2NvcGUudmFyaWFibGVzLm1hcCgodmFyaWFibGUpIC0+IHZhcmlhYmxlLm5hbWUpKSkudG8uYmUuZXFsKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ291dGVyJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdhcmd1bWVudHMnXG4gICAgICAgICAgICAgICAgICAgICdpbm5lcidcbiAgICAgICAgICAgICAgICAgICAgJ3gnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ2FyZ3VtZW50cydcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICBdXG4gICAgICAgIClcblxuICAgICAgICBleHBlY3Qoc2NvcGVzWzBdLmltcGxpY2l0LnZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSAtPiB2YXJpYWJsZS5uYW1lKSkudG8uYmUuZXFsKFtdKVxuXG5cbiAgICBpdCAnZm9yLWluLXN0YXRlbWVudCBsZWFrcycsIC0+XG4gICAgICAgIGFzdCA9IGVzcHJpbWEucGFyc2UgXCJcIlwiXG4gICAgICAgIGZ1bmN0aW9uIG91dGVyKCkge1xuICAgICAgICAgICAgZm9yICh4IGluIHkpIHsgfVxuICAgICAgICB9XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlcyA9IGVzY29wZS5hbmFseXplKGFzdCkuc2NvcGVzXG5cbiAgICAgICAgZXhwZWN0KHNjb3Blcy5tYXAoKHNjb3BlKSAtPlxuICAgICAgICAgICAgc2NvcGUudmFyaWFibGVzLm1hcCgodmFyaWFibGUpIC0+IHZhcmlhYmxlLm5hbWUpKSkudG8uYmUuZXFsKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ291dGVyJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdhcmd1bWVudHMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXVxuICAgICAgICApXG5cbiAgICAgICAgZXhwZWN0KHNjb3Blc1swXS5pbXBsaWNpdC52YXJpYWJsZXMubWFwKCh2YXJpYWJsZSkgLT4gdmFyaWFibGUubmFtZSkpLnRvLmJlLmVxbChcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAneCdcbiAgICAgICAgICAgIF1cbiAgICAgICAgKVxuXG4gICAgaXQgJ2Zvci1pbi1zdGF0ZW1lbnQgZG9lc25cXCd0IGxlYWtzJywgLT5cbiAgICAgICAgYXN0ID0gZXNwcmltYS5wYXJzZSBcIlwiXCJcbiAgICAgICAgZnVuY3Rpb24gb3V0ZXIoKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBpbm5lcigpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHggaW4geSkgeyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgeDtcbiAgICAgICAgfVxuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZXMgPSBlc2NvcGUuYW5hbHl6ZShhc3QpLnNjb3Blc1xuXG4gICAgICAgIGV4cGVjdChzY29wZXMubWFwKChzY29wZSkgLT5cbiAgICAgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSAtPiB2YXJpYWJsZS5uYW1lKSkpLnRvLmJlLmVxbChcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdvdXRlcidcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnYXJndW1lbnRzJ1xuICAgICAgICAgICAgICAgICAgICAnaW5uZXInXG4gICAgICAgICAgICAgICAgICAgICd4J1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdhcmd1bWVudHMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXVxuICAgICAgICApXG5cbiAgICAgICAgZXhwZWN0KHNjb3Blc1swXS5pbXBsaWNpdC52YXJpYWJsZXMubWFwKCh2YXJpYWJsZSkgLT4gdmFyaWFibGUubmFtZSkpLnRvLmJlLmVxbChbXSlcbiJdfQ== \ No newline at end of file diff --git a/node_modules/escope/powered-test/label-children.js b/node_modules/escope/powered-test/label-children.js new file mode 100644 index 000000000..710732f80 --- /dev/null +++ b/node_modules/escope/powered-test/label-children.js @@ -0,0 +1,34 @@ +(function() { + var escope, esprima, expect, harmony; + + expect = require('chai').expect; + + esprima = require('esprima'); + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('label', function() { + return it('should not create variables', function() { + var ast, globalScope, scope, scopeManager; + ast = esprima.parse("function bar() { q: for(;;) { break q; } }"); + scopeManager = escope.analyze(ast); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(1); + expect(globalScope.variables[0].name).to.be.equal('bar'); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.isArgumentsMaterialized()).to.be["false"]; + return expect(scope.references).to.have.length(0); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxhYmVsLWNoaWxkcmVuLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QkE7QUFBQSxNQUFBLGdDQUFBOztBQUFBLEVBQUEsTUFBQSxHQUFTLE9BQUEsQ0FBUyxNQUFULENBQWUsQ0FBQyxNQUF6QixDQUFBOztBQUFBLEVBQ0EsT0FBQSxHQUFVLE9BQUEsQ0FBUyxTQUFULENBRFYsQ0FBQTs7QUFBQSxFQUVBLE9BQUEsR0FBVSxPQUFBLENBQVMsd0JBQVQsQ0FGVixDQUFBOztBQUFBLEVBR0EsTUFBQSxHQUFTLE9BQUEsQ0FBUyxJQUFULENBSFQsQ0FBQTs7QUFBQSxFQUtBLFFBQUEsQ0FBVSxPQUFWLEVBQWtCLFNBQUEsR0FBQTtXQUNkLEVBQUEsQ0FBSSw2QkFBSixFQUFrQyxTQUFBLEdBQUE7QUFDOUIsVUFBQSxxQ0FBQTtBQUFBLE1BQUEsR0FBQSxHQUFNLE9BQU8sQ0FBQyxLQUFSLENBQWlCLDRDQUFqQixDQUFOLENBQUE7QUFBQSxNQUlBLFlBQUEsR0FBZSxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWYsQ0FKZixDQUFBO0FBQUEsTUFLQSxNQUFBLENBQU8sWUFBWSxDQUFDLE1BQXBCLENBQTJCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFwQyxDQUEyQyxDQUEzQyxDQUxBLENBQUE7QUFBQSxNQU1BLFdBQUEsR0FBYyxZQUFZLENBQUMsTUFBTyxDQUFBLENBQUEsQ0FObEMsQ0FBQTtBQUFBLE1BT0EsTUFBQSxDQUFPLFdBQVcsQ0FBQyxJQUFuQixDQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBL0IsQ0FBc0MsUUFBdEMsQ0FQQSxDQUFBO0FBQUEsTUFRQSxNQUFBLENBQU8sV0FBVyxDQUFDLFNBQW5CLENBQTZCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUF0QyxDQUE2QyxDQUE3QyxDQVJBLENBQUE7QUFBQSxNQVNBLE1BQUEsQ0FBTyxXQUFXLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQWhDLENBQXFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUE1QyxDQUFtRCxLQUFuRCxDQVRBLENBQUE7QUFBQSxNQVVBLE1BQUEsQ0FBTyxXQUFXLENBQUMsVUFBbkIsQ0FBOEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXZDLENBQThDLENBQTlDLENBVkEsQ0FBQTtBQUFBLE1BWUEsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVo1QixDQUFBO0FBQUEsTUFhQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFVBQWhDLENBYkEsQ0FBQTtBQUFBLE1BY0EsTUFBQSxDQUFPLEtBQUssQ0FBQyxTQUFiLENBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFoQyxDQUF1QyxDQUF2QyxDQWRBLENBQUE7QUFBQSxNQWVBLE1BQUEsQ0FBTyxLQUFLLENBQUMsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLElBQTFCLENBQStCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUF0QyxDQUE2QyxXQUE3QyxDQWZBLENBQUE7QUFBQSxNQWdCQSxNQUFBLENBQU8sS0FBSyxDQUFDLHVCQUFOLENBQUEsQ0FBUCxDQUF1QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBRCxDQWhCN0MsQ0FBQTthQWlCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLEVBbEI4QjtJQUFBLENBQWxDLEVBRGM7RUFBQSxDQUFsQixDQUxBLENBQUE7QUFBQSIsImZpbGUiOiJsYWJlbC1jaGlsZHJlbi5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5lc3ByaW1hID0gcmVxdWlyZSAnZXNwcmltYSdcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdsYWJlbCcsIC0+XG4gICAgaXQgJ3Nob3VsZCBub3QgY3JlYXRlIHZhcmlhYmxlcycsIC0+XG4gICAgICAgIGFzdCA9IGVzcHJpbWEucGFyc2UgXCJcIlwiXG4gICAgICAgIGZ1bmN0aW9uIGJhcigpIHsgcTogZm9yKDs7KSB7IGJyZWFrIHE7IH0gfVxuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3RcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2JhcidcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS5pc0FyZ3VtZW50c01hdGVyaWFsaXplZCgpKS50by5iZS5mYWxzZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4jIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6XG4iXX0= \ No newline at end of file diff --git a/node_modules/escope/powered-test/label.js b/node_modules/escope/powered-test/label.js new file mode 100644 index 000000000..a54dcd9d3 --- /dev/null +++ b/node_modules/escope/powered-test/label.js @@ -0,0 +1,47 @@ +(function() { + var escope, esprima, expect, harmony; + + expect = require('chai').expect; + + esprima = require('esprima'); + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('label', function() { + it('should not create variables', function() { + var ast, globalScope, scope, scopeManager; + ast = esprima.parse("function bar() { q: for(;;) { break q; } }"); + scopeManager = escope.analyze(ast); + expect(scopeManager.scopes).to.have.length(2); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(1); + expect(globalScope.variables[0].name).to.be.equal('bar'); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.isArgumentsMaterialized()).to.be["false"]; + return expect(scope.references).to.have.length(0); + }); + return it('should count child node references', function() { + var ast, globalScope, scopeManager; + ast = esprima.parse("var foo = 5;\n\nlabel: while (true) {\n console.log(foo);\n break;\n}"); + scopeManager = escope.analyze(ast); + expect(scopeManager.scopes).to.have.length(1); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(1); + expect(globalScope.variables[0].name).to.be.equal('foo'); + expect(globalScope.through.length).to.be.equal(3); + expect(globalScope.through[2].identifier.name).to.be.equal('foo'); + return expect(globalScope.through[2].isRead()).to.be["true"]; + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,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LSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5lc3ByaW1hID0gcmVxdWlyZSAnZXNwcmltYSdcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdsYWJlbCcsIC0+XG4gICAgaXQgJ3Nob3VsZCBub3QgY3JlYXRlIHZhcmlhYmxlcycsIC0+XG4gICAgICAgIGFzdCA9IGVzcHJpbWEucGFyc2UgXCJcIlwiXG4gICAgICAgIGZ1bmN0aW9uIGJhcigpIHsgcTogZm9yKDs7KSB7IGJyZWFrIHE7IH0gfVxuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3RcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDJcbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2JhcidcbiAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICdhcmd1bWVudHMnXG4gICAgICAgIGV4cGVjdChzY29wZS5pc0FyZ3VtZW50c01hdGVyaWFsaXplZCgpKS50by5iZS5mYWxzZVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgaXQgJ3Nob3VsZCBjb3VudCBjaGlsZCBub2RlIHJlZmVyZW5jZXMnLCAtPlxuICAgICAgICAgICAgYXN0ID0gZXNwcmltYS5wYXJzZSBcIlwiXCJcbiAgICAgICAgICAgIHZhciBmb28gPSA1O1xuXG4gICAgICAgICAgICBsYWJlbDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZm9vKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcIlwiXCJcblxuICAgICAgICAgICAgc2NvcGVNYW5hZ2VyID0gZXNjb3BlLmFuYWx5emUgYXN0XG4gICAgICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2ZvbydcbiAgICAgICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50aHJvdWdoLmxlbmd0aCkudG8uYmUuZXF1YWwgM1xuICAgICAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnRocm91Z2hbMl0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCAnZm9vJ1xuICAgICAgICAgICAgZXhwZWN0KGdsb2JhbFNjb3BlLnRocm91Z2hbMl0uaXNSZWFkKCkpLnRvLmJlLnRydWVcblxuIyB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOlxuIl19 \ No newline at end of file diff --git a/node_modules/escope/powered-test/nodejs-scope.js b/node_modules/escope/powered-test/nodejs-scope.js new file mode 100644 index 000000000..24fd61c2c --- /dev/null +++ b/node_modules/escope/powered-test/nodejs-scope.js @@ -0,0 +1,65 @@ +(function() { + var escope, expect, harmony; + + expect = require('chai').expect; + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('nodejsScope option', function() { + it('creates a function scope following the global scope immediately', function() { + var ast, scope, scopeManager; + ast = harmony.parse("'use strict';\nvar hello = 20;"); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + nodejsScope: true + }); + expect(scopeManager.scopes).to.have.length(2); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["true"]; + expect(scope.variables).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('arguments'); + return expect(scope.variables[1].name).to.be.equal('hello'); + }); + return it('creates a function scope following the global scope immediately and creates module scope', function() { + var ast, scope, scopeManager; + ast = harmony.parse("import {x as v} from \"mod\";", { + sourceType: 'module' + }); + scopeManager = escope.analyze(ast, { + ecmaVersion: 6, + nodejsScope: true, + sourceType: 'module' + }); + expect(scopeManager.scopes).to.have.length(3); + scope = scopeManager.scopes[0]; + expect(scope.type).to.be.equal('global'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.block.type).to.be.equal('Program'); + expect(scope.isStrict).to.be["false"]; + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('module'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('v'); + expect(scope.variables[0].defs[0].type).to.be.equal('ImportBinding'); + return expect(scope.references).to.have.length(0); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVqcy1zY29wZS5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJBO0FBQUEsTUFBQSx1QkFBQTs7QUFBQSxFQUFBLE1BQUEsR0FBUyxPQUFBLENBQVMsTUFBVCxDQUFlLENBQUMsTUFBekIsQ0FBQTs7QUFBQSxFQUNBLE9BQUEsR0FBVSxPQUFBLENBQVMsd0JBQVQsQ0FEVixDQUFBOztBQUFBLEVBRUEsTUFBQSxHQUFTLE9BQUEsQ0FBUyxJQUFULENBRlQsQ0FBQTs7QUFBQSxFQUlBLFFBQUEsQ0FBVSxvQkFBVixFQUErQixTQUFBLEdBQUE7QUFDM0IsSUFBQSxFQUFBLENBQUksaUVBQUosRUFBc0UsU0FBQSxHQUFBO0FBQ2xFLFVBQUEsd0JBQUE7QUFBQSxNQUFBLEdBQUEsR0FBTSxPQUFPLENBQUMsS0FBUixDQUFpQixnQ0FBakIsQ0FBTixDQUFBO0FBQUEsTUFLQSxZQUFBLEdBQWUsTUFBTSxDQUFDLE9BQVAsQ0FBZSxHQUFmLEVBQW9CO0FBQUEsUUFBQSxXQUFBLEVBQWEsQ0FBYjtBQUFBLFFBQWdCLFdBQUEsRUFBYSxJQUE3QjtPQUFwQixDQUxmLENBQUE7QUFBQSxNQU1BLE1BQUEsQ0FBTyxZQUFZLENBQUMsTUFBcEIsQ0FBMkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQXBDLENBQTJDLENBQTNDLENBTkEsQ0FBQTtBQUFBLE1BUUEsS0FBQSxHQUFRLFlBQVksQ0FBQyxNQUFPLENBQUEsQ0FBQSxDQVI1QixDQUFBO0FBQUEsTUFTQSxNQUFBLENBQU8sS0FBSyxDQUFDLElBQWIsQ0FBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQXpCLENBQWdDLFFBQWhDLENBVEEsQ0FBQTtBQUFBLE1BVUEsTUFBQSxDQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBbkIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQS9CLENBQXNDLFNBQXRDLENBVkEsQ0FBQTtBQUFBLE1BV0EsTUFBQSxDQUFPLEtBQUssQ0FB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QUUsQ0FBQyxLQUE5QyxDQUFxRCxlQUFyRCxDQXhCQSxDQUFBO2FBeUJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBYixDQUF3QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBakMsQ0FBd0MsQ0FBeEMsRUExQjJGO0lBQUEsQ0FBL0YsRUF4QjJCO0VBQUEsQ0FBL0IsQ0FKQSxDQUFBO0FBQUEiLCJmaWxlIjoibm9kZWpzLXNjb3BlLmpzIiwic291cmNlUm9vdCI6Ii9zb3VyY2UvIiwic291cmNlc0NvbnRlbnQiOlsiIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbiMgIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4jXG4jICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuI1xuIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuIyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4jXG4jICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiMgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4jICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4jICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiMgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4jICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiMgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbmV4cGVjdCA9IHJlcXVpcmUoJ2NoYWknKS5leHBlY3Rcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdub2RlanNTY29wZSBvcHRpb24nLCAtPlxuICAgIGl0ICdjcmVhdGVzIGEgZnVuY3Rpb24gc2NvcGUgZm9sbG93aW5nIHRoZSBnbG9iYWwgc2NvcGUgaW1tZWRpYXRlbHknLCAtPlxuICAgICAgICBhc3QgPSBoYXJtb255LnBhcnNlIFwiXCJcIlxuICAgICAgICAndXNlIHN0cmljdCc7XG4gICAgICAgIHZhciBoZWxsbyA9IDIwO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2LCBub2RlanNTY29wZTogeWVzXG4gICAgICAgIGV4cGVjdChzY29wZU1hbmFnZXIuc2NvcGVzKS50by5oYXZlLmxlbmd0aCAyXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuYmxvY2sudHlwZSkudG8uYmUuZXF1YWwgJ1Byb2dyYW0nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUuZmFsc2VcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMFxuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1sxXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2Z1bmN0aW9uJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuYmxvY2sudHlwZSkudG8uYmUuZXF1YWwgJ1Byb2dyYW0nXG4gICAgICAgIGV4cGVjdChzY29wZS5pc1N0cmljdCkudG8uYmUudHJ1ZVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAyXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwgJ2FyZ3VtZW50cydcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1sxXS5uYW1lKS50by5iZS5lcXVhbCAnaGVsbG8nXG5cbiAgICBpdCAnY3JlYXRlcyBhIGZ1bmN0aW9uIHNjb3BlIGZvbGxvd2luZyB0aGUgZ2xvYmFsIHNjb3BlIGltbWVkaWF0ZWx5IGFuZCBjcmVhdGVzIG1vZHVsZSBzY29wZScsIC0+XG4gICAgICAgIGFzdCA9IGhhcm1vbnkucGFyc2UgXCJcIlwiXG4gICAgICAgIGltcG9ydCB7eCBhcyB2fSBmcm9tIFwibW9kXCI7XG4gICAgICAgIFwiXCJcIiwgc291cmNlVHlwZTogJ21vZHVsZSdcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3QsIGVjbWFWZXJzaW9uOiA2LCBub2RlanNTY29wZTogeWVzLCBzb3VyY2VUeXBlOiAnbW9kdWxlJ1xuICAgICAgICBleHBlY3Qoc2NvcGVNYW5hZ2VyLnNjb3BlcykudG8uaGF2ZS5sZW5ndGggM1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1swXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ2dsb2JhbCdcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdQcm9ncmFtJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDBcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMV1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICdmdW5jdGlvbidcbiAgICAgICAgZXhwZWN0KHNjb3BlLmJsb2NrLnR5cGUpLnRvLmJlLmVxdWFsICdQcm9ncmFtJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNTdHJpY3QpLnRvLmJlLmZhbHNlXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuXG4gICAgICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLnNjb3Blc1syXVxuICAgICAgICBleHBlY3Qoc2NvcGUudHlwZSkudG8uYmUuZXF1YWwgJ21vZHVsZSdcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGggMVxuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLm5hbWUpLnRvLmJlLmVxdWFsICd2J1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzWzBdLmRlZnNbMF0udHlwZSkudG8uYmUuZXF1YWwgJ0ltcG9ydEJpbmRpbmcnXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cblxuXG4jIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6XG4iXX0= \ No newline at end of file diff --git a/node_modules/escope/powered-test/object-expression.js b/node_modules/escope/powered-test/object-expression.js new file mode 100644 index 000000000..3e845c7d7 --- /dev/null +++ b/node_modules/escope/powered-test/object-expression.js @@ -0,0 +1,56 @@ +(function() { + 'use strict'; + var escope, expect; + + expect = require('chai').expect; + + escope = require('..'); + + describe('object expression', function() { + return it('doesn\'t require property type', function() { + var ast, scope; + ast = { + type: 'Program', + body: [ + { + type: 'VariableDeclaration', + declarations: [ + { + type: 'VariableDeclarator', + id: { + type: 'Identifier', + name: 'a' + }, + init: { + type: 'ObjectExpression', + properties: [ + { + kind: 'init', + key: { + type: 'Identifier', + name: 'foo' + }, + value: { + type: 'Identifier', + name: 'a' + } + } + ] + } + } + ] + } + ] + }; + scope = escope.analyze(ast).scopes[0]; + expect(scope.variables).to.have.length(1); + expect(scope.references).to.have.length(2); + expect(scope.variables[0].name).to.be.equal('a'); + expect(scope.references[0].identifier.name).to.be.equal('a'); + return expect(scope.references[1].identifier.name).to.be.equal('a'); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9iamVjdC1leHByZXNzaW9uLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQztBQUFBLEVBQUEsWUFBQSxDQUFBO0FBQUEsTUFBQSxjQUFBOztBQUFBLEVBRUQsTUFBQSxHQUFTLE9BQUEsQ0FBUyxNQUFULENBQWUsQ0FBQyxNQUZ4QixDQUFBOztBQUFBLEVBR0QsTUFBQSxHQUFTLE9BQUEsQ0FBUyxJQUFULENBSFIsQ0FBQTs7QUFBQSxFQUtELFFBQUEsQ0FBVSxtQkFBVixFQUE4QixTQUFBLEdBQUE7V0FDMUIsRUFBQSxDQUFJLGdDQUFKLEVBQXFDLFNBQUEsR0FBQTtBQUlqQyxVQUFBLFVBQUE7QUFBQSxNQUFBLEdBQUEsR0FDSTtBQUFBLFFBQUEsSUFBQSxFQUFPLFNBQVA7QUFBQSxRQUNBLElBQUEsRUFBTTtVQUFDO0FBQUEsWUFDSCxJQUFBLEVBQU8scUJBREo7QUFBQSxZQUVILFlBQUEsRUFBYztjQUFDO0FBQUEsZ0JBQ1gsSUFBQSxFQUFPLG9CQURJO0FBQUEsZ0JBRVgsRUFBQSxFQUNJO0FBQUEsa0JBQUEsSUFBQSxFQUFPLFlBQVA7QUFBQSxrQkFDQSxJQUFBLEVBQU8sR0FEUDtpQkFITztBQUFBLGdCQUtYLElBQUEsRUFDSTtBQUFBLGtCQUFBLElBQUEsRUFBTyxrQkFBUDtBQUFBLGtCQUNBLFVBQUEsRUFBWTtvQkFBQztBQUFBLHNCQUNULElBQUEsRUFBTyxNQURFO0FBQUEsc0JBRVQsR0FBQSxFQUNJO0FBQUEsd0JBQUEsSUFBQSxFQUFPLFlBQVA7QUFBQSx3QkFDQSxJQUFBLEVBQU8sS0FEUDt1QkFISztBQUFBLHNCQUtULEtBQUEsRUFDSTtBQUFBLHdCQUFBLElBQUEsRUFBTyxZQUFQO0FBQUEsd0JBQ0EsSUFBQSxFQUFPLEdBRFA7dUJBTks7cUJBQUQ7bUJBRFo7aUJBTk87ZUFBRDthQUZYO1dBQUQ7U0FETjtPQURKLENBQUE7QUFBQSxNQXVCQSxLQUFBLEdBQVEsTUFBTSxDQUFDLE9BQVAsQ0FBZSxHQUFmLENBQW1CLENBQUMsTUFBTyxDQUFBLENBQUEsQ0F2Qm5DLENBQUE7QUFBQSxNQXdCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQWIsQ0FBdUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWhDLENBQXVDLENBQXZDLENBeEJBLENBQUE7QUFBQSxNQXlCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQWIsQ0FBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWpDLENBQXdDLENBQXhDLENBekJBLENBQUE7QUFBQSxNQTBCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFNBQVUsQ0FBQSxDQUFBLENBQUUsQ0FBQyxJQUExQixDQUErQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBdEMsQ0FBNkMsR0FBN0MsQ0ExQkEsQ0FBQTtBQUFBLE1BMkJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBVyxDQUFBLENBQUEsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxJQUF0QyxDQUEyQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBbEQsQ0FBeUQsR0FBekQsQ0EzQkEsQ0FBQTthQTRCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxVQUFVLENBQUMsSUFBdEMsQ0FBMkMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQWxELENBQXlELEdBQXpELEVBaENpQztJQUFBLENBQXJDLEVBRDBCO0VBQUEsQ0FBOUIsQ0FMQyxDQUFBO0FBQUEiLCJmaWxlIjoib2JqZWN0LWV4cHJlc3Npb24uanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8iLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuZXhwZWN0ID0gcmVxdWlyZSgnY2hhaScpLmV4cGVjdFxuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICdvYmplY3QgZXhwcmVzc2lvbicsIC0+XG4gICAgaXQgJ2RvZXNuXFwndCByZXF1aXJlIHByb3BlcnR5IHR5cGUnLCAtPlxuICAgICAgICAjIEhhcmRjb2RlZCBBU1QuICBFc3ByaW1hIGFkZHMgYW4gZXh0cmEgJ1Byb3BlcnR5J1xuICAgICAgICAjIGtleS92YWx1ZSB0byBPYmplY3RFeHByZXNzaW9ucywgc28gd2UncmUgbm90IHVzaW5nXG4gICAgICAgICMgaXQgcGFyc2UgYSBwcm9ncmFtIHN0cmluZy5cbiAgICAgICAgYXN0ID1cbiAgICAgICAgICAgIHR5cGU6ICdQcm9ncmFtJ1xuICAgICAgICAgICAgYm9keTogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmFyaWFibGVEZWNsYXJhdGlvbidcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFt7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdWYXJpYWJsZURlY2xhcmF0b3InXG4gICAgICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0lkZW50aWZpZXInXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYSdcbiAgICAgICAgICAgICAgICAgICAgaW5pdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPYmplY3RFeHByZXNzaW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAnaW5pdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdJZGVudGlmaWVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZm9vJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSWRlbnRpZmllcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2EnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XVxuXG4gICAgICAgIHNjb3BlID0gZXNjb3BlLmFuYWx5emUoYXN0KS5zY29wZXNbMF1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlcykudG8uaGF2ZS5sZW5ndGgoMSlcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoKDIpXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXNbMF0ubmFtZSkudG8uYmUuZXF1YWwoJ2EnKVxuICAgICAgICBleHBlY3Qoc2NvcGUucmVmZXJlbmNlc1swXS5pZGVudGlmaWVyLm5hbWUpLnRvLmJlLmVxdWFsKCdhJylcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMV0uaWRlbnRpZmllci5uYW1lKS50by5iZS5lcXVhbCgnYScpXG4iXX0= \ No newline at end of file diff --git a/node_modules/escope/powered-test/optimistic.js b/node_modules/escope/powered-test/optimistic.js new file mode 100644 index 000000000..5e93a0a83 --- /dev/null +++ b/node_modules/escope/powered-test/optimistic.js @@ -0,0 +1,40 @@ +(function() { + 'use strict'; + var escope, esprima, expect; + + expect = require('chai').expect; + + escope = require('..'); + + esprima = require('esprima'); + + describe('optimistic', function() { + it('direct call to eval', function() { + var ast, scopes; + ast = esprima.parse("function outer() {\n eval(str);\n var i = 20;\n function inner() {\n i;\n }\n}"); + scopes = escope.analyze(ast, { + optimistic: true + }).scopes; + return expect(scopes.map(function(scope) { + return scope.variables.map(function(variable) { + return variable.name; + }); + })).to.be.eql([['outer'], ['arguments', 'i', 'inner'], ['arguments']]); + }); + return it('with statement', function() { + var ast, scopes; + ast = esprima.parse("function outer() {\n eval(str);\n var i = 20;\n with (obj) {\n i;\n }\n}"); + scopes = escope.analyze(ast, { + optimistic: true + }).scopes; + return expect(scopes.map(function(scope) { + return scope.variables.map(function(variable) { + return variable.name; + }); + })).to.be.eql([['outer'], ['arguments', 'i'], []]); + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9wdGltaXN0aWMuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNCQztBQUFBLEVBQUEsWUFBQSxDQUFBO0FBQUEsTUFBQSx1QkFBQTs7QUFBQSxFQUVELE1BQUEsR0FBUyxPQUFBLENBQVMsTUFBVCxDQUFlLENBQUMsTUFGeEIsQ0FBQTs7QUFBQSxFQUdELE1BQUEsR0FBUyxPQUFBLENBQVMsSUFBVCxDQUhSLENBQUE7O0FBQUEsRUFJRCxPQUFBLEdBQVUsT0FBQSxDQUFTLFNBQVQsQ0FKVCxDQUFBOztBQUFBLEVBTUQsUUFBQSxDQUFVLFlBQVYsRUFBdUIsU0FBQSxHQUFBO0FBQ25CLElBQUEsRUFBQSxDQUFJLHFCQUFKLEVBQTBCLFNBQUEsR0FBQTtBQUN0QixVQUFBLFdBQUE7QUFBQSxNQUFBLEdBQUEsR0FBTSxPQUFPLENBQUMsS0FBUixDQUFpQixtR0FBakIsQ0FBTixDQUFBO0FBQUEsTUFVQSxNQUFBLEdBQVMsTUFBTSxDQUFDLE9BQVAsQ0FBZSxHQUFmLEVBQW9CO0FBQUEsUUFBQSxVQUFBLEVBQVksSUFBWjtPQUFwQixDQUFvQyxDQUFDLE1BVjlDLENBQUE7YUFZQSxNQUFBLENBQU8sTUFBTSxDQUFDLEdBQVAsQ0FBVyxTQUFDLEtBQUQsR0FBQTtlQUNkLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBaEIsQ0FBb0IsU0FBQyxRQUFELEdBQUE7aUJBQWMsUUFBUSxDQUFDLEtBQXZCO1FBQUEsQ0FBcEIsRUFEYztNQUFBLENBQVgsQ0FBUCxDQUNzRCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FEN0QsQ0FFSSxDQUNJLENBQ0ssT0FETCxDQURKLEVBSUksQ0FDSyxXQURMLEVBRUssR0FGTCxFQUdLLE9BSEwsQ0FKSixFQVNJLENBQ0ssV0FETCxDQVRKLENBRkosRUFic0I7SUFBQSxDQUExQixDQUFBLENBQUE7V0E4QkEsRUFBQSxDQUFJLGdCQUFKLEVBQXFCLFNBQUEsR0FBQTtBQUNqQixVQUFBLFdBQUE7QUFBQSxNQUFBLEdBQUEsR0FBTSxPQUFPLENBQUMsS0FBUixDQUFpQiw2RkFBakIsQ0FBTixDQUFBO0FBQUEsTUFVQSxNQUFBLEdBQVMsTUFBTSxDQUFDLE9BQVAsQ0FBZSxHQUFmLEVBQW9CO0FBQUEsUUFBQSxVQUFBLEVBQVksSUFBWjtPQUFwQixDQUFvQyxDQUFDLE1BVjlDLENBQUE7YUFZQSxNQUFBLENBQU8sTUFBTSxDQUFDLEdBQVAsQ0FBVyxTQUFDLEtBQUQsR0FBQTtlQUNkLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBaEIsQ0FBb0IsU0FBQyxRQUFELEdBQUE7aUJBQWMsUUFBUSxDQUFDLEtBQXZCO1FBQUEsQ0FBcEIsRUFEYztNQUFBLENBQVgsQ0FBUCxDQUNzRCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FEN0QsQ0FFSSxDQUNJLENBQ0ssT0FETCxDQURKLEVBSUksQ0FDSyxXQURMLEVBRUssR0FGTCxDQUpKLEVBUUksRUFSSixDQUZKLEVBYmlCO0lBQUEsQ0FBckIsRUEvQm1CO0VBQUEsQ0FBdkIsQ0FOQyxDQUFBO0FBQUEiLCJmaWxlIjoib3B0aW1pc3RpYy5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgQ29weXJpZ2h0IChDKSAyMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiNcbiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuI1xuIyAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbid1c2Ugc3RyaWN0J1xuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5lc2NvcGUgPSByZXF1aXJlICcuLidcbmVzcHJpbWEgPSByZXF1aXJlICdlc3ByaW1hJ1xuXG5kZXNjcmliZSAnb3B0aW1pc3RpYycsIC0+XG4gICAgaXQgJ2RpcmVjdCBjYWxsIHRvIGV2YWwnLCAtPlxuICAgICAgICBhc3QgPSBlc3ByaW1hLnBhcnNlIFwiXCJcIlxuICAgICAgICBmdW5jdGlvbiBvdXRlcigpIHtcbiAgICAgICAgICAgIGV2YWwoc3RyKTtcbiAgICAgICAgICAgIHZhciBpID0gMjA7XG4gICAgICAgICAgICBmdW5jdGlvbiBpbm5lcigpIHtcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFwiXCJcIlxuXG4gICAgICAgIHNjb3BlcyA9IGVzY29wZS5hbmFseXplKGFzdCwgb3B0aW1pc3RpYzogeWVzKS5zY29wZXNcblxuICAgICAgICBleHBlY3Qoc2NvcGVzLm1hcCgoc2NvcGUpIC0+XG4gICAgICAgICAgICBzY29wZS52YXJpYWJsZXMubWFwKCh2YXJpYWJsZSkgLT4gdmFyaWFibGUubmFtZSkpKS50by5iZS5lcWwoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnb3V0ZXInXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ2FyZ3VtZW50cydcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgICAgICdpbm5lcidcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnYXJndW1lbnRzJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF1cbiAgICAgICAgKVxuXG4gICAgaXQgJ3dpdGggc3RhdGVtZW50JywgLT5cbiAgICAgICAgYXN0ID0gZXNwcmltYS5wYXJzZSBcIlwiXCJcbiAgICAgICAgZnVuY3Rpb24gb3V0ZXIoKSB7XG4gICAgICAgICAgICBldmFsKHN0cik7XG4gICAgICAgICAgICB2YXIgaSA9IDIwO1xuICAgICAgICAgICAgd2l0aCAob2JqKSB7XG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZXMgPSBlc2NvcGUuYW5hbHl6ZShhc3QsIG9wdGltaXN0aWM6IHllcykuc2NvcGVzXG5cbiAgICAgICAgZXhwZWN0KHNjb3Blcy5tYXAoKHNjb3BlKSAtPlxuICAgICAgICAgICAgc2NvcGUudmFyaWFibGVzLm1hcCgodmFyaWFibGUpIC0+IHZhcmlhYmxlLm5hbWUpKSkudG8uYmUuZXFsKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ291dGVyJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdhcmd1bWVudHMnXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXVxuICAgICAgICApXG5cblxuIl19 \ No newline at end of file diff --git a/node_modules/escope/powered-test/with-scope.js b/node_modules/escope/powered-test/with-scope.js new file mode 100644 index 000000000..bb2c74569 --- /dev/null +++ b/node_modules/escope/powered-test/with-scope.js @@ -0,0 +1,40 @@ +(function() { + var escope, esprima, expect, harmony; + + expect = require('chai').expect; + + esprima = require('esprima'); + + harmony = require('../third_party/esprima'); + + escope = require('..'); + + describe('with', function() { + return it('creates scope', function() { + var ast, globalScope, scope, scopeManager; + ast = esprima.parse("(function () {\n with (obj) {\n testing;\n }\n}());"); + scopeManager = escope.analyze(ast); + expect(scopeManager.scopes).to.have.length(3); + globalScope = scopeManager.scopes[0]; + expect(globalScope.type).to.be.equal('global'); + expect(globalScope.variables).to.have.length(0); + expect(globalScope.references).to.have.length(0); + scope = scopeManager.scopes[1]; + expect(scope.type).to.be.equal('function'); + expect(scope.variables).to.have.length(1); + expect(scope.variables[0].name).to.be.equal('arguments'); + expect(scope.isArgumentsMaterialized()).to.be["false"]; + expect(scope.references).to.have.length(1); + expect(scope.references[0].resolved).to.be["null"]; + scope = scopeManager.scopes[2]; + expect(scope.type).to.be.equal('with'); + expect(scope.variables).to.have.length(0); + expect(scope.isArgumentsMaterialized()).to.be["true"]; + expect(scope.references).to.have.length(1); + return expect(scope.references[0].resolved).to.be["null"]; + }); + }); + +}).call(this); + +//# sourceMappingURL=data:application/json;base64,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QyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQWhDLENBQXVDLENBQXZDLENBekJBLENBQUE7QUFBQSxNQTBCQSxNQUFBLENBQU8sS0FBSyxDQUFDLHVCQUFOLENBQUEsQ0FBUCxDQUF1QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBRCxDQTFCN0MsQ0FBQTtBQUFBLE1BMkJBLE1BQUEsQ0FBTyxLQUFLLENBQUMsVUFBYixDQUF3QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBakMsQ0FBd0MsQ0FBeEMsQ0EzQkEsQ0FBQTthQTRCQSxNQUFBLENBQU8sS0FBSyxDQUFDLFVBQVcsQ0FBQSxDQUFBLENBQUUsQ0FBQyxRQUEzQixDQUFvQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBRCxFQTdCMUI7SUFBQSxDQUFwQixFQURhO0VBQUEsQ0FBakIsQ0FMQSxDQUFBO0FBQUEiLCJmaWxlIjoid2l0aC1zY29wZS5qcyIsInNvdXJjZVJvb3QiOiIvc291cmNlLyIsInNvdXJjZXNDb250ZW50IjpbIiMgLSotIGNvZGluZzogdXRmLTggLSotXG4jICBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuI1xuIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4jICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiNcbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuI1xuIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4jICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4jICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuIyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuIyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4jICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuIyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4jICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5leHBlY3QgPSByZXF1aXJlKCdjaGFpJykuZXhwZWN0XG5lc3ByaW1hID0gcmVxdWlyZSAnZXNwcmltYSdcbmhhcm1vbnkgPSByZXF1aXJlICcuLi90aGlyZF9wYXJ0eS9lc3ByaW1hJ1xuZXNjb3BlID0gcmVxdWlyZSAnLi4nXG5cbmRlc2NyaWJlICd3aXRoJywgLT5cbiAgICBpdCAnY3JlYXRlcyBzY29wZScsIC0+XG4gICAgICAgIGFzdCA9IGVzcHJpbWEucGFyc2UgXCJcIlwiXG4gICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aXRoIChvYmopIHtcbiAgICAgICAgICAgICAgICB0ZXN0aW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KCkpO1xuICAgICAgICBcIlwiXCJcblxuICAgICAgICBzY29wZU1hbmFnZXIgPSBlc2NvcGUuYW5hbHl6ZSBhc3RcbiAgICAgICAgZXhwZWN0KHNjb3BlTWFuYWdlci5zY29wZXMpLnRvLmhhdmUubGVuZ3RoIDNcbiAgICAgICAgZ2xvYmFsU2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzBdXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS50eXBlKS50by5iZS5lcXVhbCAnZ2xvYmFsJ1xuICAgICAgICBleHBlY3QoZ2xvYmFsU2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChnbG9iYWxTY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAwXG5cbiAgICAgICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuc2NvcGVzWzFdXG4gICAgICAgIGV4cGVjdChzY29wZS50eXBlKS50by5iZS5lcXVhbCAnZnVuY3Rpb24nXG4gICAgICAgIGV4cGVjdChzY29wZS52YXJpYWJsZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnZhcmlhYmxlc1swXS5uYW1lKS50by5iZS5lcXVhbCAnYXJndW1lbnRzJ1xuICAgICAgICBleHBlY3Qoc2NvcGUuaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQoKSkudG8uYmUuZmFsc2VcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXMpLnRvLmhhdmUubGVuZ3RoIDFcbiAgICAgICAgZXhwZWN0KHNjb3BlLnJlZmVyZW5jZXNbMF0ucmVzb2x2ZWQpLnRvLmJlLm51bGxcblxuICAgICAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5zY29wZXNbMl1cbiAgICAgICAgZXhwZWN0KHNjb3BlLnR5cGUpLnRvLmJlLmVxdWFsICd3aXRoJ1xuICAgICAgICBleHBlY3Qoc2NvcGUudmFyaWFibGVzKS50by5oYXZlLmxlbmd0aCAwXG4gICAgICAgIGV4cGVjdChzY29wZS5pc0FyZ3VtZW50c01hdGVyaWFsaXplZCgpKS50by5iZS50cnVlXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzKS50by5oYXZlLmxlbmd0aCAxXG4gICAgICAgIGV4cGVjdChzY29wZS5yZWZlcmVuY2VzWzBdLnJlc29sdmVkKS50by5iZS5udWxsXG5cbiMgdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDpcbiJdfQ== \ No newline at end of file diff --git a/node_modules/escope/src/definition.js b/node_modules/escope/src/definition.js new file mode 100644 index 000000000..faef9387c --- /dev/null +++ b/node_modules/escope/src/definition.js @@ -0,0 +1,78 @@ +/* + Copyright (C) 2015 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. +*/ + +import Variable from './variable'; + +/** + * @class Definition + */ +export default class Definition { + constructor(type, name, node, parent, index, kind) { + /** + * @member {String} Definition#type - type of the occurrence (e.g. "Parameter", "Variable", ...). + */ + this.type = type; + /** + * @member {esprima.Identifier} Definition#name - the identifier AST node of the occurrence. + */ + this.name = name; + /** + * @member {esprima.Node} Definition#node - the enclosing node of the identifier. + */ + this.node = node; + /** + * @member {esprima.Node?} Definition#parent - the enclosing statement node of the identifier. + */ + this.parent = parent; + /** + * @member {Number?} Definition#index - the index in the declaration statement. + */ + this.index = index; + /** + * @member {String?} Definition#kind - the kind of the declaration statement. + */ + this.kind = kind; + } +} + +/** + * @class ParameterDefinition + */ +class ParameterDefinition extends Definition { + constructor(name, node, index, rest) { + super(Variable.Parameter, name, node, null, index, null); + /** + * Whether the parameter definition is a part of a rest parameter. + * @member {boolean} ParameterDefinition#rest + */ + this.rest = rest; + } +} + +export { + ParameterDefinition, + Definition +} + +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/escope/src/index.js b/node_modules/escope/src/index.js new file mode 100644 index 000000000..a345e1c71 --- /dev/null +++ b/node_modules/escope/src/index.js @@ -0,0 +1,146 @@ +/* + Copyright (C) 2012-2014 Yusuke Suzuki + Copyright (C) 2013 Alex Seville + Copyright (C) 2014 Thiago de Arruda + + 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. +*/ + +/** + * Escope (escope) is an ECMAScript + * scope analyzer extracted from the esmangle project. + *

+ * escope finds lexical scopes in a source program, i.e. areas of that + * program where different occurrences of the same identifier refer to the same + * variable. With each scope the contained variables are collected, and each + * identifier reference in code is linked to its corresponding variable (if + * possible). + *

+ * escope works on a syntax tree of the parsed source code which has + * to adhere to the + * Mozilla Parser API. E.g. esprima is a parser + * that produces such syntax trees. + *

+ * The main interface is the {@link analyze} function. + * @module escope + */ + +/*jslint bitwise:true */ + +import assert from 'assert'; + +import ScopeManager from './scope-manager'; +import Referencer from './referencer'; +import Reference from './reference'; +import Variable from './variable'; +import Scope from './scope'; +import { version } from '../package.json'; + +function defaultOptions() { + return { + optimistic: false, + directive: false, + nodejsScope: false, + impliedStrict: false, + sourceType: 'script', // one of ['script', 'module'] + ecmaVersion: 5, + childVisitorKeys: null, + fallback: 'iteration' + }; +} + +function updateDeeply(target, override) { + var key, val; + + function isHashObject(target) { + return typeof target === 'object' && target instanceof Object && !(target instanceof Array) && !(target instanceof RegExp); + } + + for (key in override) { + if (override.hasOwnProperty(key)) { + val = override[key]; + if (isHashObject(val)) { + if (isHashObject(target[key])) { + updateDeeply(target[key], val); + } else { + target[key] = updateDeeply({}, val); + } + } else { + target[key] = val; + } + } + } + return target; +} + +/** + * Main interface function. Takes an Esprima syntax tree and returns the + * analyzed scopes. + * @function analyze + * @param {esprima.Tree} tree + * @param {Object} providedOptions - Options that tailor the scope analysis + * @param {boolean} [providedOptions.optimistic=false] - the optimistic flag + * @param {boolean} [providedOptions.directive=false]- the directive flag + * @param {boolean} [providedOptions.ignoreEval=false]- whether to check 'eval()' calls + * @param {boolean} [providedOptions.nodejsScope=false]- whether the whole + * script is executed under node.js environment. When enabled, escope adds + * a function scope immediately following the global scope. + * @param {boolean} [providedOptions.impliedStrict=false]- implied strict mode + * (if ecmaVersion >= 5). + * @param {string} [providedOptions.sourceType='script']- the source type of the script. one of 'script' and 'module' + * @param {number} [providedOptions.ecmaVersion=5]- which ECMAScript version is considered + * @param {Object} [providedOptions.childVisitorKeys=null] - Additional known visitor keys. See [esrecurse](https://github.com/estools/esrecurse)'s the `childVisitorKeys` option. + * @param {string} [providedOptions.fallback='iteration'] - A kind of the fallback in order to encounter with unknown node. See [esrecurse](https://github.com/estools/esrecurse)'s the `fallback` option. + * @return {ScopeManager} + */ +export function analyze(tree, providedOptions) { + var scopeManager, referencer, options; + + options = updateDeeply(defaultOptions(), providedOptions); + + scopeManager = new ScopeManager(options); + + referencer = new Referencer(options, scopeManager); + referencer.visit(tree); + + assert(scopeManager.__currentScope === null, 'currentScope should be null.'); + + return scopeManager; +} + +export { + /** @name module:escope.version */ + version, + /** @name module:escope.Reference */ + Reference, + /** @name module:escope.Variable */ + Variable, + /** @name module:escope.Scope */ + Scope, + /** @name module:escope.ScopeManager */ + ScopeManager +}; + + +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/escope/src/pattern-visitor.js b/node_modules/escope/src/pattern-visitor.js new file mode 100644 index 000000000..b98e98ad2 --- /dev/null +++ b/node_modules/escope/src/pattern-visitor.js @@ -0,0 +1,134 @@ +/* + Copyright (C) 2015 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. +*/ + +import { Syntax } from 'estraverse'; +import esrecurse from 'esrecurse'; + +function getLast(xs) { + return xs[xs.length - 1] || null; +} + +export default class PatternVisitor extends esrecurse.Visitor { + static isPattern(node) { + var nodeType = node.type; + return ( + nodeType === Syntax.Identifier || + nodeType === Syntax.ObjectPattern || + nodeType === Syntax.ArrayPattern || + nodeType === Syntax.SpreadElement || + nodeType === Syntax.RestElement || + nodeType === Syntax.AssignmentPattern + ); + } + + constructor(options, rootPattern, callback) { + super(null, options); + this.rootPattern = rootPattern; + this.callback = callback; + this.assignments = []; + this.rightHandNodes = []; + this.restElements = []; + } + + Identifier(pattern) { + const lastRestElement = getLast(this.restElements); + this.callback(pattern, { + topLevel: pattern === this.rootPattern, + rest: lastRestElement != null && lastRestElement.argument === pattern, + assignments: this.assignments + }); + } + + Property(property) { + // Computed property's key is a right hand node. + if (property.computed) { + this.rightHandNodes.push(property.key); + } + + // If it's shorthand, its key is same as its value. + // If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern). + // If it's not shorthand, the name of new variable is its value's. + this.visit(property.value); + } + + ArrayPattern(pattern) { + var i, iz, element; + for (i = 0, iz = pattern.elements.length; i < iz; ++i) { + element = pattern.elements[i]; + this.visit(element); + } + } + + AssignmentPattern(pattern) { + this.assignments.push(pattern); + this.visit(pattern.left); + this.rightHandNodes.push(pattern.right); + this.assignments.pop(); + } + + RestElement(pattern) { + this.restElements.push(pattern); + this.visit(pattern.argument); + this.restElements.pop(); + } + + MemberExpression(node) { + // Computed property's key is a right hand node. + if (node.computed) { + this.rightHandNodes.push(node.property); + } + // the object is only read, write to its property. + this.rightHandNodes.push(node.object); + } + + // + // ForInStatement.left and AssignmentExpression.left are LeftHandSideExpression. + // By spec, LeftHandSideExpression is Pattern or MemberExpression. + // (see also: https://github.com/estree/estree/pull/20#issuecomment-74584758) + // But espree 2.0 and esprima 2.0 parse to ArrayExpression, ObjectExpression, etc... + // + + SpreadElement(node) { + this.visit(node.argument); + } + + ArrayExpression(node) { + node.elements.forEach(this.visit, this); + } + + AssignmentExpression(node) { + this.assignments.push(node); + this.visit(node.left); + this.rightHandNodes.push(node.right); + this.assignments.pop(); + } + + CallExpression(node) { + // arguments are right hand nodes. + node.arguments.forEach(a => { this.rightHandNodes.push(a); }); + this.visit(node.callee); + } +} + +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/escope/src/reference.js b/node_modules/escope/src/reference.js new file mode 100644 index 000000000..7f273a363 --- /dev/null +++ b/node_modules/escope/src/reference.js @@ -0,0 +1,154 @@ +/* + Copyright (C) 2015 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. +*/ + +const READ = 0x1; +const WRITE = 0x2; +const RW = READ | WRITE; + +/** + * A Reference represents a single occurrence of an identifier in code. + * @class Reference + */ +export default class Reference { + constructor(ident, scope, flag, writeExpr, maybeImplicitGlobal, partial, init) { + /** + * Identifier syntax node. + * @member {esprima#Identifier} Reference#identifier + */ + this.identifier = ident; + /** + * Reference to the enclosing Scope. + * @member {Scope} Reference#from + */ + this.from = scope; + /** + * Whether the reference comes from a dynamic scope (such as 'eval', + * 'with', etc.), and may be trapped by dynamic scopes. + * @member {boolean} Reference#tainted + */ + this.tainted = false; + /** + * The variable this reference is resolved with. + * @member {Variable} Reference#resolved + */ + this.resolved = null; + /** + * The read-write mode of the reference. (Value is one of {@link + * Reference.READ}, {@link Reference.RW}, {@link Reference.WRITE}). + * @member {number} Reference#flag + * @private + */ + this.flag = flag; + if (this.isWrite()) { + /** + * If reference is writeable, this is the tree being written to it. + * @member {esprima#Node} Reference#writeExpr + */ + this.writeExpr = writeExpr; + /** + * Whether the Reference might refer to a partial value of writeExpr. + * @member {boolean} Reference#partial + */ + this.partial = partial; + /** + * Whether the Reference is to write of initialization. + * @member {boolean} Reference#init + */ + this.init = init; + } + this.__maybeImplicitGlobal = maybeImplicitGlobal; + } + + /** + * Whether the reference is static. + * @method Reference#isStatic + * @return {boolean} + */ + isStatic() { + return !this.tainted && this.resolved && this.resolved.scope.isStatic(); + } + + /** + * Whether the reference is writeable. + * @method Reference#isWrite + * @return {boolean} + */ + isWrite() { + return !!(this.flag & Reference.WRITE); + } + + /** + * Whether the reference is readable. + * @method Reference#isRead + * @return {boolean} + */ + isRead() { + return !!(this.flag & Reference.READ); + } + + /** + * Whether the reference is read-only. + * @method Reference#isReadOnly + * @return {boolean} + */ + isReadOnly() { + return this.flag === Reference.READ; + } + + /** + * Whether the reference is write-only. + * @method Reference#isWriteOnly + * @return {boolean} + */ + isWriteOnly() { + return this.flag === Reference.WRITE; + } + + /** + * Whether the reference is read-write. + * @method Reference#isReadWrite + * @return {boolean} + */ + isReadWrite() { + return this.flag === Reference.RW; + } +} + +/** + * @constant Reference.READ + * @private + */ +Reference.READ = READ; +/** + * @constant Reference.WRITE + * @private + */ +Reference.WRITE = WRITE; +/** + * @constant Reference.RW + * @private + */ +Reference.RW = RW; + +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/escope/src/referencer.js b/node_modules/escope/src/referencer.js new file mode 100644 index 000000000..bd810808c --- /dev/null +++ b/node_modules/escope/src/referencer.js @@ -0,0 +1,584 @@ +/* + Copyright (C) 2015 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. +*/ +import { Syntax } from 'estraverse'; +import esrecurse from 'esrecurse'; +import Reference from './reference'; +import Variable from './variable'; +import PatternVisitor from './pattern-visitor'; +import { ParameterDefinition, Definition } from './definition'; +import assert from 'assert'; + +function traverseIdentifierInPattern(options, rootPattern, referencer, callback) { + // Call the callback at left hand identifier nodes, and Collect right hand nodes. + var visitor = new PatternVisitor(options, rootPattern, callback); + visitor.visit(rootPattern); + + // Process the right hand nodes recursively. + if (referencer != null) { + visitor.rightHandNodes.forEach(referencer.visit, referencer); + } +} + +// Importing ImportDeclaration. +// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-moduledeclarationinstantiation +// https://github.com/estree/estree/blob/master/es6.md#importdeclaration +// FIXME: Now, we don't create module environment, because the context is +// implementation dependent. + +class Importer extends esrecurse.Visitor { + constructor(declaration, referencer) { + super(null, referencer.options); + this.declaration = declaration; + this.referencer = referencer; + } + + visitImport(id, specifier) { + this.referencer.visitPattern(id, (pattern) => { + this.referencer.currentScope().__define(pattern, + new Definition( + Variable.ImportBinding, + pattern, + specifier, + this.declaration, + null, + null + )); + }); + } + + ImportNamespaceSpecifier(node) { + let local = (node.local || node.id); + if (local) { + this.visitImport(local, node); + } + } + + ImportDefaultSpecifier(node) { + let local = (node.local || node.id); + this.visitImport(local, node); + } + + ImportSpecifier(node) { + let local = (node.local || node.id); + if (node.name) { + this.visitImport(node.name, node); + } else { + this.visitImport(local, node); + } + } +} + +// Referencing variables and creating bindings. +export default class Referencer extends esrecurse.Visitor { + constructor(options, scopeManager) { + super(null, options); + this.options = options; + this.scopeManager = scopeManager; + this.parent = null; + this.isInnerMethodDefinition = false; + } + + currentScope() { + return this.scopeManager.__currentScope; + } + + close(node) { + while (this.currentScope() && node === this.currentScope().block) { + this.scopeManager.__currentScope = this.currentScope().__close(this.scopeManager); + } + } + + pushInnerMethodDefinition(isInnerMethodDefinition) { + var previous = this.isInnerMethodDefinition; + this.isInnerMethodDefinition = isInnerMethodDefinition; + return previous; + } + + popInnerMethodDefinition(isInnerMethodDefinition) { + this.isInnerMethodDefinition = isInnerMethodDefinition; + } + + materializeTDZScope(node, iterationNode) { + // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-forin-div-ofexpressionevaluation-abstract-operation + // TDZ scope hides the declaration's names. + this.scopeManager.__nestTDZScope(node, iterationNode); + this.visitVariableDeclaration(this.currentScope(), Variable.TDZ, iterationNode.left, 0, true); + } + + materializeIterationScope(node) { + // Generate iteration scope for upper ForIn/ForOf Statements. + var letOrConstDecl; + this.scopeManager.__nestForScope(node); + letOrConstDecl = node.left; + this.visitVariableDeclaration(this.currentScope(), Variable.Variable, letOrConstDecl, 0); + this.visitPattern(letOrConstDecl.declarations[0].id, (pattern) => { + this.currentScope().__referencing(pattern, Reference.WRITE, node.right, null, true, true); + }); + } + + referencingDefaultValue(pattern, assignments, maybeImplicitGlobal, init) { + const scope = this.currentScope(); + assignments.forEach(assignment => { + scope.__referencing( + pattern, + Reference.WRITE, + assignment.right, + maybeImplicitGlobal, + pattern !== assignment.left, + init); + }); + } + + visitPattern(node, options, callback) { + if (typeof options === 'function') { + callback = options; + options = {processRightHandNodes: false} + } + traverseIdentifierInPattern( + this.options, + node, + options.processRightHandNodes ? this : null, + callback); + } + + visitFunction(node) { + var i, iz; + // FunctionDeclaration name is defined in upper scope + // NOTE: Not referring variableScope. It is intended. + // Since + // in ES5, FunctionDeclaration should be in FunctionBody. + // in ES6, FunctionDeclaration should be block scoped. + if (node.type === Syntax.FunctionDeclaration) { + // id is defined in upper scope + this.currentScope().__define(node.id, + new Definition( + Variable.FunctionName, + node.id, + node, + null, + null, + null + )); + } + + // FunctionExpression with name creates its special scope; + // FunctionExpressionNameScope. + if (node.type === Syntax.FunctionExpression && node.id) { + this.scopeManager.__nestFunctionExpressionNameScope(node); + } + + // Consider this function is in the MethodDefinition. + this.scopeManager.__nestFunctionScope(node, this.isInnerMethodDefinition); + + // Process parameter declarations. + for (i = 0, iz = node.params.length; i < iz; ++i) { + this.visitPattern(node.params[i], {processRightHandNodes: true}, (pattern, info) => { + this.currentScope().__define(pattern, + new ParameterDefinition( + pattern, + node, + i, + info.rest + )); + + this.referencingDefaultValue(pattern, info.assignments, null, true); + }); + } + + // if there's a rest argument, add that + if (node.rest) { + this.visitPattern({ + type: 'RestElement', + argument: node.rest + }, (pattern) => { + this.currentScope().__define(pattern, + new ParameterDefinition( + pattern, + node, + node.params.length, + true + )); + }); + } + + // Skip BlockStatement to prevent creating BlockStatement scope. + if (node.body.type === Syntax.BlockStatement) { + this.visitChildren(node.body); + } else { + this.visit(node.body); + } + + this.close(node); + } + + visitClass(node) { + if (node.type === Syntax.ClassDeclaration) { + this.currentScope().__define(node.id, + new Definition( + Variable.ClassName, + node.id, + node, + null, + null, + null + )); + } + + // FIXME: Maybe consider TDZ. + this.visit(node.superClass); + + this.scopeManager.__nestClassScope(node); + + if (node.id) { + this.currentScope().__define(node.id, + new Definition( + Variable.ClassName, + node.id, + node + )); + } + this.visit(node.body); + + this.close(node); + } + + visitProperty(node) { + var previous, isMethodDefinition; + if (node.computed) { + this.visit(node.key); + } + + isMethodDefinition = node.type === Syntax.MethodDefinition; + if (isMethodDefinition) { + previous = this.pushInnerMethodDefinition(true); + } + this.visit(node.value); + if (isMethodDefinition) { + this.popInnerMethodDefinition(previous); + } + } + + visitForIn(node) { + if (node.left.type === Syntax.VariableDeclaration && node.left.kind !== 'var') { + this.materializeTDZScope(node.right, node); + this.visit(node.right); + this.close(node.right); + + this.materializeIterationScope(node); + this.visit(node.body); + this.close(node); + } else { + if (node.left.type === Syntax.VariableDeclaration) { + this.visit(node.left); + this.visitPattern(node.left.declarations[0].id, (pattern) => { + this.currentScope().__referencing(pattern, Reference.WRITE, node.right, null, true, true); + }); + } else { + this.visitPattern(node.left, {processRightHandNodes: true}, (pattern, info) => { + var maybeImplicitGlobal = null; + if (!this.currentScope().isStrict) { + maybeImplicitGlobal = { + pattern: pattern, + node: node + }; + } + this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false); + this.currentScope().__referencing(pattern, Reference.WRITE, node.right, maybeImplicitGlobal, true, false); + }); + } + this.visit(node.right); + this.visit(node.body); + } + } + + visitVariableDeclaration(variableTargetScope, type, node, index, fromTDZ) { + // If this was called to initialize a TDZ scope, this needs to make definitions, but doesn't make references. + var decl, init; + + decl = node.declarations[index]; + init = decl.init; + this.visitPattern(decl.id, {processRightHandNodes: !fromTDZ}, (pattern, info) => { + variableTargetScope.__define(pattern, + new Definition( + type, + pattern, + decl, + node, + index, + node.kind + )); + + if (!fromTDZ) { + this.referencingDefaultValue(pattern, info.assignments, null, true); + } + if (init) { + this.currentScope().__referencing(pattern, Reference.WRITE, init, null, !info.topLevel, true); + } + }); + } + + AssignmentExpression(node) { + if (PatternVisitor.isPattern(node.left)) { + if (node.operator === '=') { + this.visitPattern(node.left, {processRightHandNodes: true}, (pattern, info) => { + var maybeImplicitGlobal = null; + if (!this.currentScope().isStrict) { + maybeImplicitGlobal = { + pattern: pattern, + node: node + }; + } + this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false); + this.currentScope().__referencing(pattern, Reference.WRITE, node.right, maybeImplicitGlobal, !info.topLevel, false); + }); + } else { + this.currentScope().__referencing(node.left, Reference.RW, node.right); + } + } else { + this.visit(node.left); + } + this.visit(node.right); + } + + CatchClause(node) { + this.scopeManager.__nestCatchScope(node); + + this.visitPattern(node.param, {processRightHandNodes: true}, (pattern, info) => { + this.currentScope().__define(pattern, + new Definition( + Variable.CatchClause, + node.param, + node, + null, + null, + null + )); + this.referencingDefaultValue(pattern, info.assignments, null, true); + }); + this.visit(node.body); + + this.close(node); + } + + Program(node) { + this.scopeManager.__nestGlobalScope(node); + + if (this.scopeManager.__isNodejsScope()) { + // Force strictness of GlobalScope to false when using node.js scope. + this.currentScope().isStrict = false; + this.scopeManager.__nestFunctionScope(node, false); + } + + if (this.scopeManager.__isES6() && this.scopeManager.isModule()) { + this.scopeManager.__nestModuleScope(node); + } + + if (this.scopeManager.isStrictModeSupported() && this.scopeManager.isImpliedStrict()) { + this.currentScope().isStrict = true; + } + + this.visitChildren(node); + this.close(node); + } + + Identifier(node) { + this.currentScope().__referencing(node); + } + + UpdateExpression(node) { + if (PatternVisitor.isPattern(node.argument)) { + this.currentScope().__referencing(node.argument, Reference.RW, null); + } else { + this.visitChildren(node); + } + } + + MemberExpression(node) { + this.visit(node.object); + if (node.computed) { + this.visit(node.property); + } + } + + Property(node) { + this.visitProperty(node); + } + + MethodDefinition(node) { + this.visitProperty(node); + } + + BreakStatement() {} + + ContinueStatement() {} + + LabeledStatement(node) { + this.visit(node.body); + } + + ForStatement(node) { + // Create ForStatement declaration. + // NOTE: In ES6, ForStatement dynamically generates + // per iteration environment. However, escope is + // a static analyzer, we only generate one scope for ForStatement. + if (node.init && node.init.type === Syntax.VariableDeclaration && node.init.kind !== 'var') { + this.scopeManager.__nestForScope(node); + } + + this.visitChildren(node); + + this.close(node); + } + + ClassExpression(node) { + this.visitClass(node); + } + + ClassDeclaration(node) { + this.visitClass(node); + } + + CallExpression(node) { + // Check this is direct call to eval + if (!this.scopeManager.__ignoreEval() && node.callee.type === Syntax.Identifier && node.callee.name === 'eval') { + // NOTE: This should be `variableScope`. Since direct eval call always creates Lexical environment and + // let / const should be enclosed into it. Only VariableDeclaration affects on the caller's environment. + this.currentScope().variableScope.__detectEval(); + } + this.visitChildren(node); + } + + BlockStatement(node) { + if (this.scopeManager.__isES6()) { + this.scopeManager.__nestBlockScope(node); + } + + this.visitChildren(node); + + this.close(node); + } + + ThisExpression() { + this.currentScope().variableScope.__detectThis(); + } + + WithStatement(node) { + this.visit(node.object); + // Then nest scope for WithStatement. + this.scopeManager.__nestWithScope(node); + + this.visit(node.body); + + this.close(node); + } + + VariableDeclaration(node) { + var variableTargetScope, i, iz, decl; + variableTargetScope = (node.kind === 'var') ? this.currentScope().variableScope : this.currentScope(); + for (i = 0, iz = node.declarations.length; i < iz; ++i) { + decl = node.declarations[i]; + this.visitVariableDeclaration(variableTargetScope, Variable.Variable, node, i); + if (decl.init) { + this.visit(decl.init); + } + } + } + + // sec 13.11.8 + SwitchStatement(node) { + var i, iz; + + this.visit(node.discriminant); + + if (this.scopeManager.__isES6()) { + this.scopeManager.__nestSwitchScope(node); + } + + for (i = 0, iz = node.cases.length; i < iz; ++i) { + this.visit(node.cases[i]); + } + + this.close(node); + } + + FunctionDeclaration(node) { + this.visitFunction(node); + } + + FunctionExpression(node) { + this.visitFunction(node); + } + + ForOfStatement(node) { + this.visitForIn(node); + } + + ForInStatement(node) { + this.visitForIn(node); + } + + ArrowFunctionExpression(node) { + this.visitFunction(node); + } + + ImportDeclaration(node) { + var importer; + + assert(this.scopeManager.__isES6() && this.scopeManager.isModule(), 'ImportDeclaration should appear when the mode is ES6 and in the module context.'); + + importer = new Importer(node, this); + importer.visit(node); + } + + visitExportDeclaration(node) { + if (node.source) { + return; + } + if (node.declaration) { + this.visit(node.declaration); + return; + } + + this.visitChildren(node); + } + + ExportDeclaration(node) { + this.visitExportDeclaration(node); + } + + ExportNamedDeclaration(node) { + this.visitExportDeclaration(node); + } + + ExportSpecifier(node) { + let local = (node.id || node.local); + this.visit(local); + } + + MetaProperty() { + // do nothing. + } +} + +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/escope/src/scope-manager.js b/node_modules/escope/src/scope-manager.js new file mode 100644 index 000000000..024535d7c --- /dev/null +++ b/node_modules/escope/src/scope-manager.js @@ -0,0 +1,245 @@ +/* + Copyright (C) 2015 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. +*/ + +import WeakMap from 'es6-weak-map'; +import Scope from './scope'; +import assert from 'assert'; + +import { + GlobalScope, + CatchScope, + WithScope, + ModuleScope, + ClassScope, + SwitchScope, + FunctionScope, + ForScope, + TDZScope, + FunctionExpressionNameScope, + BlockScope +} from './scope'; + +/** + * @class ScopeManager + */ +export default class ScopeManager { + constructor(options) { + this.scopes = []; + this.globalScope = null; + this.__nodeToScope = new WeakMap(); + this.__currentScope = null; + this.__options = options; + this.__declaredVariables = new WeakMap(); + } + + __useDirective() { + return this.__options.directive; + } + + __isOptimistic() { + return this.__options.optimistic; + } + + __ignoreEval() { + return this.__options.ignoreEval; + } + + __isNodejsScope() { + return this.__options.nodejsScope; + } + + isModule() { + return this.__options.sourceType === 'module'; + } + + isImpliedStrict() { + return this.__options.impliedStrict; + } + + isStrictModeSupported() { + return this.__options.ecmaVersion >= 5; + } + + // Returns appropriate scope for this node. + __get(node) { + return this.__nodeToScope.get(node); + } + + /** + * Get variables that are declared by the node. + * + * "are declared by the node" means the node is same as `Variable.defs[].node` or `Variable.defs[].parent`. + * If the node declares nothing, this method returns an empty array. + * CAUTION: This API is experimental. See https://github.com/estools/escope/pull/69 for more details. + * + * @param {Esprima.Node} node - a node to get. + * @returns {Variable[]} variables that declared by the node. + */ + getDeclaredVariables(node) { + return this.__declaredVariables.get(node) || []; + } + + /** + * acquire scope from node. + * @method ScopeManager#acquire + * @param {Esprima.Node} node - node for the acquired scope. + * @param {boolean=} inner - look up the most inner scope, default value is false. + * @return {Scope?} + */ + acquire(node, inner) { + var scopes, scope, i, iz; + + function predicate(scope) { + if (scope.type === 'function' && scope.functionExpressionScope) { + return false; + } + if (scope.type === 'TDZ') { + return false; + } + return true; + } + + scopes = this.__get(node); + if (!scopes || scopes.length === 0) { + return null; + } + + // Heuristic selection from all scopes. + // If you would like to get all scopes, please use ScopeManager#acquireAll. + if (scopes.length === 1) { + return scopes[0]; + } + + if (inner) { + for (i = scopes.length - 1; i >= 0; --i) { + scope = scopes[i]; + if (predicate(scope)) { + return scope; + } + } + } else { + for (i = 0, iz = scopes.length; i < iz; ++i) { + scope = scopes[i]; + if (predicate(scope)) { + return scope; + } + } + } + + return null; + } + + /** + * acquire all scopes from node. + * @method ScopeManager#acquireAll + * @param {Esprima.Node} node - node for the acquired scope. + * @return {Scope[]?} + */ + acquireAll(node) { + return this.__get(node); + } + + /** + * release the node. + * @method ScopeManager#release + * @param {Esprima.Node} node - releasing node. + * @param {boolean=} inner - look up the most inner scope, default value is false. + * @return {Scope?} upper scope for the node. + */ + release(node, inner) { + var scopes, scope; + scopes = this.__get(node); + if (scopes && scopes.length) { + scope = scopes[0].upper; + if (!scope) { + return null; + } + return this.acquire(scope.block, inner); + } + return null; + } + + attach() { } + + detach() { } + + __nestScope(scope) { + if (scope instanceof GlobalScope) { + assert(this.__currentScope === null); + this.globalScope = scope; + } + this.__currentScope = scope; + return scope; + } + + __nestGlobalScope(node) { + return this.__nestScope(new GlobalScope(this, node)); + } + + __nestBlockScope(node, isMethodDefinition) { + return this.__nestScope(new BlockScope(this, this.__currentScope, node)); + } + + __nestFunctionScope(node, isMethodDefinition) { + return this.__nestScope(new FunctionScope(this, this.__currentScope, node, isMethodDefinition)); + } + + __nestForScope(node) { + return this.__nestScope(new ForScope(this, this.__currentScope, node)); + } + + __nestCatchScope(node) { + return this.__nestScope(new CatchScope(this, this.__currentScope, node)); + } + + __nestWithScope(node) { + return this.__nestScope(new WithScope(this, this.__currentScope, node)); + } + + __nestClassScope(node) { + return this.__nestScope(new ClassScope(this, this.__currentScope, node)); + } + + __nestSwitchScope(node) { + return this.__nestScope(new SwitchScope(this, this.__currentScope, node)); + } + + __nestModuleScope(node) { + return this.__nestScope(new ModuleScope(this, this.__currentScope, node)); + } + + __nestTDZScope(node) { + return this.__nestScope(new TDZScope(this, this.__currentScope, node)); + } + + __nestFunctionExpressionNameScope(node) { + return this.__nestScope(new FunctionExpressionNameScope(this, this.__currentScope, node)); + } + + __isES6() { + return this.__options.ecmaVersion >= 6; + } +} + +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/escope/src/scope.js b/node_modules/escope/src/scope.js new file mode 100644 index 000000000..0e4d8c2d7 --- /dev/null +++ b/node_modules/escope/src/scope.js @@ -0,0 +1,647 @@ +/* + Copyright (C) 2015 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. +*/ + +import { Syntax } from 'estraverse'; +import Map from 'es6-map'; + +import Reference from './reference'; +import Variable from './variable'; +import Definition from './definition'; +import assert from 'assert'; + +function isStrictScope(scope, block, isMethodDefinition, useDirective) { + var body, i, iz, stmt, expr; + + // When upper scope is exists and strict, inner scope is also strict. + if (scope.upper && scope.upper.isStrict) { + return true; + } + + // ArrowFunctionExpression's scope is always strict scope. + if (block.type === Syntax.ArrowFunctionExpression) { + return true; + } + + if (isMethodDefinition) { + return true; + } + + if (scope.type === 'class' || scope.type === 'module') { + return true; + } + + if (scope.type === 'block' || scope.type === 'switch') { + return false; + } + + if (scope.type === 'function') { + if (block.type === Syntax.Program) { + body = block; + } else { + body = block.body; + } + } else if (scope.type === 'global') { + body = block; + } else { + return false; + } + + // Search 'use strict' directive. + if (useDirective) { + for (i = 0, iz = body.body.length; i < iz; ++i) { + stmt = body.body[i]; + if (stmt.type !== Syntax.DirectiveStatement) { + break; + } + if (stmt.raw === '"use strict"' || stmt.raw === '\'use strict\'') { + return true; + } + } + } else { + for (i = 0, iz = body.body.length; i < iz; ++i) { + stmt = body.body[i]; + if (stmt.type !== Syntax.ExpressionStatement) { + break; + } + expr = stmt.expression; + if (expr.type !== Syntax.Literal || typeof expr.value !== 'string') { + break; + } + if (expr.raw != null) { + if (expr.raw === '"use strict"' || expr.raw === '\'use strict\'') { + return true; + } + } else { + if (expr.value === 'use strict') { + return true; + } + } + } + } + return false; +} + +function registerScope(scopeManager, scope) { + var scopes; + + scopeManager.scopes.push(scope); + + scopes = scopeManager.__nodeToScope.get(scope.block); + if (scopes) { + scopes.push(scope); + } else { + scopeManager.__nodeToScope.set(scope.block, [ scope ]); + } +} + +function shouldBeStatically(def) { + return ( + (def.type === Variable.ClassName) || + (def.type === Variable.Variable && def.parent.kind !== 'var') + ); +} + +/** + * @class Scope + */ +export default class Scope { + constructor(scopeManager, type, upperScope, block, isMethodDefinition) { + /** + * One of 'TDZ', 'module', 'block', 'switch', 'function', 'catch', 'with', 'function', 'class', 'global'. + * @member {String} Scope#type + */ + this.type = type; + /** + * The scoped {@link Variable}s of this scope, as { Variable.name + * : Variable }. + * @member {Map} Scope#set + */ + this.set = new Map(); + /** + * The tainted variables of this scope, as { Variable.name : + * boolean }. + * @member {Map} Scope#taints */ + this.taints = new Map(); + /** + * Generally, through the lexical scoping of JS you can always know + * which variable an identifier in the source code refers to. There are + * a few exceptions to this rule. With 'global' and 'with' scopes you + * can only decide at runtime which variable a reference refers to. + * Moreover, if 'eval()' is used in a scope, it might introduce new + * bindings in this or its parent scopes. + * All those scopes are considered 'dynamic'. + * @member {boolean} Scope#dynamic + */ + this.dynamic = this.type === 'global' || this.type === 'with'; + /** + * A reference to the scope-defining syntax node. + * @member {esprima.Node} Scope#block + */ + this.block = block; + /** + * The {@link Reference|references} that are not resolved with this scope. + * @member {Reference[]} Scope#through + */ + this.through = []; + /** + * The scoped {@link Variable}s of this scope. In the case of a + * 'function' scope this includes the automatic argument arguments as + * its first element, as well as all further formal arguments. + * @member {Variable[]} Scope#variables + */ + this.variables = []; + /** + * Any variable {@link Reference|reference} found in this scope. This + * includes occurrences of local variables as well as variables from + * parent scopes (including the global scope). For local variables + * this also includes defining occurrences (like in a 'var' statement). + * In a 'function' scope this does not include the occurrences of the + * formal parameter in the parameter list. + * @member {Reference[]} Scope#references + */ + this.references = []; + + /** + * For 'global' and 'function' scopes, this is a self-reference. For + * other scope types this is the variableScope value of the + * parent scope. + * @member {Scope} Scope#variableScope + */ + this.variableScope = + (this.type === 'global' || this.type === 'function' || this.type === 'module') ? this : upperScope.variableScope; + /** + * Whether this scope is created by a FunctionExpression. + * @member {boolean} Scope#functionExpressionScope + */ + this.functionExpressionScope = false; + /** + * Whether this is a scope that contains an 'eval()' invocation. + * @member {boolean} Scope#directCallToEvalScope + */ + this.directCallToEvalScope = false; + /** + * @member {boolean} Scope#thisFound + */ + this.thisFound = false; + + this.__left = []; + + /** + * Reference to the parent {@link Scope|scope}. + * @member {Scope} Scope#upper + */ + this.upper = upperScope; + /** + * Whether 'use strict' is in effect in this scope. + * @member {boolean} Scope#isStrict + */ + this.isStrict = isStrictScope(this, block, isMethodDefinition, scopeManager.__useDirective()); + + /** + * List of nested {@link Scope}s. + * @member {Scope[]} Scope#childScopes + */ + this.childScopes = []; + if (this.upper) { + this.upper.childScopes.push(this); + } + + this.__declaredVariables = scopeManager.__declaredVariables; + + registerScope(scopeManager, this); + } + + __shouldStaticallyClose(scopeManager) { + return (!this.dynamic || scopeManager.__isOptimistic()); + } + + __shouldStaticallyCloseForGlobal(ref) { + // On global scope, let/const/class declarations should be resolved statically. + var name = ref.identifier.name; + if (!this.set.has(name)) { + return false; + } + + var variable = this.set.get(name); + var defs = variable.defs; + return defs.length > 0 && defs.every(shouldBeStatically); + } + + __staticCloseRef(ref) { + if (!this.__resolve(ref)) { + this.__delegateToUpperScope(ref); + } + } + + __dynamicCloseRef(ref) { + // notify all names are through to global + let current = this; + do { + current.through.push(ref); + current = current.upper; + } while (current); + } + + __globalCloseRef(ref) { + // let/const/class declarations should be resolved statically. + // others should be resolved dynamically. + if (this.__shouldStaticallyCloseForGlobal(ref)) { + this.__staticCloseRef(ref); + } else { + this.__dynamicCloseRef(ref); + } + } + + __close(scopeManager) { + var closeRef; + if (this.__shouldStaticallyClose(scopeManager)) { + closeRef = this.__staticCloseRef; + } else if (this.type !== 'global') { + closeRef = this.__dynamicCloseRef; + } else { + closeRef = this.__globalCloseRef; + } + + // Try Resolving all references in this scope. + for (let i = 0, iz = this.__left.length; i < iz; ++i) { + let ref = this.__left[i]; + closeRef.call(this, ref); + } + this.__left = null; + + return this.upper; + } + + __resolve(ref) { + var variable, name; + name = ref.identifier.name; + if (this.set.has(name)) { + variable = this.set.get(name); + variable.references.push(ref); + variable.stack = variable.stack && ref.from.variableScope === this.variableScope; + if (ref.tainted) { + variable.tainted = true; + this.taints.set(variable.name, true); + } + ref.resolved = variable; + return true; + } + return false; + } + + __delegateToUpperScope(ref) { + if (this.upper) { + this.upper.__left.push(ref); + } + this.through.push(ref); + } + + __addDeclaredVariablesOfNode(variable, node) { + if (node == null) { + return; + } + + var variables = this.__declaredVariables.get(node); + if (variables == null) { + variables = []; + this.__declaredVariables.set(node, variables); + } + if (variables.indexOf(variable) === -1) { + variables.push(variable); + } + } + + __defineGeneric(name, set, variables, node, def) { + var variable; + + variable = set.get(name); + if (!variable) { + variable = new Variable(name, this); + set.set(name, variable); + variables.push(variable); + } + + if (def) { + variable.defs.push(def); + if (def.type !== Variable.TDZ) { + this.__addDeclaredVariablesOfNode(variable, def.node); + this.__addDeclaredVariablesOfNode(variable, def.parent); + } + } + if (node) { + variable.identifiers.push(node); + } + } + + __define(node, def) { + if (node && node.type === Syntax.Identifier) { + this.__defineGeneric( + node.name, + this.set, + this.variables, + node, + def); + } + } + + __referencing(node, assign, writeExpr, maybeImplicitGlobal, partial, init) { + // because Array element may be null + if (!node || node.type !== Syntax.Identifier) { + return; + } + + // Specially handle like `this`. + if (node.name === 'super') { + return; + } + + let ref = new Reference(node, this, assign || Reference.READ, writeExpr, maybeImplicitGlobal, !!partial, !!init); + this.references.push(ref); + this.__left.push(ref); + } + + __detectEval() { + var current; + current = this; + this.directCallToEvalScope = true; + do { + current.dynamic = true; + current = current.upper; + } while (current); + } + + __detectThis() { + this.thisFound = true; + } + + __isClosed() { + return this.__left === null; + } + + /** + * returns resolved {Reference} + * @method Scope#resolve + * @param {Esprima.Identifier} ident - identifier to be resolved. + * @return {Reference} + */ + resolve(ident) { + var ref, i, iz; + assert(this.__isClosed(), 'Scope should be closed.'); + assert(ident.type === Syntax.Identifier, 'Target should be identifier.'); + for (i = 0, iz = this.references.length; i < iz; ++i) { + ref = this.references[i]; + if (ref.identifier === ident) { + return ref; + } + } + return null; + } + + /** + * returns this scope is static + * @method Scope#isStatic + * @return {boolean} + */ + isStatic() { + return !this.dynamic; + } + + /** + * returns this scope has materialized arguments + * @method Scope#isArgumentsMaterialized + * @return {boolean} + */ + isArgumentsMaterialized() { + return true; + } + + /** + * returns this scope has materialized `this` reference + * @method Scope#isThisMaterialized + * @return {boolean} + */ + isThisMaterialized() { + return true; + } + + isUsedName(name) { + if (this.set.has(name)) { + return true; + } + for (var i = 0, iz = this.through.length; i < iz; ++i) { + if (this.through[i].identifier.name === name) { + return true; + } + } + return false; + } +} + +export class GlobalScope extends Scope { + constructor(scopeManager, block) { + super(scopeManager, 'global', null, block, false); + this.implicit = { + set: new Map(), + variables: [], + /** + * List of {@link Reference}s that are left to be resolved (i.e. which + * need to be linked to the variable they refer to). + * @member {Reference[]} Scope#implicit#left + */ + left: [] + }; + } + + __close(scopeManager) { + let implicit = []; + for (let i = 0, iz = this.__left.length; i < iz; ++i) { + let ref = this.__left[i]; + if (ref.__maybeImplicitGlobal && !this.set.has(ref.identifier.name)) { + implicit.push(ref.__maybeImplicitGlobal); + } + } + + // create an implicit global variable from assignment expression + for (let i = 0, iz = implicit.length; i < iz; ++i) { + let info = implicit[i]; + this.__defineImplicit(info.pattern, + new Definition( + Variable.ImplicitGlobalVariable, + info.pattern, + info.node, + null, + null, + null + )); + + } + + this.implicit.left = this.__left; + + return super.__close(scopeManager); + } + + __defineImplicit(node, def) { + if (node && node.type === Syntax.Identifier) { + this.__defineGeneric( + node.name, + this.implicit.set, + this.implicit.variables, + node, + def); + } + } +} + +export class ModuleScope extends Scope { + constructor(scopeManager, upperScope, block) { + super(scopeManager, 'module', upperScope, block, false); + } +} + +export class FunctionExpressionNameScope extends Scope { + constructor(scopeManager, upperScope, block) { + super(scopeManager, 'function-expression-name', upperScope, block, false); + this.__define(block.id, + new Definition( + Variable.FunctionName, + block.id, + block, + null, + null, + null + )); + this.functionExpressionScope = true; + } +} + +export class CatchScope extends Scope { + constructor(scopeManager, upperScope, block) { + super(scopeManager, 'catch', upperScope, block, false); + } +} + +export class WithScope extends Scope { + constructor(scopeManager, upperScope, block) { + super(scopeManager, 'with', upperScope, block, false); + } + + __close(scopeManager) { + if (this.__shouldStaticallyClose(scopeManager)) { + return super.__close(scopeManager); + } + + for (let i = 0, iz = this.__left.length; i < iz; ++i) { + let ref = this.__left[i]; + ref.tainted = true; + this.__delegateToUpperScope(ref); + } + this.__left = null; + + return this.upper; + } +} + +export class TDZScope extends Scope { + constructor(scopeManager, upperScope, block) { + super(scopeManager, 'TDZ', upperScope, block, false); + } +} + +export class BlockScope extends Scope { + constructor(scopeManager, upperScope, block) { + super(scopeManager, 'block', upperScope, block, false); + } +} + +export class SwitchScope extends Scope { + constructor(scopeManager, upperScope, block) { + super(scopeManager, 'switch', upperScope, block, false); + } +} + +export class FunctionScope extends Scope { + constructor(scopeManager, upperScope, block, isMethodDefinition) { + super(scopeManager, 'function', upperScope, block, isMethodDefinition); + + // section 9.2.13, FunctionDeclarationInstantiation. + // NOTE Arrow functions never have an arguments objects. + if (this.block.type !== Syntax.ArrowFunctionExpression) { + this.__defineArguments(); + } + } + + isArgumentsMaterialized() { + // TODO(Constellation) + // We can more aggressive on this condition like this. + // + // function t() { + // // arguments of t is always hidden. + // function arguments() { + // } + // } + if (this.block.type === Syntax.ArrowFunctionExpression) { + return false; + } + + if (!this.isStatic()) { + return true; + } + + let variable = this.set.get('arguments'); + assert(variable, 'Always have arguments variable.'); + return variable.tainted || variable.references.length !== 0; + } + + isThisMaterialized() { + if (!this.isStatic()) { + return true; + } + return this.thisFound; + } + + __defineArguments() { + this.__defineGeneric( + 'arguments', + this.set, + this.variables, + null, + null); + this.taints.set('arguments', true); + } +} + +export class ForScope extends Scope { + constructor(scopeManager, upperScope, block) { + super(scopeManager, 'for', upperScope, block, false); + } +} + +export class ClassScope extends Scope { + constructor(scopeManager, upperScope, block) { + super(scopeManager, 'class', upperScope, block, false); + } +} + +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/escope/src/variable.js b/node_modules/escope/src/variable.js new file mode 100644 index 000000000..3945b380b --- /dev/null +++ b/node_modules/escope/src/variable.js @@ -0,0 +1,81 @@ +/* + Copyright (C) 2015 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. +*/ + +/** + * A Variable represents a locally scoped identifier. These include arguments to + * functions. + * @class Variable + */ +export default class Variable { + constructor(name, scope) { + /** + * The variable name, as given in the source code. + * @member {String} Variable#name + */ + this.name = name; + /** + * List of defining occurrences of this variable (like in 'var ...' + * statements or as parameter), as AST nodes. + * @member {esprima.Identifier[]} Variable#identifiers + */ + this.identifiers = []; + /** + * List of {@link Reference|references} of this variable (excluding parameter entries) + * in its defining scope and all nested scopes. For defining + * occurrences only see {@link Variable#defs}. + * @member {Reference[]} Variable#references + */ + this.references = []; + + /** + * List of defining occurrences of this variable (like in 'var ...' + * statements or as parameter), as custom objects. + * @member {Definition[]} Variable#defs + */ + this.defs = []; + + this.tainted = false; + /** + * Whether this is a stack variable. + * @member {boolean} Variable#stack + */ + this.stack = true; + /** + * Reference to the enclosing Scope. + * @member {Scope} Variable#scope + */ + this.scope = scope; + } +} + +Variable.CatchClause = 'CatchClause'; +Variable.Parameter = 'Parameter'; +Variable.FunctionName = 'FunctionName'; +Variable.ClassName = 'ClassName'; +Variable.Variable = 'Variable'; +Variable.ImportBinding = 'ImportBinding'; +Variable.TDZ = 'TDZ'; +Variable.ImplicitGlobalVariable = 'ImplicitGlobalVariable'; + +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/escope/third_party/espree.js b/node_modules/escope/third_party/espree.js new file mode 100644 index 000000000..2f68051de --- /dev/null +++ b/node_modules/escope/third_party/espree.js @@ -0,0 +1,56 @@ +/* + Copyright (C) 2015 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. +*/ + +var espree = require('espree'); + +module.exports = function (code) { + return espree.parse(code, { + + // attach range information to each node + range: true, + + // attach line/column location information to each node + loc: true, + + // create a top-level comments array containing all comments + comments: true, + + // attach comments to the closest relevant node as leadingComments and + // trailingComments + attachComment: true, + + // create a top-level tokens array containing all tokens + tokens: true, + + // try to continue parsing if an error is encountered, store errors in a + // top-level errors array + tolerant: true, + + // enable es6 features. + ecmaVersion: 6, + sourceType: "module" + }); +}; + +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/esrecurse/.babelrc b/node_modules/esrecurse/.babelrc new file mode 100644 index 000000000..a0765e185 --- /dev/null +++ b/node_modules/esrecurse/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} diff --git a/node_modules/esrecurse/README.md b/node_modules/esrecurse/README.md new file mode 100644 index 000000000..03c2ff302 --- /dev/null +++ b/node_modules/esrecurse/README.md @@ -0,0 +1,170 @@ +### Esrecurse [![Build Status](https://travis-ci.org/estools/esrecurse.svg?branch=master)](https://travis-ci.org/estools/esrecurse) + +Esrecurse ([esrecurse](https://github.com/estools/esrecurse)) is +[ECMAScript](https://www.ecma-international.org/publications/standards/Ecma-262.htm) +recursive traversing functionality. + +### Example Usage + +The following code will output all variables declared at the root of a file. + +```javascript +esrecurse.visit(ast, { + XXXStatement: function (node) { + this.visit(node.left); + // do something... + this.visit(node.right); + } +}); +``` + +We can use `Visitor` instance. + +```javascript +var visitor = new esrecurse.Visitor({ + XXXStatement: function (node) { + this.visit(node.left); + // do something... + this.visit(node.right); + } +}); + +visitor.visit(ast); +``` + +We can inherit `Visitor` instance easily. + +```javascript +class Derived extends esrecurse.Visitor { + constructor() + { + super(null); + } + + XXXStatement(node) { + } +} + +```javascript +function DerivedVisitor() { + esrecurse.Visitor.call(/* this for constructor */ this /* visitor object automatically becomes this. */); +} +util.inherits(DerivedVisitor, esrecurse.Visitor); +DerivedVisitor.prototype.XXXStatement = function (node) { + this.visit(node.left); + // do something... + this.visit(node.right); +}; +``` + +And you can invoke default visiting operation inside custom visit operation. + +```javascript +function DerivedVisitor() { + esrecurse.Visitor.call(/* this for constructor */ this /* visitor object automatically becomes this. */); +} +util.inherits(DerivedVisitor, esrecurse.Visitor); +DerivedVisitor.prototype.XXXStatement = function (node) { + // do something... + this.visitChildren(node); +}; +``` + +The `childVisitorKeys` option does customize the behavoir of `this.visitChildren(node)`. +We can use user-defined node types. + +```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 +}; +esrecurse.visit( + ast, + { + Literal: function (node) { + // do something... + } + }, + { + // Extending the existing traversing rules. + childVisitorKeys: { + // TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ] + TestExpression: ['argument'] + } + } +); +``` + +We can use the `fallback` option as well. +If the `fallback` option is `"iteration"`, `esrecurse` would visit all enumerable properties of unknown nodes. +Please note circular references cause the stack overflow. AST might have circular references in additional properties for some purpose (e.g. `node.parent`). + +```javascript +esrecurse.visit( + ast, + { + Literal: function (node) { + // do something... + } + }, + { + fallback: 'iteration' + } +); +``` + +If the `fallback` option is a function, `esrecurse` calls this function to determine the enumerable properties of unknown nodes. +Please note circular references cause the stack overflow. AST might have circular references in additional properties for some purpose (e.g. `node.parent`). + +```javascript +esrecurse.visit( + ast, + { + Literal: function (node) { + // do something... + } + }, + { + fallback: function (node) { + return Object.keys(node).filter(function(key) { + return key !== 'argument' + }); + } + } +); +``` + +### License + +Copyright (C) 2014 [Yusuke Suzuki](https://github.com/Constellation) + (twitter: [@Constellation](https://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/node_modules/esrecurse/esrecurse.js b/node_modules/esrecurse/esrecurse.js new file mode 100644 index 000000000..0805e67f3 --- /dev/null +++ b/node_modules/esrecurse/esrecurse.js @@ -0,0 +1,135 @@ +/* + 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. +*/ +(function () { + 'use strict'; + + var assign, + estraverse, + isArray, + objectKeys; + + assign = require('object-assign'); + estraverse = require('estraverse'); + + isArray = Array.isArray || function isArray(array) { + return Object.prototype.toString.call(array) === '[object Array]'; + }; + + objectKeys = Object.keys || function (o) { + var keys = [], key; + for (key in o) { + keys.push(key); + } + return keys; + }; + + function isNode(node) { + if (node == null) { + return false; + } + return typeof node === 'object' && typeof node.type === 'string'; + } + + function isProperty(nodeType, key) { + return (nodeType === estraverse.Syntax.ObjectExpression || nodeType === estraverse.Syntax.ObjectPattern) && key === 'properties'; + } + + function Visitor(visitor, options) { + options = options || {}; + + this.__visitor = visitor || this; + this.__childVisitorKeys = options.childVisitorKeys + ? assign({}, estraverse.VisitorKeys, options.childVisitorKeys) + : estraverse.VisitorKeys; + if (options.fallback === 'iteration') { + this.__fallback = objectKeys; + } else if (typeof options.fallback === 'function') { + this.__fallback = options.fallback; + } + } + + /* Default method for visiting children. + * When you need to call default visiting operation inside custom visiting + * operation, you can use it with `this.visitChildren(node)`. + */ + Visitor.prototype.visitChildren = function (node) { + var type, children, i, iz, j, jz, child; + + if (node == null) { + return; + } + + type = node.type || estraverse.Syntax.Property; + + children = this.__childVisitorKeys[type]; + if (!children) { + if (this.__fallback) { + children = this.__fallback(node); + } else { + throw new Error('Unknown node type ' + type + '.'); + } + } + + for (i = 0, iz = children.length; i < iz; ++i) { + child = node[children[i]]; + if (child) { + if (isArray(child)) { + for (j = 0, jz = child.length; j < jz; ++j) { + if (child[j]) { + if (isNode(child[j]) || isProperty(type, children[i])) { + this.visit(child[j]); + } + } + } + } else if (isNode(child)) { + this.visit(child); + } + } + } + }; + + /* Dispatching node. */ + Visitor.prototype.visit = function (node) { + var type; + + if (node == null) { + return; + } + + type = node.type || estraverse.Syntax.Property; + if (this.__visitor[type]) { + this.__visitor[type].call(this, node); + return; + } + this.visitChildren(node); + }; + + exports.version = require('./package.json').version; + exports.Visitor = Visitor; + exports.visit = function (node, visitor, options) { + var v = new Visitor(visitor, options); + v.visit(node); + }; +}()); +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/esrecurse/gulpfile.babel.js b/node_modules/esrecurse/gulpfile.babel.js new file mode 100644 index 000000000..aa881c9c3 --- /dev/null +++ b/node_modules/esrecurse/gulpfile.babel.js @@ -0,0 +1,92 @@ +// 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. + +import gulp from 'gulp'; +import mocha from 'gulp-mocha'; +import eslint from 'gulp-eslint'; +import minimist from 'minimist'; +import git from 'gulp-git'; +import bump from 'gulp-bump'; +import filter from 'gulp-filter'; +import tagVersion from 'gulp-tag-version'; +import 'babel-register'; + +const SOURCE = [ + '*.js' +]; + +let ESLINT_OPTION = { + parser: 'babel-eslint', + parserOptions: { + 'sourceType': 'module' + }, + rules: { + 'quotes': 0, + 'eqeqeq': 0, + 'no-use-before-define': 0, + 'no-shadow': 0, + 'no-new': 0, + 'no-underscore-dangle': 0, + 'no-multi-spaces': 0, + 'no-native-reassign': 0, + 'no-loop-func': 0 + }, + env: { + 'node': true + } +}; + +gulp.task('test', function() { + let options = minimist(process.argv.slice(2), { + string: 'test', + default: { + test: 'test/*.js' + } + } + ); + return gulp.src(options.test).pipe(mocha({reporter: 'spec'})); +}); + +gulp.task('lint', () => + gulp.src(SOURCE) + .pipe(eslint(ESLINT_OPTION)) + .pipe(eslint.formatEach('stylish', process.stderr)) + .pipe(eslint.failOnError()) +); + +let inc = importance => + gulp.src(['./package.json']) + .pipe(bump({type: importance})) + .pipe(gulp.dest('./')) + .pipe(git.commit('Bumps package version')) + .pipe(filter('package.json')) + .pipe(tagVersion({ + prefix: '' + })) +; + +gulp.task('travis', [ 'lint', 'test' ]); +gulp.task('default', [ 'travis' ]); + +gulp.task('patch', [ ], () => inc('patch')); +gulp.task('minor', [ ], () => inc('minor')); +gulp.task('major', [ ], () => inc('major')); diff --git a/node_modules/esrecurse/package-lock.json b/node_modules/esrecurse/package-lock.json new file mode 100644 index 000000000..8faf2d522 --- /dev/null +++ b/node_modules/esrecurse/package-lock.json @@ -0,0 +1,4322 @@ +{ + "name": "esrecurse", + "version": "4.1.0", + "lockfileVersion": 1, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "dev": true + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "any-shell-escape": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/any-shell-escape/-/any-shell-escape-0.1.1.tgz", + "integrity": "sha1-1Vq5ciRMcaml4asIefML8RCAaVk=", + "dev": true + }, + "anymatch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "dev": true, + "optional": true + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true + }, + "arr-flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", + "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=", + "dev": true + }, + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-slice": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", + "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "assertion-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true, + "optional": true + }, + "babel-cli": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.24.1.tgz", + "integrity": "sha1-IHzXBbumFImy6kG1MSNBz2rKIoM=", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "babel-code-frame": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", + "dev": true + }, + "babel-core": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", + "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", + "dev": true, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true + }, + "babel-helper-define-map": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", + "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true + }, + "babel-helper-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", + "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", + "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", + "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", + "dev": true + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true + }, + "babel-plugin-transform-regenerator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", + "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", + "dev": true + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true + }, + "babel-polyfill": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", + "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", + "dev": true + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true + }, + "babel-register": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", + "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "dev": true + }, + "babel-template": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-traverse": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", + "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", + "dev": true, + "dependencies": { + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babel-types": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", + "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "babylon": { + "version": "6.17.4", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", + "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "binary-extensions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true, + "optional": true + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true + }, + "bufferstreams": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.1.tgz", + "integrity": "sha1-AWE3MGCsWYjv+ZBYcxEU9uGV1R4=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.0.tgz", + "integrity": "sha512-c7KMXGd4b48nN3OJ1U9qOsn6pXNzf6kLd3kdZCkg2sxAcoiufInqF0XckwEnlrcwuaYwonlNK8GQUIOC/WC7sg==", + "dev": true + }, + "string_decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", + "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", + "dev": true, + "dependencies": { + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + } + } + } + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true + }, + "catharsis": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.8.tgz", + "integrity": "sha1-aTR59DqsVJ2Aa9c+kkzQ2USVGgY=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true + }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "optional": true + }, + "circular-json": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", + "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true + }, + "cli-width": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", + "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "coffee-script": { + "version": "1.12.6", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.6.tgz", + "integrity": "sha1-KFo/cRVokGUGTWv570Vy22ZpXL8=", + "dev": true + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.0.tgz", + "integrity": "sha512-c7KMXGd4b48nN3OJ1U9qOsn6pXNzf6kLd3kdZCkg2sxAcoiufInqF0XckwEnlrcwuaYwonlNK8GQUIOC/WC7sg==", + "dev": true + }, + "string_decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", + "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", + "dev": true, + "dependencies": { + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + } + } + } + } + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true + }, + "dateformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", + "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=", + "dev": true + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true + }, + "deprecated": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "dev": true + }, + "detect-file": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", + "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "doctrine": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", + "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", + "dev": true, + "dependencies": { + "esutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", + "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", + "dev": true + } + } + }, + "dot-object": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/dot-object/-/dot-object-1.5.4.tgz", + "integrity": "sha1-ryuN8mJrZQIM1nKdRsMxvDDTtIc=", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true + } + } + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true + }, + "end-of-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true + }, + "es5-ext": { + "version": "0.10.23", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz", + "integrity": "sha1-dXi1G+l0IHpUh4IbVlOMIk5Oezg=", + "dev": true + }, + "es6-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "dev": true + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true + }, + "eslint": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-1.10.3.tgz", + "integrity": "sha1-+xmpGxPBWAgrvKKUsX2Xm8g1Ogo=", + "dev": true, + "dependencies": { + "espree": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/espree/-/espree-2.2.5.tgz", + "integrity": "sha1-32kbkxCIlAKuspzAZnCMVmkLhUs=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true + } + } + }, + "espree": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.7.tgz", + "integrity": "sha1-/V3ux2qXpRIKnNOnyxF3oJI7EdI=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esrecurse": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", + "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=", + "dev": true, + "dependencies": { + "estraverse": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", + "integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI=", + "dev": true + } + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "estraverse-fb": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/estraverse-fb/-/estraverse-fb-1.3.1.tgz", + "integrity": "sha1-Fg51qA5gWwjOiUvM4v4+Qpq/kr8=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true + }, + "expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "dev": true + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "dev": true, + "dependencies": { + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true + } + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true + }, + "fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "dev": true + }, + "fast-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz", + "integrity": "sha1-AXjc3uAjuSkFGTrwlZ6KdjnP3Lk=", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true + }, + "file-entry-cache": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", + "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", + "dev": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true + }, + "find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "findup-sync": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", + "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", + "dev": true + }, + "fined": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", + "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "dev": true, + "dependencies": { + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true + } + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flagged-respawn": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", + "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", + "dev": true + }, + "flat-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true + }, + "fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", + "dev": true + }, + "fs-readdir-recursive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", + "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "dev": true, + "optional": true, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "dev": true, + "optional": true + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "optional": true + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "glob": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true + }, + "glob-stream": { + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true + } + } + }, + "glob-watcher": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true + }, + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true + }, + "global-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "dev": true + }, + "global-prefix": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", + "dev": true + }, + "globals": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-8.18.0.tgz", + "integrity": "sha1-k9SmK9ysOM+vr8R9awNHaMsP/LQ=", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true + } + } + }, + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true + } + } + }, + "glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true + }, + "graceful-fs": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "gulp": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true + }, + "gulp-bump": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulp-bump/-/gulp-bump-1.0.0.tgz", + "integrity": "sha1-XofEsSlyalzphvIjDnU3vzzecqw=", + "dev": true, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "through2": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", + "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", + "dev": true + }, + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } + }, + "gulp-eslint": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-1.1.1.tgz", + "integrity": "sha1-nxY4D1MxchUrN/O1woFkmt+PRmQ=", + "dev": true + }, + "gulp-filter": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-3.0.1.tgz", + "integrity": "sha1-fG/85bVj6J3nqQ387/FuyKjLFWI=", + "dev": true + }, + "gulp-git": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/gulp-git/-/gulp-git-1.15.1.tgz", + "integrity": "sha1-zdnTVPxB2Ny1LO9HJW37o2Z4WXk=", + "dev": true, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true + } + } + }, + "gulp-mocha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulp-mocha/-/gulp-mocha-2.2.0.tgz", + "integrity": "sha1-HOXrpLlLQMdDav7DxJgsjuqJQZI=", + "dev": true + }, + "gulp-tag-version": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/gulp-tag-version/-/gulp-tag-version-1.3.0.tgz", + "integrity": "sha1-hEjIfu0YZtuObLWYvEGb4t98R9s=", + "dev": true, + "dependencies": { + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true + }, + "gulp-git": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/gulp-git/-/gulp-git-0.3.6.tgz", + "integrity": "sha1-d+w9oiklwkbt15bKENQWOWXYFAo=", + "dev": true + }, + "gulp-util": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", + "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=", + "dev": true, + "dependencies": { + "through2": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", + "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", + "dev": true + } + } + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", + "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=", + "dev": true + }, + "lodash.escape": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", + "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", + "dev": true + }, + "lodash.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "dev": true + }, + "lodash.template": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", + "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", + "dev": true + }, + "lodash.templatesettings": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", + "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", + "dev": true + }, + "minimist": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz", + "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true + }, + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true + }, + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + }, + "through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", + "dev": true, + "dependencies": { + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true + } + } + }, + "vinyl": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", + "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", + "dev": true + }, + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true + }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true + }, + "hosted-git-info": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz", + "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "inquirer": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.11.4.tgz", + "integrity": "sha1-geM3ToNhvq/y2XAWIG01nQsy+k0=", + "dev": true, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "interpret": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true + }, + "irregular-plurals": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.2.0.tgz", + "integrity": "sha1-OPKZg0uowAwwvpxVThNyaXUv86w=", + "dev": true + }, + "is-absolute": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true + }, + "is-my-json-valid": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", + "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz", + "integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=", + "dev": true, + "dependencies": { + "isobject": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.0.tgz", + "integrity": "sha1-OVZSF/NmF4nooKDAgNX35rxG4aA=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-relative": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "dev": true + }, + "is-resolvable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", + "dev": true + }, + "is-unc-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "dev": true, + "dependencies": { + "commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "js-tokens": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", + "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", + "dev": true + }, + "js-yaml": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.5.tgz", + "integrity": "sha1-w0A3l98SuRhmV08t4jZG/oyvtE0=", + "dev": true + }, + "js2xmlparser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-1.0.0.tgz", + "integrity": "sha1-WhcPLo1kds5FQF4EgjJCUTeC/jA=", + "dev": true + }, + "jsdoc": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.4.3.tgz", + "integrity": "sha1-5XQNYUXGgfZnnmwXeDqI292XzNM=", + "dev": true, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "levn": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.2.5.tgz", + "integrity": "sha1-uo0znQykphDjo/FFucr0iAcVUFQ=", + "dev": true + }, + "liftoff": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", + "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true + } + } + }, + "lodash": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "lodash._arraycopy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", + "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", + "dev": true + }, + "lodash._arrayeach": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", + "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", + "dev": true + }, + "lodash._arraymap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz", + "integrity": "sha1-Go/Q9MDfS2HeoHbXF83Jfwo8PmY=", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true + }, + "lodash._baseclone": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", + "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basedifference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz", + "integrity": "sha1-8sIEKWwqeOArOJCBtu3KyTPPYpw=", + "dev": true + }, + "lodash._baseflatten": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz", + "integrity": "sha1-B3D/gBMa9uNPO1EXlqe6UhTmX/c=", + "dev": true + }, + "lodash._basefor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", + "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", + "dev": true + }, + "lodash._baseindexof": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz", + "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz", + "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=", + "dev": true + }, + "lodash._createassigner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true + }, + "lodash._createcache": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz", + "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", + "dev": true + }, + "lodash._escapehtmlchar": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", + "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=", + "dev": true + }, + "lodash._escapestringchar": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz", + "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._htmlescapes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz", + "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._isnative": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=", + "dev": true + }, + "lodash._objecttypes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=", + "dev": true + }, + "lodash._pickbyarray": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz", + "integrity": "sha1-H4mNlgfrVgsOFnOEt3x8bRCKpMU=", + "dev": true + }, + "lodash._pickbycallback": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz", + "integrity": "sha1-/2G5oBens699MObFPeKK+hm4dQo=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._reunescapedhtml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", + "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=", + "dev": true, + "dependencies": { + "lodash.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "dev": true + } + } + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash._shimkeys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", + "dev": true + }, + "lodash.clonedeep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", + "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=", + "dev": true + }, + "lodash.defaults": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", + "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", + "dev": true, + "dependencies": { + "lodash.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "dev": true + } + } + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isobject": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", + "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.istypedarray": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", + "integrity": "sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true + }, + "lodash.keysin": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/lodash.keysin/-/lodash.keysin-3.0.8.tgz", + "integrity": "sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.merge": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-3.3.2.tgz", + "integrity": "sha1-DZDZPtY3sYeEN7s+IWASYNev6ZQ=", + "dev": true, + "dependencies": { + "lodash.isplainobject": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz", + "integrity": "sha1-moI4rhayAEMpYM1zRlEtASP79MU=", + "dev": true + } + } + }, + "lodash.omit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-3.1.0.tgz", + "integrity": "sha1-iX/jguZBPZrJfGH3jtHgV6AK+fM=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true + }, + "lodash.toplainobject": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz", + "integrity": "sha1-KHkK2ULSk9eKpmOgfs9/UsoEGY0=", + "dev": true + }, + "lodash.values": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", + "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", + "dev": true, + "dependencies": { + "lodash.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "dev": true + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "marked": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", + "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mocha": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", + "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", + "dev": true, + "dependencies": { + "commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "dev": true + }, + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "dev": true + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true + } + } + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "dev": true, + "optional": true + }, + "natives": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", + "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", + "dev": true + }, + "normalize-package-data": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", + "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", + "dev": true + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true + }, + "isobject": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.0.tgz", + "integrity": "sha1-OVZSF/NmF4nooKDAgNX35rxG4aA=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true + }, + "object.pick": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.2.0.tgz", + "integrity": "sha1-tTkr7peC2m2ft9avr1OXefEjTCs=", + "dev": true + }, + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "optionator": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.6.0.tgz", + "integrity": "sha1-tj7Lvw4xX61LyYJ7Rdx7pFKE/LY=", + "dev": true + }, + "orchestrator": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true + }, + "ordered-read-streams": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "parse-filepath": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", + "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + } + } + }, + "plugin-log": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/plugin-log/-/plugin-log-0.1.0.tgz", + "integrity": "sha1-hgSc9qsQgzOYqTHzaJy67nteEzM=", + "dev": true, + "dependencies": { + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true + } + } + }, + "plur": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", + "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "private": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.0.tgz", + "integrity": "sha512-c7KMXGd4b48nN3OJ1U9qOsn6pXNzf6kLd3kdZCkg2sxAcoiufInqF0XckwEnlrcwuaYwonlNK8GQUIOC/WC7sg==", + "dev": true, + "optional": true + }, + "string_decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", + "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true, + "optional": true + } + } + } + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true + }, + "regenerate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "regenerator-transform": { + "version": "0.9.11", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", + "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", + "dev": true + }, + "regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "require-dir": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/require-dir/-/require-dir-0.1.0.tgz", + "integrity": "sha1-geAeKZ+vW3TDS2WU+OWt1Zhd3sU=", + "dev": true + }, + "requizzle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "dev": true, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "resolve": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "dev": true + }, + "resolve-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "dev": true + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true + } + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", + "integrity": "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==", + "dev": true + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "sequencify": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "optional": true + }, + "shelljs": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", + "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true + }, + "source-map-support": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "dev": true, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stream-consume": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", + "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", + "dev": true + }, + "streamfilter": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.5.tgz", + "integrity": "sha1-h1BxEb644phFFxe1Ec/tjwAqv1M=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.0.tgz", + "integrity": "sha512-c7KMXGd4b48nN3OJ1U9qOsn6pXNzf6kLd3kdZCkg2sxAcoiufInqF0XckwEnlrcwuaYwonlNK8GQUIOC/WC7sg==", + "dev": true + }, + "string_decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", + "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", + "dev": true, + "dependencies": { + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + } + } + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true + }, + "strip-bom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.0.tgz", + "integrity": "sha512-c7KMXGd4b48nN3OJ1U9qOsn6pXNzf6kLd3kdZCkg2sxAcoiufInqF0XckwEnlrcwuaYwonlNK8GQUIOC/WC7sg==", + "dev": true + }, + "string_decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", + "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", + "dev": true, + "dependencies": { + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + } + } + } + } + }, + "tildify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "dev": true + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-iso-string": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", + "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tryit": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", + "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true, + "optional": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "unique-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true + }, + "vinyl-fs": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "dev": true, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true + } + } + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true + }, + "xml-escape": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.0.0.tgz", + "integrity": "sha1-AJY9aXsq3wwYXE4E5zF0upsojrI=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + } + } + } + } +} diff --git a/node_modules/esrecurse/package.json b/node_modules/esrecurse/package.json new file mode 100755 index 000000000..ab6fdad96 --- /dev/null +++ b/node_modules/esrecurse/package.json @@ -0,0 +1,81 @@ +{ + "_from": "esrecurse@^4.1.0", + "_id": "esrecurse@4.2.0", + "_inBundle": false, + "_integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "_location": "/esrecurse", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "esrecurse@^4.1.0", + "name": "esrecurse", + "escapedName": "esrecurse", + "rawSpec": "^4.1.0", + "saveSpec": null, + "fetchSpec": "^4.1.0" + }, + "_requiredBy": [ + "/escope" + ], + "_resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "_shasum": "fa9568d98d3823f9a41d91e902dcab9ea6e5b163", + "_spec": "esrecurse@^4.1.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/escope", + "babel": { + "presets": [ + "es2015" + ] + }, + "bugs": { + "url": "https://github.com/estools/esrecurse/issues" + }, + "bundleDependencies": false, + "dependencies": { + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" + }, + "deprecated": false, + "description": "ECMAScript AST recursive visitor", + "devDependencies": { + "babel-cli": "^6.24.1", + "babel-eslint": "^7.2.3", + "babel-preset-es2015": "^6.24.1", + "babel-register": "^6.24.1", + "chai": "^4.0.2", + "esprima": "^4.0.0", + "gulp": "^3.9.0", + "gulp-bump": "^2.7.0", + "gulp-eslint": "^4.0.0", + "gulp-filter": "^5.0.0", + "gulp-git": "^2.4.1", + "gulp-mocha": "^4.3.1", + "gulp-tag-version": "^1.2.1", + "jsdoc": "^3.3.0-alpha10", + "minimist": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "homepage": "https://github.com/estools/esrecurse", + "license": "BSD-2-Clause", + "main": "esrecurse.js", + "maintainers": [ + { + "name": "Yusuke Suzuki", + "email": "utatane.tea@gmail.com", + "url": "https://github.com/Constellation" + } + ], + "name": "esrecurse", + "repository": { + "type": "git", + "url": "git+https://github.com/estools/esrecurse.git" + }, + "scripts": { + "lint": "gulp lint", + "test": "gulp travis", + "unit-test": "gulp test" + }, + "version": "4.2.0" +} diff --git a/node_modules/estraverse/.babelrc b/node_modules/estraverse/.babelrc new file mode 100644 index 000000000..dc1bc4f9c --- /dev/null +++ b/node_modules/estraverse/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} \ No newline at end of file diff --git a/node_modules/estraverse/.jshintrc b/node_modules/estraverse/.jshintrc new file mode 100644 index 000000000..f642dae76 --- /dev/null +++ b/node_modules/estraverse/.jshintrc @@ -0,0 +1,16 @@ +{ + "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/node_modules/estraverse/LICENSE.BSD b/node_modules/estraverse/LICENSE.BSD new file mode 100644 index 000000000..3e580c355 --- /dev/null +++ b/node_modules/estraverse/LICENSE.BSD @@ -0,0 +1,19 @@ +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/node_modules/estraverse/estraverse.js b/node_modules/estraverse/estraverse.js new file mode 100644 index 000000000..09ae47832 --- /dev/null +++ b/node_modules/estraverse/estraverse.js @@ -0,0 +1,849 @@ +/* + 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*/ +(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', + AssignmentPattern: 'AssignmentPattern', + 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', + ExportAllDeclaration: 'ExportAllDeclaration', + ExportDefaultDeclaration: 'ExportDefaultDeclaration', + ExportNamedDeclaration: 'ExportNamedDeclaration', + 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', + MetaProperty: 'MetaProperty', + MethodDefinition: 'MethodDefinition', + ModuleSpecifier: 'ModuleSpecifier', + NewExpression: 'NewExpression', + ObjectExpression: 'ObjectExpression', + ObjectPattern: 'ObjectPattern', + Program: 'Program', + Property: 'Property', + RestElement: 'RestElement', + ReturnStatement: 'ReturnStatement', + SequenceExpression: 'SequenceExpression', + SpreadElement: 'SpreadElement', + Super: 'Super', + 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'], + 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'], + MemberExpression: ['object', 'property'], + MetaProperty: ['meta', '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'] + }; + + // 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 = null; + if (visitor.fallback === 'iteration') { + this.__fallback = objectKeys; + } else if (typeof visitor.fallback === 'function') { + this.__fallback = visitor.fallback; + } + + 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 = node.type || element.wrap; + candidates = this.__keys[nodeType]; + if (!candidates) { + if (this.__fallback) { + candidates = this.__fallback(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) { + var worklist, + leavelist, + node, + nodeType, + target, + element, + current, + current2, + candidates, + candidate, + sentinel, + outer, + key; + + 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; + } + } + } + } + + 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 = node.type || element.wrap; + candidates = this.__keys[nodeType]; + if (!candidates) { + if (this.__fallback) { + candidates = this.__fallback(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 = require('./package.json').version; + 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; +}(exports)); +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/node_modules/estraverse/gulpfile.js b/node_modules/estraverse/gulpfile.js new file mode 100644 index 000000000..8772bbcca --- /dev/null +++ b/node_modules/estraverse/gulpfile.js @@ -0,0 +1,70 @@ +/* + 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/node_modules/estraverse/package.json b/node_modules/estraverse/package.json new file mode 100644 index 000000000..8c278164c --- /dev/null +++ b/node_modules/estraverse/package.json @@ -0,0 +1,69 @@ +{ + "_from": "estraverse@^4.1.1", + "_id": "estraverse@4.2.0", + "_inBundle": false, + "_integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "_location": "/estraverse", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "estraverse@^4.1.1", + "name": "estraverse", + "escapedName": "estraverse", + "rawSpec": "^4.1.1", + "saveSpec": null, + "fetchSpec": "^4.1.1" + }, + "_requiredBy": [ + "/escope", + "/esrecurse" + ], + "_resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "_shasum": "0dee3fed31fcd469618ce7342099fc1afa0bdb13", + "_spec": "estraverse@^4.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/escope", + "bugs": { + "url": "https://github.com/estools/estraverse/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "ECMAScript JS AST traversal functions", + "devDependencies": { + "babel-preset-es2015": "^6.3.13", + "babel-register": "^6.3.13", + "chai": "^2.1.1", + "espree": "^1.11.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" + }, + "engines": { + "node": ">=0.10.0" + }, + "homepage": "https://github.com/estools/estraverse", + "license": "BSD-2-Clause", + "main": "estraverse.js", + "maintainers": [ + { + "name": "Yusuke Suzuki", + "email": "utatane.tea@gmail.com", + "url": "http://github.com/Constellation" + } + ], + "name": "estraverse", + "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 js:babel-register" + }, + "version": "4.2.0" +} diff --git a/node_modules/esutils/LICENSE.BSD b/node_modules/esutils/LICENSE.BSD new file mode 100644 index 000000000..3e580c355 --- /dev/null +++ b/node_modules/esutils/LICENSE.BSD @@ -0,0 +1,19 @@ +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/node_modules/esutils/README.md b/node_modules/esutils/README.md new file mode 100644 index 000000000..610d8bde6 --- /dev/null +++ b/node_modules/esutils/README.md @@ -0,0 +1,169 @@ +### 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/node_modules/esutils/lib/ast.js b/node_modules/esutils/lib/ast.js new file mode 100644 index 000000000..8faadae1c --- /dev/null +++ b/node_modules/esutils/lib/ast.js @@ -0,0 +1,144 @@ +/* + 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/node_modules/esutils/lib/code.js b/node_modules/esutils/lib/code.js new file mode 100644 index 000000000..2a7c19d63 --- /dev/null +++ b/node_modules/esutils/lib/code.js @@ -0,0 +1,135 @@ +/* + 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/node_modules/esutils/lib/keyword.js b/node_modules/esutils/lib/keyword.js new file mode 100644 index 000000000..13c8c6a96 --- /dev/null +++ b/node_modules/esutils/lib/keyword.js @@ -0,0 +1,165 @@ +/* + 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/node_modules/esutils/lib/utils.js b/node_modules/esutils/lib/utils.js new file mode 100644 index 000000000..ce18faa6b --- /dev/null +++ b/node_modules/esutils/lib/utils.js @@ -0,0 +1,33 @@ +/* + 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/node_modules/esutils/package.json b/node_modules/esutils/package.json new file mode 100644 index 000000000..cab55d605 --- /dev/null +++ b/node_modules/esutils/package.json @@ -0,0 +1,78 @@ +{ + "_from": "esutils@^2.0.2", + "_id": "esutils@2.0.2", + "_inBundle": false, + "_integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "_location": "/esutils", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "esutils@^2.0.2", + "name": "esutils", + "escapedName": "esutils", + "rawSpec": "^2.0.2", + "saveSpec": null, + "fetchSpec": "^2.0.2" + }, + "_requiredBy": [ + "/babel-code-frame", + "/babel-types" + ], + "_resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "_shasum": "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b", + "_spec": "esutils@^2.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-code-frame", + "bugs": { + "url": "https://github.com/estools/esutils/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "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" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "LICENSE.BSD", + "README.md", + "lib" + ], + "homepage": "https://github.com/estools/esutils", + "licenses": [ + { + "type": "BSD", + "url": "http://github.com/estools/esutils/raw/master/LICENSE.BSD" + } + ], + "main": "lib/utils.js", + "maintainers": [ + { + "name": "Yusuke Suzuki", + "email": "utatane.tea@gmail.com", + "url": "http://github.com/Constellation" + } + ], + "name": "esutils", + "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/node_modules/event-emitter/.lint b/node_modules/event-emitter/.lint new file mode 100644 index 000000000..f76e528ef --- /dev/null +++ b/node_modules/event-emitter/.lint @@ -0,0 +1,15 @@ +@root + +module +es5 + +indent 2 +maxlen 80 +tabs + +ass +plusplus +nomen + +./benchmark +predef+ console diff --git a/node_modules/event-emitter/.npmignore b/node_modules/event-emitter/.npmignore new file mode 100644 index 000000000..68ebfddd2 --- /dev/null +++ b/node_modules/event-emitter/.npmignore @@ -0,0 +1,3 @@ +.DS_Store +/.lintcache +/node_modules diff --git a/node_modules/event-emitter/.testignore b/node_modules/event-emitter/.testignore new file mode 100644 index 000000000..f9c8c381d --- /dev/null +++ b/node_modules/event-emitter/.testignore @@ -0,0 +1 @@ +/benchmark diff --git a/node_modules/event-emitter/.travis.yml b/node_modules/event-emitter/.travis.yml new file mode 100644 index 000000000..5f29034c6 --- /dev/null +++ b/node_modules/event-emitter/.travis.yml @@ -0,0 +1,16 @@ +sudo: false # http://docs.travis-ci.com/user/workers/container-based-infrastructure/ +language: node_js +node_js: + - 0.12 + - 4 + - 6 + - 7 + +before_install: + - mkdir node_modules; ln -s ../ node_modules/event-emitter + +notifications: + email: + - medikoo+event-emitter@medikoo.com + +script: "npm test && npm run lint" diff --git a/node_modules/event-emitter/CHANGES b/node_modules/event-emitter/CHANGES new file mode 100644 index 000000000..3ac46ce83 --- /dev/null +++ b/node_modules/event-emitter/CHANGES @@ -0,0 +1,73 @@ +v0.3.5 -- 2017.03.15 +* Improve documentation +* Update dependencies + +v0.3.4 -- 2015.10.02 +* Add `emitError` extension + +v0.3.3 -- 2015.01.30 +* Fix reference to module in benchmarks + +v0.3.2 -- 2015.01.20 +* Improve documentation +* Configure lint scripts +* Fix spelling of LICENSE + +v0.3.1 -- 2014.04.25 +* Fix redefinition of emit method in `pipe` +* Allow custom emit method name in `pipe` + +v0.3.0 -- 2014.04.24 +* Move out from lib folder +* Do not expose all utilities on main module +* Support objects which do not inherit from Object.prototype +* Improve arguments validation +* Improve internals +* Remove Makefile +* Improve documentation + +v0.2.2 -- 2013.06.05 +* `unify` functionality + +v0.2.1 -- 2012.09.21 +* hasListeners module +* Simplified internal id (improves performance a little), now it starts with + underscore (hint it's private). Abstracted it to external module to have it + one place +* Documentation cleanup + +v0.2.0 -- 2012.09.19 +* Trashed poor implementation of v0.1 and came up with something solid + +Changes: +* Improved performance +* Fixed bugs event-emitter is now cross-prototype safe and not affected by + unexpected methods attached to Object.prototype +* Removed support for optional "emitter" argument in `emit` method, it was + cumbersome to use, and should be solved just with event objects + +v0.1.5 -- 2012.08.06 +* (maintanance) Do not use descriptors for internal objects, it exposes V8 bugs + (only Node v0.6 branch) + +v0.1.4 -- 2012.06.13 +* Fix detachment of listeners added with 'once' + +v0.1.3 -- 2012.05.28 +* Updated es5-ext to latest version (v0.8) +* Cleared package.json so it's in npm friendly format + +v0.1.2 -- 2012.01.22 +* Support for emitter argument in emit function, this allows some listeners not + to be notified about event +* allOff - removes all listeners from object +* All methods returns self object +* Internal fixes +* Travis CI integration + +v0.1.1 -- 2011.08.08 +* Added TAD test suite to devDependencies, configured test commands. + Tests can be run with 'make test' or 'npm test' + +v0.1.0 -- 2011.08.08 +Initial version diff --git a/node_modules/event-emitter/LICENSE b/node_modules/event-emitter/LICENSE new file mode 100644 index 000000000..ccb76f6e9 --- /dev/null +++ b/node_modules/event-emitter/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2012-2015 Mariusz Nowak (www.medikoo.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/event-emitter/README.md b/node_modules/event-emitter/README.md new file mode 100644 index 000000000..049905429 --- /dev/null +++ b/node_modules/event-emitter/README.md @@ -0,0 +1,98 @@ +# event-emitter +## Environment agnostic event emitter + +### Installation + + $ npm install event-emitter + +To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/) + +### Usage + +```javascript +var ee = require('event-emitter'); + +var MyClass = function () { /* .. */ }; +ee(MyClass.prototype); // All instances of MyClass will expose event-emitter interface + +var emitter = new MyClass(), listener; + +emitter.on('test', listener = function (args) { + // … react to 'test' event +}); + +emitter.once('test', function (args) { + // … react to first 'test' event (invoked only once!) +}); + +emitter.emit('test', arg1, arg2/*…args*/); // Two above listeners invoked +emitter.emit('test', arg1, arg2/*…args*/); // Only first listener invoked + +emitter.off('test', listener); // Removed first listener +emitter.emit('test', arg1, arg2/*…args*/); // No listeners invoked +``` +### Additional utilities + +#### allOff(obj) _(event-emitter/all-off)_ + +Removes all listeners from given event emitter object + +#### hasListeners(obj[, name]) _(event-emitter/has-listeners)_ + +Whether object has some listeners attached to the object. +When `name` is provided, it checks listeners for specific event name + +```javascript +var emitter = ee(); +var hasListeners = require('event-emitter/has-listeners'); +var listener = function () {}; + +hasListeners(emitter); // false + +emitter.on('foo', listener); +hasListeners(emitter); // true +hasListeners(emitter, 'foo'); // true +hasListeners(emitter, 'bar'); // false + +emitter.off('foo', listener); +hasListeners(emitter, 'foo'); // false +``` + +#### pipe(source, target[, emitMethodName]) _(event-emitter/pipe)_ + +Pipes all events from _source_ emitter onto _target_ emitter (all events from _source_ emitter will be emitted also on _target_ emitter, but not other way). +Returns _pipe_ object which exposes `pipe.close` function. Invoke it to close configured _pipe_. +It works internally by redefinition of `emit` method, if in your interface this method is referenced differently, provide its name (or symbol) with third argument. + +#### unify(emitter1, emitter2) _(event-emitter/unify)_ + +Unifies event handling for two objects. Events emitted on _emitter1_ would be also emitted on _emitter2_, and other way back. +Non reversible. + +```javascript +var eeUnify = require('event-emitter/unify'); + +var emitter1 = ee(), listener1, listener3; +var emitter2 = ee(), listener2, listener4; + +emitter1.on('test', listener1 = function () { }); +emitter2.on('test', listener2 = function () { }); + +emitter1.emit('test'); // Invoked listener1 +emitter2.emit('test'); // Invoked listener2 + +var unify = eeUnify(emitter1, emitter2); + +emitter1.emit('test'); // Invoked listener1 and listener2 +emitter2.emit('test'); // Invoked listener1 and listener2 + +emitter1.on('test', listener3 = function () { }); +emitter2.on('test', listener4 = function () { }); + +emitter1.emit('test'); // Invoked listener1, listener2, listener3 and listener4 +emitter2.emit('test'); // Invoked listener1, listener2, listener3 and listener4 +``` + +### Tests [![Build Status](https://travis-ci.org/medikoo/event-emitter.png)](https://travis-ci.org/medikoo/event-emitter) + + $ npm test diff --git a/node_modules/event-emitter/all-off.js b/node_modules/event-emitter/all-off.js new file mode 100644 index 000000000..829be65c2 --- /dev/null +++ b/node_modules/event-emitter/all-off.js @@ -0,0 +1,19 @@ +'use strict'; + +var value = require('es5-ext/object/valid-object') + + , hasOwnProperty = Object.prototype.hasOwnProperty; + +module.exports = function (emitter/*, type*/) { + var type = arguments[1], data; + + value(emitter); + + if (type !== undefined) { + data = hasOwnProperty.call(emitter, '__ee__') && emitter.__ee__; + if (!data) return; + if (data[type]) delete data[type]; + return; + } + if (hasOwnProperty.call(emitter, '__ee__')) delete emitter.__ee__; +}; diff --git a/node_modules/event-emitter/benchmark/many-on.js b/node_modules/event-emitter/benchmark/many-on.js new file mode 100644 index 000000000..e09bfde84 --- /dev/null +++ b/node_modules/event-emitter/benchmark/many-on.js @@ -0,0 +1,83 @@ +'use strict'; + +// Benchmark comparing performance of event emit for many listeners +// To run it, do following in memoizee package path: +// +// $ npm install eventemitter2 signals +// $ node benchmark/many-on.js + +var forEach = require('es5-ext/object/for-each') + , pad = require('es5-ext/string/#/pad') + + , now = Date.now + + , time, count = 1000000, i, data = {} + , ee, native, ee2, signals, a = {}, b = {}; + +ee = (function () { + var ee = require('../')(); + ee.on('test', function () { return arguments; }); + ee.on('test', function () { return arguments; }); + return ee.on('test', function () { return arguments; }); +}()); + +native = (function () { + var ee = require('events'); + ee = new ee.EventEmitter(); + ee.on('test', function () { return arguments; }); + ee.on('test', function () { return arguments; }); + return ee.on('test', function () { return arguments; }); +}()); + +ee2 = (function () { + var ee = require('eventemitter2'); + ee = new ee.EventEmitter2(); + ee.on('test', function () { return arguments; }); + ee.on('test', function () { return arguments; }); + return ee.on('test', function () { return arguments; }); +}()); + +signals = (function () { + var Signal = require('signals') + , ee = { test: new Signal() }; + ee.test.add(function () { return arguments; }); + ee.test.add(function () { return arguments; }); + ee.test.add(function () { return arguments; }); + return ee; +}()); + +console.log("Emit for 3 listeners", "x" + count + ":\n"); + +i = count; +time = now(); +while (i--) { + ee.emit('test', a, b); +} +data["event-emitter (this implementation)"] = now() - time; + +i = count; +time = now(); +while (i--) { + native.emit('test', a, b); +} +data["EventEmitter (Node.js native)"] = now() - time; + +i = count; +time = now(); +while (i--) { + ee2.emit('test', a, b); +} +data.EventEmitter2 = now() - time; + +i = count; +time = now(); +while (i--) { + signals.test.dispatch(a, b); +} +data.Signals = now() - time; + +forEach(data, function (value, name, obj, index) { + console.log(index + 1 + ":", pad.call(value, " ", 5), name); +}, null, function (a, b) { + return this[a] - this[b]; +}); diff --git a/node_modules/event-emitter/benchmark/single-on.js b/node_modules/event-emitter/benchmark/single-on.js new file mode 100644 index 000000000..99decbdae --- /dev/null +++ b/node_modules/event-emitter/benchmark/single-on.js @@ -0,0 +1,73 @@ +'use strict'; + +// Benchmark comparing performance of event emit for single listener +// To run it, do following in memoizee package path: +// +// $ npm install eventemitter2 signals +// $ node benchmark/single-on.js + +var forEach = require('es5-ext/object/for-each') + , pad = require('es5-ext/string/#/pad') + + , now = Date.now + + , time, count = 1000000, i, data = {} + , ee, native, ee2, signals, a = {}, b = {}; + +ee = (function () { + var ee = require('../'); + return ee().on('test', function () { return arguments; }); +}()); + +native = (function () { + var ee = require('events'); + return (new ee.EventEmitter()).on('test', function () { return arguments; }); +}()); + +ee2 = (function () { + var ee = require('eventemitter2'); + return (new ee.EventEmitter2()).on('test', function () { return arguments; }); +}()); + +signals = (function () { + var Signal = require('signals') + , ee = { test: new Signal() }; + ee.test.add(function () { return arguments; }); + return ee; +}()); + +console.log("Emit for single listener", "x" + count + ":\n"); + +i = count; +time = now(); +while (i--) { + ee.emit('test', a, b); +} +data["event-emitter (this implementation)"] = now() - time; + +i = count; +time = now(); +while (i--) { + native.emit('test', a, b); +} +data["EventEmitter (Node.js native)"] = now() - time; + +i = count; +time = now(); +while (i--) { + ee2.emit('test', a, b); +} +data.EventEmitter2 = now() - time; + +i = count; +time = now(); +while (i--) { + signals.test.dispatch(a, b); +} +data.Signals = now() - time; + +forEach(data, function (value, name, obj, index) { + console.log(index + 1 + ":", pad.call(value, " ", 5), name); +}, null, function (a, b) { + return this[a] - this[b]; +}); diff --git a/node_modules/event-emitter/emit-error.js b/node_modules/event-emitter/emit-error.js new file mode 100644 index 000000000..769b4c53e --- /dev/null +++ b/node_modules/event-emitter/emit-error.js @@ -0,0 +1,13 @@ +'use strict'; + +var ensureError = require('es5-ext/error/valid-error') + , ensureObject = require('es5-ext/object/valid-object') + + , hasOwnProperty = Object.prototype.hasOwnProperty; + +module.exports = function (err) { + (ensureObject(this) && ensureError(err)); + if (!hasOwnProperty.call(ensureObject(this), '__ee__')) throw err; + if (!this.__ee__.error) throw err; + this.emit('error', err); +}; diff --git a/node_modules/event-emitter/has-listeners.js b/node_modules/event-emitter/has-listeners.js new file mode 100644 index 000000000..8744522e2 --- /dev/null +++ b/node_modules/event-emitter/has-listeners.js @@ -0,0 +1,16 @@ +'use strict'; + +var isEmpty = require('es5-ext/object/is-empty') + , value = require('es5-ext/object/valid-value') + + , hasOwnProperty = Object.prototype.hasOwnProperty; + +module.exports = function (obj/*, type*/) { + var type; + value(obj); + type = arguments[1]; + if (arguments.length > 1) { + return hasOwnProperty.call(obj, '__ee__') && Boolean(obj.__ee__[type]); + } + return obj.hasOwnProperty('__ee__') && !isEmpty(obj.__ee__); +}; diff --git a/node_modules/event-emitter/index.js b/node_modules/event-emitter/index.js new file mode 100644 index 000000000..c36d3e49a --- /dev/null +++ b/node_modules/event-emitter/index.js @@ -0,0 +1,132 @@ +'use strict'; + +var d = require('d') + , callable = require('es5-ext/object/valid-callable') + + , apply = Function.prototype.apply, call = Function.prototype.call + , create = Object.create, defineProperty = Object.defineProperty + , defineProperties = Object.defineProperties + , hasOwnProperty = Object.prototype.hasOwnProperty + , descriptor = { configurable: true, enumerable: false, writable: true } + + , on, once, off, emit, methods, descriptors, base; + +on = function (type, listener) { + var data; + + callable(listener); + + if (!hasOwnProperty.call(this, '__ee__')) { + data = descriptor.value = create(null); + defineProperty(this, '__ee__', descriptor); + descriptor.value = null; + } else { + data = this.__ee__; + } + if (!data[type]) data[type] = listener; + else if (typeof data[type] === 'object') data[type].push(listener); + else data[type] = [data[type], listener]; + + return this; +}; + +once = function (type, listener) { + var once, self; + + callable(listener); + self = this; + on.call(this, type, once = function () { + off.call(self, type, once); + apply.call(listener, this, arguments); + }); + + once.__eeOnceListener__ = listener; + return this; +}; + +off = function (type, listener) { + var data, listeners, candidate, i; + + callable(listener); + + if (!hasOwnProperty.call(this, '__ee__')) return this; + data = this.__ee__; + if (!data[type]) return this; + listeners = data[type]; + + if (typeof listeners === 'object') { + for (i = 0; (candidate = listeners[i]); ++i) { + if ((candidate === listener) || + (candidate.__eeOnceListener__ === listener)) { + if (listeners.length === 2) data[type] = listeners[i ? 0 : 1]; + else listeners.splice(i, 1); + } + } + } else { + if ((listeners === listener) || + (listeners.__eeOnceListener__ === listener)) { + delete data[type]; + } + } + + return this; +}; + +emit = function (type) { + var i, l, listener, listeners, args; + + if (!hasOwnProperty.call(this, '__ee__')) return; + listeners = this.__ee__[type]; + if (!listeners) return; + + if (typeof listeners === 'object') { + l = arguments.length; + args = new Array(l - 1); + for (i = 1; i < l; ++i) args[i - 1] = arguments[i]; + + listeners = listeners.slice(); + for (i = 0; (listener = listeners[i]); ++i) { + apply.call(listener, this, args); + } + } else { + switch (arguments.length) { + case 1: + call.call(listeners, this); + break; + case 2: + call.call(listeners, this, arguments[1]); + break; + case 3: + call.call(listeners, this, arguments[1], arguments[2]); + break; + default: + l = arguments.length; + args = new Array(l - 1); + for (i = 1; i < l; ++i) { + args[i - 1] = arguments[i]; + } + apply.call(listeners, this, args); + } + } +}; + +methods = { + on: on, + once: once, + off: off, + emit: emit +}; + +descriptors = { + on: d(on), + once: d(once), + off: d(off), + emit: d(emit) +}; + +base = defineProperties({}, descriptors); + +module.exports = exports = function (o) { + return (o == null) ? create(base) : defineProperties(Object(o), descriptors); +}; +exports.methods = methods; diff --git a/node_modules/event-emitter/package.json b/node_modules/event-emitter/package.json new file mode 100644 index 000000000..42a1e4cd5 --- /dev/null +++ b/node_modules/event-emitter/package.json @@ -0,0 +1,68 @@ +{ + "_from": "event-emitter@~0.3.5", + "_id": "event-emitter@0.3.5", + "_inBundle": false, + "_integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "_location": "/event-emitter", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "event-emitter@~0.3.5", + "name": "event-emitter", + "escapedName": "event-emitter", + "rawSpec": "~0.3.5", + "saveSpec": null, + "fetchSpec": "~0.3.5" + }, + "_requiredBy": [ + "/es6-map", + "/es6-set" + ], + "_resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "_shasum": "df8c69eef1647923c7157b9ce83840610b02cc39", + "_spec": "event-emitter@~0.3.5", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/es6-map", + "author": { + "name": "Mariusz Nowak", + "email": "medyk@medikoo.com", + "url": "http://www.medikoo.com/" + }, + "bugs": { + "url": "https://github.com/medikoo/event-emitter/issues" + }, + "bundleDependencies": false, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + }, + "deprecated": false, + "description": "Environment agnostic event emitter", + "devDependencies": { + "tad": "~0.2.7", + "xlint": "~0.2.2", + "xlint-jslint-medikoo": "~0.1.4" + }, + "homepage": "https://github.com/medikoo/event-emitter#readme", + "keywords": [ + "event", + "events", + "trigger", + "observer", + "listener", + "emitter", + "pubsub" + ], + "license": "MIT", + "name": "event-emitter", + "repository": { + "type": "git", + "url": "git://github.com/medikoo/event-emitter.git" + }, + "scripts": { + "lint": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream", + "lint-console": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch", + "test": "node ./node_modules/tad/bin/tad" + }, + "version": "0.3.5" +} diff --git a/node_modules/event-emitter/pipe.js b/node_modules/event-emitter/pipe.js new file mode 100644 index 000000000..0088efefa --- /dev/null +++ b/node_modules/event-emitter/pipe.js @@ -0,0 +1,42 @@ +'use strict'; + +var aFrom = require('es5-ext/array/from') + , remove = require('es5-ext/array/#/remove') + , value = require('es5-ext/object/valid-object') + , d = require('d') + , emit = require('./').methods.emit + + , defineProperty = Object.defineProperty + , hasOwnProperty = Object.prototype.hasOwnProperty + , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +module.exports = function (e1, e2/*, name*/) { + var pipes, pipe, desc, name; + + (value(e1) && value(e2)); + name = arguments[2]; + if (name === undefined) name = 'emit'; + + pipe = { + close: function () { remove.call(pipes, e2); } + }; + if (hasOwnProperty.call(e1, '__eePipes__')) { + (pipes = e1.__eePipes__).push(e2); + return pipe; + } + defineProperty(e1, '__eePipes__', d('c', pipes = [e2])); + desc = getOwnPropertyDescriptor(e1, name); + if (!desc) { + desc = d('c', undefined); + } else { + delete desc.get; + delete desc.set; + } + desc.value = function () { + var i, emitter, data = aFrom(pipes); + emit.apply(this, arguments); + for (i = 0; (emitter = data[i]); ++i) emit.apply(emitter, arguments); + }; + defineProperty(e1, name, desc); + return pipe; +}; diff --git a/node_modules/event-emitter/test/all-off.js b/node_modules/event-emitter/test/all-off.js new file mode 100644 index 000000000..8aa872e9c --- /dev/null +++ b/node_modules/event-emitter/test/all-off.js @@ -0,0 +1,48 @@ +'use strict'; + +var ee = require('../'); + +module.exports = function (t, a) { + var x, count, count2; + + x = ee(); + count = 0; + count2 = 0; + x.on('foo', function () { + ++count; + }); + x.on('foo', function () { + ++count; + }); + x.on('bar', function () { + ++count2; + }); + x.on('bar', function () { + ++count2; + }); + t(x, 'foo'); + x.emit('foo'); + x.emit('bar'); + a(count, 0, "All off: type"); + a(count2, 2, "All off: ohter type"); + + count = 0; + count2 = 0; + x.on('foo', function () { + ++count; + }); + x.on('foo', function () { + ++count; + }); + x.on('bar', function () { + ++count2; + }); + x.on('bar', function () { + ++count2; + }); + t(x); + x.emit('foo'); + x.emit('bar'); + a(count, 0, "All off: type"); + a(count2, 0, "All off: other type"); +}; diff --git a/node_modules/event-emitter/test/emit-error.js b/node_modules/event-emitter/test/emit-error.js new file mode 100644 index 000000000..edac350af --- /dev/null +++ b/node_modules/event-emitter/test/emit-error.js @@ -0,0 +1,14 @@ +'use strict'; + +var customError = require('es5-ext/error/custom') + , ee = require('../'); + +module.exports = function (t, a) { + var x, error = customError('Some error', 'ERROR_TEST'), emitted; + + x = ee(); + a.throws(function () { t.call(x, error); }, 'ERROR_TEST'); + x.on('error', function (err) { emitted = err; }); + t.call(x, error); + a(emitted, error); +}; diff --git a/node_modules/event-emitter/test/has-listeners.js b/node_modules/event-emitter/test/has-listeners.js new file mode 100644 index 000000000..875b048a4 --- /dev/null +++ b/node_modules/event-emitter/test/has-listeners.js @@ -0,0 +1,42 @@ +'use strict'; + +var ee = require('../'); + +module.exports = function (t) { + var x, y; + return { + Any: function (a) { + a(t(true), false, "Primitive"); + a(t({ events: [] }), false, "Other object"); + a(t(x = ee()), false, "Emitter: empty"); + + x.on('test', y = function () {}); + a(t(x), true, "Emitter: full"); + x.off('test', y); + a(t(x), false, "Emitter: empty but touched"); + x.once('test', y = function () {}); + a(t(x), true, "Emitter: full: Once"); + x.off('test', y); + a(t(x), false, "Emitter: empty but touched by once"); + }, + Specific: function (a) { + a(t(true, 'test'), false, "Primitive"); + a(t({ events: [] }, 'test'), false, "Other object"); + a(t(x = ee(), 'test'), false, "Emitter: empty"); + + x.on('test', y = function () {}); + a(t(x, 'test'), true, "Emitter: full"); + a(t(x, 'foo'), false, "Emitter: full, other event"); + x.off('test', y); + a(t(x, 'test'), false, "Emitter: empty but touched"); + a(t(x, 'foo'), false, "Emitter: empty but touched, other event"); + + x.once('test', y = function () {}); + a(t(x, 'test'), true, "Emitter: full: Once"); + a(t(x, 'foo'), false, "Emitter: full: Once, other event"); + x.off('test', y); + a(t(x, 'test'), false, "Emitter: empty but touched by once"); + a(t(x, 'foo'), false, "Emitter: empty but touched by once, other event"); + } + }; +}; diff --git a/node_modules/event-emitter/test/index.js b/node_modules/event-emitter/test/index.js new file mode 100644 index 000000000..c7c3f24c4 --- /dev/null +++ b/node_modules/event-emitter/test/index.js @@ -0,0 +1,107 @@ +'use strict'; + +module.exports = function (t, a) { + var x = t(), y, count, count2, count3, count4, test, listener1, listener2; + + x.emit('none'); + + test = "Once: "; + count = 0; + x.once('foo', function (a1, a2, a3) { + a(this, x, test + "Context"); + a.deep([a1, a2, a3], ['foo', x, 15], test + "Arguments"); + ++count; + }); + + x.emit('foobar'); + a(count, 0, test + "Not invoked on other event"); + x.emit('foo', 'foo', x, 15); + a(count, 1, test + "Emitted"); + x.emit('foo'); + a(count, 1, test + "Emitted once"); + + test = "On & Once: "; + count = 0; + x.on('foo', listener1 = function (a1, a2, a3) { + a(this, x, test + "Context"); + a.deep([a1, a2, a3], ['foo', x, 15], test + "Arguments"); + ++count; + }); + count2 = 0; + x.once('foo', listener2 = function (a1, a2, a3) { + a(this, x, test + "Context"); + a.deep([a1, a2, a3], ['foo', x, 15], test + "Arguments"); + ++count2; + }); + + x.emit('foobar'); + a(count, 0, test + "Not invoked on other event"); + x.emit('foo', 'foo', x, 15); + a(count, 1, test + "Emitted"); + x.emit('foo', 'foo', x, 15); + a(count, 2, test + "Emitted twice"); + a(count2, 1, test + "Emitted once"); + x.off('foo', listener1); + x.emit('foo'); + a(count, 2, test + "Not emitter after off"); + + count = 0; + x.once('foo', listener1 = function () { ++count; }); + + x.off('foo', listener1); + x.emit('foo'); + a(count, 0, "Once Off: Not emitted"); + + count = 0; + x.on('foo', listener2 = function () {}); + x.once('foo', listener1 = function () { ++count; }); + + x.off('foo', listener1); + x.emit('foo'); + a(count, 0, "Once Off (multi): Not emitted"); + x.off('foo', listener2); + + test = "Prototype Share: "; + + y = Object.create(x); + + count = 0; + count2 = 0; + count3 = 0; + count4 = 0; + x.on('foo', function () { + ++count; + }); + y.on('foo', function () { + ++count2; + }); + x.once('foo', function () { + ++count3; + }); + y.once('foo', function () { + ++count4; + }); + x.emit('foo'); + a(count, 1, test + "x on count"); + a(count2, 0, test + "y on count"); + a(count3, 1, test + "x once count"); + a(count4, 0, test + "y once count"); + + y.emit('foo'); + a(count, 1, test + "x on count"); + a(count2, 1, test + "y on count"); + a(count3, 1, test + "x once count"); + a(count4, 1, test + "y once count"); + + x.emit('foo'); + a(count, 2, test + "x on count"); + a(count2, 1, test + "y on count"); + a(count3, 1, test + "x once count"); + a(count4, 1, test + "y once count"); + + y.emit('foo'); + a(count, 2, test + "x on count"); + a(count2, 2, test + "y on count"); + a(count3, 1, test + "x once count"); + a(count4, 1, test + "y once count"); +}; diff --git a/node_modules/event-emitter/test/pipe.js b/node_modules/event-emitter/test/pipe.js new file mode 100644 index 000000000..9d15d6dae --- /dev/null +++ b/node_modules/event-emitter/test/pipe.js @@ -0,0 +1,53 @@ +'use strict'; + +var ee = require('../'); + +module.exports = function (t, a) { + var x = {}, y = {}, z = {}, count, count2, count3, pipe; + + ee(x); + x = Object.create(x); + ee(y); + ee(z); + + count = 0; + count2 = 0; + count3 = 0; + x.on('foo', function () { + ++count; + }); + y.on('foo', function () { + ++count2; + }); + z.on('foo', function () { + ++count3; + }); + + x.emit('foo'); + a(count, 1, "Pre pipe, x"); + a(count2, 0, "Pre pipe, y"); + a(count3, 0, "Pre pipe, z"); + + pipe = t(x, y); + x.emit('foo'); + a(count, 2, "Post pipe, x"); + a(count2, 1, "Post pipe, y"); + a(count3, 0, "Post pipe, z"); + + y.emit('foo'); + a(count, 2, "Post pipe, on y, x"); + a(count2, 2, "Post pipe, on y, y"); + a(count3, 0, "Post pipe, on y, z"); + + t(x, z); + x.emit('foo'); + a(count, 3, "Post pipe z, x"); + a(count2, 3, "Post pipe z, y"); + a(count3, 1, "Post pipe z, z"); + + pipe.close(); + x.emit('foo'); + a(count, 4, "Close pipe y, x"); + a(count2, 3, "Close pipe y, y"); + a(count3, 2, "Close pipe y, z"); +}; diff --git a/node_modules/event-emitter/test/unify.js b/node_modules/event-emitter/test/unify.js new file mode 100644 index 000000000..69295e065 --- /dev/null +++ b/node_modules/event-emitter/test/unify.js @@ -0,0 +1,123 @@ +'use strict'; + +var ee = require('../'); + +module.exports = function (t) { + + return { + "": function (a) { + var x = {}, y = {}, z = {}, count, count2, count3; + + ee(x); + ee(y); + ee(z); + + count = 0; + count2 = 0; + count3 = 0; + x.on('foo', function () { ++count; }); + y.on('foo', function () { ++count2; }); + z.on('foo', function () { ++count3; }); + + x.emit('foo'); + a(count, 1, "Pre unify, x"); + a(count2, 0, "Pre unify, y"); + a(count3, 0, "Pre unify, z"); + + t(x, y); + a(x.__ee__, y.__ee__, "Post unify y"); + x.emit('foo'); + a(count, 2, "Post unify, x"); + a(count2, 1, "Post unify, y"); + a(count3, 0, "Post unify, z"); + + y.emit('foo'); + a(count, 3, "Post unify, on y, x"); + a(count2, 2, "Post unify, on y, y"); + a(count3, 0, "Post unify, on y, z"); + + t(x, z); + a(x.__ee__, x.__ee__, "Post unify z"); + x.emit('foo'); + a(count, 4, "Post unify z, x"); + a(count2, 3, "Post unify z, y"); + a(count3, 1, "Post unify z, z"); + }, + "On empty": function (a) { + var x = {}, y = {}, z = {}, count, count2, count3; + + ee(x); + ee(y); + ee(z); + + count = 0; + count2 = 0; + count3 = 0; + y.on('foo', function () { ++count2; }); + x.emit('foo'); + a(count, 0, "Pre unify, x"); + a(count2, 0, "Pre unify, y"); + a(count3, 0, "Pre unify, z"); + + t(x, y); + a(x.__ee__, y.__ee__, "Post unify y"); + x.on('foo', function () { ++count; }); + x.emit('foo'); + a(count, 1, "Post unify, x"); + a(count2, 1, "Post unify, y"); + a(count3, 0, "Post unify, z"); + + y.emit('foo'); + a(count, 2, "Post unify, on y, x"); + a(count2, 2, "Post unify, on y, y"); + a(count3, 0, "Post unify, on y, z"); + + t(x, z); + a(x.__ee__, z.__ee__, "Post unify z"); + z.on('foo', function () { ++count3; }); + x.emit('foo'); + a(count, 3, "Post unify z, x"); + a(count2, 3, "Post unify z, y"); + a(count3, 1, "Post unify z, z"); + }, + Many: function (a) { + var x = {}, y = {}, z = {}, count, count2, count3; + + ee(x); + ee(y); + ee(z); + + count = 0; + count2 = 0; + count3 = 0; + x.on('foo', function () { ++count; }); + y.on('foo', function () { ++count2; }); + y.on('foo', function () { ++count2; }); + z.on('foo', function () { ++count3; }); + + x.emit('foo'); + a(count, 1, "Pre unify, x"); + a(count2, 0, "Pre unify, y"); + a(count3, 0, "Pre unify, z"); + + t(x, y); + a(x.__ee__, y.__ee__, "Post unify y"); + x.emit('foo'); + a(count, 2, "Post unify, x"); + a(count2, 2, "Post unify, y"); + a(count3, 0, "Post unify, z"); + + y.emit('foo'); + a(count, 3, "Post unify, on y, x"); + a(count2, 4, "Post unify, on y, y"); + a(count3, 0, "Post unify, on y, z"); + + t(x, z); + a(x.__ee__, x.__ee__, "Post unify z"); + x.emit('foo'); + a(count, 4, "Post unify z, x"); + a(count2, 6, "Post unify z, y"); + a(count3, 1, "Post unify z, z"); + } + }; +}; diff --git a/node_modules/event-emitter/unify.js b/node_modules/event-emitter/unify.js new file mode 100644 index 000000000..c6a858a0b --- /dev/null +++ b/node_modules/event-emitter/unify.js @@ -0,0 +1,50 @@ +'use strict'; + +var forEach = require('es5-ext/object/for-each') + , validValue = require('es5-ext/object/valid-object') + + , push = Array.prototype.apply, defineProperty = Object.defineProperty + , create = Object.create, hasOwnProperty = Object.prototype.hasOwnProperty + , d = { configurable: true, enumerable: false, writable: true }; + +module.exports = function (e1, e2) { + var data; + (validValue(e1) && validValue(e2)); + if (!hasOwnProperty.call(e1, '__ee__')) { + if (!hasOwnProperty.call(e2, '__ee__')) { + d.value = create(null); + defineProperty(e1, '__ee__', d); + defineProperty(e2, '__ee__', d); + d.value = null; + return; + } + d.value = e2.__ee__; + defineProperty(e1, '__ee__', d); + d.value = null; + return; + } + data = d.value = e1.__ee__; + if (!hasOwnProperty.call(e2, '__ee__')) { + defineProperty(e2, '__ee__', d); + d.value = null; + return; + } + if (data === e2.__ee__) return; + forEach(e2.__ee__, function (listener, name) { + if (!data[name]) { + data[name] = listener; + return; + } + if (typeof data[name] === 'object') { + if (typeof listener === 'object') push.apply(data[name], listener); + else data[name].push(listener); + } else if (typeof listener === 'object') { + listener.unshift(data[name]); + data[name] = listener; + } else { + data[name] = [data[name], listener]; + } + }); + defineProperty(e2, '__ee__', d); + d.value = null; +}; diff --git a/node_modules/eventemitter3/LICENSE b/node_modules/eventemitter3/LICENSE new file mode 100644 index 000000000..abcbd54e5 --- /dev/null +++ b/node_modules/eventemitter3/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Arnout Kazemier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/eventemitter3/README.md b/node_modules/eventemitter3/README.md new file mode 100644 index 000000000..ff2096540 --- /dev/null +++ b/node_modules/eventemitter3/README.md @@ -0,0 +1,89 @@ +# EventEmitter3 + +[![Version npm](https://img.shields.io/npm/v/eventemitter3.svg?style=flat-square)](http://browsenpm.org/package/eventemitter3)[![Build Status](https://img.shields.io/travis/primus/eventemitter3/master.svg?style=flat-square)](https://travis-ci.org/primus/eventemitter3)[![Dependencies](https://img.shields.io/david/primus/eventemitter3.svg?style=flat-square)](https://david-dm.org/primus/eventemitter3)[![Coverage Status](https://img.shields.io/coveralls/primus/eventemitter3/master.svg?style=flat-square)](https://coveralls.io/r/primus/eventemitter3?branch=master)[![IRC channel](https://img.shields.io/badge/IRC-irc.freenode.net%23primus-00a8ff.svg?style=flat-square)](https://webchat.freenode.net/?channels=primus) + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/eventemitter3.svg)](https://saucelabs.com/u/eventemitter3) + +EventEmitter3 is a high performance EventEmitter. It has been micro-optimized +for various of code paths making this, one of, if not the fastest EventEmitter +available for Node.js and browsers. The module is API compatible with the +EventEmitter that ships by default with Node.js but there are some slight +differences: + +- Domain support has been removed. +- We do not `throw` an error when you emit an `error` event and nobody is + listening. +- The `newListener` event is removed as the use-cases for this functionality are + really just edge cases. +- No `setMaxListeners` and it's pointless memory leak warnings. If you want to + add `end` listeners you should be able to do that without modules complaining. +- No `listenerCount` function. Use `EE.listeners(event).length` instead. +- Support for custom context for events so there is no need to use `fn.bind`. +- `listeners` method can do existence checking instead of returning only arrays. + +It's a drop in replacement for existing EventEmitters, but just faster. Free +performance, who wouldn't want that? The EventEmitter is written in EcmaScript 3 +so it will work in the oldest browsers and node versions that you need to +support. + +## Installation + +```bash +$ npm install --save eventemitter3 # npm +$ component install primus/eventemitter3 # Component +$ bower install eventemitter3 # Bower +``` + +## Usage + +After installation the only thing you need to do is require the module: + +```js +var EventEmitter = require('eventemitter3'); +``` + +And you're ready to create your own EventEmitter instances. For the API +documentation, please follow the official Node.js documentation: + +http://nodejs.org/api/events.html + +### Contextual emits + +We've upgraded the API of the `EventEmitter.on`, `EventEmitter.once` and +`EventEmitter.removeListener` to accept an extra argument which is the `context` +or `this` value that should be set for the emitted events. This means you no +longer have the overhead of an event that required `fn.bind` in order to get a +custom `this` value. + +```js +var EE = new EventEmitter() + , context = { foo: 'bar' }; + +function emitted() { + console.log(this === context); // true +} + +EE.once('event-name', emitted, context); +EE.on('another-event', emitted, context); +EE.removeListener('another-event', emitted, context); +``` + +### Existence + +To check if there is already a listener for a given event you can supply the +`listeners` method with an extra boolean argument. This will transform the +output from an array, to a boolean value which indicates if there are listeners +in place for the given event: + +```js +var EE = new EventEmitter(); +EE.once('event-name', function () {}); +EE.on('another-event', function () {}); + +EE.listeners('event-name', true); // returns true +EE.listeners('unknown-name', true); // returns false +``` + +## License + +[MIT](LICENSE) diff --git a/node_modules/eventemitter3/index.js b/node_modules/eventemitter3/index.js new file mode 100644 index 000000000..40819dfe8 --- /dev/null +++ b/node_modules/eventemitter3/index.js @@ -0,0 +1,289 @@ +'use strict'; + +var has = Object.prototype.hasOwnProperty; + +// +// We store our EE objects in a plain object whose properties are event names. +// If `Object.create(null)` is not supported we prefix the event names with a +// `~` to make sure that the built-in object properties are not overridden or +// used as an attack vector. +// We also assume that `Object.create(null)` is available when the event name +// is an ES6 Symbol. +// +var prefix = typeof Object.create !== 'function' ? '~' : false; + +/** + * Representation of a single EventEmitter function. + * + * @param {Function} fn Event handler to be called. + * @param {Mixed} context Context for function execution. + * @param {Boolean} [once=false] Only emit once + * @api private + */ +function EE(fn, context, once) { + this.fn = fn; + this.context = context; + this.once = once || false; +} + +/** + * Minimal EventEmitter interface that is molded against the Node.js + * EventEmitter interface. + * + * @constructor + * @api public + */ +function EventEmitter() { /* Nothing to set */ } + +/** + * Hold the assigned EventEmitters by name. + * + * @type {Object} + * @private + */ +EventEmitter.prototype._events = undefined; + +/** + * Return an array listing the events for which the emitter has registered + * listeners. + * + * @returns {Array} + * @api public + */ +EventEmitter.prototype.eventNames = function eventNames() { + var events = this._events + , names = [] + , name; + + if (!events) return names; + + for (name in events) { + if (has.call(events, name)) names.push(prefix ? name.slice(1) : name); + } + + if (Object.getOwnPropertySymbols) { + return names.concat(Object.getOwnPropertySymbols(events)); + } + + return names; +}; + +/** + * Return a list of assigned event listeners. + * + * @param {String} event The events that should be listed. + * @param {Boolean} exists We only need to know if there are listeners. + * @returns {Array|Boolean} + * @api public + */ +EventEmitter.prototype.listeners = function listeners(event, exists) { + var evt = prefix ? prefix + event : event + , available = this._events && this._events[evt]; + + if (exists) return !!available; + if (!available) return []; + if (available.fn) return [available.fn]; + + for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) { + ee[i] = available[i].fn; + } + + return ee; +}; + +/** + * Emit an event to all registered event listeners. + * + * @param {String} event The name of the event. + * @returns {Boolean} Indication if we've emitted an event. + * @api public + */ +EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { + var evt = prefix ? prefix + event : event; + + if (!this._events || !this._events[evt]) return false; + + var listeners = this._events[evt] + , len = arguments.length + , args + , i; + + if ('function' === typeof listeners.fn) { + if (listeners.once) this.removeListener(event, listeners.fn, undefined, true); + + switch (len) { + case 1: return listeners.fn.call(listeners.context), true; + case 2: return listeners.fn.call(listeners.context, a1), true; + case 3: return listeners.fn.call(listeners.context, a1, a2), true; + case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true; + case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; + case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; + } + + for (i = 1, args = new Array(len -1); i < len; i++) { + args[i - 1] = arguments[i]; + } + + listeners.fn.apply(listeners.context, args); + } else { + var length = listeners.length + , j; + + for (i = 0; i < length; i++) { + if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true); + + switch (len) { + case 1: listeners[i].fn.call(listeners[i].context); break; + case 2: listeners[i].fn.call(listeners[i].context, a1); break; + case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break; + default: + if (!args) for (j = 1, args = new Array(len -1); j < len; j++) { + args[j - 1] = arguments[j]; + } + + listeners[i].fn.apply(listeners[i].context, args); + } + } + } + + return true; +}; + +/** + * Register a new EventListener for the given event. + * + * @param {String} event Name of the event. + * @param {Function} fn Callback function. + * @param {Mixed} [context=this] The context of the function. + * @api public + */ +EventEmitter.prototype.on = function on(event, fn, context) { + var listener = new EE(fn, context || this) + , evt = prefix ? prefix + event : event; + + if (!this._events) this._events = prefix ? {} : Object.create(null); + if (!this._events[evt]) this._events[evt] = listener; + else { + if (!this._events[evt].fn) this._events[evt].push(listener); + else this._events[evt] = [ + this._events[evt], listener + ]; + } + + return this; +}; + +/** + * Add an EventListener that's only called once. + * + * @param {String} event Name of the event. + * @param {Function} fn Callback function. + * @param {Mixed} [context=this] The context of the function. + * @api public + */ +EventEmitter.prototype.once = function once(event, fn, context) { + var listener = new EE(fn, context || this, true) + , evt = prefix ? prefix + event : event; + + if (!this._events) this._events = prefix ? {} : Object.create(null); + if (!this._events[evt]) this._events[evt] = listener; + else { + if (!this._events[evt].fn) this._events[evt].push(listener); + else this._events[evt] = [ + this._events[evt], listener + ]; + } + + return this; +}; + +/** + * Remove event listeners. + * + * @param {String} event The event we want to remove. + * @param {Function} fn The listener that we need to find. + * @param {Mixed} context Only remove listeners matching this context. + * @param {Boolean} once Only remove once listeners. + * @api public + */ +EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) { + var evt = prefix ? prefix + event : event; + + if (!this._events || !this._events[evt]) return this; + + var listeners = this._events[evt] + , events = []; + + if (fn) { + if (listeners.fn) { + if ( + listeners.fn !== fn + || (once && !listeners.once) + || (context && listeners.context !== context) + ) { + events.push(listeners); + } + } else { + for (var i = 0, length = listeners.length; i < length; i++) { + if ( + listeners[i].fn !== fn + || (once && !listeners[i].once) + || (context && listeners[i].context !== context) + ) { + events.push(listeners[i]); + } + } + } + } + + // + // Reset the array, or remove it completely if we have no more listeners. + // + if (events.length) { + this._events[evt] = events.length === 1 ? events[0] : events; + } else { + delete this._events[evt]; + } + + return this; +}; + +/** + * Remove all listeners or only the listeners for the specified event. + * + * @param {String} event The event want to remove all listeners for. + * @api public + */ +EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) { + if (!this._events) return this; + + if (event) delete this._events[prefix ? prefix + event : event]; + else this._events = prefix ? {} : Object.create(null); + + return this; +}; + +// +// Alias methods names because people roll like that. +// +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; +EventEmitter.prototype.addListener = EventEmitter.prototype.on; + +// +// This function doesn't apply anymore. +// +EventEmitter.prototype.setMaxListeners = function setMaxListeners() { + return this; +}; + +// +// Expose the prefix. +// +EventEmitter.prefixed = prefix; + +// +// Expose the module. +// +if ('undefined' !== typeof module) { + module.exports = EventEmitter; +} diff --git a/node_modules/eventemitter3/package.json b/node_modules/eventemitter3/package.json new file mode 100644 index 000000000..9ab743ba7 --- /dev/null +++ b/node_modules/eventemitter3/package.json @@ -0,0 +1,75 @@ +{ + "_from": "eventemitter3@1.x.x", + "_id": "eventemitter3@1.2.0", + "_inBundle": false, + "_integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "_location": "/eventemitter3", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "eventemitter3@1.x.x", + "name": "eventemitter3", + "escapedName": "eventemitter3", + "rawSpec": "1.x.x", + "saveSpec": null, + "fetchSpec": "1.x.x" + }, + "_requiredBy": [ + "/http-proxy" + ], + "_resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "_shasum": "1c86991d816ad1e504750e73874224ecf3bec508", + "_spec": "eventemitter3@1.x.x", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/http-proxy", + "author": { + "name": "Arnout Kazemier" + }, + "bugs": { + "url": "https://github.com/primus/eventemitter3/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "EventEmitter3 focuses on performance while maintaining a Node.js AND browser compatible interface.", + "devDependencies": { + "assume": "1.3.x", + "istanbul": "0.4.x", + "mocha": "2.4.x", + "pre-commit": "1.1.x", + "zuul": "3.10.x" + }, + "homepage": "https://github.com/primus/eventemitter3#readme", + "keywords": [ + "EventEmitter", + "EventEmitter2", + "EventEmitter3", + "Events", + "addEventListener", + "addListener", + "emit", + "emits", + "emitter", + "event", + "once", + "pub/sub", + "publish", + "reactor", + "subscribe" + ], + "license": "MIT", + "main": "index.js", + "name": "eventemitter3", + "pre-commit": "sync, test", + "repository": { + "type": "git", + "url": "git://github.com/primus/eventemitter3.git" + }, + "scripts": { + "coverage": "istanbul cover _mocha -- test.js", + "sync": "node versions.js", + "test": "mocha test.js", + "test-browser": "zuul -- test.js", + "test-node": "istanbul cover _mocha --report lcovonly -- test.js" + }, + "version": "1.2.0" +} diff --git a/node_modules/events/.npmignore b/node_modules/events/.npmignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/node_modules/events/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/events/.travis.yml b/node_modules/events/.travis.yml new file mode 100644 index 000000000..002b04229 --- /dev/null +++ b/node_modules/events/.travis.yml @@ -0,0 +1,8 @@ +sudo: false +language: node_js +node_js: +- '0.10' +env: + global: + - secure: XcBiD8yReflut9q7leKsigDZ0mI3qTKH+QrNVY8DaqlomJOZw8aOrVuX9Jz12l86ZJ41nbxmKnRNkFzcVr9mbP9YaeTb3DpeOBWmvaoSfud9Wnc16VfXtc1FCcwDhSVcSiM3UtnrmFU5cH+Dw1LPh5PbfylYOS/nJxUvG0FFLqI= + - secure: jNWtEbqhUdQ0xXDHvCYfUbKYeJCi6a7B4LsrcxYCyWWn4NIgncE5x2YbB+FSUUFVYfz0dsn5RKP1oHB99f0laUEo18HBNkrAS/rtyOdVzcpJjbQ6kgSILGjnJD/Ty1B57Rcz3iyev5Y7bLZ6Y1FbDnk/i9/l0faOGz8vTC3Vdkc= diff --git a/node_modules/events/.zuul.yml b/node_modules/events/.zuul.yml new file mode 100644 index 000000000..a8e35afd3 --- /dev/null +++ b/node_modules/events/.zuul.yml @@ -0,0 +1,12 @@ +ui: mocha-qunit +browsers: + - name: chrome + version: latest + - name: firefox + version: latest + - name: safari + version: 5..latest + - name: iphone + version: latest + - name: ie + version: 8..latest diff --git a/node_modules/events/History.md b/node_modules/events/History.md new file mode 100644 index 000000000..b345858e7 --- /dev/null +++ b/node_modules/events/History.md @@ -0,0 +1,42 @@ +# 1.1.1 (2016-06-22) + + - add more context to errors if they are not instanceof Error + +# 1.1.0 (2015-09-29) + + - add Emitter#listerCount (to match node v4 api) + +# 1.0.2 (2014-08-28) + + - remove un-reachable code + - update devDeps + +## 1.0.1 / 2014-05-11 + + - check for console.trace before using it + +## 1.0.0 / 2013-12-10 + + - Update to latest events code from node.js 0.10 + - copy tests from node.js + +## 0.4.0 / 2011-07-03 ## + + - Switching to graphquire@0.8.0 + +## 0.3.0 / 2011-07-03 ## + + - Switching to URL based module require. + +## 0.2.0 / 2011-06-10 ## + + - Simplified package structure. + - Graphquire for dependency management. + +## 0.1.1 / 2011-05-16 ## + + - Unhandled errors are logged via console.error + +## 0.1.0 / 2011-04-22 ## + + - Initial release diff --git a/node_modules/events/LICENSE b/node_modules/events/LICENSE new file mode 100644 index 000000000..52ed3b0a6 --- /dev/null +++ b/node_modules/events/LICENSE @@ -0,0 +1,22 @@ +MIT + +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/node_modules/events/Readme.md b/node_modules/events/Readme.md new file mode 100644 index 000000000..02694efa6 --- /dev/null +++ b/node_modules/events/Readme.md @@ -0,0 +1,19 @@ +# events [![Build Status](https://travis-ci.org/Gozala/events.png?branch=master)](https://travis-ci.org/Gozala/events) + +Node's event emitter for all engines. + +## Install ## + +``` +npm install events +``` + +## Require ## + +```javascript +var EventEmitter = require('events').EventEmitter +``` + +## Usage ## + +See the [node.js event emitter docs](http://nodejs.org/api/events.html) diff --git a/node_modules/events/events.js b/node_modules/events/events.js new file mode 100644 index 000000000..1619a623a --- /dev/null +++ b/node_modules/events/events.js @@ -0,0 +1,302 @@ +// 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. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + } else if (isObject(handler)) { + args = Array.prototype.slice.call(arguments, 1); + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.prototype.listenerCount = function(type) { + if (this._events) { + var evlistener = this._events[type]; + + if (isFunction(evlistener)) + return 1; + else if (evlistener) + return evlistener.length; + } + return 0; +}; + +EventEmitter.listenerCount = function(emitter, type) { + return emitter.listenerCount(type); +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} diff --git a/node_modules/events/package.json b/node_modules/events/package.json new file mode 100644 index 000000000..11c427aa0 --- /dev/null +++ b/node_modules/events/package.json @@ -0,0 +1,63 @@ +{ + "_from": "events@^1.0.0", + "_id": "events@1.1.1", + "_inBundle": false, + "_integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "_location": "/events", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "events@^1.0.0", + "name": "events", + "escapedName": "events", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "_shasum": "9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", + "_spec": "events@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com", + "url": "http://jeditoolkit.com" + }, + "bugs": { + "url": "http://github.com/Gozala/events/issues/" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Node's event emitter for all engines.", + "devDependencies": { + "mocha": "~1.21.4", + "zuul": "~1.10.2" + }, + "engines": { + "node": ">=0.4.x" + }, + "homepage": "https://github.com/Gozala/events#readme", + "id": "events", + "keywords": [ + "events", + "eventEmitter", + "eventDispatcher", + "listeners" + ], + "license": "MIT", + "main": "./events.js", + "name": "events", + "repository": { + "type": "git", + "url": "git://github.com/Gozala/events.git", + "web": "https://github.com/Gozala/events" + }, + "scripts": { + "test": "mocha --ui qunit -- tests/index.js && zuul -- tests/index.js" + }, + "version": "1.1.1" +} diff --git a/node_modules/events/tests/add-listeners.js b/node_modules/events/tests/add-listeners.js new file mode 100644 index 000000000..5ab874cea --- /dev/null +++ b/node_modules/events/tests/add-listeners.js @@ -0,0 +1,63 @@ +// 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 assert = require('assert'); +var events = require('../'); + +var e = new events.EventEmitter(); + +var events_new_listener_emited = []; +var listeners_new_listener_emited = []; +var times_hello_emited = 0; + +// sanity check +assert.equal(e.addListener, e.on); + +e.on('newListener', function(event, listener) { + console.log('newListener: ' + event); + events_new_listener_emited.push(event); + listeners_new_listener_emited.push(listener); +}); + +function hello(a, b) { + console.log('hello'); + times_hello_emited += 1; + assert.equal('a', a); + assert.equal('b', b); +} +e.on('hello', hello); + +var foo = function() {}; +e.once('foo', foo); + +console.log('start'); + +e.emit('hello', 'a', 'b'); + + +// just make sure that this doesn't throw: +var f = new events.EventEmitter(); +f.setMaxListeners(0); + +assert.deepEqual(['hello', 'foo'], events_new_listener_emited); +assert.deepEqual([hello, foo], listeners_new_listener_emited); +assert.equal(1, times_hello_emited); + diff --git a/node_modules/events/tests/check-listener-leaks.js b/node_modules/events/tests/check-listener-leaks.js new file mode 100644 index 000000000..e07866a50 --- /dev/null +++ b/node_modules/events/tests/check-listener-leaks.js @@ -0,0 +1,86 @@ +// 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 assert = require('assert'); +var events = require('../'); + +var e = new events.EventEmitter(); + +// default +for (var i = 0; i < 10; i++) { + e.on('default', function() {}); +} +assert.ok(!e._events['default'].hasOwnProperty('warned')); +e.on('default', function() {}); +assert.ok(e._events['default'].warned); + +// specific +e.setMaxListeners(5); +for (var i = 0; i < 5; i++) { + e.on('specific', function() {}); +} +assert.ok(!e._events['specific'].hasOwnProperty('warned')); +e.on('specific', function() {}); +assert.ok(e._events['specific'].warned); + +// only one +e.setMaxListeners(1); +e.on('only one', function() {}); +assert.ok(!e._events['only one'].hasOwnProperty('warned')); +e.on('only one', function() {}); +assert.ok(e._events['only one'].hasOwnProperty('warned')); + +// unlimited +e.setMaxListeners(0); +for (var i = 0; i < 1000; i++) { + e.on('unlimited', function() {}); +} +assert.ok(!e._events['unlimited'].hasOwnProperty('warned')); + +// process-wide +events.EventEmitter.defaultMaxListeners = 42; +e = new events.EventEmitter(); + +for (var i = 0; i < 42; ++i) { + e.on('fortytwo', function() {}); +} +assert.ok(!e._events['fortytwo'].hasOwnProperty('warned')); +e.on('fortytwo', function() {}); +assert.ok(e._events['fortytwo'].hasOwnProperty('warned')); +delete e._events['fortytwo'].warned; + +events.EventEmitter.defaultMaxListeners = 44; +e.on('fortytwo', function() {}); +assert.ok(!e._events['fortytwo'].hasOwnProperty('warned')); +e.on('fortytwo', function() {}); +assert.ok(e._events['fortytwo'].hasOwnProperty('warned')); + +// but _maxListeners still has precedence over defaultMaxListeners +events.EventEmitter.defaultMaxListeners = 42; +e = new events.EventEmitter(); +e.setMaxListeners(1); +e.on('uno', function() {}); +assert.ok(!e._events['uno'].hasOwnProperty('warned')); +e.on('uno', function() {}); +assert.ok(e._events['uno'].hasOwnProperty('warned')); + +// chainable +assert.strictEqual(e, e.setMaxListeners(1)); diff --git a/node_modules/events/tests/common.js b/node_modules/events/tests/common.js new file mode 100644 index 000000000..66f70a390 --- /dev/null +++ b/node_modules/events/tests/common.js @@ -0,0 +1,42 @@ +var assert = require('assert'); + +var mustCallChecks = []; + +function runCallChecks() { + var failed_count = 0; + for (var i=0 ; i< mustCallChecks.length; ++i) { + var context = mustCallChecks[i]; + if (context.actual === context.expected) { + continue; + } + + failed_count++; + console.log('Mismatched %s function calls. Expected %d, actual %d.', + context.name, + context.expected, + context.actual); + console.log(context.stack.split('\n').slice(2).join('\n')); + } + + assert(failed_count === 0); +} + +after(runCallChecks); + +exports.mustCall = function(fn, expected) { + if (typeof expected !== 'number') expected = 1; + + var context = { + expected: expected, + actual: 0, + stack: (new Error).stack, + name: fn.name || '' + }; + + mustCallChecks.push(context); + + return function() { + context.actual++; + return fn.apply(this, arguments); + }; +}; diff --git a/node_modules/events/tests/index.js b/node_modules/events/tests/index.js new file mode 100644 index 000000000..f144530b9 --- /dev/null +++ b/node_modules/events/tests/index.js @@ -0,0 +1,25 @@ + +require('./legacy-compat'); + +// we do this to easily wrap each file in a mocha test +// and also have browserify be able to statically analyze this file +var orig_require = require; +var require = function(file) { + test(file, function() { + orig_require(file); + }); +} + +require('./add-listeners.js'); +require('./check-listener-leaks.js'); +require('./listener-count.js'); +require('./listeners-side-effects.js'); +require('./listeners.js'); +require('./max-listeners.js'); +require('./modify-in-emit.js'); +require('./num-args.js'); +require('./once.js'); +require('./set-max-listeners-side-effects.js'); +require('./subclass.js'); +require('./remove-all-listeners.js'); +require('./remove-listeners.js'); diff --git a/node_modules/events/tests/legacy-compat.js b/node_modules/events/tests/legacy-compat.js new file mode 100644 index 000000000..afbc0ab83 --- /dev/null +++ b/node_modules/events/tests/legacy-compat.js @@ -0,0 +1,18 @@ +// sigh... life is hard +if (!global.console) { + console = {} +} + +var fns = ['log', 'error', 'trace']; +for (var i=0 ; ifoo should not be emitted', '!'); +}; + +e.once('foo', remove); +e.removeListener('foo', remove); +e.emit('foo'); + +var times_recurse_emitted = 0; + +e.once('e', function() { + e.emit('e'); + times_recurse_emitted++; +}); + +e.once('e', function() { + times_recurse_emitted++; +}); + +e.emit('e'); + +assert.equal(1, times_hello_emited); +assert.equal(2, times_recurse_emitted); diff --git a/node_modules/events/tests/remove-all-listeners.js b/node_modules/events/tests/remove-all-listeners.js new file mode 100644 index 000000000..b3dc886e7 --- /dev/null +++ b/node_modules/events/tests/remove-all-listeners.js @@ -0,0 +1,80 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var common = require('./common'); +var assert = require('assert'); +var events = require('../'); + +var after_checks = []; +after(function() { + for (var i=0 ; i +// { key: , +// iv: } + +const cipher = crypto.createCipheriv('aes-256-cbc', result.key, result.iv) +``` + +## LICENSE [MIT](LICENSE) + +[1]: https://wiki.openssl.org/index.php/Manual:EVP_BytesToKey(3) +[2]: https://nodejs.org/api/crypto.html#crypto_class_hash diff --git a/node_modules/evp_bytestokey/index.js b/node_modules/evp_bytestokey/index.js new file mode 100644 index 000000000..f9d4757dd --- /dev/null +++ b/node_modules/evp_bytestokey/index.js @@ -0,0 +1,45 @@ +var Buffer = require('safe-buffer').Buffer +var MD5 = require('md5.js') + +/* eslint-disable camelcase */ +function EVP_BytesToKey (password, salt, keyBits, ivLen) { + if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary') + if (salt) { + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary') + if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length') + } + + var keyLen = keyBits / 8 + var key = Buffer.alloc(keyLen) + var iv = Buffer.alloc(ivLen || 0) + var tmp = Buffer.alloc(0) + + while (keyLen > 0 || ivLen > 0) { + var hash = new MD5() + hash.update(tmp) + hash.update(password) + if (salt) hash.update(salt) + tmp = hash.digest() + + var used = 0 + + if (keyLen > 0) { + var keyStart = key.length - keyLen + used = Math.min(keyLen, tmp.length) + tmp.copy(key, keyStart, 0, used) + keyLen -= used + } + + if (used < tmp.length && ivLen > 0) { + var ivStart = iv.length - ivLen + var length = Math.min(ivLen, tmp.length - used) + tmp.copy(iv, ivStart, used, used + length) + ivLen -= length + } + } + + tmp.fill(0) + return { key: key, iv: iv } +} + +module.exports = EVP_BytesToKey diff --git a/node_modules/evp_bytestokey/package.json b/node_modules/evp_bytestokey/package.json new file mode 100644 index 000000000..7bcfa4aa1 --- /dev/null +++ b/node_modules/evp_bytestokey/package.json @@ -0,0 +1,78 @@ +{ + "_from": "evp_bytestokey@^1.0.0", + "_id": "evp_bytestokey@1.0.3", + "_inBundle": false, + "_integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "_location": "/evp_bytestokey", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "evp_bytestokey@^1.0.0", + "name": "evp_bytestokey", + "escapedName": "evp_bytestokey", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/browserify-aes", + "/browserify-cipher", + "/parse-asn1" + ], + "_resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "_shasum": "7fcbdb198dc71959432efe13842684e0525acb02", + "_spec": "evp_bytestokey@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/browserify-cipher", + "author": { + "name": "Calvin Metcalf", + "email": "calvin.metcalf@gmail.com" + }, + "bugs": { + "url": "https://github.com/crypto-browserify/EVP_BytesToKey/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Kirill Fomichev", + "email": "fanatid@ya.ru" + } + ], + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + }, + "deprecated": false, + "description": "The insecure key derivation algorithm from OpenSSL", + "devDependencies": { + "bindings": "^1.2.1", + "nan": "^2.4.0", + "nyc": "^8.1.0", + "standard": "^8.0.0", + "tape": "^4.6.0" + }, + "files": [ + "index.js" + ], + "gypfile": false, + "homepage": "https://github.com/crypto-browserify/EVP_BytesToKey", + "keywords": [ + "crypto", + "openssl" + ], + "license": "MIT", + "main": "index.js", + "name": "evp_bytestokey", + "repository": { + "type": "git", + "url": "git+https://github.com/crypto-browserify/EVP_BytesToKey.git" + }, + "scripts": { + "coverage": "nyc tape test/*.js", + "lint": "standard", + "test": "npm run lint && npm run unit", + "test:prepare": "node-gyp rebuild", + "unit": "tape test/*.js" + }, + "version": "1.0.3" +} diff --git a/node_modules/execa/index.js b/node_modules/execa/index.js new file mode 100644 index 000000000..74ba8ee2d --- /dev/null +++ b/node_modules/execa/index.js @@ -0,0 +1,309 @@ +'use strict'; +const childProcess = require('child_process'); +const util = require('util'); +const crossSpawn = require('cross-spawn'); +const stripEof = require('strip-eof'); +const npmRunPath = require('npm-run-path'); +const isStream = require('is-stream'); +const _getStream = require('get-stream'); +const pFinally = require('p-finally'); +const onExit = require('signal-exit'); +const errname = require('./lib/errname'); +const stdio = require('./lib/stdio'); + +const TEN_MEGABYTES = 1000 * 1000 * 10; + +function handleArgs(cmd, args, opts) { + let parsed; + + if (opts && opts.env && opts.extendEnv !== false) { + opts.env = Object.assign({}, process.env, opts.env); + } + + if (opts && opts.__winShell === true) { + delete opts.__winShell; + parsed = { + command: cmd, + args, + options: opts, + file: cmd, + original: cmd + }; + } else { + parsed = crossSpawn._parse(cmd, args, opts); + } + + opts = Object.assign({ + maxBuffer: TEN_MEGABYTES, + stripEof: true, + preferLocal: true, + localDir: parsed.options.cwd || process.cwd(), + encoding: 'utf8', + reject: true, + cleanup: true + }, parsed.options); + + opts.stdio = stdio(opts); + + if (opts.preferLocal) { + opts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir})); + } + + return { + cmd: parsed.command, + args: parsed.args, + opts, + parsed + }; +} + +function handleInput(spawned, opts) { + const input = opts.input; + + if (input === null || input === undefined) { + return; + } + + if (isStream(input)) { + input.pipe(spawned.stdin); + } else { + spawned.stdin.end(input); + } +} + +function handleOutput(opts, val) { + if (val && opts.stripEof) { + val = stripEof(val); + } + + return val; +} + +function handleShell(fn, cmd, opts) { + let file = '/bin/sh'; + let args = ['-c', cmd]; + + opts = Object.assign({}, opts); + + if (process.platform === 'win32') { + opts.__winShell = true; + file = process.env.comspec || 'cmd.exe'; + args = ['/s', '/c', `"${cmd}"`]; + opts.windowsVerbatimArguments = true; + } + + if (opts.shell) { + file = opts.shell; + delete opts.shell; + } + + return fn(file, args, opts); +} + +function getStream(process, stream, encoding, maxBuffer) { + if (!process[stream]) { + return null; + } + + let ret; + + if (encoding) { + ret = _getStream(process[stream], { + encoding, + maxBuffer + }); + } else { + ret = _getStream.buffer(process[stream], {maxBuffer}); + } + + return ret.catch(err => { + err.stream = stream; + err.message = `${stream} ${err.message}`; + throw err; + }); +} + +module.exports = (cmd, args, opts) => { + let joinedCmd = cmd; + + if (Array.isArray(args) && args.length > 0) { + joinedCmd += ' ' + args.join(' '); + } + + const parsed = handleArgs(cmd, args, opts); + const encoding = parsed.opts.encoding; + const maxBuffer = parsed.opts.maxBuffer; + + let spawned; + try { + spawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts); + } catch (err) { + return Promise.reject(err); + } + + let removeExitHandler; + if (parsed.opts.cleanup) { + removeExitHandler = onExit(() => { + spawned.kill(); + }); + } + + let timeoutId = null; + let timedOut = false; + + const cleanupTimeout = () => { + if (timeoutId) { + clearTimeout(timeoutId); + timeoutId = null; + } + }; + + if (parsed.opts.timeout > 0) { + timeoutId = setTimeout(() => { + timeoutId = null; + timedOut = true; + spawned.kill(parsed.opts.killSignal); + }, parsed.opts.timeout); + } + + const processDone = new Promise(resolve => { + spawned.on('exit', (code, signal) => { + cleanupTimeout(); + resolve({code, signal}); + }); + + spawned.on('error', err => { + cleanupTimeout(); + resolve({err}); + }); + + if (spawned.stdin) { + spawned.stdin.on('error', err => { + cleanupTimeout(); + resolve({err}); + }); + } + }); + + function destroy() { + if (spawned.stdout) { + spawned.stdout.destroy(); + } + + if (spawned.stderr) { + spawned.stderr.destroy(); + } + } + + const promise = pFinally(Promise.all([ + processDone, + getStream(spawned, 'stdout', encoding, maxBuffer), + getStream(spawned, 'stderr', encoding, maxBuffer) + ]).then(arr => { + const result = arr[0]; + const stdout = arr[1]; + const stderr = arr[2]; + + let err = result.err; + const code = result.code; + const signal = result.signal; + + if (removeExitHandler) { + removeExitHandler(); + } + + if (err || code !== 0 || signal !== null) { + if (!err) { + let output = ''; + + if (Array.isArray(parsed.opts.stdio)) { + if (parsed.opts.stdio[2] !== 'inherit') { + output += output.length > 0 ? stderr : `\n${stderr}`; + } + + if (parsed.opts.stdio[1] !== 'inherit') { + output += `\n${stdout}`; + } + } else if (parsed.opts.stdio !== 'inherit') { + output = `\n${stderr}${stdout}`; + } + + err = new Error(`Command failed: ${joinedCmd}${output}`); + err.code = code < 0 ? errname(code) : code; + } + + // TODO: missing some timeout logic for killed + // https://github.com/nodejs/node/blob/master/lib/child_process.js#L203 + // err.killed = spawned.killed || killed; + err.killed = err.killed || spawned.killed; + + err.stdout = stdout; + err.stderr = stderr; + err.failed = true; + err.signal = signal || null; + err.cmd = joinedCmd; + err.timedOut = timedOut; + + if (!parsed.opts.reject) { + return err; + } + + throw err; + } + + return { + stdout: handleOutput(parsed.opts, stdout), + stderr: handleOutput(parsed.opts, stderr), + code: 0, + failed: false, + killed: false, + signal: null, + cmd: joinedCmd, + timedOut: false + }; + }), destroy); + + crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed); + + handleInput(spawned, parsed.opts); + + spawned.then = promise.then.bind(promise); + spawned.catch = promise.catch.bind(promise); + + return spawned; +}; + +module.exports.stdout = function () { + // TODO: set `stderr: 'ignore'` when that option is implemented + return module.exports.apply(null, arguments).then(x => x.stdout); +}; + +module.exports.stderr = function () { + // TODO: set `stdout: 'ignore'` when that option is implemented + return module.exports.apply(null, arguments).then(x => x.stderr); +}; + +module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts); + +module.exports.sync = (cmd, args, opts) => { + const parsed = handleArgs(cmd, args, opts); + + if (isStream(parsed.opts.input)) { + throw new TypeError('The `input` option cannot be a stream in sync mode'); + } + + const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts); + + if (result.error || result.status !== 0) { + throw (result.error || new Error(result.stderr === '' ? result.stdout : result.stderr)); + } + + result.stdout = handleOutput(parsed.opts, result.stdout); + result.stderr = handleOutput(parsed.opts, result.stderr); + + return result; +}; + +module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts); + +module.exports.spawn = util.deprecate(module.exports, 'execa.spawn() is deprecated. Use execa() instead.'); diff --git a/node_modules/execa/lib/errname.js b/node_modules/execa/lib/errname.js new file mode 100644 index 000000000..328f3e35d --- /dev/null +++ b/node_modules/execa/lib/errname.js @@ -0,0 +1,37 @@ +'use strict'; +// The Node team wants to deprecate `process.bind(...)`. +// https://github.com/nodejs/node/pull/2768 +// +// However, we need the 'uv' binding for errname support. +// This is a defensive wrapper around it so `execa` will not fail entirely if it stops working someday. +// +// If this ever stops working. See: https://github.com/sindresorhus/execa/issues/31#issuecomment-215939939 for another possible solution. +let uv; + +try { + uv = process.binding('uv'); + + if (typeof uv.errname !== 'function') { + throw new TypeError('uv.errname is not a function'); + } +} catch (err) { + console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err); + uv = null; +} + +function errname(uv, code) { + if (uv) { + return uv.errname(code); + } + + if (!(code < 0)) { + throw new Error('err >= 0'); + } + + return `Unknown system error ${code}`; +} + +module.exports = code => errname(uv, code); + +// Used for testing the fallback behavior +module.exports.__test__ = errname; diff --git a/node_modules/execa/lib/stdio.js b/node_modules/execa/lib/stdio.js new file mode 100644 index 000000000..a82d46838 --- /dev/null +++ b/node_modules/execa/lib/stdio.js @@ -0,0 +1,41 @@ +'use strict'; +const alias = ['stdin', 'stdout', 'stderr']; + +const hasAlias = opts => alias.some(x => Boolean(opts[x])); + +module.exports = opts => { + if (!opts) { + return null; + } + + if (opts.stdio && hasAlias(opts)) { + throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`); + } + + if (typeof opts.stdio === 'string') { + return opts.stdio; + } + + const stdio = opts.stdio || []; + + if (!Array.isArray(stdio)) { + throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``); + } + + const result = []; + const len = Math.max(stdio.length, alias.length); + + for (let i = 0; i < len; i++) { + let value = null; + + if (stdio[i] !== undefined) { + value = stdio[i]; + } else if (opts[alias[i]] !== undefined) { + value = opts[alias[i]]; + } + + result[i] = value; + } + + return result; +}; diff --git a/node_modules/execa/license b/node_modules/execa/license new file mode 100644 index 000000000..e7af2f771 --- /dev/null +++ b/node_modules/execa/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/execa/package.json b/node_modules/execa/package.json new file mode 100644 index 000000000..a4881a617 --- /dev/null +++ b/node_modules/execa/package.json @@ -0,0 +1,108 @@ +{ + "_from": "execa@^0.7.0", + "_id": "execa@0.7.0", + "_inBundle": false, + "_integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "_location": "/execa", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "execa@^0.7.0", + "name": "execa", + "escapedName": "execa", + "rawSpec": "^0.7.0", + "saveSpec": null, + "fetchSpec": "^0.7.0" + }, + "_requiredBy": [ + "/os-locale" + ], + "_resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "_shasum": "944becd34cc41ee32a63a9faf27ad5a65fc59777", + "_spec": "execa@^0.7.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/os-locale", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/execa/issues" + }, + "bundleDependencies": false, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "deprecated": false, + "description": "A better `child_process`", + "devDependencies": { + "ava": "*", + "cat-names": "^1.0.2", + "coveralls": "^2.11.9", + "delay": "^2.0.0", + "is-running": "^2.0.0", + "nyc": "^11.0.2", + "tempfile": "^2.0.0", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js", + "lib" + ], + "homepage": "https://github.com/sindresorhus/execa#readme", + "keywords": [ + "exec", + "child", + "process", + "execute", + "fork", + "execfile", + "spawn", + "file", + "shell", + "bin", + "binary", + "binaries", + "npm", + "path", + "local" + ], + "license": "MIT", + "maintainers": [ + { + "name": "James Talmage", + "email": "james@talmage.io", + "url": "github.com/jamestalmage" + } + ], + "name": "execa", + "nyc": { + "reporter": [ + "text", + "lcov" + ], + "exclude": [ + "**/fixtures/**", + "**/test.js", + "**/test/**" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/execa.git" + }, + "scripts": { + "test": "xo && nyc ava" + }, + "version": "0.7.0" +} diff --git a/node_modules/execa/readme.md b/node_modules/execa/readme.md new file mode 100644 index 000000000..18c808aa6 --- /dev/null +++ b/node_modules/execa/readme.md @@ -0,0 +1,279 @@ +# execa [![Build Status: Linux](https://travis-ci.org/sindresorhus/execa.svg?branch=master)](https://travis-ci.org/sindresorhus/execa) [![Build status: Windows](https://ci.appveyor.com/api/projects/status/x5ajamxtjtt93cqv/branch/master?svg=true)](https://ci.appveyor.com/project/sindresorhus/execa/branch/master) [![Coverage Status](https://coveralls.io/repos/github/sindresorhus/execa/badge.svg?branch=master)](https://coveralls.io/github/sindresorhus/execa?branch=master) + +> A better [`child_process`](https://nodejs.org/api/child_process.html) + + +## Why + +- Promise interface. +- [Strips EOF](https://github.com/sindresorhus/strip-eof) from the output so you don't have to `stdout.trim()`. +- Supports [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) binaries cross-platform. +- [Improved Windows support.](https://github.com/IndigoUnited/node-cross-spawn#why) +- Higher max buffer. 10 MB instead of 200 KB. +- [Executes locally installed binaries by name.](#preferlocal) +- [Cleans up spawned processes when the parent process dies.](#cleanup) + + +## Install + +``` +$ npm install --save execa +``` + + +## Usage + +```js +const execa = require('execa'); + +execa('echo', ['unicorns']).then(result => { + console.log(result.stdout); + //=> 'unicorns' +}); + +// pipe the child process stdout to the current stdout +execa('echo', ['unicorns']).stdout.pipe(process.stdout); + +execa.shell('echo unicorns').then(result => { + console.log(result.stdout); + //=> 'unicorns' +}); + +// example of catching an error +execa.shell('exit 3').catch(error => { + console.log(error); + /* + { + message: 'Command failed: /bin/sh -c exit 3' + killed: false, + code: 3, + signal: null, + cmd: '/bin/sh -c exit 3', + stdout: '', + stderr: '', + timedOut: false + } + */ +}); +``` + + +## API + +### execa(file, [arguments], [options]) + +Execute a file. + +Think of this as a mix of `child_process.execFile` and `child_process.spawn`. + +Returns a [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess), which is enhanced to also be a `Promise` for a result `Object` with `stdout` and `stderr` properties. + +### execa.stdout(file, [arguments], [options]) + +Same as `execa()`, but returns only `stdout`. + +### execa.stderr(file, [arguments], [options]) + +Same as `execa()`, but returns only `stderr`. + +### execa.shell(command, [options]) + +Execute a command through the system shell. Prefer `execa()` whenever possible, as it's both faster and safer. + +Returns a [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess). + +The `child_process` instance is enhanced to also be promise for a result object with `stdout` and `stderr` properties. + +### execa.sync(file, [arguments], [options]) + +Execute a file synchronously. + +Returns the same result object as [`child_process.spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options). + +This method throws an `Error` if the command fails. + +### execa.shellSync(file, [options]) + +Execute a command synchronously through the system shell. + +Returns the same result object as [`child_process.spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options). + +### options + +Type: `Object` + +#### cwd + +Type: `string`
+Default: `process.cwd()` + +Current working directory of the child process. + +#### env + +Type: `Object`
+Default: `process.env` + +Environment key-value pairs. Extends automatically from `process.env`. Set `extendEnv` to `false` if you don't want this. + +#### extendEnv + +Type: `boolean`
+Default: `true` + +Set to `false` if you don't want to extend the environment variables when providing the `env` property. + +#### argv0 + +Type: `string` + +Explicitly set the value of `argv[0]` sent to the child process. This will be set to `command` or `file` if not specified. + +#### stdio + +Type: `Array` `string`
+Default: `pipe` + +Child's [stdio](https://nodejs.org/api/child_process.html#child_process_options_stdio) configuration. + +#### detached + +Type: `boolean` + +Prepare child to run independently of its parent process. Specific behavior [depends on the platform](https://nodejs.org/api/child_process.html#child_process_options_detached). + +#### uid + +Type: `number` + +Sets the user identity of the process. + +#### gid + +Type: `number` + +Sets the group identity of the process. + +#### shell + +Type: `boolean` `string`
+Default: `false` + +If `true`, runs `command` inside of a shell. Uses `/bin/sh` on UNIX and `cmd.exe` on Windows. A different shell can be specified as a string. The shell should understand the `-c` switch on UNIX or `/d /s /c` on Windows. + +#### stripEof + +Type: `boolean`
+Default: `true` + +[Strip EOF](https://github.com/sindresorhus/strip-eof) (last newline) from the output. + +#### preferLocal + +Type: `boolean`
+Default: `true` + +Prefer locally installed binaries when looking for a binary to execute.
+If you `$ npm install foo`, you can then `execa('foo')`. + +#### localDir + +Type: `string`
+Default: `process.cwd()` + +Preferred path to find locally installed binaries in (use with `preferLocal`). + +#### input + +Type: `string` `Buffer` `stream.Readable` + +Write some input to the `stdin` of your binary.
+Streams are not allowed when using the synchronous methods. + +#### reject + +Type: `boolean`
+Default: `true` + +Setting this to `false` resolves the promise with the error instead of rejecting it. + +#### cleanup + +Type: `boolean`
+Default: `true` + +Keep track of the spawned process and `kill` it when the parent process exits. + +#### encoding + +Type: `string`
+Default: `utf8` + +Specify the character encoding used to decode the `stdout` and `stderr` output. + +#### timeout + +Type: `number`
+Default: `0` + +If timeout is greater than `0`, the parent will send the signal identified by the `killSignal` property (the default is `SIGTERM`) if the child runs longer than timeout milliseconds. + +#### maxBuffer + +Type: `number`
+Default: `10000000` (10MB) + +Largest amount of data in bytes allowed on `stdout` or `stderr`. + +#### killSignal + +Type: `string` `number`
+Default: `SIGTERM` + +Signal value to be used when the spawned process will be killed. + +#### stdin + +Type: `string` `number` `Stream` `undefined` `null`
+Default: `pipe` + +Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio). + +#### stdout + +Type: `string` `number` `Stream` `undefined` `null`
+Default: `pipe` + +Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio). + +#### stderr + +Type: `string` `number` `Stream` `undefined` `null`
+Default: `pipe` + +Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio). + + +## Tips + +### Save and pipe output from a child process + +Let's say you want to show the output of a child process in real-time while also saving it to a variable. + +```js +const execa = require('execa'); +const getStream = require('get-stream'); + +const stream = execa('echo', ['foo']).stdout; + +stream.pipe(process.stdout); + +getStream(stream).then(value => { + console.log('child output:', value); +}); +``` + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/expand-brackets/LICENSE b/node_modules/expand-brackets/LICENSE new file mode 100644 index 000000000..1e49edf81 --- /dev/null +++ b/node_modules/expand-brackets/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/expand-brackets/README.md b/node_modules/expand-brackets/README.md new file mode 100644 index 000000000..d3c913e7a --- /dev/null +++ b/node_modules/expand-brackets/README.md @@ -0,0 +1,107 @@ +# 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/node_modules/expand-brackets/index.js b/node_modules/expand-brackets/index.js new file mode 100644 index 000000000..b843cc2b1 --- /dev/null +++ b/node_modules/expand-brackets/index.js @@ -0,0 +1,163 @@ +/*! + * 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/node_modules/expand-brackets/package.json b/node_modules/expand-brackets/package.json new file mode 100644 index 000000000..20fccab60 --- /dev/null +++ b/node_modules/expand-brackets/package.json @@ -0,0 +1,93 @@ +{ + "_from": "expand-brackets@^0.1.4", + "_id": "expand-brackets@0.1.5", + "_inBundle": false, + "_integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "_location": "/expand-brackets", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "expand-brackets@^0.1.4", + "name": "expand-brackets", + "escapedName": "expand-brackets", + "rawSpec": "^0.1.4", + "saveSpec": null, + "fetchSpec": "^0.1.4" + }, + "_requiredBy": [ + "/micromatch" + ], + "_resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "_shasum": "df07284e342a807cd733ac5af72411e581d1177b", + "_spec": "expand-brackets@^0.1.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/micromatch", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/expand-brackets/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "deprecated": false, + "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" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/expand-brackets", + "keywords": [ + "bracket", + "character class", + "expression", + "posix" + ], + "license": "MIT", + "main": "index.js", + "name": "expand-brackets", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/expand-brackets.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "extglob", + "is-extglob", + "is-glob", + "is-posix-bracket", + "micromatch" + ] + }, + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + }, + "version": "0.1.5" +} diff --git a/node_modules/expand-range/LICENSE b/node_modules/expand-range/LICENSE new file mode 100644 index 000000000..b1e51ff71 --- /dev/null +++ b/node_modules/expand-range/LICENSE @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/expand-range/README.md b/node_modules/expand-range/README.md new file mode 100644 index 000000000..72c7e8c6c --- /dev/null +++ b/node_modules/expand-range/README.md @@ -0,0 +1,145 @@ +# 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/node_modules/expand-range/index.js b/node_modules/expand-range/index.js new file mode 100644 index 000000000..369962a87 --- /dev/null +++ b/node_modules/expand-range/index.js @@ -0,0 +1,43 @@ +/*! + * 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/node_modules/expand-range/package.json b/node_modules/expand-range/package.json new file mode 100644 index 000000000..d6146e915 --- /dev/null +++ b/node_modules/expand-range/package.json @@ -0,0 +1,104 @@ +{ + "_from": "expand-range@^1.8.1", + "_id": "expand-range@1.8.2", + "_inBundle": false, + "_integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "_location": "/expand-range", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "expand-range@^1.8.1", + "name": "expand-range", + "escapedName": "expand-range", + "rawSpec": "^1.8.1", + "saveSpec": null, + "fetchSpec": "^1.8.1" + }, + "_requiredBy": [ + "/braces" + ], + "_resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "_shasum": "a299effd335fe2721ebae8e257ec79644fc85337", + "_spec": "expand-range@^1.8.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/braces", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/expand-range/issues" + }, + "bundleDependencies": false, + "dependencies": { + "fill-range": "^2.1.0" + }, + "deprecated": false, + "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" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "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", + "name": "expand-range", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/expand-range.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "plugins": [ + "gulp-format-md" + ], + "reflinks": [ + "verb" + ], + "toc": false, + "layout": "default", + "lint": { + "reflinks": true + }, + "tasks": [ + "readme" + ], + "related": { + "list": [ + "micromatch", + "fill-range", + "braces" + ] + } + }, + "version": "1.8.2" +} diff --git a/node_modules/extglob/LICENSE b/node_modules/extglob/LICENSE new file mode 100644 index 000000000..65f90aca8 --- /dev/null +++ b/node_modules/extglob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/extglob/README.md b/node_modules/extglob/README.md new file mode 100644 index 000000000..666440669 --- /dev/null +++ b/node_modules/extglob/README.md @@ -0,0 +1,88 @@ +# 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/node_modules/extglob/index.js b/node_modules/extglob/index.js new file mode 100644 index 000000000..2e774d4aa --- /dev/null +++ b/node_modules/extglob/index.js @@ -0,0 +1,178 @@ +/*! + * 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/node_modules/extglob/package.json b/node_modules/extglob/package.json new file mode 100644 index 000000000..63dcf0f66 --- /dev/null +++ b/node_modules/extglob/package.json @@ -0,0 +1,85 @@ +{ + "_from": "extglob@^0.3.1", + "_id": "extglob@0.3.2", + "_inBundle": false, + "_integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "_location": "/extglob", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "extglob@^0.3.1", + "name": "extglob", + "escapedName": "extglob", + "rawSpec": "^0.3.1", + "saveSpec": null, + "fetchSpec": "^0.3.1" + }, + "_requiredBy": [ + "/micromatch" + ], + "_resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "_shasum": "2e18ff3d2f49ab2765cec9023f011daa8d8349a1", + "_spec": "extglob@^0.3.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/micromatch", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/extglob/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "deprecated": false, + "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" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/extglob", + "keywords": [ + "bash", + "extended", + "extglob", + "glob", + "ksh", + "match", + "wildcard" + ], + "license": "MIT", + "main": "index.js", + "name": "extglob", + "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/node_modules/fast-deep-equal/.eslintrc.yml b/node_modules/fast-deep-equal/.eslintrc.yml new file mode 100644 index 000000000..14ab1fb97 --- /dev/null +++ b/node_modules/fast-deep-equal/.eslintrc.yml @@ -0,0 +1,25 @@ +env: + node: true +extends: 'eslint:recommended' +rules: + indent: [ 2, 2, { SwitchCase: 1 } ] + no-trailing-spaces: 2 + quotes: [ 2, single, avoid-escape ] + linebreak-style: [ 2, unix ] + semi: [ 2, always ] + valid-jsdoc: [ 2, { requireReturn: false } ] + no-invalid-this: 2 + no-unused-vars: [ 2, { args: none } ] + no-console: [ 2, { allow: [ warn, error ] } ] + block-scoped-var: 2 + curly: [ 2, multi-or-nest, consistent ] + dot-location: [ 2, property ] + dot-notation: 2 + no-else-return: 2 + no-eq-null: 2 + no-fallthrough: 2 + no-return-assign: 2 + strict: [ 2, global ] + no-use-before-define: [ 2, nofunc ] + callback-return: 2 + no-path-concat: 2 diff --git a/node_modules/fast-deep-equal/.npmignore b/node_modules/fast-deep-equal/.npmignore new file mode 100644 index 000000000..d09355793 --- /dev/null +++ b/node_modules/fast-deep-equal/.npmignore @@ -0,0 +1,60 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +.DS_Store diff --git a/node_modules/fast-deep-equal/.travis.yml b/node_modules/fast-deep-equal/.travis.yml new file mode 100644 index 000000000..7ddce74b8 --- /dev/null +++ b/node_modules/fast-deep-equal/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "4" + - "6" + - "7" + - "8" +after_script: + - coveralls < coverage/lcov.info diff --git a/node_modules/fast-deep-equal/LICENSE b/node_modules/fast-deep-equal/LICENSE new file mode 100644 index 000000000..7f1543566 --- /dev/null +++ b/node_modules/fast-deep-equal/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/fast-deep-equal/README.md b/node_modules/fast-deep-equal/README.md new file mode 100644 index 000000000..ee83edd45 --- /dev/null +++ b/node_modules/fast-deep-equal/README.md @@ -0,0 +1,55 @@ +# fast-deep-equal +The fastest deep equal + +[![Build Status](https://travis-ci.org/epoberezkin/fast-deep-equal.svg?branch=master)](https://travis-ci.org/epoberezkin/fast-deep-equal) +[![npm version](https://badge.fury.io/js/fast-deep-equal.svg)](http://badge.fury.io/js/fast-deep-equal) +[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/fast-deep-equal/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/fast-deep-equal?branch=master) + + +## Install + +```bash +npm install fast-deep-equal +``` + + +## Features + +- ES5 compatible +- works in node.js (0.10+) and browsers (IE9+) +- checks equality of Date and RegExp objects by value. + + +## Usage + +```javascript +var equal = require('fast-deep-equal'); +console.log(equal({foo: 'bar'}, {foo: 'bar'})); // true +``` + + +## Performance benchmark + +``` +fast-deep-equal x 82,915 ops/sec ±0.63% (89 runs sampled) +nano-equal x 50,506 ops/sec ±2.23% (86 runs sampled) +shallow-equal-fuzzy x 14,873 ops/sec ±3.19% (83 runs sampled) +underscore.isEqual x 16,055 ops/sec ±2.29% (85 runs sampled) +lodash.isEqual x 10,740 ops/sec ±1.04% (89 runs sampled) +deep-equal x 12,276 ops/sec ±2.44% (84 runs sampled) +deep-eql x 10,565 ops/sec ±0.89% (90 runs sampled) +assert.deepStrictEqual x 965 ops/sec ±2.99% (81 runs sampled) +The fastest is fast-deep-equal +``` + +To run benchmark (requires node.js 6+): + +```bash +npm install +node benchmark +``` + + +## License + +[MIT](https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE) diff --git a/node_modules/fast-deep-equal/benchmark/.eslintrc.yml b/node_modules/fast-deep-equal/benchmark/.eslintrc.yml new file mode 100644 index 000000000..32a081d84 --- /dev/null +++ b/node_modules/fast-deep-equal/benchmark/.eslintrc.yml @@ -0,0 +1,5 @@ +parserOptions: + ecmaVersion: 2016 +rules: + no-invalid-this: 0 + no-console: 0 diff --git a/node_modules/fast-deep-equal/benchmark/index.js b/node_modules/fast-deep-equal/benchmark/index.js new file mode 100644 index 000000000..ed01a39fb --- /dev/null +++ b/node_modules/fast-deep-equal/benchmark/index.js @@ -0,0 +1,56 @@ +'use strict'; + +const assertDeepStrictEqual = require('assert').deepStrictEqual; +const tests = require('../spec/tests'); +const Benchmark = require('benchmark'); +const suite = new Benchmark.Suite; + + +const equalPackages = { + 'fast-deep-equal': require('../index'), + 'nano-equal': true, + 'shallow-equal-fuzzy': true, + 'underscore.isEqual': require('underscore').isEqual, + 'lodash.isEqual': require('lodash').isEqual, + 'deep-equal': true, + 'deep-eql': true, + 'assert.deepStrictEqual': (a, b) => { + try { assertDeepStrictEqual(a, b); return true; } + catch(e) { return false; } + } +}; + + +for (const equalName in equalPackages) { + let equalFunc = equalPackages[equalName]; + if (equalFunc === true) equalFunc = require(equalName); + + for (const testSuite of tests) { + for (const test of testSuite.tests) { + try { + if (equalFunc(test.value1, test.value2) !== test.equal) + console.error('different result', equalName, testSuite.description, test.description); + } catch(e) { + console.error(equalName, testSuite.description, test.description, e); + } + } + } + + suite.add(equalName, function() { + for (const testSuite of tests) { + for (const test of testSuite.tests) { + if (test.description != 'pseudo array and equivalent array are not equal') + equalFunc(test.value1, test.value2); + } + } + }); +} + +console.log(); + +suite + .on('cycle', (event) => console.log(String(event.target))) + .on('complete', function () { + console.log('The fastest is ' + this.filter('fastest').map('name')); + }) + .run({async: true}); diff --git a/node_modules/fast-deep-equal/index.js b/node_modules/fast-deep-equal/index.js new file mode 100644 index 000000000..a29572d71 --- /dev/null +++ b/node_modules/fast-deep-equal/index.js @@ -0,0 +1,43 @@ +'use strict'; + +module.exports = function equal(a, b) { + if (a === b) return true; + + var arrA = Array.isArray(a) + , arrB = Array.isArray(b) + , i; + + if (arrA && arrB) { + if (a.length != b.length) return false; + for (i = 0; i < a.length; i++) + if (!equal(a[i], b[i])) return false; + return true; + } + + if (arrA != arrB) return false; + + if (a && b && typeof a === 'object' && typeof b === 'object') { + var keys = Object.keys(a); + if (keys.length !== Object.keys(b).length) return false; + + var dateA = a instanceof Date + , dateB = b instanceof Date; + if (dateA && dateB) return a.getTime() == b.getTime(); + if (dateA != dateB) return false; + + var regexpA = a instanceof RegExp + , regexpB = b instanceof RegExp; + if (regexpA && regexpB) return a.toString() == b.toString(); + if (regexpA != regexpB) return false; + + for (i = 0; i < keys.length; i++) + if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; + + for (i = 0; i < keys.length; i++) + if(!equal(a[keys[i]], b[keys[i]])) return false; + + return true; + } + + return false; +}; diff --git a/node_modules/fast-deep-equal/package.json b/node_modules/fast-deep-equal/package.json new file mode 100644 index 000000000..3289ee571 --- /dev/null +++ b/node_modules/fast-deep-equal/package.json @@ -0,0 +1,78 @@ +{ + "_from": "fast-deep-equal@^1.0.0", + "_id": "fast-deep-equal@1.0.0", + "_inBundle": false, + "_integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "_location": "/fast-deep-equal", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "fast-deep-equal@^1.0.0", + "name": "fast-deep-equal", + "escapedName": "fast-deep-equal", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/ajv" + ], + "_resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "_shasum": "96256a3bc975595eb36d82e9929d060d893439ff", + "_spec": "fast-deep-equal@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/ajv", + "author": { + "name": "Evgeny Poberezkin" + }, + "bugs": { + "url": "https://github.com/epoberezkin/fast-deep-equal/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Fast deep equal", + "devDependencies": { + "benchmark": "^2.1.4", + "coveralls": "^2.13.1", + "deep-eql": "^2.0.2", + "deep-equal": "^1.0.1", + "eslint": "^4.0.0", + "lodash": "^4.17.4", + "mocha": "^3.4.2", + "nano-equal": "^1.0.1", + "nyc": "^11.0.2", + "pre-commit": "^1.2.2", + "shallow-equal-fuzzy": "0.0.2", + "underscore": "^1.8.3" + }, + "homepage": "https://github.com/epoberezkin/fast-deep-equal#readme", + "keywords": [ + "fast", + "equal", + "deep-equal" + ], + "license": "MIT", + "main": "index.js", + "name": "fast-deep-equal", + "nyc": { + "exclude": [ + "**/spec/**", + "node_modules" + ], + "reporter": [ + "lcov", + "text-summary" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/epoberezkin/fast-deep-equal.git" + }, + "scripts": { + "eslint": "eslint *.js benchmark spec", + "test": "npm run eslint && npm run test-cov", + "test-cov": "nyc npm run test-spec", + "test-spec": "mocha spec/*.spec.js -R spec" + }, + "version": "1.0.0" +} diff --git a/node_modules/fast-deep-equal/spec/.eslintrc.yml b/node_modules/fast-deep-equal/spec/.eslintrc.yml new file mode 100644 index 000000000..5869f6243 --- /dev/null +++ b/node_modules/fast-deep-equal/spec/.eslintrc.yml @@ -0,0 +1,5 @@ +rules: + no-console: 0 +globals: + describe: false + it: false diff --git a/node_modules/fast-deep-equal/spec/index.spec.js b/node_modules/fast-deep-equal/spec/index.spec.js new file mode 100644 index 000000000..1fab259ee --- /dev/null +++ b/node_modules/fast-deep-equal/spec/index.spec.js @@ -0,0 +1,18 @@ +'use strict'; + +var equal = require('../index'); +var tests = require('./tests'); +var assert = require('assert'); + + +describe('equal', function() { + tests.forEach(function (suite) { + describe(suite.description, function() { + suite.tests.forEach(function (test) { + it(test.description, function() { + assert.strictEqual(equal(test.value1, test.value2), test.equal); + }); + }); + }); + }); +}); diff --git a/node_modules/fast-deep-equal/spec/tests.js b/node_modules/fast-deep-equal/spec/tests.js new file mode 100644 index 000000000..f8d1ddf91 --- /dev/null +++ b/node_modules/fast-deep-equal/spec/tests.js @@ -0,0 +1,320 @@ +'use strict'; + +module.exports = [ + { + description: 'scalars', + tests: [ + { + description: 'equal numbers', + value1: 1, + value2: 1, + equal: true + }, + { + description: 'not equal numbers', + value1: 1, + value2: 2, + equal: false + }, + { + description: 'number and array are not equal', + value1: 1, + value2: [], + equal: false + }, + { + description: '0 and null are not equal', + value1: 0, + value2: null, + equal: false + }, + { + description: 'equal strings', + value1: 'a', + value2: 'a', + equal: true + }, + { + description: 'not equal strings', + value1: 'a', + value2: 'b', + equal: false + }, + { + description: 'empty string and null are not equal', + value1: '', + value2: null, + equal: false + }, + { + description: 'null is equal to null', + value1: null, + value2: null, + equal: true + }, + { + description: 'equal booleans (true)', + value1: true, + value2: true, + equal: true + }, + { + description: 'equal booleans (false)', + value1: false, + value2: false, + equal: true + }, + { + description: 'not equal booleans', + value1: true, + value2: false, + equal: false + }, + { + description: '1 and true are not equal', + value1: 1, + value2: true, + equal: false + }, + { + description: '0 and false are not equal', + value1: 0, + value2: false, + equal: false + } + ] + }, + + { + description: 'objects', + tests: [ + { + description: 'empty objects are equal', + value1: {}, + value2: {}, + equal: true + }, + { + description: 'equal objects (same properties "order")', + value1: {a: 1, b: '2'}, + value2: {a: 1, b: '2'}, + equal: true + }, + { + description: 'equal objects (different properties "order")', + value1: {a: 1, b: '2'}, + value2: {b: '2', a: 1}, + equal: true + }, + { + description: 'not equal objects (extra property)', + value1: {a: 1, b: '2'}, + value2: {a: 1, b: '2', c: []}, + equal: false + }, + { + description: 'not equal objects (different properties)', + value1: {a: 1, b: '2', c: 3}, + value2: {a: 1, b: '2', d: 3}, + equal: false + }, + { + description: 'not equal objects (different properties)', + value1: {a: 1, b: '2', c: 3}, + value2: {a: 1, b: '2', d: 3}, + equal: false + }, + { + description: 'equal objects (same sub-properties)', + value1: { a: [ { b: 'c' } ] }, + value2: { a: [ { b: 'c' } ] }, + equal: true + }, + { + description: 'not equal objects (different sub-property value)', + value1: { a: [ { b: 'c' } ] }, + value2: { a: [ { b: 'd' } ] }, + equal: false + }, + { + description: 'not equal objects (different sub-property)', + value1: { a: [ { b: 'c' } ] }, + value2: { a: [ { c: 'c' } ] }, + equal: false + }, + { + description: 'empty array and empty object are not equal', + value1: {}, + value2: [], + equal: false + }, + { + description: 'object with extra undefined properties are not equal #1', + value1: {}, + value2: {foo: undefined}, + equal: false + }, + { + description: 'object with extra undefined properties are not equal #2', + value1: {foo: undefined}, + value2: {}, + equal: false + }, + { + description: 'object with extra undefined properties are not equal #3', + value1: {foo: undefined}, + value2: {bar: undefined}, + equal: false + } + ] + }, + + { + description: 'arrays', + tests: [ + { + description: 'two empty arrays are equal', + value1: [], + value2: [], + equal: true + }, + { + description: 'equal arrays', + value1: [1, 2, 3], + value2: [1, 2, 3], + equal: true + }, + { + description: 'not equal arrays (different item)', + value1: [1, 2, 3], + value2: [1, 2, 4], + equal: false + }, + { + description: 'not equal arrays (different length)', + value1: [1, 2, 3], + value2: [1, 2], + equal: false + }, + { + description: 'equal arrays of objects', + value1: [{a: 'a'}, {b: 'b'}], + value2: [{a: 'a'}, {b: 'b'}], + equal: true + }, + { + description: 'not equal arrays of objects', + value1: [{a: 'a'}, {b: 'b'}], + value2: [{a: 'a'}, {b: 'c'}], + equal: false + }, + { + description: 'pseudo array and equivalent array are not equal', + value1: {'0': 0, '1': 1, length: 2}, + value2: [0, 1], + equal: false + } + ] + }, + { + description: 'Date objects', + tests: [ + { + description: 'equal date objects', + value1: new Date('2017-06-16T21:36:48.362Z'), + value2: new Date('2017-06-16T21:36:48.362Z'), + equal: true + }, + { + description: 'not equal date objects', + value1: new Date('2017-06-16T21:36:48.362Z'), + value2: new Date('2017-01-01T00:00:00.000Z'), + equal: false + }, + { + description: 'date and string are not equal', + value1: new Date('2017-06-16T21:36:48.362Z'), + value2: '2017-06-16T21:36:48.362Z', + equal: false + }, + { + description: 'date and object are not equal', + value1: new Date('2017-06-16T21:36:48.362Z'), + value2: {}, + equal: false + } + ] + }, + { + description: 'RegExp objects', + tests: [ + { + description: 'equal RegExp objects', + value1: /foo/, + value2: /foo/, + equal: true + }, + { + description: 'not equal RegExp objects (different pattern)', + value1: /foo/, + value2: /bar/, + equal: false + }, + { + description: 'not equal RegExp objects (different flags)', + value1: /foo/, + value2: /foo/i, + equal: false + }, + { + description: 'RegExp and string are not equal', + value1: /foo/, + value2: 'foo', + equal: false + }, + { + description: 'RegExp and object are not equal', + value1: /foo/, + value2: {}, + equal: false + } + ] + }, + { + description: 'sample objects', + tests: [ + { + description: 'big object', + value1: { + prop1: 'value1', + prop2: 'value2', + prop3: 'value3', + prop4: { + subProp1: 'sub value1', + subProp2: { + subSubProp1: 'sub sub value1', + subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5] + } + }, + prop5: 1000, + prop6: new Date(2016, 2, 10) + }, + value2: { + prop5: 1000, + prop3: 'value3', + prop1: 'value1', + prop2: 'value2', + prop6: new Date('2016/03/10'), + prop4: { + subProp2: { + subSubProp1: 'sub sub value1', + subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5] + }, + subProp1: 'sub value1' + } + }, + equal: true + } + ] + } +]; diff --git a/node_modules/filename-regex/LICENSE b/node_modules/filename-regex/LICENSE new file mode 100644 index 000000000..d290fe00b --- /dev/null +++ b/node_modules/filename-regex/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/filename-regex/README.md b/node_modules/filename-regex/README.md new file mode 100644 index 000000000..2b6b06999 --- /dev/null +++ b/node_modules/filename-regex/README.md @@ -0,0 +1,63 @@ +# filename-regex [![NPM version](https://img.shields.io/npm/v/filename-regex.svg?style=flat)](https://www.npmjs.com/package/filename-regex) [![NPM monthly downloads](https://img.shields.io/npm/dm/filename-regex.svg?style=flat)](https://npmjs.org/package/filename-regex) [![NPM total downloads](https://img.shields.io/npm/dt/filename-regex.svg?style=flat)](https://npmjs.org/package/filename-regex) [![Linux Build Status](https://img.shields.io/travis/regexhq/filename-regex.svg?style=flat&label=Travis)](https://travis-ci.org/regexhq/filename-regex) + +> Regular expression for matching file names, with or without extension. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save filename-regex +``` + +## 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' +``` + +## About + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.3, on April 28, 2017._ \ No newline at end of file diff --git a/node_modules/filename-regex/index.js b/node_modules/filename-regex/index.js new file mode 100644 index 000000000..bb1888b4a --- /dev/null +++ b/node_modules/filename-regex/index.js @@ -0,0 +1,10 @@ +/*! + * filename-regex + * + * Copyright (c) 2014-2015, Jon Schlinkert + * Licensed under the MIT license. + */ + +module.exports = function filenameRegex() { + return /([^\\\/]+)$/; +}; diff --git a/node_modules/filename-regex/package.json b/node_modules/filename-regex/package.json new file mode 100644 index 000000000..53c9e81b6 --- /dev/null +++ b/node_modules/filename-regex/package.json @@ -0,0 +1,81 @@ +{ + "_from": "filename-regex@^2.0.0", + "_id": "filename-regex@2.0.1", + "_inBundle": false, + "_integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "_location": "/filename-regex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "filename-regex@^2.0.0", + "name": "filename-regex", + "escapedName": "filename-regex", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/micromatch" + ], + "_resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "_shasum": "c1c4b9bee3e09725ddb106b75c1e301fe2f18b26", + "_spec": "filename-regex@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/micromatch", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/regexhq/filename-regex/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Regular expression for matching file names, with or without extension.", + "devDependencies": { + "gulp-format-md": "^0.1.12" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/regexhq/filename-regex", + "keywords": [ + "basename", + "file", + "filename", + "filepath", + "match", + "name", + "path", + "regex", + "regexp", + "regular expression" + ], + "license": "MIT", + "main": "index.js", + "name": "filename-regex", + "repository": { + "type": "git", + "url": "git+https://github.com/regexhq/filename-regex.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + }, + "version": "2.0.1" +} diff --git a/node_modules/fill-range/LICENSE b/node_modules/fill-range/LICENSE new file mode 100755 index 000000000..fa30c4cb3 --- /dev/null +++ b/node_modules/fill-range/LICENSE @@ -0,0 +1,21 @@ +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/node_modules/fill-range/README.md b/node_modules/fill-range/README.md new file mode 100755 index 000000000..c69694a38 --- /dev/null +++ b/node_modules/fill-range/README.md @@ -0,0 +1,290 @@ +# 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/node_modules/fill-range/index.js b/node_modules/fill-range/index.js new file mode 100644 index 000000000..5657051be --- /dev/null +++ b/node_modules/fill-range/index.js @@ -0,0 +1,408 @@ +/*! + * 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/node_modules/fill-range/package.json b/node_modules/fill-range/package.json new file mode 100644 index 000000000..002a79659 --- /dev/null +++ b/node_modules/fill-range/package.json @@ -0,0 +1,92 @@ +{ + "_from": "fill-range@^2.1.0", + "_id": "fill-range@2.2.3", + "_inBundle": false, + "_integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "_location": "/fill-range", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "fill-range@^2.1.0", + "name": "fill-range", + "escapedName": "fill-range", + "rawSpec": "^2.1.0", + "saveSpec": null, + "fetchSpec": "^2.1.0" + }, + "_requiredBy": [ + "/expand-range" + ], + "_resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "_shasum": "50b77dfd7e469bc7492470963699fe7a8485a723", + "_spec": "fill-range@^2.1.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/expand-range", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/fill-range/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "deprecated": false, + "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": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "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", + "name": "fill-range", + "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/node_modules/find-cache-dir/index.js b/node_modules/find-cache-dir/index.js new file mode 100644 index 000000000..2502e4433 --- /dev/null +++ b/node_modules/find-cache-dir/index.js @@ -0,0 +1,34 @@ +'use strict'; +const path = require('path'); +const commonDir = require('commondir'); +const pkgDir = require('pkg-dir'); +const makeDir = require('make-dir'); + +module.exports = options => { + const name = options.name; + let dir = options.cwd; + + if (options.files) { + dir = commonDir(dir, options.files); + } else { + dir = dir || process.cwd(); + } + + dir = pkgDir.sync(dir); + + if (dir) { + dir = path.join(dir, 'node_modules', '.cache', name); + + if (dir && options.create) { + makeDir.sync(dir); + } + + if (options.thunk) { + return function () { + return path.join.apply(path, [dir].concat(Array.prototype.slice.call(arguments))); + }; + } + } + + return dir; +}; diff --git a/node_modules/find-cache-dir/license b/node_modules/find-cache-dir/license new file mode 100644 index 000000000..ad5d021ed --- /dev/null +++ b/node_modules/find-cache-dir/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) James Talmage (github.com/jamestalmage) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/find-cache-dir/package.json b/node_modules/find-cache-dir/package.json new file mode 100644 index 000000000..e673dce0d --- /dev/null +++ b/node_modules/find-cache-dir/package.json @@ -0,0 +1,79 @@ +{ + "_from": "find-cache-dir@^1.0.0", + "_id": "find-cache-dir@1.0.0", + "_inBundle": false, + "_integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "_location": "/find-cache-dir", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "find-cache-dir@^1.0.0", + "name": "find-cache-dir", + "escapedName": "find-cache-dir", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/babel-loader" + ], + "_resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "_shasum": "9288e3e9e3cc3748717d39eade17cf71fc30ee6f", + "_spec": "find-cache-dir@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-loader", + "author": { + "name": "James Talmage", + "email": "james@talmage.io", + "url": "github.com/jamestalmage" + }, + "bugs": { + "url": "https://github.com/avajs/find-cache-dir/issues" + }, + "bundleDependencies": false, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + }, + "deprecated": false, + "description": "My well-made module", + "devDependencies": { + "ava": "^0.19.1", + "coveralls": "^2.11.6", + "del": "^2.2.2", + "nyc": "^10.3.2", + "xo": "^0.18.2" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/avajs/find-cache-dir#readme", + "keywords": [ + "cache", + "directory", + "dir", + "caching", + "find", + "search" + ], + "license": "MIT", + "name": "find-cache-dir", + "nyc": { + "reporter": [ + "lcov", + "text" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/avajs/find-cache-dir.git" + }, + "scripts": { + "test": "xo && nyc ava" + }, + "version": "1.0.0" +} diff --git a/node_modules/find-cache-dir/readme.md b/node_modules/find-cache-dir/readme.md new file mode 100644 index 000000000..447d62020 --- /dev/null +++ b/node_modules/find-cache-dir/readme.md @@ -0,0 +1,113 @@ +# find-cache-dir [![Build Status](https://travis-ci.org/avajs/find-cache-dir.svg?branch=master)](https://travis-ci.org/avajs/find-cache-dir) [![Coverage Status](https://coveralls.io/repos/github/avajs/find-cache-dir/badge.svg?branch=master)](https://coveralls.io/github/avajs/find-cache-dir?branch=master) + +> Finds the common standard cache directory + +Recently the [`nyc`](https://github.com/bcoe/nyc) and [`AVA`](https://ava.li) projects decided to standardize on a common directory structure for storing cache information: + +```sh +# nyc +./node_modules/.cache/nyc + +# ava +./node_modules/.cache/ava + +# your-module +./node_modules/.cache/your-module +``` + +This module makes it easy to correctly locate the cache directory according to this shared spec. If this pattern becomes ubiquitous, clearing the cache for multiple dependencies becomes easy and consistent: + +``` +rm -rf ./node_modules/.cache +``` + +If you decide to adopt this pattern, please file a PR adding your name to the list of adopters below. + + +## Install + +``` +$ npm install --save find-cache-dir +``` + + +## Usage + +```js +const findCacheDir = require('find-cache-dir'); + +findCacheDir({name: 'unicorns'}); +//=> '/user/path/node-modules/.cache/unicorns' +``` + + +## API + +### findCacheDir([options]) + +Finds the cache directory using the supplied options. The algorithm tries to find a `package.json` file, searching every parent directory of the `cwd` specified (or implied from other options). It returns a `string` containing the absolute path to the cache directory, or `null` if `package.json` was never found. + +#### options + +##### name + +*Required*
+Type: `string` + +Should be the same as your project name in `package.json`. + +##### files + +Type: `Array` `string + +An array of files that will be searched for a common parent directory. This common parent directory will be used in lieu of the `cwd` option below. + +##### cwd + +Type: `string`
+Default `process.cwd()` + +Directory to start searching for a `package.json` from. + +##### create + +Type: `boolean`
+Default `false` + +If `true`, the directory will be created synchronously before returning. + +##### thunk + +Type: `boolean`
+Default `false` + +If `true`, this modifies the return type to be a function that is a thunk for `path.join(theFoundCacheDirectory)`. + +```js +const thunk = findCacheDir({name: 'foo', thunk: true}); + +thunk(); +//=> '/some/path/node_modules/.cache/foo' + +thunk('bar.js') +//=> '/some/path/node_modules/.cache/foo/bar.js' + +thunk('baz', 'quz.js') +//=> '/some/path/node_modules/.cache/foo/baz/quz.js' +``` + +This is helpful for actually putting actual files in the cache! + + +## Adopters + +- [`AVA`](https://ava.li) +- [`nyc`](https://github.com/bcoe/nyc) +- [`babel-loader`](https://github.com/babel/babel-loader) +- [`eslint-loader`](https://github.com/MoOx/eslint-loader) +- [`Phenomic`](https://phenomic.io) + + +## License + +MIT © [James Talmage](https://github.com/jamestalmage) diff --git a/node_modules/find-up/index.js b/node_modules/find-up/index.js new file mode 100644 index 000000000..939c9553d --- /dev/null +++ b/node_modules/find-up/index.js @@ -0,0 +1,48 @@ +'use strict'; +const path = require('path'); +const locatePath = require('locate-path'); + +module.exports = (filename, opts) => { + opts = opts || {}; + + const startDir = path.resolve(opts.cwd || ''); + const root = path.parse(startDir).root; + + const filenames = [].concat(filename); + + return new Promise(resolve => { + (function find(dir) { + locatePath(filenames, {cwd: dir}).then(file => { + if (file) { + resolve(path.join(dir, file)); + } else if (dir === root) { + resolve(null); + } else { + find(path.dirname(dir)); + } + }); + })(startDir); + }); +}; + +module.exports.sync = (filename, opts) => { + opts = opts || {}; + + let dir = path.resolve(opts.cwd || ''); + const root = path.parse(dir).root; + + const filenames = [].concat(filename); + + // eslint-disable-next-line no-constant-condition + while (true) { + const file = locatePath.sync(filenames, {cwd: dir}); + + if (file) { + return path.join(dir, file); + } else if (dir === root) { + return null; + } + + dir = path.dirname(dir); + } +}; diff --git a/node_modules/find-up/license b/node_modules/find-up/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/find-up/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/find-up/package.json b/node_modules/find-up/package.json new file mode 100644 index 000000000..60d1d37d8 --- /dev/null +++ b/node_modules/find-up/package.json @@ -0,0 +1,86 @@ +{ + "_from": "find-up@^2.1.0", + "_id": "find-up@2.1.0", + "_inBundle": false, + "_integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "_location": "/find-up", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "find-up@^2.1.0", + "name": "find-up", + "escapedName": "find-up", + "rawSpec": "^2.1.0", + "saveSpec": null, + "fetchSpec": "^2.1.0" + }, + "_requiredBy": [ + "/pkg-dir", + "/read-pkg-up" + ], + "_resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "_shasum": "45d1b7e506c717ddd482775a2b77920a3c0c57a7", + "_spec": "find-up@^2.1.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/pkg-dir", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/find-up/issues" + }, + "bundleDependencies": false, + "dependencies": { + "locate-path": "^2.0.0" + }, + "deprecated": false, + "description": "Find a file by walking up parent directories", + "devDependencies": { + "ava": "*", + "tempfile": "^1.1.1", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/find-up#readme", + "keywords": [ + "find", + "up", + "find-up", + "findup", + "look-up", + "look", + "file", + "search", + "match", + "package", + "resolve", + "parent", + "parents", + "folder", + "directory", + "dir", + "walk", + "walking", + "path" + ], + "license": "MIT", + "name": "find-up", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/find-up.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.1.0", + "xo": { + "esnext": true + } +} diff --git a/node_modules/find-up/readme.md b/node_modules/find-up/readme.md new file mode 100644 index 000000000..b5ad69455 --- /dev/null +++ b/node_modules/find-up/readme.md @@ -0,0 +1,85 @@ +# find-up [![Build Status: Linux and macOS](https://travis-ci.org/sindresorhus/find-up.svg?branch=master)](https://travis-ci.org/sindresorhus/find-up) [![Build Status: Windows](https://ci.appveyor.com/api/projects/status/l0cyjmvh5lq72vq2/branch/master?svg=true)](https://ci.appveyor.com/project/sindresorhus/find-up/branch/master) + +> 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' +}); + +findUp(['rainbow.png', 'unicorn.png']).then(filepath => { + console.log(filepath); + //=> '/Users/sindresorhus/unicorn.png' +}); +``` + + +## API + +### findUp(filename, [options]) + +Returns a `Promise` for the filepath or `null`. + +### findUp([filenameA, filenameB], [options]) + +Returns a `Promise` for the first filepath found (by respecting the order) or `null`. + +### findUp.sync(filename, [options]) + +Returns a filepath or `null`. + +### findUp.sync([filenameA, filenameB], [options]) + +Returns the first filepath found (by respecting the order) 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](https://sindresorhus.com) diff --git a/node_modules/for-in/LICENSE b/node_modules/for-in/LICENSE new file mode 100644 index 000000000..d734237bd --- /dev/null +++ b/node_modules/for-in/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/for-in/README.md b/node_modules/for-in/README.md new file mode 100644 index 000000000..874e1895a --- /dev/null +++ b/node_modules/for-in/README.md @@ -0,0 +1,85 @@ +# for-in [![NPM version](https://img.shields.io/npm/v/for-in.svg?style=flat)](https://www.npmjs.com/package/for-in) [![NPM monthly downloads](https://img.shields.io/npm/dm/for-in.svg?style=flat)](https://npmjs.org/package/for-in) [![NPM total downloads](https://img.shields.io/npm/dt/for-in.svg?style=flat)](https://npmjs.org/package/for-in) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/for-in.svg?style=flat&label=Travis)](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 --save for-in +``` + +## 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']; +``` + +## About + +### Related projects + +* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.") +* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.") +* [for-own](https://www.npmjs.com/package/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) | [homepage](https://github.com/jonschlinkert/for-own "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.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 16 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [paulirish](https://github.com/paulirish) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 28, 2017._ \ No newline at end of file diff --git a/node_modules/for-in/index.js b/node_modules/for-in/index.js new file mode 100644 index 000000000..0b5f95f02 --- /dev/null +++ b/node_modules/for-in/index.js @@ -0,0 +1,16 @@ +/*! + * for-in + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +module.exports = function forIn(obj, fn, thisArg) { + for (var key in obj) { + if (fn.call(thisArg, obj[key], key, obj) === false) { + break; + } + } +}; diff --git a/node_modules/for-in/package.json b/node_modules/for-in/package.json new file mode 100644 index 000000000..f15473633 --- /dev/null +++ b/node_modules/for-in/package.json @@ -0,0 +1,106 @@ +{ + "_from": "for-in@^1.0.1", + "_id": "for-in@1.0.2", + "_inBundle": false, + "_integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "_location": "/for-in", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "for-in@^1.0.1", + "name": "for-in", + "escapedName": "for-in", + "rawSpec": "^1.0.1", + "saveSpec": null, + "fetchSpec": "^1.0.1" + }, + "_requiredBy": [ + "/for-own" + ], + "_resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "_shasum": "81068d295a8142ec0ac726c6e2200c30fb6d5e80", + "_spec": "for-in@^1.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/for-own", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/for-in/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Jon Schlinkert", + "email": "jon.schlinkert@sellside.com", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Paul Irish", + "url": "http://paulirish.com" + } + ], + "deprecated": false, + "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.11", + "mocha": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/for-in", + "keywords": [ + "for", + "for-in", + "for-own", + "has", + "has-own", + "hasOwn", + "in", + "key", + "keys", + "object", + "own", + "value" + ], + "license": "MIT", + "main": "index.js", + "name": "for-in", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/for-in.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "arr-flatten", + "collection-map", + "for-own" + ] + }, + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + }, + "version": "1.0.2" +} diff --git a/node_modules/for-own/LICENSE b/node_modules/for-own/LICENSE new file mode 100644 index 000000000..d290fe00b --- /dev/null +++ b/node_modules/for-own/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/for-own/README.md b/node_modules/for-own/README.md new file mode 100644 index 000000000..fd56877ae --- /dev/null +++ b/node_modules/for-own/README.md @@ -0,0 +1,85 @@ +# for-own [![NPM version](https://img.shields.io/npm/v/for-own.svg?style=flat)](https://www.npmjs.com/package/for-own) [![NPM monthly downloads](https://img.shields.io/npm/dm/for-own.svg?style=flat)](https://npmjs.org/package/for-own) [![NPM total downloads](https://img.shields.io/npm/dt/for-own.svg?style=flat)](https://npmjs.org/package/for-own) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/for-own.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/for-own) + +> 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. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save for-own +``` + +## 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']; +``` + +## About + +### Related projects + +* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.") +* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.") +* [for-in](https://www.npmjs.com/package/for-in): Iterate over the own and inherited enumerable properties of an object, and return an object… [more](https://github.com/jonschlinkert/for-in) | [homepage](https://github.com/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") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 10 | [jonschlinkert](https://github.com/jonschlinkert) | +| 1 | [javiercejudo](https://github.com/javiercejudo) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 26, 2017._ \ No newline at end of file diff --git a/node_modules/for-own/index.js b/node_modules/for-own/index.js new file mode 100644 index 000000000..74e2d7551 --- /dev/null +++ b/node_modules/for-own/index.js @@ -0,0 +1,19 @@ +/*! + * for-own + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +var forIn = require('for-in'); +var hasOwn = Object.prototype.hasOwnProperty; + +module.exports = function forOwn(obj, fn, thisArg) { + forIn(obj, function(val, key) { + if (hasOwn.call(obj, key)) { + return fn.call(thisArg, obj[key], key, obj); + } + }); +}; diff --git a/node_modules/for-own/package.json b/node_modules/for-own/package.json new file mode 100644 index 000000000..f646ebfc9 --- /dev/null +++ b/node_modules/for-own/package.json @@ -0,0 +1,109 @@ +{ + "_from": "for-own@^0.1.4", + "_id": "for-own@0.1.5", + "_inBundle": false, + "_integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "_location": "/for-own", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "for-own@^0.1.4", + "name": "for-own", + "escapedName": "for-own", + "rawSpec": "^0.1.4", + "saveSpec": null, + "fetchSpec": "^0.1.4" + }, + "_requiredBy": [ + "/object.omit" + ], + "_resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "_shasum": "5265c681a4f294dabbf17c9509b6763aa84510ce", + "_spec": "for-own@^0.1.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/object.omit", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/for-own/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Javier Cejudo", + "email": "javier@javiercejudo.com", + "url": "https://www.javiercejudo.com" + }, + { + "name": "Jon Schlinkert", + "email": "jon.schlinkert@sellside.com", + "url": "http://twitter.com/jonschlinkert" + } + ], + "dependencies": { + "for-in": "^1.0.1" + }, + "deprecated": false, + "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.11", + "mocha": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/for-own", + "keywords": [ + "for", + "for-in", + "for-own", + "has", + "has-own", + "hasOwn", + "key", + "keys", + "object", + "own", + "value" + ], + "license": "MIT", + "main": "index.js", + "name": "for-own", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/for-own.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "arr-flatten", + "collection-map", + "for-in" + ] + }, + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + }, + "version": "0.1.5" +} diff --git a/node_modules/fs-readdir-recursive/LICENSE b/node_modules/fs-readdir-recursive/LICENSE new file mode 100644 index 000000000..a7ae8ee9b --- /dev/null +++ b/node_modules/fs-readdir-recursive/LICENSE @@ -0,0 +1,22 @@ + +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/node_modules/fs-readdir-recursive/README.md b/node_modules/fs-readdir-recursive/README.md new file mode 100644 index 000000000..2dd82e13e --- /dev/null +++ b/node_modules/fs-readdir-recursive/README.md @@ -0,0 +1,61 @@ +# fs.readdirSyncRecursive + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] +[![Gittip][gittip-image]][gittip-url] + +Read a directory recursively. + +## Install + +```bash +npm install fs-readdir-recursive +``` + +## Example + +```js +var read = require('fs-readdir-recursive') +read(__dirname) === [ + 'test/test.js', + 'index.js', + 'LICENSE', + 'package.json', + 'README.md' +] +``` + +## API + +### read(root [, filter]) + +`root` is the directory you wish to scan. `filter` is an optional filter for the files. By default, filter is: + +```js +function (x) { + return x[0] !== '.' +} +``` + +Which basically just ignores `.` files. + +[npm-image]: https://img.shields.io/npm/v/fs-readdir-recursive.svg?style=flat-square +[npm-url]: https://npmjs.org/package/fs-readdir-recursive +[github-tag]: http://img.shields.io/github/tag/fs-utils/fs-readdir-recursive.svg?style=flat-square +[github-url]: https://github.com/fs-utils/fs-readdir-recursive/tags +[travis-image]: https://img.shields.io/travis/fs-utils/fs-readdir-recursive.svg?style=flat-square +[travis-url]: https://travis-ci.org/fs-utils/fs-readdir-recursive +[coveralls-image]: https://img.shields.io/coveralls/fs-utils/fs-readdir-recursive.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/fs-utils/fs-readdir-recursive +[david-image]: http://img.shields.io/david/fs-utils/fs-readdir-recursive.svg?style=flat-square +[david-url]: https://david-dm.org/fs-utils/fs-readdir-recursive +[license-image]: http://img.shields.io/npm/l/fs-readdir-recursive.svg?style=flat-square +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/fs-readdir-recursive.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/fs-readdir-recursive +[gittip-image]: https://img.shields.io/gratipay/jonathanong.svg?style=flat-square +[gittip-url]: https://gratipay.com/jonathanong/ diff --git a/node_modules/fs-readdir-recursive/index.js b/node_modules/fs-readdir-recursive/index.js new file mode 100644 index 000000000..f6a121039 --- /dev/null +++ b/node_modules/fs-readdir-recursive/index.js @@ -0,0 +1,28 @@ +var fs = require('fs') +var path = require('path') + +module.exports = read + +function read(root, filter, files, prefix) { + prefix = prefix || '' + files = files || [] + filter = filter || noDotFiles + + var dir = path.join(root, prefix) + if (!fs.existsSync(dir)) return files + if (fs.statSync(dir).isDirectory()) + fs.readdirSync(dir) + .filter(filter) + .forEach(function (name) { + read(root, filter, files, path.join(prefix, name)) + }) + else + files.push(prefix) + + return files +} + +function noDotFiles(x) { + return x[0] !== '.' +} + diff --git a/node_modules/fs-readdir-recursive/package.json b/node_modules/fs-readdir-recursive/package.json new file mode 100644 index 000000000..8e378d7cc --- /dev/null +++ b/node_modules/fs-readdir-recursive/package.json @@ -0,0 +1,57 @@ +{ + "_from": "fs-readdir-recursive@^1.0.0", + "_id": "fs-readdir-recursive@1.0.0", + "_inBundle": false, + "_integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", + "_location": "/fs-readdir-recursive", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "fs-readdir-recursive@^1.0.0", + "name": "fs-readdir-recursive", + "escapedName": "fs-readdir-recursive", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/babel-cli" + ], + "_resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", + "_shasum": "8cd1745c8b4f8a29c8caec392476921ba195f560", + "_spec": "fs-readdir-recursive@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-cli", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "bugs": { + "url": "https://github.com/fs-utils/fs-readdir-recursive/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Recursively read a directory", + "devDependencies": { + "istanbul": "0", + "mocha": "*", + "should": "*" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/fs-utils/fs-readdir-recursive#readme", + "license": "MIT", + "name": "fs-readdir-recursive", + "repository": { + "type": "git", + "url": "git+https://github.com/fs-utils/fs-readdir-recursive.git" + }, + "scripts": { + "test": "mocha --reporter spec", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" + }, + "version": "1.0.0" +} diff --git a/node_modules/fs.realpath/LICENSE b/node_modules/fs.realpath/LICENSE new file mode 100644 index 000000000..5bd884c25 --- /dev/null +++ b/node_modules/fs.realpath/LICENSE @@ -0,0 +1,43 @@ +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/node_modules/fs.realpath/README.md b/node_modules/fs.realpath/README.md new file mode 100644 index 000000000..a42ceac62 --- /dev/null +++ b/node_modules/fs.realpath/README.md @@ -0,0 +1,33 @@ +# 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/node_modules/fs.realpath/index.js b/node_modules/fs.realpath/index.js new file mode 100644 index 000000000..b09c7c7e6 --- /dev/null +++ b/node_modules/fs.realpath/index.js @@ -0,0 +1,66 @@ +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/node_modules/fs.realpath/old.js b/node_modules/fs.realpath/old.js new file mode 100644 index 000000000..b40305e73 --- /dev/null +++ b/node_modules/fs.realpath/old.js @@ -0,0 +1,303 @@ +// 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/node_modules/fs.realpath/package.json b/node_modules/fs.realpath/package.json new file mode 100644 index 000000000..e4839284a --- /dev/null +++ b/node_modules/fs.realpath/package.json @@ -0,0 +1,59 @@ +{ + "_from": "fs.realpath@^1.0.0", + "_id": "fs.realpath@1.0.0", + "_inBundle": false, + "_integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "_location": "/fs.realpath", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "fs.realpath@^1.0.0", + "name": "fs.realpath", + "escapedName": "fs.realpath", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "_shasum": "1504ad2523158caa40db4a2787cb01411994ea4f", + "_spec": "fs.realpath@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/glob", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/fs.realpath/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails", + "devDependencies": {}, + "files": [ + "old.js", + "index.js" + ], + "homepage": "https://github.com/isaacs/fs.realpath#readme", + "keywords": [ + "realpath", + "fs", + "polyfill" + ], + "license": "ISC", + "main": "index.js", + "name": "fs.realpath", + "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/node_modules/get-caller-file/README.md b/node_modules/get-caller-file/README.md new file mode 100644 index 000000000..c32df54c3 --- /dev/null +++ b/node_modules/get-caller-file/README.md @@ -0,0 +1,4 @@ +# 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/node_modules/get-caller-file/index.js b/node_modules/get-caller-file/index.js new file mode 100644 index 000000000..03e7dfc39 --- /dev/null +++ b/node_modules/get-caller-file/index.js @@ -0,0 +1,20 @@ +'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/node_modules/get-caller-file/package.json b/node_modules/get-caller-file/package.json new file mode 100644 index 000000000..6e725e0f8 --- /dev/null +++ b/node_modules/get-caller-file/package.json @@ -0,0 +1,58 @@ +{ + "_from": "get-caller-file@^1.0.1", + "_id": "get-caller-file@1.0.2", + "_inBundle": false, + "_integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "_location": "/get-caller-file", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "get-caller-file@^1.0.1", + "name": "get-caller-file", + "escapedName": "get-caller-file", + "rawSpec": "^1.0.1", + "saveSpec": null, + "fetchSpec": "^1.0.1" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "_shasum": "f702e63127e7e231c160a80c1554acb70d5047e5", + "_spec": "get-caller-file@^1.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/yargs", + "author": { + "name": "Stefan Penner" + }, + "bugs": { + "url": "https://github.com/stefanpenner/get-caller-file/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "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/project/embercli/get-caller-file/branch/master)", + "devDependencies": { + "chai": "^3.4.1", + "ensure-posix-path": "^1.0.1", + "mocha": "^2.3.4" + }, + "directories": { + "test": "tests" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/stefanpenner/get-caller-file#readme", + "license": "ISC", + "main": "index.js", + "name": "get-caller-file", + "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/node_modules/get-stream/buffer-stream.js b/node_modules/get-stream/buffer-stream.js new file mode 100644 index 000000000..ae45d3d9e --- /dev/null +++ b/node_modules/get-stream/buffer-stream.js @@ -0,0 +1,51 @@ +'use strict'; +const PassThrough = require('stream').PassThrough; + +module.exports = opts => { + opts = Object.assign({}, opts); + + const array = opts.array; + let encoding = opts.encoding; + const buffer = encoding === 'buffer'; + let objectMode = false; + + if (array) { + objectMode = !(encoding || buffer); + } else { + encoding = encoding || 'utf8'; + } + + if (buffer) { + encoding = null; + } + + let len = 0; + const ret = []; + const stream = new PassThrough({objectMode}); + + if (encoding) { + stream.setEncoding(encoding); + } + + stream.on('data', chunk => { + ret.push(chunk); + + if (objectMode) { + len = ret.length; + } else { + len += chunk.length; + } + }); + + stream.getBufferedValue = () => { + if (array) { + return ret; + } + + return buffer ? Buffer.concat(ret, len) : ret.join(''); + }; + + stream.getBufferedLength = () => len; + + return stream; +}; diff --git a/node_modules/get-stream/index.js b/node_modules/get-stream/index.js new file mode 100644 index 000000000..2dc5ee96a --- /dev/null +++ b/node_modules/get-stream/index.js @@ -0,0 +1,51 @@ +'use strict'; +const bufferStream = require('./buffer-stream'); + +function getStream(inputStream, opts) { + if (!inputStream) { + return Promise.reject(new Error('Expected a stream')); + } + + opts = Object.assign({maxBuffer: Infinity}, opts); + + const maxBuffer = opts.maxBuffer; + let stream; + let clean; + + const p = new Promise((resolve, reject) => { + const error = err => { + if (err) { // null check + err.bufferedData = stream.getBufferedValue(); + } + + reject(err); + }; + + stream = bufferStream(opts); + inputStream.once('error', error); + inputStream.pipe(stream); + + stream.on('data', () => { + if (stream.getBufferedLength() > maxBuffer) { + reject(new Error('maxBuffer exceeded')); + } + }); + stream.once('error', error); + stream.on('end', resolve); + + clean = () => { + // some streams doesn't implement the `stream.Readable` interface correctly + if (inputStream.unpipe) { + inputStream.unpipe(stream); + } + }; + }); + + p.then(clean, clean); + + return p.then(() => stream.getBufferedValue()); +} + +module.exports = getStream; +module.exports.buffer = (stream, opts) => getStream(stream, Object.assign({}, opts, {encoding: 'buffer'})); +module.exports.array = (stream, opts) => getStream(stream, Object.assign({}, opts, {array: true})); diff --git a/node_modules/get-stream/license b/node_modules/get-stream/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/get-stream/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/get-stream/package.json b/node_modules/get-stream/package.json new file mode 100644 index 000000000..eab18b42c --- /dev/null +++ b/node_modules/get-stream/package.json @@ -0,0 +1,80 @@ +{ + "_from": "get-stream@^3.0.0", + "_id": "get-stream@3.0.0", + "_inBundle": false, + "_integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "_location": "/get-stream", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "get-stream@^3.0.0", + "name": "get-stream", + "escapedName": "get-stream", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "_shasum": "8e943d1358dc37555054ecbe2edb05aa174ede14", + "_spec": "get-stream@^3.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/execa", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/get-stream/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Get a stream as a string, buffer, or array", + "devDependencies": { + "ava": "*", + "into-stream": "^3.0.0", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js", + "buffer-stream.js" + ], + "homepage": "https://github.com/sindresorhus/get-stream#readme", + "keywords": [ + "get", + "stream", + "promise", + "concat", + "string", + "str", + "text", + "buffer", + "read", + "data", + "consume", + "readable", + "readablestream", + "array", + "object", + "obj" + ], + "license": "MIT", + "name": "get-stream", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/get-stream.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.0.0", + "xo": { + "esnext": true + } +} diff --git a/node_modules/get-stream/readme.md b/node_modules/get-stream/readme.md new file mode 100644 index 000000000..73b188fb4 --- /dev/null +++ b/node_modules/get-stream/readme.md @@ -0,0 +1,117 @@ +# get-stream [![Build Status](https://travis-ci.org/sindresorhus/get-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/get-stream) + +> Get a stream as a string, buffer, or array + + +## Install + +``` +$ npm install --save get-stream +``` + + +## Usage + +```js +const fs = require('fs'); +const getStream = require('get-stream'); +const stream = fs.createReadStream('unicorn.txt'); + +getStream(stream).then(str => { + console.log(str); + /* + ,,))))))));, + __)))))))))))))), + \|/ -\(((((''''((((((((. + -*-==//////(('' . `)))))), + /|\ ))| o ;-. '((((( ,(, + ( `| / ) ;))))' ,_))^;(~ + | | | ,))((((_ _____------~~~-. %,;(;(>';'~ + o_); ; )))(((` ~---~ `:: \ %%~~)(v;(`('~ + ; ''''```` `: `:::|\,__,%% );`'; ~ + | _ ) / `:|`----' `-' + ______/\/~ | / / + /~;;.____/;;' / ___--,-( `;;;/ + / // _;______;'------~~~~~ /;;/\ / + // | | / ; \;;,\ + (<_ | ; /',/-----' _> + \_| ||_ //~;~~~~~~~~~ + `\_| (,~~ + \~\ + ~~ + */ +}); +``` + + +## API + +The methods returns a promise that resolves when the `end` event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode. + +### getStream(stream, [options]) + +Get the `stream` as a string. + +#### options + +##### encoding + +Type: `string`
+Default: `utf8` + +[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream. + +##### maxBuffer + +Type: `number`
+Default: `Infinity` + +Maximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected. + +### getStream.buffer(stream, [options]) + +Get the `stream` as a buffer. + +It honors the `maxBuffer` option as above, but it refers to byte length rather than string length. + +### getStream.array(stream, [options]) + +Get the `stream` as an array of values. + +It honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen: + +- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes). + +- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array. + +- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array. + + +## Errors + +If the input stream emits an `error` event, the promise will be rejected with the error. The buffered data will be attached to the `bufferedData` property of the error. + +```js +getStream(streamThatErrorsAtTheEnd('unicorn')) + .catch(err => { + console.log(err.bufferedData); + //=> 'unicorn' + }); +``` + + +## FAQ + +### How is this different from [`concat-stream`](https://github.com/maxogden/concat-stream)? + +This module accepts a stream instead of being one and returns a promise instead of using a callback. The API is simpler and it only supports returning a string, buffer, or array. It doesn't have a fragile type inference. You explicitly choose what you want. And it doesn't depend on the huge `readable-stream` package. + + +## Related + +- [get-stdin](https://github.com/sindresorhus/get-stdin) - Get stdin as a string or buffer + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/glob-base/LICENSE b/node_modules/glob-base/LICENSE new file mode 100644 index 000000000..65f90aca8 --- /dev/null +++ b/node_modules/glob-base/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/glob-base/README.md b/node_modules/glob-base/README.md new file mode 100644 index 000000000..1da2e82f1 --- /dev/null +++ b/node_modules/glob-base/README.md @@ -0,0 +1,158 @@ +# 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/node_modules/glob-base/index.js b/node_modules/glob-base/index.js new file mode 100644 index 000000000..564b4a885 --- /dev/null +++ b/node_modules/glob-base/index.js @@ -0,0 +1,51 @@ +/*! + * 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/node_modules/glob-base/package.json b/node_modules/glob-base/package.json new file mode 100644 index 000000000..d8fb05d25 --- /dev/null +++ b/node_modules/glob-base/package.json @@ -0,0 +1,77 @@ +{ + "_from": "glob-base@^0.3.0", + "_id": "glob-base@0.3.0", + "_inBundle": false, + "_integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "_location": "/glob-base", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "glob-base@^0.3.0", + "name": "glob-base", + "escapedName": "glob-base", + "rawSpec": "^0.3.0", + "saveSpec": null, + "fetchSpec": "^0.3.0" + }, + "_requiredBy": [ + "/parse-glob" + ], + "_resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "_shasum": "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4", + "_spec": "glob-base@^0.3.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/parse-glob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/glob-base/issues" + }, + "bundleDependencies": false, + "dependencies": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "deprecated": false, + "description": "Returns an object with the (non-glob) base path and the actual pattern.", + "devDependencies": { + "mocha": "*", + "should": "^5.1.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "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", + "name": "glob-base", + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/glob-base.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "0.3.0" +} diff --git a/node_modules/glob-parent/.npmignore b/node_modules/glob-parent/.npmignore new file mode 100644 index 000000000..33e391f0e --- /dev/null +++ b/node_modules/glob-parent/.npmignore @@ -0,0 +1,4 @@ +node_modules +.DS_Store +npm-debug.log +coverage diff --git a/node_modules/glob-parent/.travis.yml b/node_modules/glob-parent/.travis.yml new file mode 100644 index 000000000..18fc42f69 --- /dev/null +++ b/node_modules/glob-parent/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "4" + - "iojs-v3" + - "iojs-v2" + - "iojs-v1" + - "0.12" + - "0.10" diff --git a/node_modules/glob-parent/LICENSE b/node_modules/glob-parent/LICENSE new file mode 100644 index 000000000..734076d8a --- /dev/null +++ b/node_modules/glob-parent/LICENSE @@ -0,0 +1,15 @@ +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/node_modules/glob-parent/README.md b/node_modules/glob-parent/README.md new file mode 100644 index 000000000..ff5310d3b --- /dev/null +++ b/node_modules/glob-parent/README.md @@ -0,0 +1,43 @@ +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/node_modules/glob-parent/index.js b/node_modules/glob-parent/index.js new file mode 100644 index 000000000..61615f1ac --- /dev/null +++ b/node_modules/glob-parent/index.js @@ -0,0 +1,10 @@ +'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/node_modules/glob-parent/package.json b/node_modules/glob-parent/package.json new file mode 100644 index 000000000..3457751c5 --- /dev/null +++ b/node_modules/glob-parent/package.json @@ -0,0 +1,63 @@ +{ + "_from": "glob-parent@^2.0.0", + "_id": "glob-parent@2.0.0", + "_inBundle": false, + "_integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "_location": "/glob-parent", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "glob-parent@^2.0.0", + "name": "glob-parent", + "escapedName": "glob-parent", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/chokidar", + "/glob-base" + ], + "_resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "_shasum": "81383d72db054fcccf5336daa902f182f6edbb28", + "_spec": "glob-parent@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/chokidar", + "author": { + "name": "Elan Shanker" + }, + "bugs": { + "url": "https://github.com/es128/glob-parent/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-glob": "^2.0.0" + }, + "deprecated": false, + "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" + }, + "homepage": "https://github.com/es128/glob-parent", + "keywords": [ + "glob", + "parent", + "strip", + "path", + "directory", + "base" + ], + "license": "ISC", + "main": "index.js", + "name": "glob-parent", + "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/node_modules/glob-parent/test.js b/node_modules/glob-parent/test.js new file mode 100644 index 000000000..01156d2ff --- /dev/null +++ b/node_modules/glob-parent/test.js @@ -0,0 +1,28 @@ +'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/node_modules/glob/LICENSE b/node_modules/glob/LICENSE new file mode 100644 index 000000000..19129e315 --- /dev/null +++ b/node_modules/glob/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/glob/README.md b/node_modules/glob/README.md new file mode 100644 index 000000000..baa1d1ba8 --- /dev/null +++ b/node_modules/glob/README.md @@ -0,0 +1,368 @@ +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master) + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + +![](oh-my-glob.gif) + +## Usage + +Install with npm + +``` +npm i glob +``` + +```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`. + +### 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 + * `'FILE'` - Path exists, and is not a directory + * `'DIR'` - 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 specific + thing that matched. It is not deduplicated or resolved to a realpath. +* `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 glob patterns to exclude matches. + Note: `ignore` patterns are *always* in `dot:true` mode, regardless + of any other settings. +* `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) +* `absolute` Set to true to always receive absolute paths for matched + files. Unlike `realpath`, this also affects the values returned in + the `match` event. + +## 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 + +Previously, this module let you mark a pattern as a "comment" if it +started with a `#` character, or a "negated" pattern if it started +with a `!` character. + +These options were deprecated in version 5, and removed in version 6. + +To specify things that should not match, use the `ignore` option. + +## 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/node_modules/glob/changelog.md b/node_modules/glob/changelog.md new file mode 100644 index 000000000..41636771e --- /dev/null +++ b/node_modules/glob/changelog.md @@ -0,0 +1,67 @@ +## 7.0 + +- Raise error if `options.cwd` is specified, and not a directory + +## 6.0 + +- Remove comment and negation pattern support +- Ignore patterns are always in `dot:true` mode + +## 5.0 + +- Deprecate comment and negation patterns +- Fix regression in `mark` and `nodir` options from making all cache + keys absolute path. +- Abort if `fs.readdir` returns an error that's unexpected +- Don't emit `match` events for ignored items +- Treat ENOTSUP like ENOTDIR in readdir + +## 4.5 + +- Add `options.follow` to always follow directory symlinks in globstar +- Add `options.realpath` to call `fs.realpath` on all results +- Always cache based on absolute path + +## 4.4 + +- Add `options.ignore` +- Fix handling of broken symlinks + +## 4.3 + +- Bump minimatch to 2.x +- Pass all tests on Windows + +## 4.2 + +- Add `glob.hasMagic` function +- Add `options.nodir` flag + +## 4.1 + +- Refactor sync and async implementations for performance +- Throw if callback provided to sync glob function +- Treat symbolic links in globstar results the same as Bash 4.3 + +## 4.0 + +- Use `^` for dependency versions (bumped major because this breaks + older npm versions) +- Ensure callbacks are only ever called once +- switch to ISC license + +## 3.x + +- Rewrite in JavaScript +- Add support for setting root, cwd, and windows support +- Cache many fs calls +- Add globstar support +- emit match events + +## 2.x + +- Use `glob.h` and `fnmatch.h` from NetBSD + +## 1.x + +- `glob.h` static binding. diff --git a/node_modules/glob/common.js b/node_modules/glob/common.js new file mode 100644 index 000000000..66651bb3a --- /dev/null +++ b/node_modules/glob/common.js @@ -0,0 +1,240 @@ +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) + } +} + +// ignore patterns are always in dot:true mode. +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern, { dot: true }) + } + + return { + matcher: new Minimatch(pattern, { dot: true }), + 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.absolute = !!options.absolute + + 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 = path.resolve(options.cwd) + self.changedCwd = self.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, "/") + + // TODO: is an absolute `cwd` supposed to be resolved against `root`? + // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') + self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd) + if (process.platform === "win32") + self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") + self.nomount = !!options.nomount + + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true + options.nocomment = true + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +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) { + var notDir = !(/\/$/.test(e)) + var c = self.cache[e] || self.cache[makeAbs(self, e)] + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c) + return notDir + }) + } + } + + 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) + } + + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/') + + 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/node_modules/glob/glob.js b/node_modules/glob/glob.js new file mode 100644 index 000000000..58dec0f6c --- /dev/null +++ b/node_modules/glob/glob.js @@ -0,0 +1,790 @@ +// 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 rp = require('fs.realpath') +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 + +function extend (origin, add) { + if (add === null || typeof add !== 'object') { + return origin + } + + var keys = Object.keys(add) + var i = keys.length + while (i--) { + origin[keys[i]] = add[keys[i]] + } + return origin +} + +glob.hasMagic = function (pattern, options_) { + var options = extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + + if (!pattern) + return false + + 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 + this._processing = 0 + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + var sync = true + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + sync = false + + function done () { + --self._processing + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish() + }) + } else { + 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) + rp.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 (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = isAbsolute(e) ? e : this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) + e = abs + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + 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 && er.code === 'ENOENT') + return cb() + + var isSym = lstat && 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 && !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. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + this.emit('error', error) + this.abort() + } + 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 && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) + return cb(null, false, stat) + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return cb() + + return cb(null, c, stat) +} diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json new file mode 100644 index 000000000..91310839e --- /dev/null +++ b/node_modules/glob/package.json @@ -0,0 +1,76 @@ +{ + "_from": "glob@^7.1.2", + "_id": "glob@7.1.2", + "_inBundle": false, + "_integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "_location": "/glob", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "glob@^7.1.2", + "name": "glob", + "escapedName": "glob", + "rawSpec": "^7.1.2", + "saveSpec": null, + "fetchSpec": "^7.1.2" + }, + "_requiredBy": [ + "/babel-cli" + ], + "_resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "_shasum": "c19c9df9a028702d678612384a6552404c636d15", + "_spec": "glob@^7.1.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-cli", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/node-glob/issues" + }, + "bundleDependencies": false, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "deprecated": false, + "description": "a little globber", + "devDependencies": { + "mkdirp": "0", + "rimraf": "^2.2.8", + "tap": "^7.1.2", + "tick": "0.0.6" + }, + "engines": { + "node": "*" + }, + "files": [ + "glob.js", + "sync.js", + "common.js" + ], + "homepage": "https://github.com/isaacs/node-glob#readme", + "license": "ISC", + "main": "glob.js", + "name": "glob", + "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": "7.1.2" +} diff --git a/node_modules/glob/sync.js b/node_modules/glob/sync.js new file mode 100644 index 000000000..c952134ba --- /dev/null +++ b/node_modules/glob/sync.js @@ -0,0 +1,486 @@ +module.exports = globSync +globSync.GlobSync = GlobSync + +var fs = require('fs') +var rp = require('fs.realpath') +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 +var isIgnored = common.isIgnored + +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 = rp.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._emitMatch(index, e) + } + // 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) { + if (isIgnored(this, e)) + return + + var abs = this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) { + e = abs + } + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + 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) { + if (er.code === 'ENOENT') { + // lstat failed, doesn't exist + return null + } + } + + var isSym = lstat && 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 && !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. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + throw error + } + 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._emitMatch(index, prefix) +} + +// 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) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return false + } + } + + if (lstat && lstat.isSymbolicLink()) { + try { + stat = fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + 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/node_modules/globals/globals.json b/node_modules/globals/globals.json new file mode 100644 index 000000000..99ae89f35 --- /dev/null +++ b/node_modules/globals/globals.json @@ -0,0 +1,1294 @@ +{ + "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, + "cancelIdleCallback": 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, + "createImageBitmap": 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, + "MediaRecorder": 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, + "spyOnProperty": 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, + "fdescribe": 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, + "resumeTest": 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/node_modules/globals/index.js b/node_modules/globals/index.js new file mode 100644 index 000000000..a02ef2485 --- /dev/null +++ b/node_modules/globals/index.js @@ -0,0 +1 @@ +module.exports = require('./globals.json'); diff --git a/node_modules/globals/license b/node_modules/globals/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/globals/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/globals/package.json b/node_modules/globals/package.json new file mode 100644 index 000000000..18cdd3914 --- /dev/null +++ b/node_modules/globals/package.json @@ -0,0 +1,67 @@ +{ + "_from": "globals@^9.18.0", + "_id": "globals@9.18.0", + "_inBundle": false, + "_integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "_location": "/globals", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "globals@^9.18.0", + "name": "globals", + "escapedName": "globals", + "rawSpec": "^9.18.0", + "saveSpec": null, + "fetchSpec": "^9.18.0" + }, + "_requiredBy": [ + "/babel-traverse" + ], + "_resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "_shasum": "aa3896b3e69b487f17e31ed2143d69a8e30c2d8a", + "_spec": "globals@^9.18.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-traverse", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "http://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/globals/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Global identifiers from different JavaScript environments", + "devDependencies": { + "mocha": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js", + "globals.json" + ], + "homepage": "https://github.com/sindresorhus/globals#readme", + "keywords": [ + "globals", + "global", + "identifiers", + "variables", + "vars", + "jshint", + "eslint", + "environments" + ], + "license": "MIT", + "name": "globals", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/globals.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "9.18.0" +} diff --git a/node_modules/globals/readme.md b/node_modules/globals/readme.md new file mode 100644 index 000000000..5314bbb93 --- /dev/null +++ b/node_modules/globals/readme.md @@ -0,0 +1,41 @@ +# 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/node_modules/graceful-fs/LICENSE b/node_modules/graceful-fs/LICENSE new file mode 100644 index 000000000..9d2c80369 --- /dev/null +++ b/node_modules/graceful-fs/LICENSE @@ -0,0 +1,15 @@ +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/node_modules/graceful-fs/README.md b/node_modules/graceful-fs/README.md new file mode 100644 index 000000000..5273a50ad --- /dev/null +++ b/node_modules/graceful-fs/README.md @@ -0,0 +1,133 @@ +# 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/node_modules/graceful-fs/fs.js b/node_modules/graceful-fs/fs.js new file mode 100644 index 000000000..8ad4a3839 --- /dev/null +++ b/node_modules/graceful-fs/fs.js @@ -0,0 +1,21 @@ +'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/node_modules/graceful-fs/graceful-fs.js b/node_modules/graceful-fs/graceful-fs.js new file mode 100644 index 000000000..33b30d2e9 --- /dev/null +++ b/node_modules/graceful-fs/graceful-fs.js @@ -0,0 +1,262 @@ +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/node_modules/graceful-fs/legacy-streams.js b/node_modules/graceful-fs/legacy-streams.js new file mode 100644 index 000000000..d617b50fc --- /dev/null +++ b/node_modules/graceful-fs/legacy-streams.js @@ -0,0 +1,118 @@ +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/node_modules/graceful-fs/package.json b/node_modules/graceful-fs/package.json new file mode 100644 index 000000000..f43ff582e --- /dev/null +++ b/node_modules/graceful-fs/package.json @@ -0,0 +1,77 @@ +{ + "_from": "graceful-fs@^4.1.2", + "_id": "graceful-fs@4.1.11", + "_inBundle": false, + "_integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "_location": "/graceful-fs", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "graceful-fs@^4.1.2", + "name": "graceful-fs", + "escapedName": "graceful-fs", + "rawSpec": "^4.1.2", + "saveSpec": null, + "fetchSpec": "^4.1.2" + }, + "_requiredBy": [ + "/output-file-sync", + "/readdirp" + ], + "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "_shasum": "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658", + "_spec": "graceful-fs@^4.1.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/readdirp", + "bugs": { + "url": "https://github.com/isaacs/node-graceful-fs/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "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" + }, + "engines": { + "node": ">=0.4.0" + }, + "files": [ + "fs.js", + "graceful-fs.js", + "legacy-streams.js", + "polyfills.js" + ], + "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", + "name": "graceful-fs", + "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/node_modules/graceful-fs/polyfills.js b/node_modules/graceful-fs/polyfills.js new file mode 100644 index 000000000..4c6aca78a --- /dev/null +++ b/node_modules/graceful-fs/polyfills.js @@ -0,0 +1,330 @@ +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/node_modules/has-ansi/index.js b/node_modules/has-ansi/index.js new file mode 100644 index 000000000..98fae0676 --- /dev/null +++ b/node_modules/has-ansi/index.js @@ -0,0 +1,4 @@ +'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/node_modules/has-ansi/license b/node_modules/has-ansi/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/has-ansi/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/has-ansi/package.json b/node_modules/has-ansi/package.json new file mode 100644 index 000000000..f536c43b7 --- /dev/null +++ b/node_modules/has-ansi/package.json @@ -0,0 +1,95 @@ +{ + "_from": "has-ansi@^2.0.0", + "_id": "has-ansi@2.0.0", + "_inBundle": false, + "_integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "_location": "/has-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "has-ansi@^2.0.0", + "name": "has-ansi", + "escapedName": "has-ansi", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/chalk" + ], + "_resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "_shasum": "34f5049ce1ecdf2b0649af3ef24e45ed35416d91", + "_spec": "has-ansi@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/chalk", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/has-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "deprecated": false, + "description": "Check if a string has ANSI escape codes", + "devDependencies": { + "ava": "0.0.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/has-ansi#readme", + "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": [ + { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + { + "name": "Joshua Appelman", + "email": "jappelman@xebia.com", + "url": "jbnicolai.com" + } + ], + "name": "has-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/has-ansi.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "2.0.0" +} diff --git a/node_modules/has-ansi/readme.md b/node_modules/has-ansi/readme.md new file mode 100644 index 000000000..02bc7c230 --- /dev/null +++ b/node_modules/has-ansi/readme.md @@ -0,0 +1,36 @@ +# 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/node_modules/has-flag/index.js b/node_modules/has-flag/index.js new file mode 100644 index 000000000..68820307d --- /dev/null +++ b/node_modules/has-flag/index.js @@ -0,0 +1,10 @@ +'use strict'; +module.exports = function (flag, argv) { + argv = argv || process.argv; + + var terminatorPos = argv.indexOf('--'); + var prefix = /^-{1,2}/.test(flag) ? '' : '--'; + var pos = argv.indexOf(prefix + flag); + + return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); +}; diff --git a/node_modules/has-flag/license b/node_modules/has-flag/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/has-flag/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/has-flag/package.json b/node_modules/has-flag/package.json new file mode 100644 index 000000000..75438d946 --- /dev/null +++ b/node_modules/has-flag/package.json @@ -0,0 +1,93 @@ +{ + "_from": "has-flag@^2.0.0", + "_id": "has-flag@2.0.0", + "_inBundle": false, + "_integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "_location": "/has-flag", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "has-flag@^2.0.0", + "name": "has-flag", + "escapedName": "has-flag", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/webpack/supports-color" + ], + "_resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "_shasum": "e8207af1cc7b30d446cc70b734b5e8be18f88d51", + "_spec": "has-flag@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack/node_modules/supports-color", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/has-flag/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if argv has a specific flag", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "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": [ + { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + { + "name": "Joshua Appelman", + "email": "jappelman@xebia.com", + "url": "jbnicolai.com" + }, + { + "name": "JD Ballard", + "email": "i.am.qix@gmail.com", + "url": "github.com/qix-" + } + ], + "name": "has-flag", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/has-flag.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0" +} diff --git a/node_modules/has-flag/readme.md b/node_modules/has-flag/readme.md new file mode 100644 index 000000000..0caca6cba --- /dev/null +++ b/node_modules/has-flag/readme.md @@ -0,0 +1,67 @@ +# 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 +const hasFlag = require('has-flag'); + +hasFlag('unicorn'); +//=> true + +hasFlag('--unicorn'); +//=> true + +hasFlag('-f'); +//=> true + +hasFlag('foo=bar'); +//=> true + +hasFlag('foo'); +//=> false + +hasFlag('rainbow'); +//=> false +``` + +``` +$ node foo.js -f --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](https://sindresorhus.com) diff --git a/node_modules/hash-base/README.md b/node_modules/hash-base/README.md new file mode 100644 index 000000000..2fa8f1d23 --- /dev/null +++ b/node_modules/hash-base/README.md @@ -0,0 +1,38 @@ +# hash-base + +[![NPM Package](https://img.shields.io/npm/v/hash-base.svg?style=flat-square)](https://www.npmjs.org/package/hash-base) +[![Build Status](https://img.shields.io/travis/crypto-browserify/hash-base.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/hash-base) +[![Dependency status](https://img.shields.io/david/crypto-browserify/hash-base.svg?style=flat-square)](https://david-dm.org/crypto-browserify/hash-base#info=dependencies) + +[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) + +Abstract base class to inherit from if you want to create streams implementing the same API as node crypto [Hash][1] (for [Cipher][2] / [Decipher][3] check [crypto-browserify/cipher-base][4]). + +## Example + +```js +function MyHash () { + HashBase.call(64) // in bytes +} + +inherti(MyHash, HashBase) + +MyHash.prototype._update = function () { + // hashing one block with buffer this._block +} + +MyHash.prototype._digest = function () { + // create padding and produce result +} +``` +You also can check [source code](index.js) or [crypto-browserify/md5.js][5] + +## LICENSE + +MIT + +[1]: https://nodejs.org/api/crypto.html#crypto_class_hash +[2]: https://nodejs.org/api/crypto.html#crypto_class_cipher +[3]: https://nodejs.org/api/crypto.html#crypto_class_decipher +[4]: https://github.com/crypto-browserify/cipher-base +[5]: https://github.com/crypto-browserify/md5.js diff --git a/node_modules/hash-base/index.js b/node_modules/hash-base/index.js new file mode 100644 index 000000000..9cd6a7005 --- /dev/null +++ b/node_modules/hash-base/index.js @@ -0,0 +1,83 @@ +'use strict' +var Transform = require('stream').Transform +var inherits = require('inherits') + +function HashBase (blockSize) { + Transform.call(this) + + this._block = new Buffer(blockSize) + this._blockSize = blockSize + this._blockOffset = 0 + this._length = [0, 0, 0, 0] + + this._finalized = false +} + +inherits(HashBase, Transform) + +HashBase.prototype._transform = function (chunk, encoding, callback) { + var error = null + try { + if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding) + this.update(chunk) + } catch (err) { + error = err + } + + callback(error) +} + +HashBase.prototype._flush = function (callback) { + var error = null + try { + this.push(this._digest()) + } catch (err) { + error = err + } + + callback(error) +} + +HashBase.prototype.update = function (data, encoding) { + if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer') + if (this._finalized) throw new Error('Digest already called') + if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary') + + // consume data + var block = this._block + var offset = 0 + while (this._blockOffset + data.length - offset >= this._blockSize) { + for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++] + this._update() + this._blockOffset = 0 + } + while (offset < data.length) block[this._blockOffset++] = data[offset++] + + // update length + for (var j = 0, carry = data.length * 8; carry > 0; ++j) { + this._length[j] += carry + carry = (this._length[j] / 0x0100000000) | 0 + if (carry > 0) this._length[j] -= 0x0100000000 * carry + } + + return this +} + +HashBase.prototype._update = function (data) { + throw new Error('_update is not implemented') +} + +HashBase.prototype.digest = function (encoding) { + if (this._finalized) throw new Error('Digest already called') + this._finalized = true + + var digest = this._digest() + if (encoding !== undefined) digest = digest.toString(encoding) + return digest +} + +HashBase.prototype._digest = function () { + throw new Error('_digest is not implemented') +} + +module.exports = HashBase diff --git a/node_modules/hash-base/package.json b/node_modules/hash-base/package.json new file mode 100644 index 000000000..6e20f38c8 --- /dev/null +++ b/node_modules/hash-base/package.json @@ -0,0 +1,66 @@ +{ + "_from": "hash-base@^2.0.0", + "_id": "hash-base@2.0.2", + "_inBundle": false, + "_integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "_location": "/hash-base", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "hash-base@^2.0.0", + "name": "hash-base", + "escapedName": "hash-base", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/ripemd160" + ], + "_resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "_shasum": "66ea1d856db4e8a5470cadf6fce23ae5244ef2e1", + "_spec": "hash-base@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/ripemd160", + "author": { + "name": "Kirill Fomichev", + "email": "fanatid@ya.ru", + "url": "https://github.com/fanatid" + }, + "bugs": { + "url": "https://github.com/crypto-browserify/hash-base/issues" + }, + "bundleDependencies": false, + "dependencies": { + "inherits": "^2.0.1" + }, + "deprecated": false, + "description": "abstract base class for hash-streams", + "devDependencies": { + "nyc": "^6.1.1", + "standard": "^6.0.8", + "tape": "^4.2.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/crypto-browserify/hash-base", + "keywords": [ + "hash", + "stream" + ], + "license": "MIT", + "main": "index.js", + "name": "hash-base", + "repository": { + "type": "git", + "url": "git+https://github.com/crypto-browserify/hash-base.git" + }, + "scripts": { + "coverage": "nyc node test/*.js", + "lint": "standard", + "test": "npm run lint && npm run unit", + "unit": "node test/*.js" + }, + "version": "2.0.2" +} diff --git a/node_modules/hash.js/.eslintrc.js b/node_modules/hash.js/.eslintrc.js new file mode 100644 index 000000000..614f8fc40 --- /dev/null +++ b/node_modules/hash.js/.eslintrc.js @@ -0,0 +1,41 @@ +module.exports = { + 'env': { + 'browser': true, + 'commonjs': true, + 'node': true, + 'es6': true + }, + 'parserOptions': { + 'ecmaVersion': 8 + }, + 'extends': 'eslint:recommended', + 'rules': { + 'indent': [ + 'error', + 2, + { + 'FunctionDeclaration': { + 'parameters': 'first' + }, + 'FunctionExpression': { + 'parameters': 'first' + }, + 'CallExpression': { + 'arguments': 'first' + } + } + ], + 'linebreak-style': [ + 'error', + 'unix' + ], + 'quotes': [ + 'error', + 'single' + ], + 'semi': [ + 'error', + 'always' + ] + } +}; diff --git a/node_modules/hash.js/.npmignore b/node_modules/hash.js/.npmignore new file mode 100644 index 000000000..1ca957177 --- /dev/null +++ b/node_modules/hash.js/.npmignore @@ -0,0 +1,2 @@ +node_modules/ +npm-debug.log diff --git a/node_modules/hash.js/.travis.yml b/node_modules/hash.js/.travis.yml new file mode 100644 index 000000000..92b8cdd42 --- /dev/null +++ b/node_modules/hash.js/.travis.yml @@ -0,0 +1,9 @@ +sudo: false +language: node_js +node_js: + - "4" + - "6" + - "stable" +branches: + only: + - master diff --git a/node_modules/hash.js/README.md b/node_modules/hash.js/README.md new file mode 100644 index 000000000..006d3bbf5 --- /dev/null +++ b/node_modules/hash.js/README.md @@ -0,0 +1,48 @@ +# hash.js [![Build Status](https://secure.travis-ci.org/indutny/hash.js.svg)](http://travis-ci.org/indutny/hash.js) + +Just a bike-shed. + +## Install + +```sh +npm install hash.js +``` + +## Usage + +```js +var hash = require('hash.js') +hash.sha256().update('abc').digest('hex') +``` + +## Selective hash usage + +```js +var sha512 = require('hash.js/lib/hash/sha/512'); +sha512().update('abc').digest('hex'); +``` + +#### LICENSE + +This software is licensed under the MIT License. + +Copyright Fedor Indutny, 2014. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/hash.js/lib/hash.d.ts b/node_modules/hash.js/lib/hash.d.ts new file mode 100644 index 000000000..2994a75ed --- /dev/null +++ b/node_modules/hash.js/lib/hash.d.ts @@ -0,0 +1,105 @@ +declare var hash: Hash; + +declare module "hash.js" { + export default hash; +} + +interface BlockHash { + hmacStrength: number + padLength: number + endian: 'big' | 'little' +} + +interface MessageDigest { + blockSize: number + outSize: number + update(msg: any, enc?: 'hex'): T + digest(enc?: 'hex'): T +} + +interface Hash { + hmac: HmacConstructor + ripemd: RipemdSet + ripemd160: Ripemd160Constructor + sha: ShaSet + sha1: Sha1Constructor + sha224: Sha224Constructor + sha256: Sha256Constructor + sha384: Sha384Constructor + sha512: Sha512Constructor + utils: Utils +} + +interface Utils { + toArray(msg: any, enc: 'hex'): Array + toHex(msg: any): string +} + +interface RipemdSet { + ripemd160: Ripemd160Constructor +} + +interface ShaSet { + sha1: Sha1Constructor + sha224: Sha224Constructor + sha256: Sha256Constructor + sha384: Sha384Constructor + sha512: Sha512Constructor +} + +interface HmacConstructor { (hash: BlockHash, key: any, enc?: 'hex'): Hmac } +interface Ripemd160Constructor { (): Ripemd160 } +interface Sha1Constructor { (): Sha1; } +interface Sha224Constructor { (): Sha224; } +interface Sha256Constructor { (): Sha256; } +interface Sha384Constructor { (): Sha384; } +interface Sha512Constructor { (): Sha512; } + +interface Hmac extends MessageDigest { + blockSize: 512 + outSize: 160 +} + +interface Ripemd160 extends BlockHash, MessageDigest { + blockSize: 512 + hmacStrength: 192 + outSize: 160 + padLength: 64 + endian: 'little' +} + +interface Sha1 extends BlockHash, MessageDigest { + blockSize: 512 + hmacStrength: 80 + outSize: 160 + padLength: 64 + endian: 'big' +} +interface Sha224 extends BlockHash, MessageDigest { + blockSize: 512 + hmacStrength: 192 + outSize: 224 + padLength: 64 + endian: 'big' +} +interface Sha256 extends BlockHash, MessageDigest { + blockSize: 512 + hmacStrength: 192 + outSize: 256 + padLength: 64 + endian: 'big' +} +interface Sha384 extends BlockHash, MessageDigest { + blockSize: 1024 + hmacStrength: 192 + outSize: 384 + padLength: 128 + endian: 'big' +} +interface Sha512 extends BlockHash, MessageDigest { + blockSize: 1024 + hmacStrength: 192 + outSize: 512 + padLength: 128 + endian: 'big' +} diff --git a/node_modules/hash.js/lib/hash.js b/node_modules/hash.js/lib/hash.js new file mode 100644 index 000000000..f59b67301 --- /dev/null +++ b/node_modules/hash.js/lib/hash.js @@ -0,0 +1,15 @@ +var hash = exports; + +hash.utils = require('./hash/utils'); +hash.common = require('./hash/common'); +hash.sha = require('./hash/sha'); +hash.ripemd = require('./hash/ripemd'); +hash.hmac = require('./hash/hmac'); + +// Proxy hash functions to the main object +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; diff --git a/node_modules/hash.js/lib/hash/common.js b/node_modules/hash.js/lib/hash/common.js new file mode 100644 index 000000000..c49f47631 --- /dev/null +++ b/node_modules/hash.js/lib/hash/common.js @@ -0,0 +1,92 @@ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); + +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; + + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; +} +exports.BlockHash = BlockHash; + +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) + this.pending = msg; + else + this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; + + // Enough data, try updating + if (this.pending.length >= this._delta8) { + msg = this.pending; + + // Process pending data in blocks + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) + this.pending = null; + + msg = utils.join32(msg, 0, msg.length - r, this.endian); + for (var i = 0; i < msg.length; i += this._delta32) + this._update(msg, i, i + this._delta32); + } + + return this; +}; + +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); + + return this._digest(enc); +}; + +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - ((len + this.padLength) % bytes); + var res = new Array(k + this.padLength); + res[0] = 0x80; + for (var i = 1; i < k; i++) + res[i] = 0; + + // Append length + len <<= 3; + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) + res[i++] = 0; + + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = (len >>> 24) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = len & 0xff; + } else { + res[i++] = len & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 24) & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + + for (t = 8; t < this.padLength; t++) + res[i++] = 0; + } + + return res; +}; diff --git a/node_modules/hash.js/lib/hash/hmac.js b/node_modules/hash.js/lib/hash/hmac.js new file mode 100644 index 000000000..faff12d3b --- /dev/null +++ b/node_modules/hash.js/lib/hash/hmac.js @@ -0,0 +1,47 @@ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); + +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) + return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; + + this._init(utils.toArray(key, enc)); +} +module.exports = Hmac; + +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) + key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); + + // Add padding to key + for (var i = key.length; i < this.blockSize; i++) + key.push(0); + + for (i = 0; i < key.length; i++) + key[i] ^= 0x36; + this.inner = new this.Hash().update(key); + + // 0x36 ^ 0x5c = 0x6a + for (i = 0; i < key.length; i++) + key[i] ^= 0x6a; + this.outer = new this.Hash().update(key); +}; + +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; +}; + +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; diff --git a/node_modules/hash.js/lib/hash/ripemd.js b/node_modules/hash.js/lib/hash/ripemd.js new file mode 100644 index 000000000..2dcdff273 --- /dev/null +++ b/node_modules/hash.js/lib/hash/ripemd.js @@ -0,0 +1,146 @@ +'use strict'; + +var utils = require('./utils'); +var common = require('./common'); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = common.BlockHash; + +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) + return new RIPEMD160(); + + BlockHash.call(this); + + this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; + this.endian = 'little'; +} +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; + +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; + +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + for (var j = 0; j < 80; j++) { + var T = sum32( + rotl32( + sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), + s[j]), + E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32( + rotl32( + sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), + sh[j]), + Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; + } + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; + +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'little'); + else + return utils.split32(this.h, 'little'); +}; + +function f(j, x, y, z) { + if (j <= 15) + return x ^ y ^ z; + else if (j <= 31) + return (x & y) | ((~x) & z); + else if (j <= 47) + return (x | (~y)) ^ z; + else if (j <= 63) + return (x & z) | (y & (~z)); + else + return x ^ (y | (~z)); +} + +function K(j) { + if (j <= 15) + return 0x00000000; + else if (j <= 31) + return 0x5a827999; + else if (j <= 47) + return 0x6ed9eba1; + else if (j <= 63) + return 0x8f1bbcdc; + else + return 0xa953fd4e; +} + +function Kh(j) { + if (j <= 15) + return 0x50a28be6; + else if (j <= 31) + return 0x5c4dd124; + else if (j <= 47) + return 0x6d703ef3; + else if (j <= 63) + return 0x7a6d76e9; + else + return 0x00000000; +} + +var r = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +]; + +var rh = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +]; + +var s = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +]; + +var sh = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +]; diff --git a/node_modules/hash.js/lib/hash/sha.js b/node_modules/hash.js/lib/hash/sha.js new file mode 100644 index 000000000..f34a38d7b --- /dev/null +++ b/node_modules/hash.js/lib/hash/sha.js @@ -0,0 +1,7 @@ +'use strict'; + +exports.sha1 = require('./sha/1'); +exports.sha224 = require('./sha/224'); +exports.sha256 = require('./sha/256'); +exports.sha384 = require('./sha/384'); +exports.sha512 = require('./sha/512'); diff --git a/node_modules/hash.js/lib/hash/sha/1.js b/node_modules/hash.js/lib/hash/sha/1.js new file mode 100644 index 000000000..fcdfa2946 --- /dev/null +++ b/node_modules/hash.js/lib/hash/sha/1.js @@ -0,0 +1,74 @@ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_5 = utils.sum32_5; +var ft_1 = shaCommon.ft_1; +var BlockHash = common.BlockHash; + +var sha1_K = [ + 0x5A827999, 0x6ED9EBA1, + 0x8F1BBCDC, 0xCA62C1D6 +]; + +function SHA1() { + if (!(this instanceof SHA1)) + return new SHA1(); + + BlockHash.call(this); + this.h = [ + 0x67452301, 0xefcdab89, 0x98badcfe, + 0x10325476, 0xc3d2e1f0 ]; + this.W = new Array(80); +} + +utils.inherits(SHA1, BlockHash); +module.exports = SHA1; + +SHA1.blockSize = 512; +SHA1.outSize = 160; +SHA1.hmacStrength = 80; +SHA1.padLength = 64; + +SHA1.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + + for(; i < W.length; i++) + W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + + for (i = 0; i < W.length; i++) { + var s = ~~(i / 20); + var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); + e = d; + d = c; + c = rotl32(b, 30); + b = a; + a = t; + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); +}; + +SHA1.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; diff --git a/node_modules/hash.js/lib/hash/sha/224.js b/node_modules/hash.js/lib/hash/sha/224.js new file mode 100644 index 000000000..c69882db5 --- /dev/null +++ b/node_modules/hash.js/lib/hash/sha/224.js @@ -0,0 +1,30 @@ +'use strict'; + +var utils = require('../utils'); +var SHA256 = require('./256'); + +function SHA224() { + if (!(this instanceof SHA224)) + return new SHA224(); + + SHA256.call(this); + this.h = [ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; +} +utils.inherits(SHA224, SHA256); +module.exports = SHA224; + +SHA224.blockSize = 512; +SHA224.outSize = 224; +SHA224.hmacStrength = 192; +SHA224.padLength = 64; + +SHA224.prototype._digest = function digest(enc) { + // Just truncate output + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 7), 'big'); + else + return utils.split32(this.h.slice(0, 7), 'big'); +}; + diff --git a/node_modules/hash.js/lib/hash/sha/256.js b/node_modules/hash.js/lib/hash/sha/256.js new file mode 100644 index 000000000..6dbd6a0c4 --- /dev/null +++ b/node_modules/hash.js/lib/hash/sha/256.js @@ -0,0 +1,105 @@ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); +var assert = require('minimalistic-assert'); + +var sum32 = utils.sum32; +var sum32_4 = utils.sum32_4; +var sum32_5 = utils.sum32_5; +var ch32 = shaCommon.ch32; +var maj32 = shaCommon.maj32; +var s0_256 = shaCommon.s0_256; +var s1_256 = shaCommon.s1_256; +var g0_256 = shaCommon.g0_256; +var g1_256 = shaCommon.g1_256; + +var BlockHash = common.BlockHash; + +var sha256_K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +]; + +function SHA256() { + if (!(this instanceof SHA256)) + return new SHA256(); + + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + this.k = sha256_K; + this.W = new Array(64); +} +utils.inherits(SHA256, BlockHash); +module.exports = SHA256; + +SHA256.blockSize = 512; +SHA256.outSize = 256; +SHA256.hmacStrength = 192; +SHA256.padLength = 64; + +SHA256.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + for (; i < W.length; i++) + W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + var f = this.h[5]; + var g = this.h[6]; + var h = this.h[7]; + + assert(this.k.length === W.length); + for (i = 0; i < W.length; i++) { + var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); + var T2 = sum32(s0_256(a), maj32(a, b, c)); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); + this.h[5] = sum32(this.h[5], f); + this.h[6] = sum32(this.h[6], g); + this.h[7] = sum32(this.h[7], h); +}; + +SHA256.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; diff --git a/node_modules/hash.js/lib/hash/sha/384.js b/node_modules/hash.js/lib/hash/sha/384.js new file mode 100644 index 000000000..01df25608 --- /dev/null +++ b/node_modules/hash.js/lib/hash/sha/384.js @@ -0,0 +1,35 @@ +'use strict'; + +var utils = require('../utils'); + +var SHA512 = require('./512'); + +function SHA384() { + if (!(this instanceof SHA384)) + return new SHA384(); + + SHA512.call(this); + this.h = [ + 0xcbbb9d5d, 0xc1059ed8, + 0x629a292a, 0x367cd507, + 0x9159015a, 0x3070dd17, + 0x152fecd8, 0xf70e5939, + 0x67332667, 0xffc00b31, + 0x8eb44a87, 0x68581511, + 0xdb0c2e0d, 0x64f98fa7, + 0x47b5481d, 0xbefa4fa4 ]; +} +utils.inherits(SHA384, SHA512); +module.exports = SHA384; + +SHA384.blockSize = 1024; +SHA384.outSize = 384; +SHA384.hmacStrength = 192; +SHA384.padLength = 128; + +SHA384.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 12), 'big'); + else + return utils.split32(this.h.slice(0, 12), 'big'); +}; diff --git a/node_modules/hash.js/lib/hash/sha/512.js b/node_modules/hash.js/lib/hash/sha/512.js new file mode 100644 index 000000000..c371a2590 --- /dev/null +++ b/node_modules/hash.js/lib/hash/sha/512.js @@ -0,0 +1,330 @@ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var assert = require('minimalistic-assert'); + +var rotr64_hi = utils.rotr64_hi; +var rotr64_lo = utils.rotr64_lo; +var shr64_hi = utils.shr64_hi; +var shr64_lo = utils.shr64_lo; +var sum64 = utils.sum64; +var sum64_hi = utils.sum64_hi; +var sum64_lo = utils.sum64_lo; +var sum64_4_hi = utils.sum64_4_hi; +var sum64_4_lo = utils.sum64_4_lo; +var sum64_5_hi = utils.sum64_5_hi; +var sum64_5_lo = utils.sum64_5_lo; + +var BlockHash = common.BlockHash; + +var sha512_K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function SHA512() { + if (!(this instanceof SHA512)) + return new SHA512(); + + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xf3bcc908, + 0xbb67ae85, 0x84caa73b, + 0x3c6ef372, 0xfe94f82b, + 0xa54ff53a, 0x5f1d36f1, + 0x510e527f, 0xade682d1, + 0x9b05688c, 0x2b3e6c1f, + 0x1f83d9ab, 0xfb41bd6b, + 0x5be0cd19, 0x137e2179 ]; + this.k = sha512_K; + this.W = new Array(160); +} +utils.inherits(SHA512, BlockHash); +module.exports = SHA512; + +SHA512.blockSize = 1024; +SHA512.outSize = 512; +SHA512.hmacStrength = 192; +SHA512.padLength = 128; + +SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { + var W = this.W; + + // 32 x 32bit words + for (var i = 0; i < 32; i++) + W[i] = msg[start + i]; + for (; i < W.length; i += 2) { + var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 + var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); + var c1_hi = W[i - 14]; // i - 7 + var c1_lo = W[i - 13]; + var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 + var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); + var c3_hi = W[i - 32]; // i - 16 + var c3_lo = W[i - 31]; + + W[i] = sum64_4_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + W[i + 1] = sum64_4_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + } +}; + +SHA512.prototype._update = function _update(msg, start) { + this._prepareBlock(msg, start); + + var W = this.W; + + var ah = this.h[0]; + var al = this.h[1]; + var bh = this.h[2]; + var bl = this.h[3]; + var ch = this.h[4]; + var cl = this.h[5]; + var dh = this.h[6]; + var dl = this.h[7]; + var eh = this.h[8]; + var el = this.h[9]; + var fh = this.h[10]; + var fl = this.h[11]; + var gh = this.h[12]; + var gl = this.h[13]; + var hh = this.h[14]; + var hl = this.h[15]; + + assert(this.k.length === W.length); + for (var i = 0; i < W.length; i += 2) { + var c0_hi = hh; + var c0_lo = hl; + var c1_hi = s1_512_hi(eh, el); + var c1_lo = s1_512_lo(eh, el); + var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); + var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); + var c3_hi = this.k[i]; + var c3_lo = this.k[i + 1]; + var c4_hi = W[i]; + var c4_lo = W[i + 1]; + + var T1_hi = sum64_5_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + var T1_lo = sum64_5_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + + c0_hi = s0_512_hi(ah, al); + c0_lo = s0_512_lo(ah, al); + c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); + c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); + + var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); + var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); + + hh = gh; + hl = gl; + + gh = fh; + gl = fl; + + fh = eh; + fl = el; + + eh = sum64_hi(dh, dl, T1_hi, T1_lo); + el = sum64_lo(dl, dl, T1_hi, T1_lo); + + dh = ch; + dl = cl; + + ch = bh; + cl = bl; + + bh = ah; + bl = al; + + ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); + al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); + } + + sum64(this.h, 0, ah, al); + sum64(this.h, 2, bh, bl); + sum64(this.h, 4, ch, cl); + sum64(this.h, 6, dh, dl); + sum64(this.h, 8, eh, el); + sum64(this.h, 10, fh, fl); + sum64(this.h, 12, gh, gl); + sum64(this.h, 14, hh, hl); +}; + +SHA512.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + +function ch64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ ((~xh) & zh); + if (r < 0) + r += 0x100000000; + return r; +} + +function ch64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ ((~xl) & zl); + if (r < 0) + r += 0x100000000; + return r; +} + +function maj64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); + if (r < 0) + r += 0x100000000; + return r; +} + +function maj64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); + if (r < 0) + r += 0x100000000; + return r; +} + +function s0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 28); + var c1_hi = rotr64_hi(xl, xh, 2); // 34 + var c2_hi = rotr64_hi(xl, xh, 7); // 39 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function s0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 28); + var c1_lo = rotr64_lo(xl, xh, 2); // 34 + var c2_lo = rotr64_lo(xl, xh, 7); // 39 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function s1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 14); + var c1_hi = rotr64_hi(xh, xl, 18); + var c2_hi = rotr64_hi(xl, xh, 9); // 41 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function s1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 14); + var c1_lo = rotr64_lo(xh, xl, 18); + var c2_lo = rotr64_lo(xl, xh, 9); // 41 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function g0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 1); + var c1_hi = rotr64_hi(xh, xl, 8); + var c2_hi = shr64_hi(xh, xl, 7); + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function g0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 1); + var c1_lo = rotr64_lo(xh, xl, 8); + var c2_lo = shr64_lo(xh, xl, 7); + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function g1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 19); + var c1_hi = rotr64_hi(xl, xh, 29); // 61 + var c2_hi = shr64_hi(xh, xl, 6); + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function g1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 19); + var c1_lo = rotr64_lo(xl, xh, 29); // 61 + var c2_lo = shr64_lo(xh, xl, 6); + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} diff --git a/node_modules/hash.js/lib/hash/sha/common.js b/node_modules/hash.js/lib/hash/sha/common.js new file mode 100644 index 000000000..d41b46431 --- /dev/null +++ b/node_modules/hash.js/lib/hash/sha/common.js @@ -0,0 +1,49 @@ +'use strict'; + +var utils = require('../utils'); +var rotr32 = utils.rotr32; + +function ft_1(s, x, y, z) { + if (s === 0) + return ch32(x, y, z); + if (s === 1 || s === 3) + return p32(x, y, z); + if (s === 2) + return maj32(x, y, z); +} +exports.ft_1 = ft_1; + +function ch32(x, y, z) { + return (x & y) ^ ((~x) & z); +} +exports.ch32 = ch32; + +function maj32(x, y, z) { + return (x & y) ^ (x & z) ^ (y & z); +} +exports.maj32 = maj32; + +function p32(x, y, z) { + return x ^ y ^ z; +} +exports.p32 = p32; + +function s0_256(x) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} +exports.s0_256 = s0_256; + +function s1_256(x) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} +exports.s1_256 = s1_256; + +function g0_256(x) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); +} +exports.g0_256 = g0_256; + +function g1_256(x) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); +} +exports.g1_256 = g1_256; diff --git a/node_modules/hash.js/lib/hash/utils.js b/node_modules/hash.js/lib/hash/utils.js new file mode 100644 index 000000000..3d7d4ea7e --- /dev/null +++ b/node_modules/hash.js/lib/hash/utils.js @@ -0,0 +1,253 @@ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +exports.inherits = inherits; + +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg === 'string') { + if (!enc) { + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + var hi = c >> 8; + var lo = c & 0xff; + if (hi) + res.push(hi, lo); + else + res.push(lo); + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + } else { + for (i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + } + return res; +} +exports.toArray = toArray; + +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +exports.toHex = toHex; + +function htonl(w) { + var res = (w >>> 24) | + ((w >>> 8) & 0xff00) | + ((w << 8) & 0xff0000) | + ((w & 0xff) << 24); + return res >>> 0; +} +exports.htonl = htonl; + +function toHex32(msg, endian) { + var res = ''; + for (var i = 0; i < msg.length; i++) { + var w = msg[i]; + if (endian === 'little') + w = htonl(w); + res += zero8(w.toString(16)); + } + return res; +} +exports.toHex32 = toHex32; + +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +exports.zero2 = zero2; + +function zero8(word) { + if (word.length === 7) + return '0' + word; + else if (word.length === 6) + return '00' + word; + else if (word.length === 5) + return '000' + word; + else if (word.length === 4) + return '0000' + word; + else if (word.length === 3) + return '00000' + word; + else if (word.length === 2) + return '000000' + word; + else if (word.length === 1) + return '0000000' + word; + else + return word; +} +exports.zero8 = zero8; + +function join32(msg, start, end, endian) { + var len = end - start; + assert(len % 4 === 0); + var res = new Array(len / 4); + for (var i = 0, k = start; i < res.length; i++, k += 4) { + var w; + if (endian === 'big') + w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; + else + w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; + res[i] = w >>> 0; + } + return res; +} +exports.join32 = join32; + +function split32(msg, endian) { + var res = new Array(msg.length * 4); + for (var i = 0, k = 0; i < msg.length; i++, k += 4) { + var m = msg[i]; + if (endian === 'big') { + res[k] = m >>> 24; + res[k + 1] = (m >>> 16) & 0xff; + res[k + 2] = (m >>> 8) & 0xff; + res[k + 3] = m & 0xff; + } else { + res[k + 3] = m >>> 24; + res[k + 2] = (m >>> 16) & 0xff; + res[k + 1] = (m >>> 8) & 0xff; + res[k] = m & 0xff; + } + } + return res; +} +exports.split32 = split32; + +function rotr32(w, b) { + return (w >>> b) | (w << (32 - b)); +} +exports.rotr32 = rotr32; + +function rotl32(w, b) { + return (w << b) | (w >>> (32 - b)); +} +exports.rotl32 = rotl32; + +function sum32(a, b) { + return (a + b) >>> 0; +} +exports.sum32 = sum32; + +function sum32_3(a, b, c) { + return (a + b + c) >>> 0; +} +exports.sum32_3 = sum32_3; + +function sum32_4(a, b, c, d) { + return (a + b + c + d) >>> 0; +} +exports.sum32_4 = sum32_4; + +function sum32_5(a, b, c, d, e) { + return (a + b + c + d + e) >>> 0; +} +exports.sum32_5 = sum32_5; + +function sum64(buf, pos, ah, al) { + var bh = buf[pos]; + var bl = buf[pos + 1]; + + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + buf[pos] = hi >>> 0; + buf[pos + 1] = lo; +} +exports.sum64 = sum64; + +function sum64_hi(ah, al, bh, bl) { + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + return hi >>> 0; +} +exports.sum64_hi = sum64_hi; + +function sum64_lo(ah, al, bh, bl) { + var lo = al + bl; + return lo >>> 0; +} +exports.sum64_lo = sum64_lo; + +function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + + var hi = ah + bh + ch + dh + carry; + return hi >>> 0; +} +exports.sum64_4_hi = sum64_4_hi; + +function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { + var lo = al + bl + cl + dl; + return lo >>> 0; +} +exports.sum64_4_lo = sum64_4_lo; + +function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + lo = (lo + el) >>> 0; + carry += lo < el ? 1 : 0; + + var hi = ah + bh + ch + dh + eh + carry; + return hi >>> 0; +} +exports.sum64_5_hi = sum64_5_hi; + +function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var lo = al + bl + cl + dl + el; + + return lo >>> 0; +} +exports.sum64_5_lo = sum64_5_lo; + +function rotr64_hi(ah, al, num) { + var r = (al << (32 - num)) | (ah >>> num); + return r >>> 0; +} +exports.rotr64_hi = rotr64_hi; + +function rotr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.rotr64_lo = rotr64_lo; + +function shr64_hi(ah, al, num) { + return ah >>> num; +} +exports.shr64_hi = shr64_hi; + +function shr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.shr64_lo = shr64_lo; diff --git a/node_modules/hash.js/package.json b/node_modules/hash.js/package.json new file mode 100644 index 000000000..7611c22b6 --- /dev/null +++ b/node_modules/hash.js/package.json @@ -0,0 +1,64 @@ +{ + "_from": "hash.js@^1.0.0", + "_id": "hash.js@1.1.3", + "_inBundle": false, + "_integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "_location": "/hash.js", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "hash.js@^1.0.0", + "name": "hash.js", + "escapedName": "hash.js", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/elliptic", + "/hmac-drbg" + ], + "_resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "_shasum": "340dedbe6290187151c1ea1d777a3448935df846", + "_spec": "hash.js@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/elliptic", + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com" + }, + "bugs": { + "url": "https://github.com/indutny/hash.js/issues" + }, + "bundleDependencies": false, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + }, + "deprecated": false, + "description": "Various hash functions that could be run by both browser and node", + "devDependencies": { + "eslint": "^4.0.0", + "mocha": "^3.4.2" + }, + "homepage": "https://github.com/indutny/hash.js", + "keywords": [ + "hash", + "sha256", + "sha224", + "hmac" + ], + "license": "MIT", + "main": "lib/hash.js", + "name": "hash.js", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/hash.js.git" + }, + "scripts": { + "lint": "eslint lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", + "test": "mocha --reporter=spec test/*-test.js && npm run lint" + }, + "typings": "lib/hash.d.ts", + "version": "1.1.3" +} diff --git a/node_modules/hash.js/test/hash-test.js b/node_modules/hash.js/test/hash-test.js new file mode 100644 index 000000000..6a36efc6f --- /dev/null +++ b/node_modules/hash.js/test/hash-test.js @@ -0,0 +1,124 @@ +'use strict'; +/* global describe it */ + +var assert = require('assert'); +var hash = require('../'); + +describe('Hash', function() { + function test(fn, cases) { + for (var i = 0; i < cases.length; i++) { + var msg = cases[i][0]; + var res = cases[i][1]; + var enc = cases[i][2]; + + var dgst = fn().update(msg, enc).digest('hex'); + assert.equal(dgst, res); + + // Split message + dgst = fn().update(msg.slice(0, 2), enc) + .update(msg.slice(2), enc) + .digest('hex'); + assert.equal(dgst, res); + } + } + + it('should support sha256', function() { + assert.equal(hash.sha256.blockSize, 512); + assert.equal(hash.sha256.outSize, 256); + + test(hash.sha256, [ + [ 'abc', + 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' ], + [ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', + '248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1' ], + [ 'deadbeef', + '5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953', + 'hex' ], + ]); + }); + + it('should support sha224', function() { + assert.equal(hash.sha224.blockSize, 512); + assert.equal(hash.sha224.outSize, 224); + + test(hash.sha224, [ + [ 'abc', + '23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7' ], + [ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', + '75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525' ], + [ 'deadbeef', + '55b9eee5f60cc362ddc07676f620372611e22272f60fdbec94f243f8', + 'hex' ], + ]); + }); + + it('should support ripemd160', function() { + assert.equal(hash.ripemd160.blockSize, 512); + assert.equal(hash.ripemd160.outSize, 160); + + test(hash.ripemd160, [ + [ '', '9c1185a5c5e9fc54612808977ee8f548b2258d31'], + [ 'abc', + '8eb208f7e05d987a9b044a8e98c6b087f15a0bfc' ], + [ 'message digest', + '5d0689ef49d2fae572b881b123a85ffa21595f36' ], + [ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', + '12a053384a9c0c88e405a06c27dcf49ada62eb2b' ], + [ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', + 'b0e20b6e3116640286ed3a87a5713079b21f5189' ], + ]); + }); + + it('should support sha1', function() { + assert.equal(hash.sha1.blockSize, 512); + assert.equal(hash.sha1.outSize, 160); + + test(hash.sha1, [ + [ '', + 'da39a3ee5e6b4b0d3255bfef95601890afd80709' ], + [ 'abc', + 'a9993e364706816aba3e25717850c26c9cd0d89d' ], + [ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', + '84983e441c3bd26ebaae4aa1f95129e5e54670f1' ], + [ 'deadbeef', + 'd78f8bb992a56a597f6c7a1fb918bb78271367eb', + 'hex' ], + ]); + }); + + it('should support sha512', function() { + assert.equal(hash.sha512.blockSize, 1024); + assert.equal(hash.sha512.outSize, 512); + + test(hash.sha512, [ + [ 'abc', + 'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a' + + '2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f' + ], + [ + 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn' + + 'hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', + '8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018' + + '501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909' + ] + ]); + }); + + it('should support sha384', function() { + assert.equal(hash.sha384.blockSize, 1024); + assert.equal(hash.sha384.outSize, 384); + + test(hash.sha384, [ + [ 'abc', + 'cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed' + + '8086072ba1e7cc2358baeca134c825a7' + ], + [ + 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn' + + 'hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', + '09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712' + + 'fcc7c71a557e2db966c3e9fa91746039' + ] + ]); + }); +}); diff --git a/node_modules/hash.js/test/hmac-test.js b/node_modules/hash.js/test/hmac-test.js new file mode 100644 index 000000000..6fe18e38e --- /dev/null +++ b/node_modules/hash.js/test/hmac-test.js @@ -0,0 +1,62 @@ +'use strict'; +/* global describe it */ + +var assert = require('assert'); +var hash = require('../'); + +describe('Hmac', function() { + describe('mixed test vector', function() { + test({ + name: 'nist 1', + key: '00010203 04050607 08090A0B 0C0D0E0F' + + '10111213 14151617 18191A1B 1C1D1E1F 20212223 24252627' + + '28292A2B 2C2D2E2F 30313233 34353637 38393A3B 3C3D3E3F', + msg: 'Sample message for keylen=blocklen', + res: '8bb9a1db9806f20df7f77b82138c7914d174d59e13dc4d0169c9057b133e1d62' + }); + test({ + name: 'nist 2', + key: '00010203 04050607' + + '08090A0B 0C0D0E0F 10111213 14151617 18191A1B 1C1D1E1F', + msg: 'Sample message for keylen + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/he/README.md b/node_modules/he/README.md new file mode 100644 index 000000000..b2223a91f --- /dev/null +++ b/node_modules/he/README.md @@ -0,0 +1,379 @@ +# he [![Build status](https://travis-ci.org/mathiasbynens/he.svg?branch=master)](https://travis-ci.org/mathiasbynens/he) [![Code coverage status](https://codecov.io/github/mathiasbynens/he/coverage.svg?branch=master)](https://codecov.io/github/mathiasbynens/he?branch=master) [![Dependency status](https://gemnasium.com/mathiasbynens/he.svg)](https://gemnasium.com/mathiasbynens/he) + +_he_ (for “HTML entities”) is a robust HTML entity encoder/decoder written in JavaScript. It supports [all standardized named character references as per HTML](https://html.spec.whatwg.org/multipage/syntax.html#named-character-references), handles [ambiguous ampersands](https://mathiasbynens.be/notes/ambiguous-ampersands) and other edge cases [just like a browser would](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references), has an extensive test suite, and — contrary to many other JavaScript solutions — _he_ handles astral Unicode symbols just fine. [An online demo is available.](https://mothereff.in/html-entities) + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install he +``` + +Via [Bower](http://bower.io/): + +```bash +bower install he +``` + +Via [Component](https://github.com/component/component): + +```bash +component install mathiasbynens/he +``` + +In a browser: + +```html + +``` + +In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/): + +```js +var he = require('he'); +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('he.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'he': 'path/to/he' + } + }, + ['he'], + function(he) { + console.log(he); + } +); +``` + +## API + +### `he.version` + +A string representing the semantic version number. + +### `he.encode(text, options)` + +This function takes a string of text and encodes (by default) any symbols that aren’t printable ASCII symbols and `&`, `<`, `>`, `"`, `'`, and `` ` ``, replacing them with character references. + +```js +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +As long as the input string contains [allowed code points](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream) only, the return value of this function is always valid HTML. Any [(invalid) code points that cannot be represented using a character reference](https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides) in the input are not encoded: + +```js +he.encode('foo \0 bar'); +// → 'foo \0 bar' +``` + +However, enabling [the `strict` option](https://github.com/mathiasbynens/he#strict) causes invalid code points to throw an exception. With `strict` enabled, `he.encode` either throws (if the input contains invalid code points) or returns a string of valid HTML. + +The `options` object is optional. It recognizes the following properties: + +#### `useNamedReferences` + +The default value for the `useNamedReferences` option is `false`. This means that `encode()` will not use any named character references (e.g. `©`) in the output — hexadecimal escapes (e.g. `©`) will be used instead. Set it to `true` to enable the use of named references. + +**Note that if compatibility with older browsers is a concern, this option should remain disabled.** + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly disallow named references: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': false +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly allow named references: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `decimal` + +The default value for the `decimal` option is `false`. If the option is enabled, `encode` will generally use decimal escapes (e.g. `©`) rather than hexadecimal escapes (e.g. `©`). Beside of this replacement, the basic behavior remains the same when combined with other options. For example: if both options `useNamedReferences` and `decimal` are enabled, named references (e.g. `©`) are used over decimal escapes. HTML entities without a named reference are encoded using decimal escapes. + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly disable decimal escapes: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'decimal': false +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly enable decimal escapes: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'decimal': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly allow named references and decimal escapes: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': true, + 'decimal': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `encodeEverything` + +The default value for the `encodeEverything` option is `false`. This means that `encode()` will not use any character references for printable ASCII symbols that don’t need escaping. Set it to `true` to encode every symbol in the input string. When set to `true`, this option takes precedence over `allowUnsafeSymbols` (i.e. setting the latter to `true` in such a case has no effect). + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly encode all symbols: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'encodeEverything': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// This setting can be combined with the `useNamedReferences` option: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'encodeEverything': true, + 'useNamedReferences': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `strict` + +The default value for the `strict` option is `false`. This means that `encode()` will encode any HTML text content you feed it, even if it contains any symbols that cause [parse errors](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators. + +```js +// Using the global default setting (defaults to `false`, i.e. error-tolerant mode): +he.encode('\x01'); +// → '' + +// Passing an `options` object to `encode`, to explicitly enable error-tolerant mode: +he.encode('\x01', { + 'strict': false +}); +// → '' + +// Passing an `options` object to `encode`, to explicitly enable strict mode: +he.encode('\x01', { + 'strict': true +}); +// → Parse error +``` + +#### `allowUnsafeSymbols` + +The default value for the `allowUnsafeSymbols` option is `false`. This means that characters that are unsafe for use in HTML content (`&`, `<`, `>`, `"`, `'`, and `` ` ``) will be encoded. When set to `true`, only non-ASCII characters will be encoded. If the `encodeEverything` option is set to `true`, this option will be ignored. + +```js +he.encode('foo © and & ampersand', { + 'allowUnsafeSymbols': true +}); +// → 'foo © and & ampersand' +``` + +#### Overriding default `encode` options globally + +The global default setting can be overridden by modifying the `he.encode.options` object. This saves you from passing in an `options` object for every call to `encode` if you want to use the non-default setting. + +```js +// Read the global default setting: +he.encode.options.useNamedReferences; +// → `false` by default + +// Override the global default setting: +he.encode.options.useNamedReferences = true; + +// Using the global default setting, which is now `true`: +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +### `he.decode(html, options)` + +This function takes a string of HTML and decodes any named and numerical character references in it using [the algorithm described in section 12.2.4.69 of the HTML spec](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references). + +```js +he.decode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +The `options` object is optional. It recognizes the following properties: + +#### `isAttributeValue` + +The default value for the `isAttributeValue` option is `false`. This means that `decode()` will decode the string as if it were used in [a text context in an HTML document](https://html.spec.whatwg.org/multipage/syntax.html#data-state). HTML has different rules for [parsing character references in attribute values](https://html.spec.whatwg.org/multipage/syntax.html#character-reference-in-attribute-value-state) — set this option to `true` to treat the input string as if it were used as an attribute value. + +```js +// Using the global default setting (defaults to `false`, i.e. HTML text context): +he.decode('foo&bar'); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly assume an HTML text context: +he.decode('foo&bar', { + 'isAttributeValue': false +}); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly assume an HTML attribute value context: +he.decode('foo&bar', { + 'isAttributeValue': true +}); +// → 'foo&bar' +``` + +#### `strict` + +The default value for the `strict` option is `false`. This means that `decode()` will decode any HTML text content you feed it, even if it contains any entities that cause [parse errors](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators. + +```js +// Using the global default setting (defaults to `false`, i.e. error-tolerant mode): +he.decode('foo&bar'); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly enable error-tolerant mode: +he.decode('foo&bar', { + 'strict': false +}); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly enable strict mode: +he.decode('foo&bar', { + 'strict': true +}); +// → Parse error +``` + +#### Overriding default `decode` options globally + +The global default settings for the `decode` function can be overridden by modifying the `he.decode.options` object. This saves you from passing in an `options` object for every call to `decode` if you want to use a non-default setting. + +```js +// Read the global default setting: +he.decode.options.isAttributeValue; +// → `false` by default + +// Override the global default setting: +he.decode.options.isAttributeValue = true; + +// Using the global default setting, which is now `true`: +he.decode('foo&bar'); +// → 'foo&bar' +``` + +### `he.escape(text)` + +This function takes a string of text and escapes it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, `'`, and `` ` ``. + +```js +he.escape(''); +// → '<img src='x' onerror="prompt(1)">' +``` + +### `he.unescape(html, options)` + +`he.unescape` is an alias for `he.decode`. It takes a string of HTML and decodes any named and numerical character references in it. + +### Using the `he` binary + +To use the `he` binary in your shell, simply install _he_ globally using npm: + +```bash +npm install -g he +``` + +After that you will be able to encode/decode HTML entities from the command line: + +```bash +$ he --encode 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz + +$ he --encode --use-named-refs 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz + +$ he --decode 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz +``` + +Read a local text file, encode it for use in an HTML text context, and save the result to a new file: + +```bash +$ he --encode < foo.txt > foo-escaped.html +``` + +Or do the same with an online text file: + +```bash +$ curl -sL "http://git.io/HnfEaw" | he --encode > escaped.html +``` + +Or, the opposite — read a local file containing a snippet of HTML in a text context, decode it back to plain text, and save the result to a new file: + +```bash +$ he --decode < foo-escaped.html > foo.txt +``` + +Or do the same with an online HTML snippet: + +```bash +$ curl -sL "http://git.io/HnfEaw" | he --decode > decoded.txt +``` + +See `he --help` for the full list of options. + +## Support + +_he_ has been tested in at least: + +* Chrome 27-50 +* Firefox 3-45 +* Safari 4-9 +* Opera 10-12, 15–37 +* IE 6–11 +* Edge +* Narwhal 0.3.2 +* Node.js v0.10, v0.12, v4, v5 +* PhantomJS 1.9.0 +* Rhino 1.7RC4 +* RingoJS 0.8-0.11 + +## Unit tests & code coverage + +After cloning this repository, run `npm install` to install the dependencies needed for he development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +## Acknowledgements + +Thanks to [Simon Pieters](https://simon.html5.org/) ([@zcorpan](https://twitter.com/zcorpan)) for the many suggestions. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_he_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/he/bin/he b/node_modules/he/bin/he new file mode 100755 index 000000000..cfdfd6c31 --- /dev/null +++ b/node_modules/he/bin/he @@ -0,0 +1,148 @@ +#!/usr/bin/env node +(function() { + + var fs = require('fs'); + var he = require('../he.js'); + var strings = process.argv.splice(2); + var stdin = process.stdin; + var data; + var timeout; + var action; + var options = {}; + var log = console.log; + + var main = function() { + var option = strings[0]; + var count = 0; + + if (/^(?:-h|--help|undefined)$/.test(option)) { + log( + 'he v%s - https://mths.be/he', + he.version + ); + log([ + '\nUsage:\n', + '\the [--escape] string', + '\the [--encode] [--use-named-refs] [--everything] [--allow-unsafe] [--decimal] string', + '\the [--decode] [--attribute] [--strict] string', + '\the [-v | --version]', + '\the [-h | --help]', + '\nExamples:\n', + '\the --escape \\', + '\techo \'© 𝌆\' | he --decode' + ].join('\n')); + return process.exit(option ? 0 : 1); + } + + if (/^(?:-v|--version)$/.test(option)) { + log('v%s', he.version); + return process.exit(0); + } + + strings.forEach(function(string) { + // Process options + if (string == '--escape') { + action = 'escape'; + return; + } + if (string == '--encode') { + action = 'encode'; + return; + } + if (string == '--use-named-refs') { + action = 'encode'; + options.useNamedReferences = true; + return; + } + if (string == '--everything') { + action = 'encode'; + options.encodeEverything = true; + return; + } + if (string == '--allow-unsafe') { + action = 'encode'; + options.allowUnsafeSymbols = true; + return; + } + if (string == '--decimal') { + action = 'encode'; + options.decimal = true; + return; + } + if (string == '--decode') { + action = 'decode'; + return; + } + if (string == '--attribute') { + action = 'decode'; + options.isAttributeValue = true; + return; + } + if (string == '--strict') { + action = 'decode'; + options.strict = true; + return; + } + // Process string(s) + var result; + if (!action) { + log('Error: he requires at least one option and a string argument.'); + log('Try `he --help` for more information.'); + return process.exit(1); + } + try { + result = he[action](string, options); + log(result); + count++; + } catch(error) { + log(error.message + '\n'); + log('Error: failed to %s.', action); + log('If you think this is a bug in he, please report it:'); + log('https://github.com/mathiasbynens/he/issues/new'); + log( + '\nStack trace using he@%s:\n', + he.version + ); + log(error.stack); + return process.exit(1); + } + }); + if (!count) { + log('Error: he requires a string argument.'); + log('Try `he --help` for more information.'); + return process.exit(1); + } + // Return with exit status 0 outside of the `forEach` loop, in case + // multiple strings were passed in. + return process.exit(0); + }; + + if (stdin.isTTY) { + // handle shell arguments + main(); + } else { + // Either the script is called from within a non-TTY context, or `stdin` + // content is being piped in. + if (!process.stdout.isTTY) { + // The script was called from a non-TTY context. This is a rather uncommon + // use case we don’t actively support. However, we don’t want the script + // to wait forever in such cases, so… + timeout = setTimeout(function() { + // …if no piped data arrived after a whole minute, handle shell + // arguments instead. + main(); + }, 60000); + } + data = ''; + stdin.on('data', function(chunk) { + clearTimeout(timeout); + data += chunk; + }); + stdin.on('end', function() { + strings.push(data.trim()); + main(); + }); + stdin.resume(); + } + +}()); diff --git a/node_modules/he/he.js b/node_modules/he/he.js new file mode 100644 index 000000000..f80078b64 --- /dev/null +++ b/node_modules/he/he.js @@ -0,0 +1,342 @@ +/*! https://mths.be/he v1.1.1 by @mathias | MIT license */ +;(function(root) { + + // Detect free variables `exports`. + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module`. + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root`. + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + // All astral symbols. + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + // All ASCII symbols (not just printable ASCII) except those listed in the + // first column of the overrides table. + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides + var regexAsciiWhitelist = /[\x01-\x7F]/g; + // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or + // code points listed in the first column of the overrides table on + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides. + var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; + + var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; + var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'}; + + var regexEscape = /["&'<>`]/g; + var escapeMap = { + '"': '"', + '&': '&', + '\'': ''', + '<': '<', + // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the + // following is not strictly necessary unless it’s part of a tag or an + // unquoted attribute value. We’re only escaping it to support those + // situations, and for XML support. + '>': '>', + // In Internet Explorer ≤ 8, the backtick character can be used + // to break out of (un)quoted attribute values or HTML comments. + // See http://html5sec.org/#102, http://html5sec.org/#108, and + // http://html5sec.org/#133. + '`': '`' + }; + + var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; + var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g; + var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'}; + var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'}; + var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'}; + var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]; + + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var has = function(object, propertyName) { + return hasOwnProperty.call(object, propertyName); + }; + + var contains = function(array, value) { + var index = -1; + var length = array.length; + while (++index < length) { + if (array[index] == value) { + return true; + } + } + return false; + }; + + var merge = function(options, defaults) { + if (!options) { + return defaults; + } + var result = {}; + var key; + for (key in defaults) { + // A `hasOwnProperty` check is not needed here, since only recognized + // option names are used anyway. Any others are ignored. + result[key] = has(options, key) ? options[key] : defaults[key]; + } + return result; + }; + + // Modified version of `ucs2encode`; see https://mths.be/punycode. + var codePointToSymbol = function(codePoint, strict) { + var output = ''; + if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { + // See issue #4: + // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is + // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD + // REPLACEMENT CHARACTER.” + if (strict) { + parseError('character reference outside the permissible Unicode range'); + } + return '\uFFFD'; + } + if (has(decodeMapNumeric, codePoint)) { + if (strict) { + parseError('disallowed character reference'); + } + return decodeMapNumeric[codePoint]; + } + if (strict && contains(invalidReferenceCodePoints, codePoint)) { + parseError('disallowed character reference'); + } + if (codePoint > 0xFFFF) { + codePoint -= 0x10000; + output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + output += stringFromCharCode(codePoint); + return output; + }; + + var hexEscape = function(codePoint) { + return '&#x' + codePoint.toString(16).toUpperCase() + ';'; + }; + + var decEscape = function(codePoint) { + return '&#' + codePoint + ';'; + }; + + var parseError = function(message) { + throw Error('Parse error: ' + message); + }; + + /*--------------------------------------------------------------------------*/ + + var encode = function(string, options) { + options = merge(options, encode.options); + var strict = options.strict; + if (strict && regexInvalidRawCodePoint.test(string)) { + parseError('forbidden code point'); + } + var encodeEverything = options.encodeEverything; + var useNamedReferences = options.useNamedReferences; + var allowUnsafeSymbols = options.allowUnsafeSymbols; + var escapeCodePoint = options.decimal ? decEscape : hexEscape; + + var escapeBmpSymbol = function(symbol) { + return escapeCodePoint(symbol.charCodeAt(0)); + }; + + if (encodeEverything) { + // Encode ASCII symbols. + string = string.replace(regexAsciiWhitelist, function(symbol) { + // Use named references if requested & possible. + if (useNamedReferences && has(encodeMap, symbol)) { + return '&' + encodeMap[symbol] + ';'; + } + return escapeBmpSymbol(symbol); + }); + // Shorten a few escapes that represent two symbols, of which at least one + // is within the ASCII range. + if (useNamedReferences) { + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒') + .replace(/fj/g, 'fj'); + } + // Encode non-ASCII symbols. + if (useNamedReferences) { + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } + // Note: any remaining non-ASCII symbols are handled outside of the `if`. + } else if (useNamedReferences) { + // Apply named character references. + // Encode `<>"'&` using named character references. + if (!allowUnsafeSymbols) { + string = string.replace(regexEscape, function(string) { + return '&' + encodeMap[string] + ';'; // no need to check `has()` here + }); + } + // Shorten escapes that represent two symbols, of which at least one is + // `<>"'&`. + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒'); + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } else if (!allowUnsafeSymbols) { + // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled + // using named character references. + string = string.replace(regexEscape, escapeBmpSymbol); + } + return string + // Encode astral symbols. + .replace(regexAstralSymbols, function($0) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = $0.charCodeAt(0); + var low = $0.charCodeAt(1); + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; + return escapeCodePoint(codePoint); + }) + // Encode any remaining BMP symbols that are not printable ASCII symbols + // using a hexadecimal escape. + .replace(regexBmpWhitelist, escapeBmpSymbol); + }; + // Expose default options (so they can be overridden globally). + encode.options = { + 'allowUnsafeSymbols': false, + 'encodeEverything': false, + 'strict': false, + 'useNamedReferences': false, + 'decimal' : false + }; + + var decode = function(html, options) { + options = merge(options, decode.options); + var strict = options.strict; + if (strict && regexInvalidEntity.test(html)) { + parseError('malformed character reference'); + } + return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) { + var codePoint; + var semicolon; + var decDigits; + var hexDigits; + var reference; + var next; + if ($1) { + // Decode decimal escapes, e.g. `𝌆`. + decDigits = $1; + semicolon = $2; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(decDigits, 10); + return codePointToSymbol(codePoint, strict); + } + if ($3) { + // Decode hexadecimal escapes, e.g. `𝌆`. + hexDigits = $3; + semicolon = $4; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(hexDigits, 16); + return codePointToSymbol(codePoint, strict); + } + if ($5) { + // Decode named character references with trailing `;`, e.g. `©`. + reference = $5; + if (has(decodeMap, reference)) { + return decodeMap[reference]; + } else { + // Ambiguous ampersand. https://mths.be/notes/ambiguous-ampersands + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + return $0; + } + } + // If we’re still here, it’s a legacy reference for sure. No need for an + // extra `if` check. + // Decode named character references without trailing `;`, e.g. `&` + // This is only a parse error if it gets converted to `&`, or if it is + // followed by `=` in an attribute context. + reference = $6; + next = $7; + if (next && options.isAttributeValue) { + if (strict && next == '=') { + parseError('`&` did not start a character reference'); + } + return $0; + } else { + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + // Note: there is no need to check `has(decodeMapLegacy, reference)`. + return decodeMapLegacy[reference] + (next || ''); + } + }); + }; + // Expose default options (so they can be overridden globally). + decode.options = { + 'isAttributeValue': false, + 'strict': false + }; + + var escape = function(string) { + return string.replace(regexEscape, function($0) { + // Note: there is no need to check `has(escapeMap, $0)` here. + return escapeMap[$0]; + }); + }; + + /*--------------------------------------------------------------------------*/ + + var he = { + 'version': '1.1.1', + 'encode': encode, + 'decode': decode, + 'escape': escape, + 'unescape': decode + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return he; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = he; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in he) { + has(he, key) && (freeExports[key] = he[key]); + } + } + } else { // in Rhino or a web browser + root.he = he; + } + +}(this)); diff --git a/node_modules/he/man/he.1 b/node_modules/he/man/he.1 new file mode 100644 index 000000000..7696628a3 --- /dev/null +++ b/node_modules/he/man/he.1 @@ -0,0 +1,78 @@ +.Dd April 5, 2016 +.Dt he 1 +.Sh NAME +.Nm he +.Nd encode/decode HTML entities just like a browser would +.Sh SYNOPSIS +.Nm +.Op Fl -escape Ar string +.br +.Op Fl -encode Ar string +.br +.Op Fl -encode Fl -use-named-refs Fl -everything Fl -allow-unsafe Ar string +.br +.Op Fl -decode Ar string +.br +.Op Fl -decode Fl -attribute Ar string +.br +.Op Fl -decode Fl -strict Ar string +.br +.Op Fl v | -version +.br +.Op Fl h | -help +.Sh DESCRIPTION +.Nm +encodes/decodes HTML entities in strings just like a browser would. +.Sh OPTIONS +.Bl -ohang -offset +.It Sy "--escape" +Take a string of text and escape it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, and `'`. +.It Sy "--encode" +Take a string of text and encode any symbols that aren't printable ASCII symbols and that can be replaced with character references. For example, it would turn `©` into `©`, but it wouldn't turn `+` into `+` since there is no point in doing so. Additionally, it replaces any remaining non-ASCII symbols with a hexadecimal escape sequence (e.g. `𝌆`). The return value of this function is always valid HTML. +.It Sy "--encode --use-named-refs" +Enable the use of named character references (like `©`) in the output. If compatibility with older browsers is a concern, don't use this option. +.It Sy "--encode --everything" +Encode every symbol in the input string, even safe printable ASCII symbols. +.It Sy "--encode --allow-unsafe" +Encode non-ASCII characters only. This leaves unsafe HTML/XML symbols like `&`, `<`, `>`, `"`, and `'` intact. +.It Sy "--encode --decimal" +Use decimal digits rather than hexadecimal digits for encoded character references, e.g. output `©` instead of `©`. +.It Sy "--decode" +Takes a string of HTML and decode any named and numerical character references in it using the algorithm described in the HTML spec. +.It Sy "--decode --attribute" +Parse the input as if it was an HTML attribute value rather than a string in an HTML text content. +.It Sy "--decode --strict" +Throw an error if an invalid character reference is encountered. +.It Sy "-v, --version" +Print he's version. +.It Sy "-h, --help" +Show the help screen. +.El +.Sh EXIT STATUS +The +.Nm he +utility exits with one of the following values: +.Pp +.Bl -tag -width flag -compact +.It Li 0 +.Nm +did what it was instructed to do successfully; either it encoded/decoded the input and printed the result, or it printed the version or usage message. +.It Li 1 +.Nm +encountered an error. +.El +.Sh EXAMPLES +.Bl -ohang -offset +.It Sy "he --escape ''" +Print an escaped version of the given string that is safe for use in HTML text contexts, escaping only `&`, `<`, `>`, `"`, and `'`. +.It Sy "he --decode '©𝌆'" +Print the decoded version of the given HTML string. +.It Sy "echo\ '©𝌆'\ |\ he --decode" +Print the decoded version of the HTML string that gets piped in. +.El +.Sh BUGS +he's bug tracker is located at . +.Sh AUTHOR +Mathias Bynens +.Sh WWW + diff --git a/node_modules/he/package.json b/node_modules/he/package.json new file mode 100644 index 000000000..2a037fb07 --- /dev/null +++ b/node_modules/he/package.json @@ -0,0 +1,88 @@ +{ + "_from": "he@^1.1.1", + "_id": "he@1.1.1", + "_inBundle": false, + "_integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "_location": "/he", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "he@^1.1.1", + "name": "he", + "escapedName": "he", + "rawSpec": "^1.1.1", + "saveSpec": null, + "fetchSpec": "^1.1.1" + }, + "_requiredBy": [ + "/ecstatic" + ], + "_resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "_shasum": "93410fd21b009735151f8868c2f271f3427e23fd", + "_spec": "he@^1.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/ecstatic", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bin": { + "he": "bin/he" + }, + "bugs": { + "url": "https://github.com/mathiasbynens/he/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A robust HTML entities encoder/decoder with full Unicode support.", + "devDependencies": { + "codecov.io": "^0.1.6", + "grunt": "^0.4.5", + "grunt-shell": "^1.1.1", + "grunt-template": "^0.2.3", + "istanbul": "^0.4.2", + "jsesc": "^1.0.0", + "lodash": "^4.8.2", + "qunit-extras": "^1.4.5", + "qunitjs": "~1.11.0", + "regenerate": "^1.2.1", + "requirejs": "^2.1.22", + "sort-object": "^3.0.2" + }, + "directories": { + "bin": "bin", + "man": "man", + "test": "tests" + }, + "files": [ + "LICENSE-MIT.txt", + "he.js", + "bin/", + "man/" + ], + "homepage": "https://mths.be/he", + "keywords": [ + "string", + "entities", + "entity", + "html", + "encode", + "decode", + "unicode" + ], + "license": "MIT", + "main": "he.js", + "man": [ + "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/he/man/he.1" + ], + "name": "he", + "repository": { + "type": "git", + "url": "git+https://github.com/mathiasbynens/he.git" + }, + "scripts": { + "build": "grunt build", + "test": "node tests/tests.js" + }, + "version": "1.1.1" +} diff --git a/node_modules/hmac-drbg/.npmignore b/node_modules/hmac-drbg/.npmignore new file mode 100644 index 000000000..1ca957177 --- /dev/null +++ b/node_modules/hmac-drbg/.npmignore @@ -0,0 +1,2 @@ +node_modules/ +npm-debug.log diff --git a/node_modules/hmac-drbg/.travis.yml b/node_modules/hmac-drbg/.travis.yml new file mode 100644 index 000000000..ce24b7a77 --- /dev/null +++ b/node_modules/hmac-drbg/.travis.yml @@ -0,0 +1,11 @@ +sudo: false + +language: node_js + +node_js: + - "4" + - "6" + - "stable" + +script: + - npm test diff --git a/node_modules/hmac-drbg/README.md b/node_modules/hmac-drbg/README.md new file mode 100644 index 000000000..7323899fc --- /dev/null +++ b/node_modules/hmac-drbg/README.md @@ -0,0 +1,48 @@ +# hmac-drbg +[![Build Status](https://secure.travis-ci.org/indutny/hmac-drbg.svg)](http://travis-ci.org/indutny/hmac-drbg) +[![NPM version](https://badge.fury.io/js/hmac-drbg.svg)](http://badge.fury.io/js/hmac-drbg) + +JS-only implementation of [HMAC DRBG][0]. + +## Usage + +```js +const DRBG = require('hmac-drbg'); +const hash = require('hash.js'); + +const d = new DRBG({ + hash: hash.sha256, + entropy: '0123456789abcdef', + nonce: '0123456789abcdef', + pers: '0123456789abcdef' /* or `null` */ +}); + +d.generate(32, 'hex'); +``` + +#### LICENSE + +This software is licensed under the MIT License. + +Copyright Fedor Indutny, 2017. + +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. + +[0]: http://csrc.nist.gov/groups/ST/toolkit/documents/rng/HashBlockCipherDRBG.pdf diff --git a/node_modules/hmac-drbg/lib/hmac-drbg.js b/node_modules/hmac-drbg/lib/hmac-drbg.js new file mode 100644 index 000000000..9051a52cd --- /dev/null +++ b/node_modules/hmac-drbg/lib/hmac-drbg.js @@ -0,0 +1,113 @@ +'use strict'; + +var hash = require('hash.js'); +var utils = require('minimalistic-crypto-utils'); +var assert = require('minimalistic-assert'); + +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) + return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; + + this._reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; + + var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); + var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); + var pers = utils.toArray(options.pers, options.persEnc || 'hex'); + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._init(entropy, nonce, pers); +} +module.exports = HmacDRBG; + +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); + + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; + } + + this._update(seed); + this._reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 +}; + +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); +}; + +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac() + .update(this.V) + .update([ 0x00 ]); + if (seed) + kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) + return; + + this.K = this._hmac() + .update(this.V) + .update([ 0x01 ]) + .update(seed) + .digest(); + this.V = this._hmac().update(this.V).digest(); +}; + +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; + } + + entropy = utils.toArray(entropy, entropyEnc); + add = utils.toArray(add, addEnc); + + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + + this._update(entropy.concat(add || [])); + this._reseed = 1; +}; + +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this._reseed > this.reseedInterval) + throw new Error('Reseed is required'); + + // Optional encoding + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } + + // Optional additional data + if (add) { + add = utils.toArray(add, addEnc || 'hex'); + this._update(add); + } + + var temp = []; + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); + } + + var res = temp.slice(0, len); + this._update(add); + this._reseed++; + return utils.encode(res, enc); +}; diff --git a/node_modules/hmac-drbg/package.json b/node_modules/hmac-drbg/package.json new file mode 100644 index 000000000..e6b603655 --- /dev/null +++ b/node_modules/hmac-drbg/package.json @@ -0,0 +1,60 @@ +{ + "_from": "hmac-drbg@^1.0.0", + "_id": "hmac-drbg@1.0.1", + "_inBundle": false, + "_integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "_location": "/hmac-drbg", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "hmac-drbg@^1.0.0", + "name": "hmac-drbg", + "escapedName": "hmac-drbg", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/elliptic" + ], + "_resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "_shasum": "d2745701025a6c775a6c545793ed502fc0c649a1", + "_spec": "hmac-drbg@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/elliptic", + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com" + }, + "bugs": { + "url": "https://github.com/indutny/hmac-drbg/issues" + }, + "bundleDependencies": false, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + }, + "deprecated": false, + "description": "Deterministic random bit generator (hmac)", + "devDependencies": { + "mocha": "^3.2.0" + }, + "homepage": "https://github.com/indutny/hmac-drbg#readme", + "keywords": [ + "hmac", + "drbg", + "prng" + ], + "license": "MIT", + "main": "lib/hmac-drbg.js", + "name": "hmac-drbg", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/hmac-drbg.git" + }, + "scripts": { + "test": "mocha --reporter=spec test/*-test.js" + }, + "version": "1.0.1" +} diff --git a/node_modules/hmac-drbg/test/drbg-test.js b/node_modules/hmac-drbg/test/drbg-test.js new file mode 100644 index 000000000..14fd28a84 --- /dev/null +++ b/node_modules/hmac-drbg/test/drbg-test.js @@ -0,0 +1,91 @@ +'use strict'; + +const assert = require('assert'); +const HmacDRBG = require('../'); +const hash = require('hash.js'); + +describe('Hmac_DRBG', () => { + it('should support hmac-drbg-sha256', () => { + function doDrbg(opt) { + const drbg = HmacDRBG({ + hash: hash.sha256, + entropy: opt.entropy, + entropyEnc: 'utf8', + nonce: opt.nonce, + nonceEnc: 'utf8', + pers: opt.pers, + persEnc: 'utf8' + }); + return drbg.generate(opt.size, 'hex'); + } + + const test = [ + { + entropy: 'totally random0123456789', + nonce: 'secret nonce', + pers: 'my drbg', + size: 32, + res: '018ec5f8e08c41e5ac974eb129ac297c5388ee1864324fa13d9b15cf98d9a157' + }, + { + entropy: 'totally random0123456789', + nonce: 'secret nonce', + pers: null, + size: 32, + res: 'ed5d61ecf0ef38258e62f03bbb49f19f2cd07ba5145a840d83b134d5963b3633' + } + ]; + for (let i = 0; i < test.length; i++) + assert.equal(doDrbg(test[i]), test[i].res); + }); + + describe('NIST vector', function() { + require('./fixtures/hmac-drbg-nist.json').forEach(function (opt) { + it('should not fail at ' + opt.name, function() { + const drbg = HmacDRBG({ + hash: hash.sha256, + entropy: opt.entropy, + nonce: opt.nonce, + pers: opt.pers + }); + + let last; + for (let i = 0; i < opt.add.length; i++) { + let add = opt.add[i]; + last = drbg.generate(opt.expected.length / 2, 'hex', add); + } + assert.equal(last, opt.expected); + }); + }); + }); + + describe('reseeding', function() { + it('should reseed', function() { + const entropy = 'totally random string with many chars that I typed ' + + 'in agony'; + const nonce = 'nonce'; + const pers = 'pers'; + + const original = HmacDRBG({ + hash: hash.sha256, + entropy, + nonce, + pers + }); + const reseeded = HmacDRBG({ + hash: hash.sha256, + entropy, + nonce, + pers + }); + + assert.strictEqual(original.generate(32, 'hex'), + reseeded.generate(32, 'hex')); + + reseeded.reseed('another absolutely random string'); + + assert.notEqual(original.generate(32, 'hex'), + reseeded.generate(32, 'hex')); + }); + }); +}); diff --git a/node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json b/node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json new file mode 100644 index 000000000..fce148a8e --- /dev/null +++ b/node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json @@ -0,0 +1,332 @@ +[ + { + "name": "0", + "entropy": "ca851911349384bffe89de1cbdc46e6831e44d34a4fb935ee285dd14b71a7488", + "nonce": "659ba96c601dc69fc902940805ec0ca8", + "pers": null, + "add": [ + null, + null + ], + "expected": "e528e9abf2dece54d47c7e75e5fe302149f817ea9fb4bee6f4199697d04d5b89d54fbb978a15b5c443c9ec21036d2460b6f73ebad0dc2aba6e624abf07745bc107694bb7547bb0995f70de25d6b29e2d3011bb19d27676c07162c8b5ccde0668961df86803482cb37ed6d5c0bb8d50cf1f50d476aa0458bdaba806f48be9dcb8" + }, + { + "name": "1", + "entropy": "79737479ba4e7642a221fcfd1b820b134e9e3540a35bb48ffae29c20f5418ea3", + "nonce": "3593259c092bef4129bc2c6c9e19f343", + "pers": null, + "add": [ + null, + null + ], + "expected": "cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655b924159413e2293b17610f211e09f770f172b8fb693a35b85d3b9e5e63b1dc252ac0e115002e9bedfb4b5b6fd43f33b8e0eafb2d072e1a6fee1f159df9b51e6c8da737e60d5032dd30544ec51558c6f080bdbdab1de8a939e961e06b5f1aca37" + }, + { + "name": "2", + "entropy": "b340907445b97a8b589264de4a17c0bea11bb53ad72f9f33297f05d2879d898d", + "nonce": "65cb27735d83c0708f72684ea58f7ee5", + "pers": null, + "add": [ + null, + null + ], + "expected": "75183aaaf3574bc68003352ad655d0e9ce9dd17552723b47fab0e84ef903694a32987eeddbdc48efd24195dbdac8a46ba2d972f5808f23a869e71343140361f58b243e62722088fe10a98e43372d252b144e00c89c215a76a121734bdc485486f65c0b16b8963524a3a70e6f38f169c12f6cbdd169dd48fe4421a235847a23ff" + }, + { + "name": "3", + "entropy": "8e159f60060a7d6a7e6fe7c9f769c30b98acb1240b25e7ee33f1da834c0858e7", + "nonce": "c39d35052201bdcce4e127a04f04d644", + "pers": null, + "add": [ + null, + null + ], + "expected": "62910a77213967ea93d6457e255af51fc79d49629af2fccd81840cdfbb4910991f50a477cbd29edd8a47c4fec9d141f50dfde7c4d8fcab473eff3cc2ee9e7cc90871f180777a97841597b0dd7e779eff9784b9cc33689fd7d48c0dcd341515ac8fecf5c55a6327aea8d58f97220b7462373e84e3b7417a57e80ce946d6120db5" + }, + { + "name": "4", + "entropy": "74755f196305f7fb6689b2fe6835dc1d81484fc481a6b8087f649a1952f4df6a", + "nonce": "c36387a544a5f2b78007651a7b74b749", + "pers": null, + "add": [ + null, + null + ], + "expected": "b2896f3af4375dab67e8062d82c1a005ef4ed119d13a9f18371b1b873774418684805fd659bfd69964f83a5cfe08667ddad672cafd16befffa9faed49865214f703951b443e6dca22edb636f3308380144b9333de4bcb0735710e4d9266786342fc53babe7bdbe3c01a3addb7f23c63ce2834729fabbd419b47beceb4a460236" + }, + { + "name": "5", + "entropy": "4b222718f56a3260b3c2625a4cf80950b7d6c1250f170bd5c28b118abdf23b2f", + "nonce": "7aed52d0016fcaef0b6492bc40bbe0e9", + "pers": null, + "add": [ + null, + null + ], + "expected": "a6da029b3665cd39fd50a54c553f99fed3626f4902ffe322dc51f0670dfe8742ed48415cf04bbad5ed3b23b18b7892d170a7dcf3ef8052d5717cb0c1a8b3010d9a9ea5de70ae5356249c0e098946030c46d9d3d209864539444374d8fbcae068e1d6548fa59e6562e6b2d1acbda8da0318c23752ebc9be0c1c1c5b3cf66dd967" + }, + { + "name": "6", + "entropy": "b512633f27fb182a076917e39888ba3ff35d23c3742eb8f3c635a044163768e0", + "nonce": "e2c39b84629a3de5c301db5643af1c21", + "pers": null, + "add": [ + null, + null + ], + "expected": "fb931d0d0194a97b48d5d4c231fdad5c61aedf1c3a55ac24983ecbf38487b1c93396c6b86ff3920cfa8c77e0146de835ea5809676e702dee6a78100da9aa43d8ec0bf5720befa71f82193205ac2ea403e8d7e0e6270b366dc4200be26afd9f63b7e79286a35c688c57cbff55ac747d4c28bb80a2b2097b3b62ea439950d75dff" + }, + { + "name": "7", + "entropy": "aae3ffc8605a975befefcea0a7a286642bc3b95fb37bd0eb0585a4cabf8b3d1e", + "nonce": "9504c3c0c4310c1c0746a036c91d9034", + "pers": null, + "add": [ + null, + null + ], + "expected": "2819bd3b0d216dad59ddd6c354c4518153a2b04374b07c49e64a8e4d055575dfbc9a8fcde68bd257ff1ba5c6000564b46d6dd7ecd9c5d684fd757df62d85211575d3562d7814008ab5c8bc00e7b5a649eae2318665b55d762de36eba00c2906c0e0ec8706edb493e51ca5eb4b9f015dc932f262f52a86b11c41e9a6d5b3bd431" + }, + { + "name": "8", + "entropy": "b9475210b79b87180e746df704b3cbc7bf8424750e416a7fbb5ce3ef25a82cc6", + "nonce": "24baf03599c10df6ef44065d715a93f7", + "pers": null, + "add": [ + null, + null + ], + "expected": "ae12d784f796183c50db5a1a283aa35ed9a2b685dacea97c596ff8c294906d1b1305ba1f80254eb062b874a8dfffa3378c809ab2869aa51a4e6a489692284a25038908a347342175c38401193b8afc498077e10522bec5c70882b7f760ea5946870bd9fc72961eedbe8bff4fd58c7cc1589bb4f369ed0d3bf26c5bbc62e0b2b2" + }, + { + "name": "9", + "entropy": "27838eb44ceccb4e36210703ebf38f659bc39dd3277cd76b7a9bcd6bc964b628", + "nonce": "39cfe0210db2e7b0eb52a387476e7ea1", + "pers": null, + "add": [ + null, + null + ], + "expected": "e5e72a53605d2aaa67832f97536445ab774dd9bff7f13a0d11fd27bf6593bfb52309f2d4f09d147192199ea584503181de87002f4ee085c7dc18bf32ce5315647a3708e6f404d6588c92b2dda599c131aa350d18c747b33dc8eda15cf40e95263d1231e1b4b68f8d829f86054d49cfdb1b8d96ab0465110569c8583a424a099a" + }, + { + "name": "10", + "entropy": "d7129e4f47008ad60c9b5d081ff4ca8eb821a6e4deb91608bf4e2647835373a5", + "nonce": "a72882773f78c2fc4878295840a53012", + "pers": null, + "add": [ + null, + null + ], + "expected": "0cbf48585c5de9183b7ff76557f8fc9ebcfdfde07e588a8641156f61b7952725bbee954f87e9b937513b16bba0f2e523d095114658e00f0f3772175acfcb3240a01de631c19c5a834c94cc58d04a6837f0d2782fa53d2f9f65178ee9c837222494c799e64c60406069bd319549b889fa00a0032dd7ba5b1cc9edbf58de82bfcd" + }, + { + "name": "11", + "entropy": "67fe5e300c513371976c80de4b20d4473889c9f1214bce718bc32d1da3ab7532", + "nonce": "e256d88497738a33923aa003a8d7845c", + "pers": null, + "add": [ + null, + null + ], + "expected": "b44660d64ef7bcebc7a1ab71f8407a02285c7592d755ae6766059e894f694373ed9c776c0cfc8594413eefb400ed427e158d687e28da3ecc205e0f7370fb089676bbb0fa591ec8d916c3d5f18a3eb4a417120705f3e2198154cd60648dbfcfc901242e15711cacd501b2c2826abe870ba32da785ed6f1fdc68f203d1ab43a64f" + }, + { + "name": "12", + "entropy": "de8142541255c46d66efc6173b0fe3ffaf5936c897a3ce2e9d5835616aafa2cb", + "nonce": "d01f9002c407127bc3297a561d89b81d", + "pers": null, + "add": [ + null, + null + ], + "expected": "64d1020929d74716446d8a4e17205d0756b5264867811aa24d0d0da8644db25d5cde474143c57d12482f6bf0f31d10af9d1da4eb6d701bdd605a8db74fb4e77f79aaa9e450afda50b18d19fae68f03db1d7b5f1738d2fdce9ad3ee9461b58ee242daf7a1d72c45c9213eca34e14810a9fca5208d5c56d8066bab1586f1513de7" + }, + { + "name": "13", + "entropy": "4a8e0bd90bdb12f7748ad5f147b115d7385bb1b06aee7d8b76136a25d779bcb7", + "nonce": "7f3cce4af8c8ce3c45bdf23c6b181a00", + "pers": null, + "add": [ + null, + null + ], + "expected": "320c7ca4bbeb7af977bc054f604b5086a3f237aa5501658112f3e7a33d2231f5536d2c85c1dad9d9b0bf7f619c81be4854661626839c8c10ae7fdc0c0b571be34b58d66da553676167b00e7d8e49f416aacb2926c6eb2c66ec98bffae20864cf92496db15e3b09e530b7b9648be8d3916b3c20a3a779bec7d66da63396849aaf" + }, + { + "name": "14", + "entropy": "451ed024bc4b95f1025b14ec3616f5e42e80824541dc795a2f07500f92adc665", + "nonce": "2f28e6ee8de5879db1eccd58c994e5f0", + "pers": null, + "add": [ + null, + null + ], + "expected": "3fb637085ab75f4e95655faae95885166a5fbb423bb03dbf0543be063bcd48799c4f05d4e522634d9275fe02e1edd920e26d9accd43709cb0d8f6e50aa54a5f3bdd618be23cf73ef736ed0ef7524b0d14d5bef8c8aec1cf1ed3e1c38a808b35e61a44078127c7cb3a8fd7addfa50fcf3ff3bc6d6bc355d5436fe9b71eb44f7fd" + }, + { + "name": "0 with additional data", + "entropy": "d3cc4d1acf3dde0c4bd2290d262337042dc632948223d3a2eaab87da44295fbd", + "nonce": "0109b0e729f457328aa18569a9224921", + "pers": null, + "add": [ + "3c311848183c9a212a26f27f8c6647e40375e466a0857cc39c4e47575d53f1f6", + "fcb9abd19ccfbccef88c9c39bfb3dd7b1c12266c9808992e305bc3cff566e4e4" + ], + "expected": "9c7b758b212cd0fcecd5daa489821712e3cdea4467b560ef5ddc24ab47749a1f1ffdbbb118f4e62fcfca3371b8fbfc5b0646b83e06bfbbab5fac30ea09ea2bc76f1ea568c9be0444b2cc90517b20ca825f2d0eccd88e7175538b85d90ab390183ca6395535d34473af6b5a5b88f5a59ee7561573337ea819da0dcc3573a22974" + }, + { + "name": "1 with additional data", + "entropy": "f97a3cfd91faa046b9e61b9493d436c4931f604b22f1081521b3419151e8ff06", + "nonce": "11f3a7d43595357d58120bd1e2dd8aed", + "pers": null, + "add": [ + "517289afe444a0fe5ed1a41dbbb5eb17150079bdd31e29cf2ff30034d8268e3b", + "88028d29ef80b4e6f0fe12f91d7449fe75062682e89c571440c0c9b52c42a6e0" + ], + "expected": "c6871cff0824fe55ea7689a52229886730450e5d362da5bf590dcf9acd67fed4cb32107df5d03969a66b1f6494fdf5d63d5b4d0d34ea7399a07d0116126d0d518c7c55ba46e12f62efc8fe28a51c9d428e6d371d7397ab319fc73ded4722e5b4f30004032a6128df5e7497ecf82ca7b0a50e867ef6728a4f509a8c859087039c" + }, + { + "name": "2 with additional data", + "entropy": "0f2f23d64f481cabec7abb01db3aabf125c3173a044b9bf26844300b69dcac8b", + "nonce": "9a5ae13232b43aa19cfe8d7958b4b590", + "pers": null, + "add": [ + "ec4c7a62acab73385f567da10e892ff395a0929f959231a5628188ce0c26e818", + "6b97b8c6b6bb8935e676c410c17caa8042aa3145f856d0a32b641e4ae5298648" + ], + "expected": "7480a361058bd9afa3db82c9d7586e42269102013f6ec5c269b6d05f17987847748684766b44918fd4b65e1648622fc0e0954178b0279dfc9fa99b66c6f53e51c4860131e9e0644287a4afe4ca8e480417e070db68008a97c3397e4b320b5d1a1d7e1d18a95cfedd7d1e74997052bf649d132deb9ec53aae7dafdab55e6dae93" + }, + { + "name": "3 with additional data", + "entropy": "53c56660c78481be9c63284e005fcc14fbc7fb27732c9bf1366d01a426765a31", + "nonce": "dc7a14d0eb5b0b3534e717a0b3c64614", + "pers": null, + "add": [ + "3aa848706ecb877f5bedf4ffc332d57c22e08747a47e75cff6f0fd1316861c95", + "9a401afa739b8f752fddacd291e0b854f5eff4a55b515e20cb319852189d3722" + ], + "expected": "5c0eb420e0bf41ce9323e815310e4e8303cd677a8a8b023f31f0d79f0ca15aeb636099a369fd074d69889865eac1b72ab3cbfebdb8cf460b00072802e2ec648b1349a5303be4ccaadd729f1a9ea17482fd026aaeb93f1602bc1404b9853adde40d6c34b844cf148bc088941ecfc1642c8c0b9778e45f3b07e06e21ee2c9e0300" + }, + { + "name": "4 with additional data", + "entropy": "f63c804404902db334c54bb298fc271a21d7acd9f770278e089775710bf4fdd7", + "nonce": "3e45009ea9cb2a36ba1aa4bf39178200", + "pers": null, + "add": [ + "d165a13dc8cc43f3f0952c3f5d3de4136954d983683d4a3e6d2dc4c89bf23423", + "75106bc86d0336df85097f6af8e80e2da59046a03fa65b06706b8bbc7ffc6785" + ], + "expected": "6363139bba32c22a0f5cd23ca6d437b5669b7d432f786b8af445471bee0b2d24c9d5f2f93717cbe00d1f010cc3b9c515fc9f7336d53d4d26ba5c0d76a90186663c8582eb739c7b6578a3328bf68dc2cec2cd89b3a90201f6993adcc854df0f5c6974d0f5570765a15fe03dbce28942dd2fd16ba2027e68abac83926969349af8" + }, + { + "name": "5 with additional data", + "entropy": "2aaca9147da66c176615726b69e3e851cc3537f5f279fe7344233d8e44cfc99d", + "nonce": "4e171f080af9a6081bee9f183ac9e340", + "pers": null, + "add": [ + "d75a2a6eb66c3833e50f5ec3d2e434cf791448d618026d0c360806d120ded669", + "b643b74c15b37612e6577ed7ca2a4c67a78d560af9eb50a4108fca742e87b8d6" + ], + "expected": "501dcdc977f4ba856f24eaa4968b374bebb3166b280334cb510232c31ebffde10fa47b7840ef3fe3b77725c2272d3a1d4219baf23e0290c622271edcced58838cf428f0517425d2e19e0d8c89377eecfc378245f283236fafa466c914b99672ceafab369e8889a0c866d8bd639db9fb797254262c6fd44cfa9045ad6340a60ef" + }, + { + "name": "6 with additional data", + "entropy": "a2e4cd48a5cf918d6f55942d95fcb4e8465cdc4f77b7c52b6fae5b16a25ca306", + "nonce": "bef036716440db6e6d333d9d760b7ca8", + "pers": null, + "add": [ + "bfa591c7287f3f931168f95e38869441d1f9a11035ad8ea625bb61b9ea17591c", + "c00c735463bca215adc372cb892b05e939bf669583341c06d4e31d0e5b363a37" + ], + "expected": "e7d136af69926a5421d4266ee0420fd729f2a4f7c295d3c966bdfa05268180b508b8a2852d1b3a06fd2ab3e13c54005123ef319f42d0c6d3a575e6e7e1496cb28aacadbcf83740fba8f35fcee04bb2ed8a51db3d3362b01094a62fb57e33c99a432f29fce6676cffbbcc05107e794e75e44a02d5e6d9d748c5fbff00a0178d65" + }, + { + "name": "7 with additional data", + "entropy": "95a67771cba69011a79776e713145d309edae56fad5fd6d41d83eaff89df6e5e", + "nonce": "be5b5164e31ecc51ba6f7c3c5199eb33", + "pers": null, + "add": [ + "065f693b229a7c4fd373cd15b3807552dd9bf98c5485cef361949d4e7d774b53", + "9afb62406f0e812c4f156d58b19a656c904813c1b4a45a0029ae7f50731f8014" + ], + "expected": "f61b61a6e79a41183e8ed6647899d2dc85cdaf5c3abf5c7f3bf37685946dc28f4923dc842f2d4326bd6ce0d50a84cb3ba869d72a36e246910eba6512ba36cd7ed3a5437c9245b00a344308c792b668b458d3c3e16dee2fbec41867da31084d46d8ec168de2148ef64fc5b72069abf5a6ada1ead2b7146bb793ff1c9c3690fa56" + }, + { + "name": "8 with additional data", + "entropy": "a459e1815cbca4514ec8094d5ab2414a557ba6fe10e613c345338d0521e4bf90", + "nonce": "62221392e2552e76cd0d36df6e6068eb", + "pers": null, + "add": [ + "0a3642b02b23b3ef62c701a63401124022f5b896de86dab6e6c7451497aa1dcc", + "c80514865901371c45ba92d9f95d50bb7c9dd1768cb3dfbc45b968da94965c6e" + ], + "expected": "464e6977b8adaef307c9623e41c357013249c9ffd77f405f3925cebb69f151ce8fbb6a277164002aee7858fc224f6499042aa1e6322deee9a5d133c31d640e12a7487c731ba03ad866a24675badb1d79220c40be689f79c2a0be93cb4dada3e0eac4ab140cb91998b6f11953e68f2319b050c40f71c34de9905ae41b2de1c2f6" + }, + { + "name": "9 with additional data", + "entropy": "252c2cad613e002478162861880979ee4e323025eebb6fb2e0aa9f200e28e0a1", + "nonce": "d001bc9a8f2c8c242e4369df0c191989", + "pers": null, + "add": [ + "9bcfc61cb2bc000034bb3db980eb47c76fb5ecdd40553eff113368d639b947fd", + "8b0565c767c2610ee0014582e9fbecb96e173005b60e9581503a6dca5637a26e" + ], + "expected": "e96c15fe8a60692b0a7d67171e0195ff6e1c87aab844221e71700d1bbee75feea695f6a740c9760bbe0e812ecf4061d8f0955bc0195e18c4fd1516ebca50ba6a6db86881737dbab8321707675479b87611db6af2c97ea361a5484555ead454defb1a64335de964fc803d40f3a6f057893d2afc25725754f4f00abc51920743dc" + }, + { + "name": "10 with additional data", + "entropy": "8be0ca6adc8b3870c9d69d6021bc1f1d8eb9e649073d35ee6c5aa0b7e56ad8a5", + "nonce": "9d1265f7d51fdb65377f1e6edd6ae0e4", + "pers": null, + "add": [ + "da86167ac997c406bb7979f423986a84ec6614d6caa7afc10aff0699a9b2cf7f", + "e4baa3c555950b53e2bfdba480cb4c94b59381bac1e33947e0c22e838a9534cf" + ], + "expected": "64384ecc4ea6b458efc227ca697eac5510092265520c0a0d8a0ccf9ed3ca9d58074671188c6a7ad16d0b050cdc072c125d7298d3a31d9f044a9ee40da0089a84fea28cc7f05f1716db952fad29a0e779635cb7a912a959be67be2f0a4170aace2981802e2ff6467e5b46f0ffbff3b42ba5935fd553c82482ac266acf1cd247d7" + }, + { + "name": "11 with additional data", + "entropy": "d43a75b6adf26d60322284cb12ac38327792442aa8f040f60a2f331b33ac4a8f", + "nonce": "0682f8b091f811afacaacaec9b04d279", + "pers": null, + "add": [ + "7fd3b8f512940da7de5d80199d9a7b42670c04a945775a3dba869546cbb9bc65", + "2575db20bc7aafc2a90a5dabab760db851d754777bc9f05616af1858b24ff3da" + ], + "expected": "0da7a8dc73c163014bf0841913d3067806456bbca6d5de92b85534c6545467313648d71ef17c923d090dc92cff8d4d1a9a2bb63e001dc2e8ab1a597999be3d6cf70ff63fee9985801395fbd4f4990430c4259fcae4fa1fcd73dc3187ccc102d04af7c07532885e5a226fc42809c48f22eecf4f6ab996ae4fcb144786957d9f41" + }, + { + "name": "12 with additional data", + "entropy": "64352f236af5d32067a529a8fd05ba00a338c9de306371a0b00c36e610a48d18", + "nonce": "df99ed2c7608c870624b962a5dc68acd", + "pers": null, + "add": [ + "da416335e7aaf60cf3d06fb438735ce796aad09034f8969c8f8c3f81e32fef24", + "a28c07c21a2297311adf172c19e83ca0a87731bdffb80548978d2d1cd82cf8a3" + ], + "expected": "132b9f25868729e3853d3c51f99a3b5fae6d4204bea70890daf62e042b776a526c8fb831b80a6d5d3f153237df1fd39b6fd9137963f5516d9cdd4e3f9195c46e9972c15d3edc6606e3368bde1594977fb88d0ca6e6f5f3d057ccadc7d7dab77dfc42658a1e972aa446b20d418286386a52dfc1c714d2ac548713268b0b709729" + }, + { + "name": "13 with additional data", + "entropy": "282f4d2e05a2cd30e9087f5633089389449f04bac11df718c90bb351cd3653a5", + "nonce": "90a7daf3c0de9ea286081efc4a684dfb", + "pers": null, + "add": [ + "2630b4ccc7271cc379cb580b0aaede3d3aa8c1c7ba002cf791f0752c3d739007", + "c31d69de499f1017be44e3d4fa77ecebc6a9b9934749fcf136f267b29115d2cc" + ], + "expected": "c899094520e0197c37b91dd50778e20a5b950decfb308d39f1db709447ae48f6101d9abe63a783fbb830eec1d359a5f61a2013728966d349213ee96382614aa4135058a967627183810c6622a2158cababe3b8ab99169c89e362108bf5955b4ffc47440f87e4bad0d36bc738e737e072e64d8842e7619f1be0af1141f05afe2d" + }, + { + "name": "14 with additional data", + "entropy": "13c752b9e745ce77bbc7c0dbda982313d3fe66f903e83ebd8dbe4ff0c11380e9", + "nonce": "f1a533095d6174164bd7c82532464ae7", + "pers": null, + "add": [ + "4f53db89b9ba7fc00767bc751fb8f3c103fe0f76acd6d5c7891ab15b2b7cf67c", + "582c2a7d34679088cca6bd28723c99aac07db46c332dc0153d1673256903b446" + ], + "expected": "6311f4c0c4cd1f86bd48349abb9eb930d4f63df5e5f7217d1d1b91a71d8a6938b0ad2b3e897bd7e3d8703db125fab30e03464fad41e5ddf5bf9aeeb5161b244468cfb26a9d956931a5412c97d64188b0da1bd907819c686f39af82e91cfeef0cbffb5d1e229e383bed26d06412988640706815a6e820796876f416653e464961" + } +] diff --git a/node_modules/home-or-tmp/index.js b/node_modules/home-or-tmp/index.js new file mode 100644 index 000000000..bb67e9bcb --- /dev/null +++ b/node_modules/home-or-tmp/index.js @@ -0,0 +1,5 @@ +'use strict'; +var osHomedir = require('os-homedir'); +var osTmpdir = require('os-tmpdir'); + +module.exports = osHomedir() || osTmpdir(); diff --git a/node_modules/home-or-tmp/license b/node_modules/home-or-tmp/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/home-or-tmp/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/home-or-tmp/package.json b/node_modules/home-or-tmp/package.json new file mode 100644 index 000000000..f5b625873 --- /dev/null +++ b/node_modules/home-or-tmp/package.json @@ -0,0 +1,75 @@ +{ + "_from": "home-or-tmp@^2.0.0", + "_id": "home-or-tmp@2.0.0", + "_inBundle": false, + "_integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "_location": "/home-or-tmp", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "home-or-tmp@^2.0.0", + "name": "home-or-tmp", + "escapedName": "home-or-tmp", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/babel-register" + ], + "_resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "_shasum": "e36c3f2d2cae7d746a857e38d18d5f32a7882db8", + "_spec": "home-or-tmp@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-register", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/home-or-tmp/issues" + }, + "bundleDependencies": false, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + }, + "deprecated": false, + "description": "Get the user home directory with fallback to the system temp directory", + "devDependencies": { + "ava": "0.0.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/home-or-tmp#readme", + "keywords": [ + "user", + "home", + "homedir", + "dir", + "directory", + "folder", + "path", + "tmp", + "temp", + "temporary", + "fallback", + "graceful", + "userprofile" + ], + "license": "MIT", + "name": "home-or-tmp", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/home-or-tmp.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "2.0.0" +} diff --git a/node_modules/home-or-tmp/readme.md b/node_modules/home-or-tmp/readme.md new file mode 100644 index 000000000..13ca69761 --- /dev/null +++ b/node_modules/home-or-tmp/readme.md @@ -0,0 +1,32 @@ +# home-or-tmp [![Build Status](https://travis-ci.org/sindresorhus/home-or-tmp.svg?branch=master)](https://travis-ci.org/sindresorhus/home-or-tmp) + +> Get the user home directory with fallback to the system temp directory + +Useful in cases where the home directory either isn't set or doesn't exist. + + +## Install + +``` +$ npm install --save home-or-tmp +``` + + +## Usage + +```js +var homeOrTmp = require('home-or-tmp'); + +console.log(homeOrTmp); +//=> '/Users/sindresorhus' + +// and if there's no home directory: + +console.log(homeOrTmp); +//=> '/var/folders/m3/5574nnhn0yj488ccryqr7tc80000gn/T' +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/hosted-git-info/LICENSE b/node_modules/hosted-git-info/LICENSE new file mode 100644 index 000000000..45055763d --- /dev/null +++ b/node_modules/hosted-git-info/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2015, Rebecca Turner + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/hosted-git-info/README.md b/node_modules/hosted-git-info/README.md new file mode 100644 index 000000000..f9db5dd95 --- /dev/null +++ b/node_modules/hosted-git-info/README.md @@ -0,0 +1,132 @@ +# hosted-git-info + +This will let you identify and transform various git hosts URLs between +protocols. It also can tell you what the URL is for the raw path for +particular file for direct access without git. + +## Example + +```javascript +var hostedGitInfo = require("hosted-git-info") +var info = hostedGitInfo.fromUrl("git@github.com:npm/hosted-git-info.git", opts) +/* info looks like: +{ + type: "github", + domain: "github.com", + user: "npm", + project: "hosted-git-info" +} +*/ +``` + +If the URL can't be matched with a git host, `null` will be returned. We +can match git, ssh and https urls. Additionally, we can match ssh connect +strings (`git@github.com:npm/hosted-git-info`) and shortcuts (eg, +`github:npm/hosted-git-info`). Github specifically, is detected in the case +of a third, unprefixed, form: `npm/hosted-git-info`. + +If it does match, the returned object has properties of: + +* info.type -- The short name of the service +* info.domain -- The domain for git protocol use +* info.user -- The name of the user/org on the git host +* info.project -- The name of the project on the git host + +## Version Contract + +The major version will be bumped any time… + +* The constructor stops accepting URLs that it previously accepted. +* A method is removed. +* A method can no longer accept the number and type of arguments it previously accepted. +* A method can return a different type than it currently returns. + +Implications: + +* I do not consider the specific format of the urls returned from, say + `.https()` to be a part of the contract. The contract is that it will + return a string that can be used to fetch the repo via HTTPS. But what + that string looks like, specifically, can change. +* Dropping support for a hosted git provider would constitute a breaking + change. + +## Usage + +### var info = hostedGitInfo.fromUrl(gitSpecifier[, options]) + +* *gitSpecifer* is a URL of a git repository or a SCP-style specifier of one. +* *options* is an optional object. It can have the following properties: + * *noCommittish* — If true then committishes won't be included in generated URLs. + * *noGitPlus* — If true then `git+` won't be prefixed on URLs. + +## Methods + +All of the methods take the same options as the `fromUrl` factory. Options +provided to a method override those provided to the constructor. + +* info.file(path, opts) + +Given the path of a file relative to the repository, returns a URL for +directly fetching it from the githost. If no committish was set then +`master` will be used as the default. + +For example `hostedGitInfo.fromUrl("git@github.com:npm/hosted-git-info.git#v1.0.0").file("package.json")` +would return `https://raw.githubusercontent.com/npm/hosted-git-info/v1.0.0/package.json` + +* info.shortcut(opts) + +eg, `github:npm/hosted-git-info` + +* info.browse(opts) + +eg, `https://github.com/npm/hosted-git-info/tree/v1.2.0` + +* info.bugs(opts) + +eg, `https://github.com/npm/hosted-git-info/issues` + +* info.docs(opts) + +eg, `https://github.com/npm/hosted-git-info/tree/v1.2.0#readme` + +* info.https(opts) + +eg, `git+https://github.com/npm/hosted-git-info.git` + +* info.sshurl(opts) + +eg, `git+ssh://git@github.com/npm/hosted-git-info.git` + +* info.ssh(opts) + +eg, `git@github.com:npm/hosted-git-info.git` + +* info.path(opts) + +eg, `npm/hosted-git-info` + +* info.tarball(opts) + +eg, `https://github.com/npm/hosted-git-info/archive/v1.2.0.tar.gz` + +* info.getDefaultRepresentation() + +Returns the default output type. The default output type is based on the +string you passed in to be parsed + +* info.toString(opts) + +Uses the getDefaultRepresentation to call one of the other methods to get a URL for +this resource. As such `hostedGitInfo.fromUrl(url).toString()` will give +you a normalized version of the URL that still uses the same protocol. + +Shortcuts will still be returned as shortcuts, but the special case github +form of `org/project` will be normalized to `github:org/project`. + +SSH connect strings will be normalized into `git+ssh` URLs. + +## Supported hosts + +Currently this supports Github, Bitbucket and Gitlab. Pull requests for +additional hosts welcome. + diff --git a/node_modules/hosted-git-info/git-host-info.js b/node_modules/hosted-git-info/git-host-info.js new file mode 100644 index 000000000..93cf61744 --- /dev/null +++ b/node_modules/hosted-git-info/git-host-info.js @@ -0,0 +1,68 @@ +'use strict' + +var gitHosts = module.exports = { + github: { + // First two are insecure and generally shouldn't be used any more, but + // they are still supported. + 'protocols': [ 'git', 'http', 'git+ssh', 'git+https', 'ssh', 'https' ], + 'domain': 'github.com', + 'treepath': 'tree', + 'filetemplate': 'https://{auth@}raw.githubusercontent.com/{user}/{project}/{committish}/{path}', + 'bugstemplate': 'https://{domain}/{user}/{project}/issues', + 'gittemplate': 'git://{auth@}{domain}/{user}/{project}.git{#committish}', + 'tarballtemplate': 'https://{domain}/{user}/{project}/archive/{committish}.tar.gz' + }, + bitbucket: { + 'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ], + 'domain': 'bitbucket.org', + 'treepath': 'src', + 'tarballtemplate': 'https://{domain}/{user}/{project}/get/{committish}.tar.gz' + }, + gitlab: { + 'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ], + 'domain': 'gitlab.com', + 'treepath': 'tree', + 'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#README', + 'bugstemplate': 'https://{domain}/{user}/{project}/issues', + 'tarballtemplate': 'https://{domain}/{user}/{project}/repository/archive.tar.gz?ref={committish}' + }, + gist: { + 'protocols': [ 'git', 'git+ssh', 'git+https', 'ssh', 'https' ], + 'domain': 'gist.github.com', + 'pathmatch': /^[/](?:([^/]+)[/])?([a-z0-9]+)(?:[.]git)?$/, + 'filetemplate': 'https://gist.githubusercontent.com/{user}/{project}/raw{/committish}/{path}', + 'bugstemplate': 'https://{domain}/{project}', + 'gittemplate': 'git://{domain}/{project}.git{#committish}', + 'sshtemplate': 'git@{domain}:/{project}.git{#committish}', + 'sshurltemplate': 'git+ssh://git@{domain}/{project}.git{#committish}', + 'browsetemplate': 'https://{domain}/{project}{/committish}', + 'docstemplate': 'https://{domain}/{project}{/committish}', + 'httpstemplate': 'git+https://{domain}/{project}.git{#committish}', + 'shortcuttemplate': '{type}:{project}{#committish}', + 'pathtemplate': '{project}{#committish}', + 'tarballtemplate': 'https://{domain}/{user}/{project}/archive/{committish}.tar.gz' + } +} + +var gitHostDefaults = { + 'sshtemplate': 'git@{domain}:{user}/{project}.git{#committish}', + 'sshurltemplate': 'git+ssh://git@{domain}/{user}/{project}.git{#committish}', + 'browsetemplate': 'https://{domain}/{user}/{project}{/tree/committish}', + 'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#readme', + 'httpstemplate': 'git+https://{auth@}{domain}/{user}/{project}.git{#committish}', + 'filetemplate': 'https://{domain}/{user}/{project}/raw/{committish}/{path}', + 'shortcuttemplate': '{type}:{user}/{project}{#committish}', + 'pathtemplate': '{user}/{project}{#committish}', + 'pathmatch': /^[/]([^/]+)[/]([^/]+?)(?:[.]git|[/])?$/ +} + +Object.keys(gitHosts).forEach(function (name) { + Object.keys(gitHostDefaults).forEach(function (key) { + if (gitHosts[name][key]) return + gitHosts[name][key] = gitHostDefaults[key] + }) + gitHosts[name].protocols_re = RegExp('^(' + + gitHosts[name].protocols.map(function (protocol) { + return protocol.replace(/([\\+*{}()[\]$^|])/g, '\\$1') + }).join('|') + '):$') +}) diff --git a/node_modules/hosted-git-info/git-host.js b/node_modules/hosted-git-info/git-host.js new file mode 100644 index 000000000..4c6641bbf --- /dev/null +++ b/node_modules/hosted-git-info/git-host.js @@ -0,0 +1,114 @@ +'use strict' +var gitHosts = require('./git-host-info.js') +var extend = Object.assign || require('util')._extend + +var GitHost = module.exports = function (type, user, auth, project, committish, defaultRepresentation, opts) { + var gitHostInfo = this + gitHostInfo.type = type + Object.keys(gitHosts[type]).forEach(function (key) { + gitHostInfo[key] = gitHosts[type][key] + }) + gitHostInfo.user = user + gitHostInfo.auth = auth + gitHostInfo.project = project + gitHostInfo.committish = committish + gitHostInfo.default = defaultRepresentation + gitHostInfo.opts = opts || {} +} +GitHost.prototype = {} + +GitHost.prototype.hash = function () { + return this.committish ? '#' + this.committish : '' +} + +GitHost.prototype._fill = function (template, opts) { + if (!template) return + var vars = extend({}, opts) + opts = extend(extend({}, this.opts), opts) + var self = this + Object.keys(this).forEach(function (key) { + if (self[key] != null && vars[key] == null) vars[key] = self[key] + }) + var rawAuth = vars.auth + var rawComittish = vars.committish + Object.keys(vars).forEach(function (key) { + vars[key] = encodeURIComponent(vars[key]) + }) + vars['auth@'] = rawAuth ? rawAuth + '@' : '' + if (opts.noCommittish) { + vars['#committish'] = '' + vars['/tree/committish'] = '' + vars['/comittish'] = '' + vars.comittish = '' + } else { + vars['#committish'] = rawComittish ? '#' + rawComittish : '' + vars['/tree/committish'] = vars.committish + ? '/' + vars.treepath + '/' + vars.committish + : '' + vars['/committish'] = vars.committish ? '/' + vars.committish : '' + vars.committish = vars.committish || 'master' + } + var res = template + Object.keys(vars).forEach(function (key) { + res = res.replace(new RegExp('[{]' + key + '[}]', 'g'), vars[key]) + }) + if (opts.noGitPlus) { + return res.replace(/^git[+]/, '') + } else { + return res + } +} + +GitHost.prototype.ssh = function (opts) { + return this._fill(this.sshtemplate, opts) +} + +GitHost.prototype.sshurl = function (opts) { + return this._fill(this.sshurltemplate, opts) +} + +GitHost.prototype.browse = function (opts) { + return this._fill(this.browsetemplate, opts) +} + +GitHost.prototype.docs = function (opts) { + return this._fill(this.docstemplate, opts) +} + +GitHost.prototype.bugs = function (opts) { + return this._fill(this.bugstemplate, opts) +} + +GitHost.prototype.https = function (opts) { + return this._fill(this.httpstemplate, opts) +} + +GitHost.prototype.git = function (opts) { + return this._fill(this.gittemplate, opts) +} + +GitHost.prototype.shortcut = function (opts) { + return this._fill(this.shortcuttemplate, opts) +} + +GitHost.prototype.path = function (opts) { + return this._fill(this.pathtemplate, opts) +} + +GitHost.prototype.tarball = function (opts) { + return this._fill(this.tarballtemplate, opts) +} + +GitHost.prototype.file = function (P, opts) { + return this._fill(this.filetemplate, extend({ + path: P.replace(/^[/]+/g, '') + }, opts)) +} + +GitHost.prototype.getDefaultRepresentation = function () { + return this.default +} + +GitHost.prototype.toString = function (opts) { + return (this[this.default] || this.sshurl).call(this, opts) +} diff --git a/node_modules/hosted-git-info/index.js b/node_modules/hosted-git-info/index.js new file mode 100644 index 000000000..9055ab185 --- /dev/null +++ b/node_modules/hosted-git-info/index.js @@ -0,0 +1,121 @@ +'use strict' +var url = require('url') +var gitHosts = require('./git-host-info.js') +var GitHost = module.exports = require('./git-host.js') + +var protocolToRepresentationMap = { + 'git+ssh': 'sshurl', + 'git+https': 'https', + 'ssh': 'sshurl', + 'git': 'git' +} + +function protocolToRepresentation (protocol) { + if (protocol.substr(-1) === ':') protocol = protocol.slice(0, -1) + return protocolToRepresentationMap[protocol] || protocol +} + +var authProtocols = { + 'git:': true, + 'https:': true, + 'git+https:': true, + 'http:': true, + 'git+http:': true +} + +var cache = {} + +module.exports.fromUrl = function (giturl, opts) { + var key = giturl + JSON.stringify(opts || {}) + + if (!(key in cache)) { + cache[key] = fromUrl(giturl, opts) + } + + return cache[key] +} + +function fromUrl (giturl, opts) { + if (giturl == null || giturl === '') return + var url = fixupUnqualifiedGist( + isGitHubShorthand(giturl) ? 'github:' + giturl : giturl + ) + var parsed = parseGitUrl(url) + var shortcutMatch = url.match(new RegExp('^([^:]+):(?:(?:[^@:]+(?:[^@]+)?@)?([^/]*))[/](.+?)(?:[.]git)?($|#)')) + var matches = Object.keys(gitHosts).map(function (gitHostName) { + try { + var gitHostInfo = gitHosts[gitHostName] + var auth = null + if (parsed.auth && authProtocols[parsed.protocol]) { + auth = decodeURIComponent(parsed.auth) + } + var committish = parsed.hash ? decodeURIComponent(parsed.hash.substr(1)) : null + var user = null + var project = null + var defaultRepresentation = null + if (shortcutMatch && shortcutMatch[1] === gitHostName) { + user = shortcutMatch[2] && decodeURIComponent(shortcutMatch[2]) + project = decodeURIComponent(shortcutMatch[3]) + defaultRepresentation = 'shortcut' + } else { + if (parsed.host !== gitHostInfo.domain) return + if (!gitHostInfo.protocols_re.test(parsed.protocol)) return + if (!parsed.path) return + var pathmatch = gitHostInfo.pathmatch + var matched = parsed.path.match(pathmatch) + if (!matched) return + if (matched[1] != null) user = decodeURIComponent(matched[1].replace(/^:/, '')) + if (matched[2] != null) project = decodeURIComponent(matched[2]) + defaultRepresentation = protocolToRepresentation(parsed.protocol) + } + return new GitHost(gitHostName, user, auth, project, committish, defaultRepresentation, opts) + } catch (ex) { + if (!(ex instanceof URIError)) throw ex + } + }).filter(function (gitHostInfo) { return gitHostInfo }) + if (matches.length !== 1) return + return matches[0] +} + +function isGitHubShorthand (arg) { + // Note: This does not fully test the git ref format. + // See https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html + // + // The only way to do this properly would be to shell out to + // git-check-ref-format, and as this is a fast sync function, + // we don't want to do that. Just let git fail if it turns + // out that the commit-ish is invalid. + // GH usernames cannot start with . or - + return /^[^:@%/\s.-][^:@%/\s]*[/][^:@\s/%]+(?:#.*)?$/.test(arg) +} + +function fixupUnqualifiedGist (giturl) { + // necessary for round-tripping gists + var parsed = url.parse(giturl) + if (parsed.protocol === 'gist:' && parsed.host && !parsed.path) { + return parsed.protocol + '/' + parsed.host + } else { + return giturl + } +} + +function parseGitUrl (giturl) { + if (typeof giturl !== 'string') giturl = '' + giturl + var matched = giturl.match(/^([^@]+)@([^:/]+):[/]?((?:[^/]+[/])?[^/]+?)(?:[.]git)?(#.*)?$/) + if (!matched) return url.parse(giturl) + return { + protocol: 'git+ssh:', + slashes: true, + auth: matched[1], + host: matched[2], + port: null, + hostname: matched[2], + hash: matched[4], + search: null, + query: null, + pathname: '/' + matched[3], + path: '/' + matched[3], + href: 'git+ssh://' + matched[1] + '@' + matched[2] + + '/' + matched[3] + (matched[4] || '') + } +} diff --git a/node_modules/hosted-git-info/package.json b/node_modules/hosted-git-info/package.json new file mode 100644 index 000000000..21cbe590b --- /dev/null +++ b/node_modules/hosted-git-info/package.json @@ -0,0 +1,63 @@ +{ + "_from": "hosted-git-info@^2.1.4", + "_id": "hosted-git-info@2.5.0", + "_inBundle": false, + "_integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "_location": "/hosted-git-info", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "hosted-git-info@^2.1.4", + "name": "hosted-git-info", + "escapedName": "hosted-git-info", + "rawSpec": "^2.1.4", + "saveSpec": null, + "fetchSpec": "^2.1.4" + }, + "_requiredBy": [ + "/normalize-package-data" + ], + "_resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "_shasum": "6d60e34b3abbc8313062c3b798ef8d901a07af3c", + "_spec": "hosted-git-info@^2.1.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/normalize-package-data", + "author": { + "name": "Rebecca Turner", + "email": "me@re-becca.org", + "url": "http://re-becca.org" + }, + "bugs": { + "url": "https://github.com/npm/hosted-git-info/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Provides metadata and conversions from repository urls for Github, Bitbucket and Gitlab", + "devDependencies": { + "standard": "^9.0.2", + "tap": "^10.3.0" + }, + "files": [ + "index.js", + "git-host.js", + "git-host-info.js" + ], + "homepage": "https://github.com/npm/hosted-git-info", + "keywords": [ + "git", + "github", + "bitbucket", + "gitlab" + ], + "license": "ISC", + "main": "index.js", + "name": "hosted-git-info", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/hosted-git-info.git" + }, + "scripts": { + "test": "standard && tap -J --coverage test/*.js" + }, + "version": "2.5.0" +} diff --git a/node_modules/http-proxy/.npmignore b/node_modules/http-proxy/.npmignore new file mode 100644 index 000000000..081a48c64 --- /dev/null +++ b/node_modules/http-proxy/.npmignore @@ -0,0 +1,7 @@ +test +examples +doc +benchmark +.travis.yml +CHANGELOG.md +UPGRADING.md \ No newline at end of file diff --git a/node_modules/http-proxy/LICENSE b/node_modules/http-proxy/LICENSE new file mode 100644 index 000000000..84820c000 --- /dev/null +++ b/node_modules/http-proxy/LICENSE @@ -0,0 +1,23 @@ + + node-http-proxy + + Copyright (c) 2010-2016 Charlie Robbins, Jarrett Cruger & the 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/node_modules/http-proxy/README.md b/node_modules/http-proxy/README.md new file mode 100644 index 000000000..49c49a396 --- /dev/null +++ b/node_modules/http-proxy/README.md @@ -0,0 +1,493 @@ +

+ +

+ +node-http-proxy +======= + +

+ +    + + +

+ +`node-http-proxy` is an HTTP programmable proxying library that supports +websockets. It is suitable for implementing components such as reverse +proxies and load balancers. + +### Table of Contents + * [Installation](#installation) + * [Upgrading from 0.8.x ?](#upgrading-from-08x-) + * [Core Concept](#core-concept) + * [Use Cases](#use-cases) + * [Setup a basic stand-alone proxy server](#setup-a-basic-stand-alone-proxy-server) + * [Setup a stand-alone proxy server with custom server logic](#setup-a-stand-alone-proxy-server-with-custom-server-logic) + * [Setup a stand-alone proxy server with proxy request header re-writing](#setup-a-stand-alone-proxy-server-with-proxy-request-header-re-writing) + * [Modify a response from a proxied server](#modify-a-response-from-a-proxied-server) + * [Setup a stand-alone proxy server with latency](#setup-a-stand-alone-proxy-server-with-latency) + * [Using HTTPS](#using-https) + * [Proxying WebSockets](#proxying-websockets) + * [Options](#options) + * [Listening for proxy events](#listening-for-proxy-events) + * [Shutdown](#shutdown) + * [Miscellaneous](#miscellaneous) + * [Test](#test) + * [ProxyTable API](#proxytable-api) + * [Logo](#logo) + * [Contributing and Issues](#contributing-and-issues) + * [License](#license) + +### Installation + +`npm install http-proxy --save` + +**[Back to top](#table-of-contents)** + +### Upgrading from 0.8.x ? + +Click [here](UPGRADING.md) + +**[Back to top](#table-of-contents)** + +### Core Concept + +A new proxy is created by calling `createProxyServer` and passing +an `options` object as argument ([valid properties are available here](lib/http-proxy.js#L33-L50)) + +```javascript +var httpProxy = require('http-proxy'); + +var proxy = httpProxy.createProxyServer(options); // See (†) +``` +†Unless listen(..) is invoked on the object, this does not create a webserver. See below. + +An object will be returned with four methods: + +* web `req, res, [options]` (used for proxying regular HTTP(S) requests) +* ws `req, socket, head, [options]` (used for proxying WS(S) requests) +* listen `port` (a function that wraps the object in a webserver, for your convenience) +* close `[callback]` (a function that closes the inner webserver and stops listening on given port) + +It is then possible to proxy requests by calling these functions + +```javascript +http.createServer(function(req, res) { + proxy.web(req, res, { target: 'http://mytarget.com:8080' }); +}); +``` + +Errors can be listened on either using the Event Emitter API + +```javascript +proxy.on('error', function(e) { + ... +}); +``` + +or using the callback API + +```javascript +proxy.web(req, res, { target: 'http://mytarget.com:8080' }, function(e) { ... }); +``` + +When a request is proxied it follows two different pipelines ([available here](lib/http-proxy/passes)) +which apply transformations to both the `req` and `res` object. +The first pipeline (incoming) is responsible for the creation and manipulation of the stream that connects your client to the target. +The second pipeline (outgoing) is responsible for the creation and manipulation of the stream that, from your target, returns data +to the client. + +**[Back to top](#table-of-contents)** + +### Use Cases + +#### Setup a basic stand-alone proxy server + +```js +var http = require('http'), + httpProxy = require('http-proxy'); +// +// Create your proxy server and set the target in the options. +// +httpProxy.createProxyServer({target:'http://localhost:9000'}).listen(8000); // See (†) + +// +// Create your target server +// +http.createServer(function (req, res) { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2)); + res.end(); +}).listen(9000); +``` +†Invoking listen(..) triggers the creation of a web server. Otherwise, just the proxy instance is created. + +**[Back to top](#table-of-contents)** + +#### Setup a stand-alone proxy server with custom server logic +This example show how you can proxy a request using your own HTTP server +and also you can put your own logic to handle the request. + +```js +var http = require('http'), + httpProxy = require('http-proxy'); + +// +// Create a proxy server with custom application logic +// +var proxy = httpProxy.createProxyServer({}); + +// +// Create your custom server and just call `proxy.web()` to proxy +// a web request to the target passed in the options +// also you can use `proxy.ws()` to proxy a websockets request +// +var server = http.createServer(function(req, res) { + // You can define here your custom logic to handle the request + // and then proxy the request. + proxy.web(req, res, { target: 'http://127.0.0.1:5060' }); +}); + +console.log("listening on port 5050") +server.listen(5050); +``` + +**[Back to top](#table-of-contents)** + +#### Setup a stand-alone proxy server with proxy request header re-writing +This example shows how you can proxy a request using your own HTTP server that +modifies the outgoing proxy request by adding a special header. + +```js +var http = require('http'), + httpProxy = require('http-proxy'); + +// +// Create a proxy server with custom application logic +// +var proxy = httpProxy.createProxyServer({}); + +// To modify the proxy connection before data is sent, you can listen +// for the 'proxyReq' event. When the event is fired, you will receive +// the following arguments: +// (http.ClientRequest proxyReq, http.IncomingMessage req, +// http.ServerResponse res, Object options). This mechanism is useful when +// you need to modify the proxy request before the proxy connection +// is made to the target. +// +proxy.on('proxyReq', function(proxyReq, req, res, options) { + proxyReq.setHeader('X-Special-Proxy-Header', 'foobar'); +}); + +var server = http.createServer(function(req, res) { + // You can define here your custom logic to handle the request + // and then proxy the request. + proxy.web(req, res, { + target: 'http://127.0.0.1:5060' + }); +}); + +console.log("listening on port 5050") +server.listen(5050); +``` + +**[Back to top](#table-of-contents)** + +#### Modify a response from a proxied server +Sometimes when you have received a HTML/XML document from the server of origin you would like to modify it before forwarding it on. + +[Harmon](https://github.com/No9/harmon) allows you to do this in a streaming style so as to keep the pressure on the proxy to a minimum. + +**[Back to top](#table-of-contents)** + +#### Setup a stand-alone proxy server with latency + +```js +var http = require('http'), + httpProxy = require('http-proxy'); + +// +// Create a proxy server with latency +// +var proxy = httpProxy.createProxyServer(); + +// +// Create your server that makes an operation that waits a while +// and then proxies the request +// +http.createServer(function (req, res) { + // This simulates an operation that takes 500ms to execute + setTimeout(function () { + proxy.web(req, res, { + target: 'http://localhost:9008' + }); + }, 500); +}).listen(8008); + +// +// Create your target server +// +http.createServer(function (req, res) { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2)); + res.end(); +}).listen(9008); +``` + +**[Back to top](#table-of-contents)** + +#### Using HTTPS +You can activate the validation of a secure SSL certificate to the target connection (avoid self signed certs), just set `secure: true` in the options. + +##### HTTPS -> HTTP + +```js +// +// Create the HTTPS proxy server in front of a HTTP server +// +httpProxy.createServer({ + target: { + host: 'localhost', + port: 9009 + }, + ssl: { + key: fs.readFileSync('valid-ssl-key.pem', 'utf8'), + cert: fs.readFileSync('valid-ssl-cert.pem', 'utf8') + } +}).listen(8009); +``` + +##### HTTPS -> HTTPS + +```js +// +// Create the proxy server listening on port 443 +// +httpProxy.createServer({ + ssl: { + key: fs.readFileSync('valid-ssl-key.pem', 'utf8'), + cert: fs.readFileSync('valid-ssl-cert.pem', 'utf8') + }, + target: 'https://localhost:9010', + secure: true // Depends on your needs, could be false. +}).listen(443); +``` + +**[Back to top](#table-of-contents)** + +#### Proxying WebSockets +You can activate the websocket support for the proxy using `ws:true` in the options. + +```js +// +// Create a proxy server for websockets +// +httpProxy.createServer({ + target: 'ws://localhost:9014', + ws: true +}).listen(8014); +``` + +Also you can proxy the websocket requests just calling the `ws(req, socket, head)` method. + +```js +// +// Setup our server to proxy standard HTTP requests +// +var proxy = new httpProxy.createProxyServer({ + target: { + host: 'localhost', + port: 9015 + } +}); +var proxyServer = http.createServer(function (req, res) { + proxy.web(req, res); +}); + +// +// Listen to the `upgrade` event and proxy the +// WebSocket requests as well. +// +proxyServer.on('upgrade', function (req, socket, head) { + proxy.ws(req, socket, head); +}); + +proxyServer.listen(8015); +``` + +**[Back to top](#table-of-contents)** + +### Options + +`httpProxy.createProxyServer` supports the following options: + +* **target**: url string to be parsed with the url module +* **forward**: url string to be parsed with the url module +* **agent**: object to be passed to http(s).request (see Node's [https agent](http://nodejs.org/api/https.html#https_class_https_agent) and [http agent](http://nodejs.org/api/http.html#http_class_http_agent) objects) +* **ssl**: object to be passed to https.createServer() +* **ws**: true/false, if you want to proxy websockets +* **xfwd**: true/false, adds x-forward headers +* **secure**: true/false, if you want to verify the SSL Certs +* **toProxy**: true/false, passes the absolute URL as the `path` (useful for proxying to proxies) +* **prependPath**: true/false, Default: true - specify whether you want to prepend the target's path to the proxy path +* **ignorePath**: true/false, Default: false - specify whether you want to ignore the proxy path of the incoming request (note: you will have to append / manually if required). +* **localAddress**: Local interface string to bind for outgoing connections +* **changeOrigin**: true/false, Default: false - changes the origin of the host header to the target URL +* **preserveHeaderKeyCase**: true/false, Default: false - specify whether you want to keep letter case of response header key +* **auth**: Basic authentication i.e. 'user:password' to compute an Authorization header. +* **hostRewrite**: rewrites the location hostname on (201/301/302/307/308) redirects. +* **autoRewrite**: rewrites the location host/port on (201/301/302/307/308) redirects based on requested host/port. Default: false. +* **protocolRewrite**: rewrites the location protocol on (201/301/302/307/308) redirects to 'http' or 'https'. Default: null. +* **cookieDomainRewrite**: rewrites domain of `set-cookie` headers. Possible values: + * `false` (default): disable cookie rewriting + * String: new domain, for example `cookieDomainRewrite: "new.domain"`. To remove the domain, use `cookieDomainRewrite: ""`. + * Object: mapping of domains to new domains, use `"*"` to match all domains. + For example keep one domain unchanged, rewrite one domain and remove other domains: + ``` + cookieDomainRewrite: { + "unchanged.domain": "unchanged.domain", + "old.domain": "new.domain", + "*": "" + } + ``` +* **headers**: object with extra headers to be added to target requests. +* **proxyTimeout**: timeout (in millis) when proxy receives no response from target + +**NOTE:** +`options.ws` and `options.ssl` are optional. +`options.target` and `options.forward` cannot both be missing + +If you are using the `proxyServer.listen` method, the following options are also applicable: + + * **ssl**: object to be passed to https.createServer() + * **ws**: true/false, if you want to proxy websockets + +**[Back to top](#table-of-contents)** + +### Listening for proxy events + +* `error`: The error event is emitted if the request to the target fail. **We do not do any error handling of messages passed between client and proxy, and messages passed between proxy and target, so it is recommended that you listen on errors and handle them.** +* `proxyReq`: This event is emitted before the data is sent. It gives you a chance to alter the proxyReq request object. Applies to "web" connections +* `proxyReqWs`: This event is emitted before the data is sent. It gives you a chance to alter the proxyReq request object. Applies to "websocket" connections +* `proxyRes`: This event is emitted if the request to the target got a response. +* `open`: This event is emitted once the proxy websocket was created and piped into the target websocket. +* `close`: This event is emitted once the proxy websocket was closed. +* (DEPRECATED) `proxySocket`: Deprecated in favor of `open`. + +```js +var httpProxy = require('http-proxy'); +// Error example +// +// Http Proxy Server with bad target +// +var proxy = httpProxy.createServer({ + target:'http://localhost:9005' +}); + +proxy.listen(8005); + +// +// Listen for the `error` event on `proxy`. +proxy.on('error', function (err, req, res) { + res.writeHead(500, { + 'Content-Type': 'text/plain' + }); + + res.end('Something went wrong. And we are reporting a custom error message.'); +}); + +// +// Listen for the `proxyRes` event on `proxy`. +// +proxy.on('proxyRes', function (proxyRes, req, res) { + console.log('RAW Response from the target', JSON.stringify(proxyRes.headers, true, 2)); +}); + +// +// Listen for the `open` event on `proxy`. +// +proxy.on('open', function (proxySocket) { + // listen for messages coming FROM the target here + proxySocket.on('data', hybiParseAndLogMessage); +}); + +// +// Listen for the `close` event on `proxy`. +// +proxy.on('close', function (res, socket, head) { + // view disconnected websocket connections + console.log('Client disconnected'); +}); +``` + +**[Back to top](#table-of-contents)** + +### Shutdown + +* When testing or running server within another program it may be necessary to close the proxy. +* This will stop the proxy from accepting new connections. + +```js +var proxy = new httpProxy.createProxyServer({ + target: { + host: 'localhost', + port: 1337 + } +}); + +proxy.close(); +``` + +**[Back to top](#table-of-contents)** + +### Miscellaneous + +#### ProxyTable API + +A proxy table API is available through this add-on [module](https://github.com/donasaur/http-proxy-rules), which lets you define a set of rules to translate matching routes to target routes that the reverse proxy will talk to. + +#### Test + +``` +$ npm test +``` + +#### Logo + +Logo created by [Diego Pasquali](http://dribbble.com/diegopq) + +**[Back to top](#table-of-contents)** + +### Contributing and Issues + +* Search on Google/Github +* If you can't find anything, open an issue +* If you feel comfortable about fixing the issue, fork the repo +* Commit to your local branch (which must be different from `master`) +* Submit your Pull Request (be sure to include tests and update documentation) + +**[Back to top](#table-of-contents)** + +### License + +>The MIT License (MIT) +> +>Copyright (c) 2010 - 2016 Charlie Robbins, Jarrett Cruger & the 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/node_modules/http-proxy/index.js b/node_modules/http-proxy/index.js new file mode 100644 index 000000000..e6fac8584 --- /dev/null +++ b/node_modules/http-proxy/index.js @@ -0,0 +1,13 @@ +/*! + * Caron dimonio, con occhi di bragia + * loro accennando, tutte le raccoglie; + * batte col remo qualunque s’adagia + * + * Charon the demon, with the eyes of glede, + * Beckoning to them, collects them all together, + * Beats with his oar whoever lags behind + * + * Dante - The Divine Comedy (Canto III) + */ + +module.exports = require('./lib/http-proxy'); \ No newline at end of file diff --git a/node_modules/http-proxy/lib/http-proxy.js b/node_modules/http-proxy/lib/http-proxy.js new file mode 100644 index 000000000..7dab7a48d --- /dev/null +++ b/node_modules/http-proxy/lib/http-proxy.js @@ -0,0 +1,66 @@ + // Use explicit /index.js to help browserify negociation in require '/lib/http-proxy' (!) +var ProxyServer = require('./http-proxy/index.js').Server; + + +/** + * Creates the proxy server. + * + * Examples: + * + * httpProxy.createProxyServer({ .. }, 8000) + * // => '{ web: [Function], ws: [Function] ... }' + * + * @param {Object} Options Config object passed to the proxy + * + * @return {Object} Proxy Proxy object with handlers for `ws` and `web` requests + * + * @api public + */ + + +function createProxyServer(options) { + /* + * `options` is needed and it must have the following layout: + * + * { + * target : + * forward: + * agent : + * ssl : + * ws : + * xfwd : + * secure : + * toProxy: + * prependPath: + * ignorePath: + * localAddress : + * changeOrigin: + * preserveHeaderKeyCase: + * auth : Basic authentication i.e. 'user:password' to compute an Authorization header. + * hostRewrite: rewrites the location hostname on (301/302/307/308) redirects, Default: null. + * autoRewrite: rewrites the location host/port on (301/302/307/308) redirects based on requested host/port. Default: false. + * protocolRewrite: rewrites the location protocol on (301/302/307/308) redirects to 'http' or 'https'. Default: null. + * } + * + * NOTE: `options.ws` and `options.ssl` are optional. + * `options.target and `options.forward` cannot be + * both missing + * } + */ + + return new ProxyServer(options); +} + + +ProxyServer.createProxyServer = createProxyServer; +ProxyServer.createServer = createProxyServer; +ProxyServer.createProxy = createProxyServer; + + + + +/** + * Export the proxy "Server" as the main export. + */ +module.exports = ProxyServer; + diff --git a/node_modules/http-proxy/lib/http-proxy/common.js b/node_modules/http-proxy/lib/http-proxy/common.js new file mode 100644 index 000000000..aa9700234 --- /dev/null +++ b/node_modules/http-proxy/lib/http-proxy/common.js @@ -0,0 +1,249 @@ +var common = exports, + url = require('url'), + extend = require('util')._extend, + required = require('requires-port'); + +var upgradeHeader = /(^|,)\s*upgrade\s*($|,)/i, + isSSL = /^https|wss/, + cookieDomainRegex = /(;\s*domain=)([^;]+)/i; + +/** + * Simple Regex for testing if protocol is https + */ +common.isSSL = isSSL; +/** + * Copies the right headers from `options` and `req` to + * `outgoing` which is then used to fire the proxied + * request. + * + * Examples: + * + * common.setupOutgoing(outgoing, options, req) + * // => { host: ..., hostname: ...} + * + * @param {Object} Outgoing Base object to be filled with required properties + * @param {Object} Options Config object passed to the proxy + * @param {ClientRequest} Req Request Object + * @param {String} Forward String to select forward or target + *  + * @return {Object} Outgoing Object with all required properties set + * + * @api private + */ + +common.setupOutgoing = function(outgoing, options, req, forward) { + outgoing.port = options[forward || 'target'].port || + (isSSL.test(options[forward || 'target'].protocol) ? 443 : 80); + + ['host', 'hostname', 'socketPath', 'pfx', 'key', + 'passphrase', 'cert', 'ca', 'ciphers', 'secureProtocol'].forEach( + function(e) { outgoing[e] = options[forward || 'target'][e]; } + ); + + outgoing.method = req.method; + outgoing.headers = extend({}, req.headers); + + if (options.headers){ + extend(outgoing.headers, options.headers); + } + + if (options.auth) { + outgoing.auth = options.auth; + } + + if (options.ca) { + outgoing.ca = options.ca; + } + + if (isSSL.test(options[forward || 'target'].protocol)) { + outgoing.rejectUnauthorized = (typeof options.secure === "undefined") ? true : options.secure; + } + + + outgoing.agent = options.agent || false; + outgoing.localAddress = options.localAddress; + + // + // Remark: If we are false and not upgrading, set the connection: close. This is the right thing to do + // as node core doesn't handle this COMPLETELY properly yet. + // + if (!outgoing.agent) { + outgoing.headers = outgoing.headers || {}; + if (typeof outgoing.headers.connection !== 'string' + || !upgradeHeader.test(outgoing.headers.connection) + ) { outgoing.headers.connection = 'close'; } + } + + + // the final path is target path + relative path requested by user: + var target = options[forward || 'target']; + var targetPath = target && options.prependPath !== false + ? (target.path || '') + : ''; + + // + // Remark: Can we somehow not use url.parse as a perf optimization? + // + var outgoingPath = !options.toProxy + ? (url.parse(req.url).path || '') + : req.url; + + // + // Remark: ignorePath will just straight up ignore whatever the request's + // path is. This can be labeled as FOOT-GUN material if you do not know what + // you are doing and are using conflicting options. + // + outgoingPath = !options.ignorePath ? outgoingPath : ''; + + outgoing.path = common.urlJoin(targetPath, outgoingPath); + + if (options.changeOrigin) { + outgoing.headers.host = + required(outgoing.port, options[forward || 'target'].protocol) && !hasPort(outgoing.host) + ? outgoing.host + ':' + outgoing.port + : outgoing.host; + } + return outgoing; +}; + +/** + * Set the proper configuration for sockets, + * set no delay and set keep alive, also set + * the timeout to 0. + * + * Examples: + * + * common.setupSocket(socket) + * // => Socket + * + * @param {Socket} Socket instance to setup + *  + * @return {Socket} Return the configured socket. + * + * @api private + */ + +common.setupSocket = function(socket) { + socket.setTimeout(0); + socket.setNoDelay(true); + + socket.setKeepAlive(true, 0); + + return socket; +}; + +/** + * Get the port number from the host. Or guess it based on the connection type. + * + * @param {Request} req Incoming HTTP request. + * + * @return {String} The port number. + * + * @api private + */ +common.getPort = function(req) { + var res = req.headers.host ? req.headers.host.match(/:(\d+)/) : ''; + + return res ? + res[1] : + common.hasEncryptedConnection(req) ? '443' : '80'; +}; + +/** + * Check if the request has an encrypted connection. + * + * @param {Request} req Incoming HTTP request. + * + * @return {Boolean} Whether the connection is encrypted or not. + * + * @api private + */ +common.hasEncryptedConnection = function(req) { + return Boolean(req.connection.encrypted || req.connection.pair); +}; + +/** + * OS-agnostic join (doesn't break on URLs like path.join does on Windows)> + * + * @return {String} The generated path. + * + * @api private + */ + +common.urlJoin = function() { + // + // We do not want to mess with the query string. All we want to touch is the path. + // + var args = Array.prototype.slice.call(arguments), + lastIndex = args.length - 1, + last = args[lastIndex], + lastSegs = last.split('?'), + retSegs; + + args[lastIndex] = lastSegs.shift(); + + // + // Join all strings, but remove empty strings so we don't get extra slashes from + // joining e.g. ['', 'am'] + // + retSegs = [ + args.filter(Boolean).join('/') + .replace(/\/+/g, '/') + .replace('http:/', 'http://') + .replace('https:/', 'https://') + ]; + + // Only join the query string if it exists so we don't have trailing a '?' + // on every request + + // Handle case where there could be multiple ? in the URL. + retSegs.push.apply(retSegs, lastSegs); + + return retSegs.join('?') +}; + +/** + * Rewrites or removes the domain of a cookie header + * + * @param {String|Array} Header + * @param {Object} Config, mapping of domain to rewritten domain. + * '*' key to match any domain, null value to remove the domain. + * + * @api private + */ +common.rewriteCookieDomain = function rewriteCookieDomain(header, config) { + if (Array.isArray(header)) { + return header.map(function (headerElement) { + return rewriteCookieDomain(headerElement, config); + }); + } + return header.replace(cookieDomainRegex, function(match, prefix, previousDomain) { + var newDomain; + if (previousDomain in config) { + newDomain = config[previousDomain]; + } else if ('*' in config) { + newDomain = config['*']; + } else { + //no match, return previous domain + return match; + } + if (newDomain) { + //replace domain + return prefix + newDomain; + } else { + //remove domain + return ''; + } + }); +}; + +/** + * Check the host and see if it potentially has a port in it (keep it simple) + * + * @returns {Boolean} Whether we have one or not + * + * @api private + */ +function hasPort(host) { + return !!~host.indexOf(':'); +}; diff --git a/node_modules/http-proxy/lib/http-proxy/index.js b/node_modules/http-proxy/lib/http-proxy/index.js new file mode 100644 index 000000000..caaa10bd4 --- /dev/null +++ b/node_modules/http-proxy/lib/http-proxy/index.js @@ -0,0 +1,184 @@ +var httpProxy = module.exports, + extend = require('util')._extend, + parse_url = require('url').parse, + EE3 = require('eventemitter3'), + http = require('http'), + https = require('https'), + web = require('./passes/web-incoming'), + ws = require('./passes/ws-incoming'); + +httpProxy.Server = ProxyServer; + +/** + * Returns a function that creates the loader for + * either `ws` or `web`'s passes. + * + * Examples: + * + * httpProxy.createRightProxy('ws') + * // => [Function] + * + * @param {String} Type Either 'ws' or 'web' + *  + * @return {Function} Loader Function that when called returns an iterator for the right passes + * + * @api private + */ + +function createRightProxy(type) { + + return function(options) { + return function(req, res /*, [head], [opts] */) { + var passes = (type === 'ws') ? this.wsPasses : this.webPasses, + args = [].slice.call(arguments), + cntr = args.length - 1, + head, cbl; + + /* optional args parse begin */ + if(typeof args[cntr] === 'function') { + cbl = args[cntr]; + + cntr--; + } + + if( + !(args[cntr] instanceof Buffer) && + args[cntr] !== res + ) { + //Copy global options + options = extend({}, options); + //Overwrite with request options + extend(options, args[cntr]); + + cntr--; + } + + if(args[cntr] instanceof Buffer) { + head = args[cntr]; + } + + /* optional args parse end */ + + ['target', 'forward'].forEach(function(e) { + if (typeof options[e] === 'string') + options[e] = parse_url(options[e]); + }); + + if (!options.target && !options.forward) { + return this.emit('error', new Error('Must provide a proper URL as target')); + } + + for(var i=0; i < passes.length; i++) { + /** + * Call of passes functions + * pass(req, res, options, head) + * + * In WebSockets case the `res` variable + * refer to the connection socket + * pass(req, socket, options, head) + */ + if(passes[i](req, res, options, head, this, cbl)) { // passes can return a truthy value to halt the loop + break; + } + } + }; + }; +} +httpProxy.createRightProxy = createRightProxy; + +function ProxyServer(options) { + EE3.call(this); + + options = options || {}; + options.prependPath = options.prependPath === false ? false : true; + + this.web = this.proxyRequest = createRightProxy('web')(options); + this.ws = this.proxyWebsocketRequest = createRightProxy('ws')(options); + this.options = options; + + this.webPasses = Object.keys(web).map(function(pass) { + return web[pass]; + }); + + this.wsPasses = Object.keys(ws).map(function(pass) { + return ws[pass]; + }); + + this.on('error', this.onError, this); + +} + +require('util').inherits(ProxyServer, EE3); + +ProxyServer.prototype.onError = function (err) { + // + // Remark: Replicate node core behavior using EE3 + // so we force people to handle their own errors + // + if(this.listeners('error').length === 1) { + throw err; + } +}; + +ProxyServer.prototype.listen = function(port, hostname) { + var self = this, + closure = function(req, res) { self.web(req, res); }; + + this._server = this.options.ssl ? + https.createServer(this.options.ssl, closure) : + http.createServer(closure); + + if(this.options.ws) { + this._server.on('upgrade', function(req, socket, head) { self.ws(req, socket, head); }); + } + + this._server.listen(port, hostname); + + return this; +}; + +ProxyServer.prototype.close = function(callback) { + var self = this; + if (this._server) { + this._server.close(done); + } + + // Wrap callback to nullify server after all open connections are closed. + function done() { + self._server = null; + if (callback) { + callback.apply(null, arguments); + } + }; +}; + +ProxyServer.prototype.before = function(type, passName, callback) { + if (type !== 'ws' && type !== 'web') { + throw new Error('type must be `web` or `ws`'); + } + var passes = (type === 'ws') ? this.wsPasses : this.webPasses, + i = false; + + passes.forEach(function(v, idx) { + if(v.name === passName) i = idx; + }) + + if(i === false) throw new Error('No such pass'); + + passes.splice(i, 0, callback); +}; +ProxyServer.prototype.after = function(type, passName, callback) { + if (type !== 'ws' && type !== 'web') { + throw new Error('type must be `web` or `ws`'); + } + var passes = (type === 'ws') ? this.wsPasses : this.webPasses, + i = false; + + passes.forEach(function(v, idx) { + if(v.name === passName) i = idx; + }) + + if(i === false) throw new Error('No such pass'); + + passes.splice(i++, 0, callback); +}; diff --git a/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js b/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js new file mode 100644 index 000000000..5cb0b03d3 --- /dev/null +++ b/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js @@ -0,0 +1,180 @@ +var http = require('http'), + https = require('https'), + web_o = require('./web-outgoing'), + common = require('../common'); + +web_o = Object.keys(web_o).map(function(pass) { + return web_o[pass]; +}); + +/*! + * Array of passes. + * + * A `pass` is just a function that is executed on `req, res, options` + * so that you can easily add new checks while still keeping the base + * flexible. + */ + + +module.exports = { + + /** + * Sets `content-length` to '0' if request is of DELETE type. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + deleteLength: function deleteLength(req, res, options) { + if((req.method === 'DELETE' || req.method === 'OPTIONS') + && !req.headers['content-length']) { + req.headers['content-length'] = '0'; + delete req.headers['transfer-encoding']; + } + }, + + /** + * Sets timeout in request socket if it was specified in options. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + timeout: function timeout(req, res, options) { + if(options.timeout) { + req.socket.setTimeout(options.timeout); + } + }, + + /** + * Sets `x-forwarded-*` headers if specified in config. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + XHeaders: function XHeaders(req, res, options) { + if(!options.xfwd) return; + + var encrypted = req.isSpdy || common.hasEncryptedConnection(req); + var values = { + for : req.connection.remoteAddress || req.socket.remoteAddress, + port : common.getPort(req), + proto: encrypted ? 'https' : 'http' + }; + + ['for', 'port', 'proto'].forEach(function(header) { + req.headers['x-forwarded-' + header] = + (req.headers['x-forwarded-' + header] || '') + + (req.headers['x-forwarded-' + header] ? ',' : '') + + values[header]; + }); + + req.headers['x-forwarded-host'] = req.headers['host'] || ''; + }, + + /** + * Does the actual proxying. If `forward` is enabled fires up + * a ForwardStream, same happens for ProxyStream. The request + * just dies otherwise. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + stream: function stream(req, res, options, _, server, clb) { + + // And we begin! + server.emit('start', req, res, options.target || options.forward); + + if(options.forward) { + // If forward enable, so just pipe the request + var forwardReq = (options.forward.protocol === 'https:' ? https : http).request( + common.setupOutgoing(options.ssl || {}, options, req, 'forward') + ); + + // error handler (e.g. ECONNRESET, ECONNREFUSED) + // Handle errors on incoming request as well as it makes sense to + var forwardError = createErrorHandler(forwardReq, options.forward); + req.on('error', forwardError); + forwardReq.on('error', forwardError); + + (options.buffer || req).pipe(forwardReq); + if(!options.target) { return res.end(); } + } + + // Request initalization + var proxyReq = (options.target.protocol === 'https:' ? https : http).request( + common.setupOutgoing(options.ssl || {}, options, req) + ); + + // Enable developers to modify the proxyReq before headers are sent + proxyReq.on('socket', function(socket) { + if(server) { server.emit('proxyReq', proxyReq, req, res, options); } + }); + + // allow outgoing socket to timeout so that we could + // show an error page at the initial request + if(options.proxyTimeout) { + proxyReq.setTimeout(options.proxyTimeout, function() { + proxyReq.abort(); + }); + } + + // Ensure we abort proxy if request is aborted + req.on('aborted', function () { + proxyReq.abort(); + }); + + // handle errors in proxy and incoming request, just like for forward proxy + var proxyError = createErrorHandler(proxyReq, options.target); + req.on('error', proxyError); + proxyReq.on('error', proxyError); + + function createErrorHandler(proxyReq, url) { + return function proxyError(err) { + if (req.socket.destroyed && err.code === 'ECONNRESET') { + server.emit('econnreset', err, req, res, url); + return proxyReq.abort(); + } + + if (clb) { + clb(err, req, res, url); + } else { + server.emit('error', err, req, res, url); + } + } + } + + (options.buffer || req).pipe(proxyReq); + + proxyReq.on('response', function(proxyRes) { + if(server) { server.emit('proxyRes', proxyRes, req, res); } + for(var i=0; i < web_o.length; i++) { + if(web_o[i](req, res, proxyRes, options)) { break; } + } + + // Allow us to listen when the proxy has completed + proxyRes.on('end', function () { + server.emit('end', req, res, proxyRes); + }); + + proxyRes.pipe(res); + }); + + //proxyReq.end(); + } + +}; diff --git a/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js b/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js new file mode 100644 index 000000000..cff86a700 --- /dev/null +++ b/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js @@ -0,0 +1,138 @@ +var url = require('url'), + common = require('../common'); + + +var redirectRegex = /^201|30(1|2|7|8)$/; + +/*! + * Array of passes. + * + * A `pass` is just a function that is executed on `req, res, options` + * so that you can easily add new checks while still keeping the base + * flexible. + */ + +module.exports = { // <-- + + /** + * If is a HTTP 1.0 request, remove chunk headers + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {proxyResponse} Res Response object from the proxy request + * + * @api private + */ + removeChunked: function removeChunked(req, res, proxyRes) { + if (req.httpVersion === '1.0') { + delete proxyRes.headers['transfer-encoding']; + } + }, + + /** + * If is a HTTP 1.0 request, set the correct connection header + * or if connection header not present, then use `keep-alive` + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {proxyResponse} Res Response object from the proxy request + * + * @api private + */ + setConnection: function setConnection(req, res, proxyRes) { + if (req.httpVersion === '1.0') { + proxyRes.headers.connection = req.headers.connection || 'close'; + } else if (req.httpVersion !== '2.0' && !proxyRes.headers.connection) { + proxyRes.headers.connection = req.headers.connection || 'keep-alive'; + } + }, + + setRedirectHostRewrite: function setRedirectHostRewrite(req, res, proxyRes, options) { + if ((options.hostRewrite || options.autoRewrite || options.protocolRewrite) + && proxyRes.headers['location'] + && redirectRegex.test(proxyRes.statusCode)) { + var target = url.parse(options.target); + var u = url.parse(proxyRes.headers['location']); + + // make sure the redirected host matches the target host before rewriting + if (target.host != u.host) { + return; + } + + if (options.hostRewrite) { + u.host = options.hostRewrite; + } else if (options.autoRewrite) { + u.host = req.headers['host']; + } + if (options.protocolRewrite) { + u.protocol = options.protocolRewrite; + } + + proxyRes.headers['location'] = u.format(); + } + }, + /** + * Copy headers from proxyResponse to response + * set each header in response object. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {proxyResponse} Res Response object from the proxy request + * @param {Object} Options options.cookieDomainRewrite: Config to rewrite cookie domain + * + * @api private + */ + writeHeaders: function writeHeaders(req, res, proxyRes, options) { + var rewriteCookieDomainConfig = options.cookieDomainRewrite, + preserveHeaderKeyCase = options.preserveHeaderKeyCase, + rawHeaderKeyMap, + setHeader = function(key, header) { + if (header == undefined) return; + if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') { + header = common.rewriteCookieDomain(header, rewriteCookieDomainConfig); + } + res.setHeader(String(key).trim(), header); + }; + + if (typeof rewriteCookieDomainConfig === 'string') { //also test for '' + rewriteCookieDomainConfig = { '*': rewriteCookieDomainConfig }; + } + + // message.rawHeaders is added in: v0.11.6 + // https://nodejs.org/api/http.html#http_message_rawheaders + if (preserveHeaderKeyCase && proxyRes.rawHeaders != undefined) { + rawHeaderKeyMap = {}; + for (var i = 0; i < proxyRes.rawHeaders.length; i += 2) { + var key = proxyRes.rawHeaders[i]; + rawHeaderKeyMap[key.toLowerCase()] = key; + } + } + + Object.keys(proxyRes.headers).forEach(function(key) { + var header = proxyRes.headers[key]; + if (preserveHeaderKeyCase && rawHeaderKeyMap) { + key = rawHeaderKeyMap[key] || key; + } + setHeader(key, header); + }); + }, + + /** + * Set the statusCode from the proxyResponse + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {proxyResponse} Res Response object from the proxy request + * + * @api private + */ + writeStatusCode: function writeStatusCode(req, res, proxyRes) { + // From Node.js docs: response.writeHead(statusCode[, statusMessage][, headers]) + if(proxyRes.statusMessage) { + res.writeHead(proxyRes.statusCode, proxyRes.statusMessage); + } else { + res.writeHead(proxyRes.statusCode); + } + } + +}; diff --git a/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js b/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js new file mode 100644 index 000000000..cf3796cde --- /dev/null +++ b/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js @@ -0,0 +1,156 @@ +var http = require('http'), + https = require('https'), + common = require('../common'); + +/*! + * Array of passes. + * + * A `pass` is just a function that is executed on `req, socket, options` + * so that you can easily add new checks while still keeping the base + * flexible. + */ + +/* + * Websockets Passes + * + */ + + +module.exports = { + /** + * WebSocket requests must have the `GET` method and + * the `upgrade:websocket` header + * + * @param {ClientRequest} Req Request object + * @param {Socket} Websocket + * + * @api private + */ + + checkMethodAndHeader : function checkMethodAndHeader(req, socket) { + if (req.method !== 'GET' || !req.headers.upgrade) { + socket.destroy(); + return true; + } + + if (req.headers.upgrade.toLowerCase() !== 'websocket') { + socket.destroy(); + return true; + } + }, + + /** + * Sets `x-forwarded-*` headers if specified in config. + * + * @param {ClientRequest} Req Request object + * @param {Socket} Websocket + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + XHeaders : function XHeaders(req, socket, options) { + if(!options.xfwd) return; + + var values = { + for : req.connection.remoteAddress || req.socket.remoteAddress, + port : common.getPort(req), + proto: common.hasEncryptedConnection(req) ? 'wss' : 'ws' + }; + + ['for', 'port', 'proto'].forEach(function(header) { + req.headers['x-forwarded-' + header] = + (req.headers['x-forwarded-' + header] || '') + + (req.headers['x-forwarded-' + header] ? ',' : '') + + values[header]; + }); + }, + + /** + * Does the actual proxying. Make the request and upgrade it + * send the Switching Protocols request and pipe the sockets. + * + * @param {ClientRequest} Req Request object + * @param {Socket} Websocket + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + stream : function stream(req, socket, options, head, server, clb) { + common.setupSocket(socket); + + if (head && head.length) socket.unshift(head); + + + var proxyReq = (common.isSSL.test(options.target.protocol) ? https : http).request( + common.setupOutgoing(options.ssl || {}, options, req) + ); + + // Enable developers to modify the proxyReq before headers are sent + if (server) { server.emit('proxyReqWs', proxyReq, req, socket, options, head); } + + // Error Handler + proxyReq.on('error', onOutgoingError); + proxyReq.on('response', function (res) { + // if upgrade event isn't going to happen, close the socket + if (!res.upgrade) socket.end(); + }); + + proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) { + proxySocket.on('error', onOutgoingError); + + // Allow us to listen when the websocket has completed + proxySocket.on('end', function () { + server.emit('close', proxyRes, proxySocket, proxyHead); + }); + + // The pipe below will end proxySocket if socket closes cleanly, but not + // if it errors (eg, vanishes from the net and starts returning + // EHOSTUNREACH). We need to do that explicitly. + socket.on('error', function () { + proxySocket.end(); + }); + + common.setupSocket(proxySocket); + + if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead); + + // + // Remark: Handle writing the headers to the socket when switching protocols + // Also handles when a header is an array + // + socket.write( + Object.keys(proxyRes.headers).reduce(function (head, key) { + var value = proxyRes.headers[key]; + + if (!Array.isArray(value)) { + head.push(key + ': ' + value); + return head; + } + + for (var i = 0; i < value.length; i++) { + head.push(key + ': ' + value[i]); + } + return head; + }, ['HTTP/1.1 101 Switching Protocols']) + .join('\r\n') + '\r\n\r\n' + ); + + proxySocket.pipe(socket).pipe(proxySocket); + + server.emit('open', proxySocket); + server.emit('proxySocket', proxySocket); //DEPRECATED. + }); + + return proxyReq.end(); // XXX: CHECK IF THIS IS THIS CORRECT + + function onOutgoingError(err) { + if (clb) { + clb(err, req, socket); + } else { + server.emit('error', err, req, socket); + } + socket.end(); + } + } +}; diff --git a/node_modules/http-proxy/package.json b/node_modules/http-proxy/package.json new file mode 100644 index 000000000..0091d05b3 --- /dev/null +++ b/node_modules/http-proxy/package.json @@ -0,0 +1,76 @@ +{ + "_from": "http-proxy@^1.8.1", + "_id": "http-proxy@1.16.2", + "_inBundle": false, + "_integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "_location": "/http-proxy", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "http-proxy@^1.8.1", + "name": "http-proxy", + "escapedName": "http-proxy", + "rawSpec": "^1.8.1", + "saveSpec": null, + "fetchSpec": "^1.8.1" + }, + "_requiredBy": [ + "/http-server" + ], + "_resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "_shasum": "06dff292952bf64dbe8471fa9df73066d4f37742", + "_spec": "http-proxy@^1.8.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/http-server", + "author": { + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com" + }, + "bugs": { + "url": "https://github.com/nodejitsu/node-http-proxy/issues" + }, + "bundleDependencies": false, + "dependencies": { + "eventemitter3": "1.x.x", + "requires-port": "1.x.x" + }, + "deprecated": false, + "description": "HTTP proxying for the masses", + "devDependencies": { + "async": "*", + "blanket": "*", + "coveralls": "*", + "dox": "*", + "expect.js": "*", + "mocha": "*", + "mocha-lcov-reporter": "*", + "semver": "^5.0.3", + "socket.io": "*", + "socket.io-client": "*", + "sse": "0.0.6", + "ws": "^0.8.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "homepage": "https://github.com/nodejitsu/node-http-proxy#readme", + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "jcrugzz", + "email": "jcrugzz@gmail.com" + } + ], + "name": "http-proxy", + "repository": { + "type": "git", + "url": "git+https://github.com/nodejitsu/node-http-proxy.git" + }, + "scripts": { + "coveralls": "mocha --require blanket --reporter mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js", + "test": "mocha test/*-test.js", + "test-cov": "mocha --require blanket -R html-cov > cov/coverage.html" + }, + "version": "1.16.2" +} diff --git a/node_modules/http-server/.npmignore b/node_modules/http-server/.npmignore new file mode 100644 index 000000000..5894e2078 --- /dev/null +++ b/node_modules/http-server/.npmignore @@ -0,0 +1,3 @@ +node_modules/* +!node_modules/node-static +npm-debug.log diff --git a/node_modules/http-server/.travis.yml b/node_modules/http-server/.travis.yml new file mode 100644 index 000000000..6d1d5b6e6 --- /dev/null +++ b/node_modules/http-server/.travis.yml @@ -0,0 +1,22 @@ +sudo: false +language: node_js +node_js: + - "0.10" + - "0.12" + - "4.1" + +before_install: + - travis_retry npm install -g npm@2.14.5 + - travis_retry npm install + +script: + - npm test + +matrix: + allow_failures: + - node_js: "0.10" + +notifications: + email: + - travis@nodejitsu.com + irc: "irc.freenode.org#nodejitsu" diff --git a/node_modules/http-server/LICENSE b/node_modules/http-server/LICENSE new file mode 100644 index 000000000..1e989b448 --- /dev/null +++ b/node_modules/http-server/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011 Charlie Robbins, Marak Squires, and the 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/node_modules/http-server/README.md b/node_modules/http-server/README.md new file mode 100644 index 000000000..41e743f7e --- /dev/null +++ b/node_modules/http-server/README.md @@ -0,0 +1,76 @@ +[![build status](https://img.shields.io/travis/indexzero/http-server.svg?style=flat-square)](https://travis-ci.org/indexzero/http-server) +[![dependencies status](https://img.shields.io/david/indexzero/http-server.svg?style=flat-square)](https://david-dm.org/indexzero/http-server) +[![npm](https://img.shields.io/npm/v/http-server.svg?style=flat-square)](https://www.npmjs.com/package/http-server) +[![license](https://img.shields.io/github/license/indexzero/http-server.svg?style=flat-square)](https://github.com/indexzero/http-server) + +# http-server: a command-line http server + +`http-server` is a simple, zero-configuration command-line http server. It is powerful enough for production usage, but it's simple and hackable enough to be used for testing, local development, and learning. + +![](https://github.com/nodeapps/http-server/raw/master/screenshots/public.png) + +# Installing globally: + +Installation via `npm`: + + npm install http-server -g + +This will install `http-server` globally so that it may be run from the command line. + +## Usage: + + http-server [path] [options] + +`[path]` defaults to `./public` if the folder exists, and `./` otherwise. + +*Now you can visit http://localhost:8080 to view your server* + +## Available Options: + +`-p` Port to use (defaults to 8080) + +`-a` Address to use (defaults to 0.0.0.0) + +`-d` Show directory listings (defaults to 'True') + +`-i` Display autoIndex (defaults to 'True') + +`-g` or `--gzip` When enabled (defaults to 'False') it will serve `./public/some-file.js.gz` in place of `./public/some-file.js` when a gzipped version of the file exists and the request accepts gzip encoding. + +`-e` or `--ext` Default file extension if none supplied (defaults to 'html') + +`-s` or `--silent` Suppress log messages from output + +`--cors` Enable CORS via the `Access-Control-Allow-Origin` header + +`-o` Open browser window after starting the server + +`-c` Set cache time (in seconds) for cache-control max-age header, e.g. -c10 for 10 seconds (defaults to '3600'). To disable caching, use -c-1. + +`-U` or `--utc` Use UTC time format in log messages. + +`-P` or `--proxy` Proxies all requests which can't be resolved locally to the given url. e.g.: -P http://someurl.com + +`-S` or `--ssl` Enable https. + +`-C` or `--cert` Path to ssl cert file (default: cert.pem). + +`-K` or `--key` Path to ssl key file (default: key.pem). + +`-r` or `--robots` Provide a /robots.txt (whose content defaults to 'User-agent: *\nDisallow: /') + +`-h` or `--help` Print this list and exit. + +# Development + +Checkout this repository locally, then: + +```sh +$ npm i +$ node bin/http-server +``` + +*Now you can visit http://localhost:8080 to view your server* + +You should see the turtle image in the screenshot above hosted at that URL. See +the `./public` folder for demo content. diff --git a/node_modules/http-server/bin/http-server b/node_modules/http-server/bin/http-server new file mode 100755 index 000000000..ef6af541b --- /dev/null +++ b/node_modules/http-server/bin/http-server @@ -0,0 +1,176 @@ +#!/usr/bin/env node + +'use strict'; + +var colors = require('colors/safe'), + os = require('os'), + httpServer = require('../lib/http-server'), + portfinder = require('portfinder'), + opener = require('opener'), + argv = require('optimist') + .boolean('cors') + .argv; + +var ifaces = os.networkInterfaces(); + +if (argv.h || argv.help) { + console.log([ + 'usage: http-server [path] [options]', + '', + 'options:', + ' -p Port to use [8080]', + ' -a Address to use [0.0.0.0]', + ' -d Show directory listings [true]', + ' -i Display autoIndex [true]', + ' -g --gzip Serve gzip files when possible [false]', + ' -e --ext Default file extension if none supplied [none]', + ' -s --silent Suppress log messages from output', + ' --cors[=headers] Enable CORS via the "Access-Control-Allow-Origin" header', + ' Optionally provide CORS headers list separated by commas', + ' -o [path] Open browser window after starting the server', + ' -c Cache time (max-age) in seconds [3600], e.g. -c10 for 10 seconds.', + ' To disable caching, use -c-1.', + ' -U --utc Use UTC time format in log messages.', + '', + ' -P --proxy Fallback proxy if the request cannot be resolved. e.g.: http://someurl.com', + '', + ' -S --ssl Enable https.', + ' -C --cert Path to ssl cert file (default: cert.pem).', + ' -K --key Path to ssl key file (default: key.pem).', + '', + ' -r --robots Respond to /robots.txt [User-agent: *\\nDisallow: /]', + ' -h --help Print this list and exit.' + ].join('\n')); + process.exit(); +} + +var port = argv.p || parseInt(process.env.PORT, 10), + host = argv.a || '0.0.0.0', + ssl = !!argv.S || !!argv.ssl, + proxy = argv.P || argv.proxy, + utc = argv.U || argv.utc, + logger; + +if (!argv.s && !argv.silent) { + logger = { + info: console.log, + request: function (req, res, error) { + var date = utc ? new Date().toUTCString() : new Date(); + if (error) { + logger.info( + '[%s] "%s %s" Error (%s): "%s"', + date, colors.red(req.method), colors.red(req.url), + colors.red(error.status.toString()), colors.red(error.message) + ); + } + else { + logger.info( + '[%s] "%s %s" "%s"', + date, colors.cyan(req.method), colors.cyan(req.url), + req.headers['user-agent'] + ); + } + } + }; +} +else if (colors) { + logger = { + info: function () {}, + request: function () {} + }; +} + +if (!port) { + portfinder.basePort = 8080; + portfinder.getPort(function (err, port) { + if (err) { throw err; } + listen(port); + }); +} +else { + listen(port); +} + +function listen(port) { + var options = { + root: argv._[0], + cache: argv.c, + showDir: argv.d, + autoIndex: argv.i, + gzip: argv.g || argv.gzip, + robots: argv.r || argv.robots, + ext: argv.e || argv.ext, + logFn: logger.request, + proxy: proxy + }; + + if (argv.cors) { + options.cors = true; + if (typeof argv.cors === 'string') { + options.corsHeaders = argv.cors; + } + } + + if (ssl) { + options.https = { + cert: argv.C || argv.cert || 'cert.pem', + key: argv.K || argv.key || 'key.pem' + }; + } + + var server = httpServer.createServer(options); + server.listen(port, host, function () { + var canonicalHost = host === '0.0.0.0' ? '127.0.0.1' : host, + protocol = ssl ? 'https://' : 'http://'; + + logger.info([colors.yellow('Starting up http-server, serving '), + colors.cyan(server.root), + ssl ? (colors.yellow(' through') + colors.cyan(' https')) : '', + colors.yellow('\nAvailable on:') + ].join('')); + + if (argv.a && host !== '0.0.0.0') { + logger.info((' ' + protocol + canonicalHost + ':' + colors.green(port.toString()))); + } + else { + Object.keys(ifaces).forEach(function (dev) { + ifaces[dev].forEach(function (details) { + if (details.family === 'IPv4') { + logger.info((' ' + protocol + details.address + ':' + colors.green(port.toString()))); + } + }); + }); + } + + if (typeof proxy === 'string') { + logger.info('Unhandled requests will be served from: ' + proxy); + } + + logger.info('Hit CTRL-C to stop the server'); + if (argv.o) { + opener( + protocol + '//' + canonicalHost + ':' + port, + { command: argv.o !== true ? argv.o : null } + ); + } + }); +} + +if (process.platform === 'win32') { + require('readline').createInterface({ + input: process.stdin, + output: process.stdout + }).on('SIGINT', function () { + process.emit('SIGINT'); + }); +} + +process.on('SIGINT', function () { + logger.info(colors.red('http-server stopped.')); + process.exit(); +}); + +process.on('SIGTERM', function () { + logger.info(colors.red('http-server stopped.')); + process.exit(); +}); diff --git a/node_modules/http-server/lib/http-server.js b/node_modules/http-server/lib/http-server.js new file mode 100644 index 000000000..51aa4bf44 --- /dev/null +++ b/node_modules/http-server/lib/http-server.js @@ -0,0 +1,141 @@ +'use strict'; + +var fs = require('fs'), + union = require('union'), + ecstatic = require('ecstatic'), + httpProxy = require('http-proxy'), + corser = require('corser'); + +// +// Remark: backwards compatibility for previous +// case convention of HTTP +// +exports.HttpServer = exports.HTTPServer = HttpServer; + +/** + * Returns a new instance of HttpServer with the + * specified `options`. + */ +exports.createServer = function (options) { + return new HttpServer(options); +}; + +/** + * Constructor function for the HttpServer object + * which is responsible for serving static files along + * with other HTTP-related features. + */ +function HttpServer(options) { + options = options || {}; + + if (options.root) { + this.root = options.root; + } + else { + try { + fs.lstatSync('./public'); + this.root = './public'; + } + catch (err) { + this.root = './'; + } + } + + this.headers = options.headers || {}; + + this.cache = options.cache === undefined ? 3600 : options.cache; // in seconds. + this.showDir = options.showDir !== 'false'; + this.autoIndex = options.autoIndex !== 'false'; + this.gzip = options.gzip === true; + this.contentType = options.contentType || 'application/octet-stream'; + + if (options.ext) { + this.ext = options.ext === true + ? 'html' + : options.ext; + } + + var before = options.before ? options.before.slice() : []; + + before.push(function (req, res) { + if (options.logFn) { + options.logFn(req, res); + } + + res.emit('next'); + }); + + if (options.cors) { + this.headers['Access-Control-Allow-Origin'] = '*'; + this.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Range'; + if (options.corsHeaders) { + options.corsHeaders.split(/\s*,\s*/) + .forEach(function (h) { this.headers['Access-Control-Allow-Headers'] += ', ' + h; }, this); + } + before.push(corser.create(options.corsHeaders ? { + requestHeaders: this.headers['Access-Control-Allow-Headers'].split(/\s*,\s*/) + } : null)); + } + + if (options.robots) { + before.push(function (req, res) { + if (req.url === '/robots.txt') { + res.setHeader('Content-Type', 'text/plain'); + var robots = options.robots === true + ? 'User-agent: *\nDisallow: /' + : options.robots.replace(/\\n/, '\n'); + + return res.end(robots); + } + + res.emit('next'); + }); + } + + before.push(ecstatic({ + root: this.root, + cache: this.cache, + showDir: this.showDir, + autoIndex: this.autoIndex, + defaultExt: this.ext, + gzip: this.gzip, + contentType: this.contentType, + handleError: typeof options.proxy !== 'string' + })); + + if (typeof options.proxy === 'string') { + var proxy = httpProxy.createProxyServer({}); + before.push(function (req, res) { + proxy.web(req, res, { + target: options.proxy, + changeOrigin: true + }); + }); + } + + var serverOptions = { + before: before, + headers: this.headers, + onError: function (err, req, res) { + if (options.logFn) { + options.logFn(req, res, err); + } + + res.end(); + } + }; + + if (options.https) { + serverOptions.https = options.https; + } + + this.server = union.createServer(serverOptions); +} + +HttpServer.prototype.listen = function () { + this.server.listen.apply(this.server, arguments); +}; + +HttpServer.prototype.close = function () { + return this.server.close(); +}; diff --git a/node_modules/http-server/package.json b/node_modules/http-server/package.json new file mode 100644 index 000000000..e3424bd30 --- /dev/null +++ b/node_modules/http-server/package.json @@ -0,0 +1,115 @@ +{ + "_from": "http-server", + "_id": "http-server@0.10.0", + "_inBundle": false, + "_integrity": "sha1-sqRGsWqduH7TxiK6m+sbCFsSNKc=", + "_location": "/http-server", + "_phantomChildren": {}, + "_requested": { + "type": "tag", + "registry": true, + "raw": "http-server", + "name": "http-server", + "escapedName": "http-server", + "rawSpec": "", + "saveSpec": null, + "fetchSpec": "latest" + }, + "_requiredBy": [ + "#DEV:/", + "#USER" + ], + "_resolved": "https://registry.npmjs.org/http-server/-/http-server-0.10.0.tgz", + "_shasum": "b2a446b16a9db87ed3c622ba9beb1b085b1234a7", + "_spec": "http-server", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial", + "bin": { + "http-server": "./bin/http-server", + "hs": "./bin/http-server" + }, + "bugs": { + "url": "https://github.com/nodeapps/http-server/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com" + }, + { + "name": "Marak Squires", + "email": "marak.squires@gmail.com" + }, + { + "name": "Charlie McConnell", + "email": "charlie@charlieistheman.com" + }, + { + "name": "Joshua Holbrook", + "email": "josh.holbrook@gmail.com" + }, + { + "name": "Maciej Małecki", + "email": "maciej.malecki@notimplemented.org" + }, + { + "name": "Matthew Bergman", + "email": "mzbphoto@gmail.com" + }, + { + "name": "brad dunbar", + "email": "dunbarb2@gmail.com" + }, + { + "name": "Dominic Tarr" + }, + { + "name": "Travis Person", + "email": "travis.person@gmail.com" + }, + { + "name": "Jinkwon Lee", + "email": "master@bdyne.net" + }, + { + "name": "BigBlueHat", + "email": "byoung@bigbluehat.com" + } + ], + "dependencies": { + "colors": "1.0.3", + "corser": "~2.0.0", + "ecstatic": "^2.0.0", + "http-proxy": "^1.8.1", + "opener": "~1.4.0", + "optimist": "0.6.x", + "portfinder": "^1.0.13", + "union": "~0.4.3" + }, + "deprecated": false, + "description": "A simple zero-configuration command-line http server", + "devDependencies": { + "common-style": "^3.0.0", + "request": "2.49.x", + "vows": "0.7.x" + }, + "homepage": "https://github.com/indexzero/http-server#readme", + "keywords": [ + "cli", + "command" + ], + "license": "MIT", + "main": "./lib/http-server", + "name": "http-server", + "preferGlobal": "true", + "repository": { + "type": "git", + "url": "git://github.com/indexzero/http-server.git" + }, + "scripts": { + "pretest": "common bin/http-server lib/ test", + "start": "node ./bin/http-server", + "test": "vows --spec --isolate" + }, + "version": "0.10.0" +} diff --git a/node_modules/http-server/public/404.html b/node_modules/http-server/public/404.html new file mode 100644 index 000000000..03d348dce --- /dev/null +++ b/node_modules/http-server/public/404.html @@ -0,0 +1,10 @@ + + + 404 + + +

404

+ +

Were you just making up filenames or what?

+ + diff --git a/node_modules/http-server/public/img/turtle.png b/node_modules/http-server/public/img/turtle.png new file mode 100644 index 0000000000000000000000000000000000000000..721a796bb09004970b6de769a74da5a612781cbc GIT binary patch literal 195848 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

?SC_WXB?p4bg^?}=rubedfbpmG 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%0AxEm$vOw8;p)7zqZrU$sQ34|7=gL_p3~ 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 YcA)aNV_QA;BnbHEYny1Ht~o{j549Nmod5s; literal 0 HcmV?d00001 diff --git a/node_modules/http-server/public/index.html b/node_modules/http-server/public/index.html new file mode 100644 index 000000000..12cafb2ec --- /dev/null +++ b/node_modules/http-server/public/index.html @@ -0,0 +1,12 @@ + + + node.js http server + + + +

Serving up static files like they were turtles strapped to rockets.

+ + + + + diff --git a/node_modules/http-server/screenshots/directory.png b/node_modules/http-server/screenshots/directory.png new file mode 100644 index 0000000000000000000000000000000000000000..b255cea230cbe32a7cccf87c5e50dae16a3e606c GIT binary patch literal 24885 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⪚gu*ao5D|sp=r#^}h%7HdH3a+(?j6o`FPLBTucT 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Ð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

+ + + + +

JSON Loader

+
+ +

Install

+ +```bash +npm install --save-dev json-loader +``` + +> ⚠️ **Since `webpack >= v2.0.0`, importing of JSON files will work by default. You might still want to use this if you use a custom file extension. See the [v1.0.0 -> v2.0.0 Migration Guide](https://webpack.js.org/guides/migrating/#json-loader-is-not-required-anymore) for more information** + +

Usage

+ +### `Inline` + +```js +const json = require('json-loader!./file.json'); +``` + +### `Configuration` (recommended) + +```js +const json = require('./file.json'); +``` + +**webpack.config.js** +```js +module.exports = { + module: { + loaders: [ + { + test: /\.json$/, + loader: 'json-loader' + } + ] + } +} +``` + +

Maintainer

+ + + + + + + +
+ +
+ Tobias Koppers +
+ + +[npm]: https://img.shields.io/npm/v/json-loader.svg +[npm-url]: https://npmjs.com/package/json-loader + +[node]: https://img.shields.io/node/v/json-loader.svg +[node-url]: https://nodejs.org + +[deps]: https://david-dm.org/webpack/json-loader.svg +[deps-url]: https://david-dm.org/webpack/json-loader + +[tests]: http://img.shields.io/travis/webpack/json-loader.svg +[tests-url]: https://travis-ci.org/webpack/json-loader + +[cover]: https://coveralls.io/repos/github/webpack/json-loader/badge.svg +[cover-url]: https://coveralls.io/github/webpack/json-loader + +[chat]: https://badges.gitter.im/webpack/webpack.svg +[chat-url]: https://gitter.im/webpack/webpack diff --git a/node_modules/json-loader/index.js b/node_modules/json-loader/index.js new file mode 100644 index 000000000..ea4f387de --- /dev/null +++ b/node_modules/json-loader/index.js @@ -0,0 +1,11 @@ +module.exports = function (source) { + if (this.cacheable) this.cacheable(); + + var value = typeof source === "string" ? JSON.parse(source) : source; + + value = JSON.stringify(value) + .replace(/\u2028/g, '\\u2028') + .replace(/\u2029/g, '\\u2029'); + + return `module.exports = ${value}`; +} diff --git a/node_modules/json-loader/package.json b/node_modules/json-loader/package.json new file mode 100644 index 000000000..2842aad1d --- /dev/null +++ b/node_modules/json-loader/package.json @@ -0,0 +1,48 @@ +{ + "_from": "json-loader@^0.5.4", + "_id": "json-loader@0.5.7", + "_inBundle": false, + "_integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "_location": "/json-loader", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "json-loader@^0.5.4", + "name": "json-loader", + "escapedName": "json-loader", + "rawSpec": "^0.5.4", + "saveSpec": null, + "fetchSpec": "^0.5.4" + }, + "_requiredBy": [ + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "_shasum": "dca14a70235ff82f0ac9a3abeb60d337a365185d", + "_spec": "json-loader@^0.5.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack", + "author": { + "name": "Tobias Koppers @sokra" + }, + "bugs": { + "url": "https://github.com/webpack/json-loader/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "json loader module for webpack", + "devDependencies": { + "standard-version": "^4.2.0" + }, + "homepage": "https://github.com/webpack/json-loader#readme", + "license": "MIT", + "name": "json-loader", + "repository": { + "type": "git", + "url": "git+https://github.com/webpack/json-loader.git" + }, + "scripts": { + "release": "standard-version" + }, + "version": "0.5.7" +} diff --git a/node_modules/json-schema-traverse/.eslintrc.yml b/node_modules/json-schema-traverse/.eslintrc.yml new file mode 100644 index 000000000..ab1762da9 --- /dev/null +++ b/node_modules/json-schema-traverse/.eslintrc.yml @@ -0,0 +1,27 @@ +extends: eslint:recommended +env: + node: true + browser: true +rules: + block-scoped-var: 2 + complexity: [2, 13] + curly: [2, multi-or-nest, consistent] + dot-location: [2, property] + dot-notation: 2 + indent: [2, 2, SwitchCase: 1] + linebreak-style: [2, unix] + new-cap: 2 + no-console: [2, allow: [warn, error]] + no-else-return: 2 + no-eq-null: 2 + no-fallthrough: 2 + no-invalid-this: 2 + no-return-assign: 2 + no-shadow: 1 + no-trailing-spaces: 2 + no-use-before-define: [2, nofunc] + quotes: [2, single, avoid-escape] + semi: [2, always] + strict: [2, global] + valid-jsdoc: [2, requireReturn: false] + no-control-regex: 0 diff --git a/node_modules/json-schema-traverse/.npmignore b/node_modules/json-schema-traverse/.npmignore new file mode 100644 index 000000000..d09355793 --- /dev/null +++ b/node_modules/json-schema-traverse/.npmignore @@ -0,0 +1,60 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +.DS_Store diff --git a/node_modules/json-schema-traverse/.travis.yml b/node_modules/json-schema-traverse/.travis.yml new file mode 100644 index 000000000..7ddce74b8 --- /dev/null +++ b/node_modules/json-schema-traverse/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "4" + - "6" + - "7" + - "8" +after_script: + - coveralls < coverage/lcov.info diff --git a/node_modules/json-schema-traverse/LICENSE b/node_modules/json-schema-traverse/LICENSE new file mode 100644 index 000000000..7f1543566 --- /dev/null +++ b/node_modules/json-schema-traverse/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/json-schema-traverse/README.md b/node_modules/json-schema-traverse/README.md new file mode 100644 index 000000000..d4286a23b --- /dev/null +++ b/node_modules/json-schema-traverse/README.md @@ -0,0 +1,69 @@ +# json-schema-traverse +Traverse JSON Schema passing each schema object to callback + +[![Build Status](https://travis-ci.org/epoberezkin/json-schema-traverse.svg?branch=master)](https://travis-ci.org/epoberezkin/json-schema-traverse) +[![npm version](https://badge.fury.io/js/json-schema-traverse.svg)](https://www.npmjs.com/package/json-schema-traverse) +[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/json-schema-traverse/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/json-schema-traverse?branch=master) + + +## Install + +``` +npm install json-schema-traverse +``` + + +## Usage + +```javascript +const traverse = require('json-schema-traverse'); +const schema = { + properties: { + foo: {type: 'string'}, + bar: {type: 'integer'} + } +}; + +traverse(schema, cb); +// cb is called 3 times with: +// 1. root schema +// 2. {type: 'string'} +// 3. {type: 'integer'} +``` + +Callback function is called for each schema object (not including draft-06 boolean schemas), including the root schema. Schema references ($ref) are not resolved, they are passed as is. + +Callback is passed these parameters: + +- _schema_: the current schema object +- _JSON pointer_: from the root schema to the current schema object +- _root schema_: the schema passed to `traverse` object +- _parent JSON pointer_: from the root schema to the parent schema object (see below) +- _parent keyword_: the keyword inside which this schema appears (e.g. `properties`, `anyOf`, etc.) +- _parent schema_: not necessarily parent object/array; in the example above the parent schema for `{type: 'string'}` is the root schema +- _index/property_: index or property name in the array/object containing multiple schemas; in the example above for `{type: 'string'}` the property name is `'foo'` + + +## Traverse objects in all unknown keywords + +```javascript +const traverse = require('json-schema-traverse'); +const schema = { + mySchema: { + minimum: 1, + maximum: 2 + } +}; + +traverse(schema, {allKeys: true}, cb); +// cb is called 2 times with: +// 1. root schema +// 2. mySchema +``` + +Without option `allKeys: true` callback will be called only with root schema. + + +## License + +[MIT](https://github.com/epoberezkin/json-schema-traverse/blob/master/LICENSE) diff --git a/node_modules/json-schema-traverse/index.js b/node_modules/json-schema-traverse/index.js new file mode 100644 index 000000000..79eeb6a05 --- /dev/null +++ b/node_modules/json-schema-traverse/index.js @@ -0,0 +1,81 @@ +'use strict'; + +var traverse = module.exports = function (schema, opts, cb) { + if (typeof opts == 'function') { + cb = opts; + opts = {}; + } + _traverse(opts, cb, schema, '', schema); +}; + + +traverse.keywords = { + additionalItems: true, + items: true, + contains: true, + additionalProperties: true, + propertyNames: true, + not: true +}; + +traverse.arrayKeywords = { + items: true, + allOf: true, + anyOf: true, + oneOf: true +}; + +traverse.propsKeywords = { + definitions: true, + properties: true, + patternProperties: true, + dependencies: true +}; + +traverse.skipKeywords = { + enum: true, + const: true, + required: true, + maximum: true, + minimum: true, + exclusiveMaximum: true, + exclusiveMinimum: true, + multipleOf: true, + maxLength: true, + minLength: true, + pattern: true, + format: true, + maxItems: true, + minItems: true, + uniqueItems: true, + maxProperties: true, + minProperties: true +}; + + +function _traverse(opts, cb, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { + if (schema && typeof schema == 'object' && !Array.isArray(schema)) { + cb(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); + for (var key in schema) { + var sch = schema[key]; + if (Array.isArray(sch)) { + if (key in traverse.arrayKeywords) { + for (var i=0; i', + contributors: [ + // TODO: Should we remove this section in favor of GitHub's list? + // https://github.com/aseemk/json5/contributors + 'Max Nanasy ', + 'Andrew Eisenberg ', + 'Jordan Tucker ', + ], + main: 'lib/json5.js', + bin: 'lib/cli.js', + files: ["lib/"], + dependencies: {}, + devDependencies: { + gulp: "^3.9.1", + 'gulp-jshint': "^2.0.0", + jshint: "^2.9.1", + 'jshint-stylish': "^2.1.0", + mocha: "^2.4.5" + }, + scripts: { + build: 'node ./lib/cli.js -c package.json5', + test: 'mocha --ui exports --reporter spec', + // TODO: Would it be better to define these in a mocha.opts file? + }, + homepage: 'http://json5.org/', + license: 'MIT', + repository: { + type: 'git', + url: 'https://github.com/aseemk/json5.git', + }, +} +``` + + +## Community + +Join the [Google Group](http://groups.google.com/group/json5) if you’re +interested in JSON5 news, updates, and general discussion. +Don’t worry, it’s very low-traffic. + +The [GitHub wiki](https://github.com/aseemk/json5/wiki) is a good place to track +JSON5 support and usage. Contribute freely there! + +[GitHub Issues](https://github.com/aseemk/json5/issues) is the place to +formally propose feature requests and report bugs. Questions and general +feedback are better directed at the Google Group. + + +## Usage + +This JavaScript implementation of JSON5 simply provides a `JSON5` object just +like the native ES5 `JSON` object. + +To use from Node: + +```sh +npm install json5 +``` + +```js +var JSON5 = require('json5'); +``` + +To use in the browser (adds the `JSON5` object to the global namespace): + +```html + +``` + +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. See [LICENSE.md](./LICENSE.md) for details. + + +## 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/node_modules/json5/lib/cli.js b/node_modules/json5/lib/cli.js new file mode 100755 index 000000000..9b72f6d19 --- /dev/null +++ b/node_modules/json5/lib/cli.js @@ -0,0 +1,41 @@ +#!/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/node_modules/json5/lib/json5.js b/node_modules/json5/lib/json5.js new file mode 100644 index 000000000..4a4590d0c --- /dev/null +++ b/node_modules/json5/lib/json5.js @@ -0,0 +1,770 @@ +// 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(); + if (obj_part.length) { + buffer += makeIndent(indentStr, objStack.length, true) + } + buffer += "]"; + } 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/node_modules/json5/lib/require.js b/node_modules/json5/lib/require.js new file mode 100644 index 000000000..73e56fe92 --- /dev/null +++ b/node_modules/json5/lib/require.js @@ -0,0 +1,18 @@ +// 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/node_modules/json5/package.json b/node_modules/json5/package.json new file mode 100644 index 000000000..2851f05ca --- /dev/null +++ b/node_modules/json5/package.json @@ -0,0 +1,80 @@ +{ + "_from": "json5@^0.5.1", + "_id": "json5@0.5.1", + "_inBundle": false, + "_integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "_location": "/json5", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "json5@^0.5.1", + "name": "json5", + "escapedName": "json5", + "rawSpec": "^0.5.1", + "saveSpec": null, + "fetchSpec": "^0.5.1" + }, + "_requiredBy": [ + "/babel-core" + ], + "_resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "_shasum": "1eade7acc012034ad84e2396767ead9fa5495821", + "_spec": "json5@^0.5.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-core", + "author": { + "name": "Aseem Kishore", + "email": "aseem.kishore@gmail.com" + }, + "bin": { + "json5": "lib/cli.js" + }, + "bugs": { + "url": "https://github.com/aseemk/json5/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Max Nanasy", + "email": "max.nanasy@gmail.com" + }, + { + "name": "Andrew Eisenberg", + "email": "andrew@eisenberg.as" + }, + { + "name": "Jordan Tucker", + "email": "jordanbtucker@gmail.com" + } + ], + "dependencies": {}, + "deprecated": false, + "description": "JSON for the ES5 era.", + "devDependencies": { + "gulp": "^3.9.1", + "gulp-jshint": "^2.0.1", + "jshint": "^2.9.3", + "jshint-stylish": "^2.2.1", + "mocha": "^3.1.0" + }, + "files": [ + "lib/" + ], + "homepage": "http://json5.org/", + "keywords": [ + "json", + "es5" + ], + "license": "MIT", + "main": "lib/json5.js", + "name": "json5", + "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.1" +} diff --git a/node_modules/jsonify/README.markdown b/node_modules/jsonify/README.markdown new file mode 100644 index 000000000..71d9a93b5 --- /dev/null +++ b/node_modules/jsonify/README.markdown @@ -0,0 +1,34 @@ +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/node_modules/jsonify/index.js b/node_modules/jsonify/index.js new file mode 100644 index 000000000..f728a1605 --- /dev/null +++ b/node_modules/jsonify/index.js @@ -0,0 +1,2 @@ +exports.parse = require('./lib/parse'); +exports.stringify = require('./lib/stringify'); diff --git a/node_modules/jsonify/lib/parse.js b/node_modules/jsonify/lib/parse.js new file mode 100644 index 000000000..30e2f0143 --- /dev/null +++ b/node_modules/jsonify/lib/parse.js @@ -0,0 +1,273 @@ +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/node_modules/jsonify/lib/stringify.js b/node_modules/jsonify/lib/stringify.js new file mode 100644 index 000000000..134587081 --- /dev/null +++ b/node_modules/jsonify/lib/stringify.js @@ -0,0 +1,154 @@ +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/node_modules/jsonify/package.json b/node_modules/jsonify/package.json new file mode 100644 index 000000000..c67b4f3f1 --- /dev/null +++ b/node_modules/jsonify/package.json @@ -0,0 +1,62 @@ +{ + "_from": "jsonify@~0.0.0", + "_id": "jsonify@0.0.0", + "_inBundle": false, + "_integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "_location": "/jsonify", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "jsonify@~0.0.0", + "name": "jsonify", + "escapedName": "jsonify", + "rawSpec": "~0.0.0", + "saveSpec": null, + "fetchSpec": "~0.0.0" + }, + "_requiredBy": [ + "/json-stable-stringify" + ], + "_resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "_shasum": "2c74b6ee41d93ca51b7b5aaee8f503631d252a73", + "_spec": "jsonify@~0.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/json-stable-stringify", + "author": { + "name": "Douglas Crockford", + "url": "http://crockford.com/" + }, + "bugs": { + "url": "https://github.com/substack/jsonify/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "JSON without touching any globals", + "devDependencies": { + "garbage": "0.0.x", + "tap": "0.0.x" + }, + "directories": { + "lib": ".", + "test": "test" + }, + "engines": { + "node": "*" + }, + "homepage": "https://github.com/substack/jsonify#readme", + "keywords": [ + "json", + "browser" + ], + "license": "Public Domain", + "main": "index.js", + "name": "jsonify", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/substack/jsonify.git" + }, + "scripts": { + "test": "tap test" + }, + "version": "0.0.0" +} diff --git a/node_modules/jsonify/test/parse.js b/node_modules/jsonify/test/parse.js new file mode 100644 index 000000000..e2313f55a --- /dev/null +++ b/node_modules/jsonify/test/parse.js @@ -0,0 +1,16 @@ +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/node_modules/jsonify/test/stringify.js b/node_modules/jsonify/test/stringify.js new file mode 100644 index 000000000..89b0b6703 --- /dev/null +++ b/node_modules/jsonify/test/stringify.js @@ -0,0 +1,15 @@ +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/node_modules/kind-of/LICENSE b/node_modules/kind-of/LICENSE new file mode 100644 index 000000000..d734237bd --- /dev/null +++ b/node_modules/kind-of/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/kind-of/README.md b/node_modules/kind-of/README.md new file mode 100644 index 000000000..6a9df36d3 --- /dev/null +++ b/node_modules/kind-of/README.md @@ -0,0 +1,261 @@ +# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of) + +> Get the native type of a value. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save kind-of +``` + +## Install + +Install with [bower](https://bower.io/) + +```sh +$ bower install kind-of --save +``` + +## Usage + +> es5, browser and es6 ready + +```js +var kindOf = require('kind-of'); + +kindOf(undefined); +//=> 'undefined' + +kindOf(null); +//=> 'null' + +kindOf(true); +//=> 'boolean' + +kindOf(false); +//=> 'boolean' + +kindOf(new Boolean(true)); +//=> 'boolean' + +kindOf(new Buffer('')); +//=> 'buffer' + +kindOf(42); +//=> 'number' + +kindOf(new Number(42)); +//=> 'number' + +kindOf('str'); +//=> 'string' + +kindOf(new String('str')); +//=> 'string' + +kindOf(arguments); +//=> 'arguments' + +kindOf({}); +//=> 'object' + +kindOf(Object.create(null)); +//=> 'object' + +kindOf(new Test()); +//=> 'object' + +kindOf(new Date()); +//=> 'date' + +kindOf([]); +//=> 'array' + +kindOf([1, 2, 3]); +//=> 'array' + +kindOf(new Array()); +//=> 'array' + +kindOf(/foo/); +//=> 'regexp' + +kindOf(new RegExp('foo')); +//=> 'regexp' + +kindOf(function () {}); +//=> 'function' + +kindOf(function * () {}); +//=> 'function' + +kindOf(new Function()); +//=> 'function' + +kindOf(new Map()); +//=> 'map' + +kindOf(new WeakMap()); +//=> 'weakmap' + +kindOf(new Set()); +//=> 'set' + +kindOf(new WeakSet()); +//=> 'weakset' + +kindOf(Symbol('str')); +//=> 'symbol' + +kindOf(new Int8Array()); +//=> 'int8array' + +kindOf(new Uint8Array()); +//=> 'uint8array' + +kindOf(new Uint8ClampedArray()); +//=> 'uint8clampedarray' + +kindOf(new Int16Array()); +//=> 'int16array' + +kindOf(new Uint16Array()); +//=> 'uint16array' + +kindOf(new Int32Array()); +//=> 'int32array' + +kindOf(new Uint32Array()); +//=> 'uint32array' + +kindOf(new Float32Array()); +//=> 'float32array' + +kindOf(new Float64Array()); +//=> 'float64array' +``` + +## Benchmarks + +Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). +Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`. + +```bash +#1: array + current x 23,329,397 ops/sec ±0.82% (94 runs sampled) + lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled) + lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled) + +#2: boolean + current x 27,197,115 ops/sec ±0.85% (94 runs sampled) + lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled) + lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled) + +#3: date + current x 20,190,117 ops/sec ±0.86% (92 runs sampled) + lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled) + lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled) + +#4: function + current x 23,855,460 ops/sec ±0.60% (97 runs sampled) + lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled) + lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled) + +#5: null + current x 27,061,047 ops/sec ±0.97% (96 runs sampled) + lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled) + lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled) + +#6: number + current x 25,075,682 ops/sec ±0.53% (99 runs sampled) + lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled) + lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled) + +#7: object + current x 3,348,980 ops/sec ±0.49% (99 runs sampled) + lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled) + lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled) + +#8: regex + current x 21,284,827 ops/sec ±0.72% (96 runs sampled) + lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled) + lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled) + +#9: string + current x 25,379,234 ops/sec ±0.58% (96 runs sampled) + lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled) + lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled) + +#10: undef + current x 27,459,221 ops/sec ±1.01% (93 runs sampled) + lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled) + lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled) + +``` + +## Optimizations + +In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: + +1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. +2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. +3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` + +## About + +### Related projects + +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") +* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.") +* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 59 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [miguelmota](https://github.com/miguelmota) | +| 1 | [dtothefp](https://github.com/dtothefp) | +| 1 | [ksheedlo](https://github.com/ksheedlo) | +| 1 | [pdehaan](https://github.com/pdehaan) | +| 1 | [laggingreflex](https://github.com/laggingreflex) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 16, 2017._ \ No newline at end of file diff --git a/node_modules/kind-of/index.js b/node_modules/kind-of/index.js new file mode 100644 index 000000000..b52c2917f --- /dev/null +++ b/node_modules/kind-of/index.js @@ -0,0 +1,116 @@ +var isBuffer = require('is-buffer'); +var toString = Object.prototype.toString; + +/** + * Get the native `typeof` a value. + * + * @param {*} `val` + * @return {*} Native javascript type + */ + +module.exports = function kindOf(val) { + // primitivies + if (typeof val === 'undefined') { + return 'undefined'; + } + if (val === null) { + return 'null'; + } + if (val === true || val === false || val instanceof Boolean) { + return 'boolean'; + } + if (typeof val === 'string' || val instanceof String) { + return 'string'; + } + if (typeof val === 'number' || val instanceof Number) { + return 'number'; + } + + // functions + if (typeof val === 'function' || val instanceof Function) { + return 'function'; + } + + // array + if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { + return 'array'; + } + + // check for instances of RegExp and Date before calling `toString` + if (val instanceof RegExp) { + return 'regexp'; + } + if (val instanceof Date) { + return 'date'; + } + + // other objects + var type = toString.call(val); + + if (type === '[object RegExp]') { + return 'regexp'; + } + if (type === '[object Date]') { + return 'date'; + } + if (type === '[object Arguments]') { + return 'arguments'; + } + if (type === '[object Error]') { + return 'error'; + } + + // buffer + if (isBuffer(val)) { + return 'buffer'; + } + + // es6: Map, WeakMap, Set, WeakSet + if (type === '[object Set]') { + return 'set'; + } + if (type === '[object WeakSet]') { + return 'weakset'; + } + if (type === '[object Map]') { + return 'map'; + } + if (type === '[object WeakMap]') { + return 'weakmap'; + } + if (type === '[object Symbol]') { + return 'symbol'; + } + + // typed arrays + if (type === '[object Int8Array]') { + return 'int8array'; + } + if (type === '[object Uint8Array]') { + return 'uint8array'; + } + if (type === '[object Uint8ClampedArray]') { + return 'uint8clampedarray'; + } + if (type === '[object Int16Array]') { + return 'int16array'; + } + if (type === '[object Uint16Array]') { + return 'uint16array'; + } + if (type === '[object Int32Array]') { + return 'int32array'; + } + if (type === '[object Uint32Array]') { + return 'uint32array'; + } + if (type === '[object Float32Array]') { + return 'float32array'; + } + if (type === '[object Float64Array]') { + return 'float64array'; + } + + // must be a plain object + return 'object'; +}; diff --git a/node_modules/kind-of/package.json b/node_modules/kind-of/package.json new file mode 100644 index 000000000..1fd30b604 --- /dev/null +++ b/node_modules/kind-of/package.json @@ -0,0 +1,140 @@ +{ + "_from": "kind-of@^3.0.2", + "_id": "kind-of@3.2.2", + "_inBundle": false, + "_integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "_location": "/kind-of", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "kind-of@^3.0.2", + "name": "kind-of", + "escapedName": "kind-of", + "rawSpec": "^3.0.2", + "saveSpec": null, + "fetchSpec": "^3.0.2" + }, + "_requiredBy": [ + "/is-number", + "/micromatch" + ], + "_resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "_shasum": "31ea21a734bab9bbb0f32466d893aea51e4a3c64", + "_spec": "kind-of@^3.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/micromatch", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/kind-of/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "David Fox-Powell", + "url": "https://dtothefp.github.io/me" + }, + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Ken Sheedlo", + "url": "kensheedlo.com" + }, + { + "name": "laggingreflex", + "url": "https://github.com/laggingreflex" + }, + { + "name": "Miguel Mota", + "url": "https://miguelmota.com" + }, + { + "name": "Peter deHaan", + "url": "http://about.me/peterdehaan" + } + ], + "dependencies": { + "is-buffer": "^1.1.5" + }, + "deprecated": false, + "description": "Get the native type of a value.", + "devDependencies": { + "ansi-bold": "^0.1.1", + "benchmarked": "^1.0.0", + "browserify": "^14.3.0", + "glob": "^7.1.1", + "gulp-format-md": "^0.1.12", + "mocha": "^3.3.0", + "type-of": "^2.0.1", + "typeof": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "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", + "name": "kind-of", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/kind-of.git" + }, + "scripts": { + "prepublish": "browserify -o browser.js -e index.js -s index --bare", + "test": "mocha" + }, + "verb": { + "related": { + "list": [ + "is-glob", + "is-number", + "is-primitive" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "reflinks": [ + "verb" + ] + }, + "version": "3.2.2" +} diff --git a/node_modules/lazy-cache/LICENSE b/node_modules/lazy-cache/LICENSE new file mode 100644 index 000000000..1e49edf81 --- /dev/null +++ b/node_modules/lazy-cache/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/lazy-cache/README.md b/node_modules/lazy-cache/README.md new file mode 100644 index 000000000..33b5a4dde --- /dev/null +++ b/node_modules/lazy-cache/README.md @@ -0,0 +1,147 @@ +# 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/node_modules/lazy-cache/index.js b/node_modules/lazy-cache/index.js new file mode 100644 index 000000000..da7897d0c --- /dev/null +++ b/node_modules/lazy-cache/index.js @@ -0,0 +1,67 @@ +'use strict'; + +/** + * Cache results of the first function call to ensure only calling once. + * + * ```js + * var utils = require('lazy-cache')(require); + * // cache the call to `require('ansi-yellow')` + * utils('ansi-yellow', 'yellow'); + * // use `ansi-yellow` + * console.log(utils.yellow('this is yellow')); + * ``` + * + * @param {Function} `fn` Function that will be called only once. + * @return {Function} Function that can be called to get the cached function + * @api public + */ + +function lazyCache(fn) { + var cache = {}; + var proxy = function(mod, name) { + name = name || camelcase(mod); + + // check both boolean and string in case `process.env` cases to string + if (process.env.UNLAZY === 'true' || process.env.UNLAZY === true || process.env.TRAVIS) { + cache[name] = fn(mod); + } + + Object.defineProperty(proxy, name, { + enumerable: true, + configurable: true, + get: getter + }); + + function getter() { + if (cache.hasOwnProperty(name)) { + return cache[name]; + } + return (cache[name] = fn(mod)); + } + return getter; + }; + return proxy; +} + +/** + * Used to camelcase the name to be stored on the `lazy` object. + * + * @param {String} `str` String containing `_`, `.`, `-` or whitespace that will be camelcased. + * @return {String} camelcased string. + */ + +function camelcase(str) { + if (str.length === 1) { + return str.toLowerCase(); + } + str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); + return str.replace(/[\W_]+(\w|$)/g, function(_, ch) { + return ch.toUpperCase(); + }); +} + +/** + * Expose `lazyCache` + */ + +module.exports = lazyCache; diff --git a/node_modules/lazy-cache/package.json b/node_modules/lazy-cache/package.json new file mode 100644 index 000000000..138d6ebb4 --- /dev/null +++ b/node_modules/lazy-cache/package.json @@ -0,0 +1,89 @@ +{ + "_from": "lazy-cache@^1.0.3", + "_id": "lazy-cache@1.0.4", + "_inBundle": false, + "_integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "_location": "/lazy-cache", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "lazy-cache@^1.0.3", + "name": "lazy-cache", + "escapedName": "lazy-cache", + "rawSpec": "^1.0.3", + "saveSpec": null, + "fetchSpec": "^1.0.3" + }, + "_requiredBy": [ + "/center-align" + ], + "_resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "_shasum": "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e", + "_spec": "lazy-cache@^1.0.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/center-align", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/lazy-cache/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "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" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/lazy-cache", + "keywords": [ + "cache", + "caching", + "dependencies", + "dependency", + "lazy", + "require", + "requires" + ], + "license": "MIT", + "main": "index.js", + "name": "lazy-cache", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/lazy-cache.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "related": { + "list": [ + "lint-deps" + ] + }, + "plugins": [ + "gulp-format-md" + ], + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "lint": { + "reflinks": true + }, + "reflinks": [ + "verb" + ] + }, + "version": "1.0.4" +} diff --git a/node_modules/lcid/index.js b/node_modules/lcid/index.js new file mode 100644 index 000000000..69bd3d231 --- /dev/null +++ b/node_modules/lcid/index.js @@ -0,0 +1,22 @@ +'use strict'; +var invertKv = require('invert-kv'); +var all = require('./lcid.json'); +var inverted = invertKv(all); + +exports.from = function (lcidCode) { + if (typeof lcidCode !== 'number') { + throw new TypeError('Expected a number'); + } + + return inverted[lcidCode]; +}; + +exports.to = function (localeId) { + if (typeof localeId !== 'string') { + throw new TypeError('Expected a string'); + } + + return all[localeId]; +}; + +exports.all = all; diff --git a/node_modules/lcid/lcid.json b/node_modules/lcid/lcid.json new file mode 100644 index 000000000..9c89f6a49 --- /dev/null +++ b/node_modules/lcid/lcid.json @@ -0,0 +1,203 @@ +{ + "af_ZA": 1078, + "am_ET": 1118, + "ar_AE": 14337, + "ar_BH": 15361, + "ar_DZ": 5121, + "ar_EG": 3073, + "ar_IQ": 2049, + "ar_JO": 11265, + "ar_KW": 13313, + "ar_LB": 12289, + "ar_LY": 4097, + "ar_MA": 6145, + "ar_OM": 8193, + "ar_QA": 16385, + "ar_SA": 1025, + "ar_SY": 10241, + "ar_TN": 7169, + "ar_YE": 9217, + "arn_CL": 1146, + "as_IN": 1101, + "az_AZ": 2092, + "ba_RU": 1133, + "be_BY": 1059, + "bg_BG": 1026, + "bn_IN": 1093, + "bo_BT": 2129, + "bo_CN": 1105, + "br_FR": 1150, + "bs_BA": 8218, + "ca_ES": 1027, + "co_FR": 1155, + "cs_CZ": 1029, + "cy_GB": 1106, + "da_DK": 1030, + "de_AT": 3079, + "de_CH": 2055, + "de_DE": 1031, + "de_LI": 5127, + "de_LU": 4103, + "div_MV": 1125, + "dsb_DE": 2094, + "el_GR": 1032, + "en_AU": 3081, + "en_BZ": 10249, + "en_CA": 4105, + "en_CB": 9225, + "en_GB": 2057, + "en_IE": 6153, + "en_IN": 18441, + "en_JA": 8201, + "en_MY": 17417, + "en_NZ": 5129, + "en_PH": 13321, + "en_TT": 11273, + "en_US": 1033, + "en_ZA": 7177, + "en_ZW": 12297, + "es_AR": 11274, + "es_BO": 16394, + "es_CL": 13322, + "es_CO": 9226, + "es_CR": 5130, + "es_DO": 7178, + "es_EC": 12298, + "es_ES": 3082, + "es_GT": 4106, + "es_HN": 18442, + "es_MX": 2058, + "es_NI": 19466, + "es_PA": 6154, + "es_PE": 10250, + "es_PR": 20490, + "es_PY": 15370, + "es_SV": 17418, + "es_UR": 14346, + "es_US": 21514, + "es_VE": 8202, + "et_EE": 1061, + "eu_ES": 1069, + "fa_IR": 1065, + "fi_FI": 1035, + "fil_PH": 1124, + "fo_FO": 1080, + "fr_BE": 2060, + "fr_CA": 3084, + "fr_CH": 4108, + "fr_FR": 1036, + "fr_LU": 5132, + "fr_MC": 6156, + "fy_NL": 1122, + "ga_IE": 2108, + "gbz_AF": 1164, + "gl_ES": 1110, + "gsw_FR": 1156, + "gu_IN": 1095, + "ha_NG": 1128, + "he_IL": 1037, + "hi_IN": 1081, + "hr_BA": 4122, + "hr_HR": 1050, + "hu_HU": 1038, + "hy_AM": 1067, + "id_ID": 1057, + "ii_CN": 1144, + "is_IS": 1039, + "it_CH": 2064, + "it_IT": 1040, + "iu_CA": 2141, + "ja_JP": 1041, + "ka_GE": 1079, + "kh_KH": 1107, + "kk_KZ": 1087, + "kl_GL": 1135, + "kn_IN": 1099, + "ko_KR": 1042, + "kok_IN": 1111, + "ky_KG": 1088, + "lb_LU": 1134, + "lo_LA": 1108, + "lt_LT": 1063, + "lv_LV": 1062, + "mi_NZ": 1153, + "mk_MK": 1071, + "ml_IN": 1100, + "mn_CN": 2128, + "mn_MN": 1104, + "moh_CA": 1148, + "mr_IN": 1102, + "ms_BN": 2110, + "ms_MY": 1086, + "mt_MT": 1082, + "my_MM": 1109, + "nb_NO": 1044, + "ne_NP": 1121, + "nl_BE": 2067, + "nl_NL": 1043, + "nn_NO": 2068, + "ns_ZA": 1132, + "oc_FR": 1154, + "or_IN": 1096, + "pa_IN": 1094, + "pl_PL": 1045, + "ps_AF": 1123, + "pt_BR": 1046, + "pt_PT": 2070, + "qut_GT": 1158, + "quz_BO": 1131, + "quz_EC": 2155, + "quz_PE": 3179, + "rm_CH": 1047, + "ro_RO": 1048, + "ru_RU": 1049, + "rw_RW": 1159, + "sa_IN": 1103, + "sah_RU": 1157, + "se_FI": 3131, + "se_NO": 1083, + "se_SE": 2107, + "si_LK": 1115, + "sk_SK": 1051, + "sl_SI": 1060, + "sma_NO": 6203, + "sma_SE": 7227, + "smj_NO": 4155, + "smj_SE": 5179, + "smn_FI": 9275, + "sms_FI": 8251, + "sq_AL": 1052, + "sr_BA": 7194, + "sr_SP": 3098, + "sv_FI": 2077, + "sv_SE": 1053, + "sw_KE": 1089, + "syr_SY": 1114, + "ta_IN": 1097, + "te_IN": 1098, + "tg_TJ": 1064, + "th_TH": 1054, + "tk_TM": 1090, + "tmz_DZ": 2143, + "tn_ZA": 1074, + "tr_TR": 1055, + "tt_RU": 1092, + "ug_CN": 1152, + "uk_UA": 1058, + "ur_IN": 2080, + "ur_PK": 1056, + "uz_UZ": 2115, + "vi_VN": 1066, + "wen_DE": 1070, + "wo_SN": 1160, + "xh_ZA": 1076, + "yo_NG": 1130, + "zh_CHS": 4, + "zh_CHT": 31748, + "zh_CN": 2052, + "zh_HK": 3076, + "zh_MO": 5124, + "zh_SG": 4100, + "zh_TW": 1028, + "zu_ZA": 1077 +} diff --git a/node_modules/lcid/license b/node_modules/lcid/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/lcid/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/lcid/package.json b/node_modules/lcid/package.json new file mode 100644 index 000000000..218f16f67 --- /dev/null +++ b/node_modules/lcid/package.json @@ -0,0 +1,78 @@ +{ + "_from": "lcid@^1.0.0", + "_id": "lcid@1.0.0", + "_inBundle": false, + "_integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "_location": "/lcid", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "lcid@^1.0.0", + "name": "lcid", + "escapedName": "lcid", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/os-locale" + ], + "_resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "_shasum": "308accafa0bc483a3867b4b6f2b9506251d1b835", + "_spec": "lcid@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/os-locale", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/lcid/issues" + }, + "bundleDependencies": false, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "deprecated": false, + "description": "Mapping between standard locale identifiers and Windows locale identifiers (LCID)", + "devDependencies": { + "ava": "0.0.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js", + "lcid.json" + ], + "homepage": "https://github.com/sindresorhus/lcid#readme", + "keywords": [ + "lcid", + "locale", + "string", + "str", + "id", + "identifier", + "windows", + "language", + "lang", + "map", + "mapping", + "convert", + "json", + "bcp47", + "ietf", + "tag" + ], + "license": "MIT", + "name": "lcid", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/lcid.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.0.0" +} diff --git a/node_modules/lcid/readme.md b/node_modules/lcid/readme.md new file mode 100644 index 000000000..bee4a7016 --- /dev/null +++ b/node_modules/lcid/readme.md @@ -0,0 +1,35 @@ +# 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/node_modules/load-json-file/index.js b/node_modules/load-json-file/index.js new file mode 100644 index 000000000..b2767e302 --- /dev/null +++ b/node_modules/load-json-file/index.js @@ -0,0 +1,11 @@ +'use strict'; +const path = require('path'); +const fs = require('graceful-fs'); +const stripBom = require('strip-bom'); +const parseJson = require('parse-json'); +const pify = require('pify'); + +const parse = (data, fp) => parseJson(stripBom(data), path.relative('.', fp)); + +module.exports = fp => pify(fs.readFile)(fp, 'utf8').then(data => parse(data, fp)); +module.exports.sync = fp => parse(fs.readFileSync(fp, 'utf8'), fp); diff --git a/node_modules/load-json-file/license b/node_modules/load-json-file/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/load-json-file/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/load-json-file/package.json b/node_modules/load-json-file/package.json new file mode 100644 index 000000000..d6fc28f73 --- /dev/null +++ b/node_modules/load-json-file/package.json @@ -0,0 +1,75 @@ +{ + "_from": "load-json-file@^2.0.0", + "_id": "load-json-file@2.0.0", + "_inBundle": false, + "_integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "_location": "/load-json-file", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "load-json-file@^2.0.0", + "name": "load-json-file", + "escapedName": "load-json-file", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/read-pkg" + ], + "_resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "_shasum": "7947e42149af80d696cbf797bcaabcfe1fe29ca8", + "_spec": "load-json-file@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/read-pkg", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/load-json-file/issues" + }, + "bundleDependencies": false, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "deprecated": false, + "description": "Read and parse a JSON file", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/load-json-file#readme", + "keywords": [ + "read", + "json", + "parse", + "file", + "fs", + "graceful", + "load" + ], + "license": "MIT", + "name": "load-json-file", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/load-json-file.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0", + "xo": { + "esnext": true + } +} diff --git a/node_modules/load-json-file/readme.md b/node_modules/load-json-file/readme.md new file mode 100644 index 000000000..3319c266c --- /dev/null +++ b/node_modules/load-json-file/readme.md @@ -0,0 +1,45 @@ +# 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 for 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](https://sindresorhus.com) diff --git a/node_modules/loader-runner/README.md b/node_modules/loader-runner/README.md new file mode 100644 index 000000000..8cc04cb2e --- /dev/null +++ b/node_modules/loader-runner/README.md @@ -0,0 +1,42 @@ +# loader-runner + +``` js +import { runLoaders } from "loader-runner"; + +runLoaders({ + resource: "/abs/path/to/file.txt?query", + // String: Absolute path to the resource (optionally including query string) + + loaders: ["/abs/path/to/loader.js?query"], + // String[]: Absolute paths to the loaders (optionally including query string) + // {loader, options}[]: Absolute paths to the loaders with options object + + context: { minimize: true }, + // Additional loader context which is used as base context + + readResource: fs.readFile.bind(fs) + // A function to read the resource + // Must have signature function(path, function(err, buffer)) + +}, function(err, result) { + // err: Error? + + // result.result: Buffer | String + // The result + + // result.resourceBuffer: Buffer + // The raw resource as Buffer (useful for SourceMaps) + + // result.cacheable: Bool + // Is the result cacheable or do it require reexecution? + + // result.fileDependencies: String[] + // An array of paths (files) on which the result depends on + + // result.contextDependencies: String[] + // An array of paths (directories) on which the result depends on +}) +``` + +More documentation following... + diff --git a/node_modules/loader-runner/lib/LoaderRunner.js b/node_modules/loader-runner/lib/LoaderRunner.js new file mode 100644 index 000000000..cc3931ae2 --- /dev/null +++ b/node_modules/loader-runner/lib/LoaderRunner.js @@ -0,0 +1,378 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var fs = require("fs"); +var readFile = fs.readFile.bind(fs); +var loadLoader = require("./loadLoader"); + +function utf8BufferToString(buf) { + var str = buf.toString("utf-8"); + if(str.charCodeAt(0) === 0xFEFF) { + return str.substr(1); + } else { + return str; + } +} + +function splitQuery(req) { + var i = req.indexOf("?"); + if(i < 0) return [req, ""]; + return [req.substr(0, i), req.substr(i)]; +} + +function dirname(path) { + if(path === "/") return "/"; + var i = path.lastIndexOf("/"); + var j = path.lastIndexOf("\\"); + var i2 = path.indexOf("/"); + var j2 = path.indexOf("\\"); + var idx = i > j ? i : j; + var idx2 = i > j ? i2 : j2; + if(idx < 0) return path; + if(idx === idx2) return path.substr(0, idx + 1); + return path.substr(0, idx); +} + +function createLoaderObject(loader) { + var obj = { + path: null, + query: null, + options: null, + ident: null, + normal: null, + pitch: null, + raw: null, + data: null, + pitchExecuted: false, + normalExecuted: false + }; + Object.defineProperty(obj, "request", { + enumerable: true, + get: function() { + return obj.path + obj.query; + }, + set: function(value) { + if(typeof value === "string") { + var splittedRequest = splitQuery(value); + obj.path = splittedRequest[0]; + obj.query = splittedRequest[1]; + obj.options = undefined; + obj.ident = undefined; + } else { + if(!value.loader) + throw new Error("request should be a string or object with loader and object (" + JSON.stringify(value) + ")"); + obj.path = value.loader; + obj.options = value.options; + obj.ident = value.ident; + if(obj.options === null) + obj.query = ""; + else if(obj.options === undefined) + obj.query = ""; + else if(typeof obj.options === "string") + obj.query = "?" + obj.options; + else if(obj.ident) + obj.query = "??" + obj.ident; + else if(typeof obj.options === "object" && obj.options.ident) + obj.query = "??" + obj.options.ident; + else + obj.query = "?" + JSON.stringify(obj.options); + } + } + }); + obj.request = loader; + if(Object.preventExtensions) { + Object.preventExtensions(obj); + } + return obj; +} + +function runSyncOrAsync(fn, context, args, callback) { + var isSync = true; + var isDone = false; + var isError = false; // internal error + var reportedError = false; + context.async = function async() { + if(isDone) { + if(reportedError) return; // ignore + throw new Error("async(): The callback was already called."); + } + isSync = false; + return innerCallback; + }; + var innerCallback = context.callback = function() { + if(isDone) { + if(reportedError) return; // ignore + throw new Error("callback(): The callback was already called."); + } + isDone = true; + isSync = false; + try { + callback.apply(null, arguments); + } catch(e) { + isError = true; + throw e; + } + }; + try { + var result = (function LOADER_EXECUTION() { + return fn.apply(context, args); + }()); + if(isSync) { + isDone = true; + if(result === undefined) + return callback(); + if(result && typeof result === "object" && typeof result.then === "function") { + return result.catch(callback).then(function(r) { + callback(null, r); + }); + } + return callback(null, result); + } + } catch(e) { + if(isError) throw e; + if(isDone) { + // loader is already "done", so we cannot use the callback function + // for better debugging we print the error on the console + if(typeof e === "object" && e.stack) console.error(e.stack); + else console.error(e); + return; + } + isDone = true; + reportedError = true; + callback(e); + } + +} + +function convertArgs(args, raw) { + if(!raw && Buffer.isBuffer(args[0])) + args[0] = utf8BufferToString(args[0]); + else if(raw && typeof args[0] === "string") + args[0] = new Buffer(args[0], "utf-8"); // eslint-disable-line +} + +function iteratePitchingLoaders(options, loaderContext, callback) { + // abort after last loader + if(loaderContext.loaderIndex >= loaderContext.loaders.length) + return processResource(options, loaderContext, callback); + + var currentLoaderObject = loaderContext.loaders[loaderContext.loaderIndex]; + + // iterate + if(currentLoaderObject.pitchExecuted) { + loaderContext.loaderIndex++; + return iteratePitchingLoaders(options, loaderContext, callback); + } + + // load loader module + loadLoader(currentLoaderObject, function(err) { + if(err) return callback(err); + var fn = currentLoaderObject.pitch; + currentLoaderObject.pitchExecuted = true; + if(!fn) return iteratePitchingLoaders(options, loaderContext, callback); + + runSyncOrAsync( + fn, + loaderContext, [loaderContext.remainingRequest, loaderContext.previousRequest, currentLoaderObject.data = {}], + function(err) { + if(err) return callback(err); + var args = Array.prototype.slice.call(arguments, 1); + if(args.length > 0) { + loaderContext.loaderIndex--; + iterateNormalLoaders(options, loaderContext, args, callback); + } else { + iteratePitchingLoaders(options, loaderContext, callback); + } + } + ); + }); +} + +function processResource(options, loaderContext, callback) { + // set loader index to last loader + loaderContext.loaderIndex = loaderContext.loaders.length - 1; + + var resourcePath = loaderContext.resourcePath; + if(resourcePath) { + loaderContext.addDependency(resourcePath); + options.readResource(resourcePath, function(err, buffer) { + if(err) return callback(err); + options.resourceBuffer = buffer; + iterateNormalLoaders(options, loaderContext, [buffer], callback); + }); + } else { + iterateNormalLoaders(options, loaderContext, [null], callback); + } +} + +function iterateNormalLoaders(options, loaderContext, args, callback) { + if(loaderContext.loaderIndex < 0) + return callback(null, args); + + var currentLoaderObject = loaderContext.loaders[loaderContext.loaderIndex]; + + // iterate + if(currentLoaderObject.normalExecuted) { + loaderContext.loaderIndex--; + return iterateNormalLoaders(options, loaderContext, args, callback); + } + + var fn = currentLoaderObject.normal; + currentLoaderObject.normalExecuted = true; + if(!fn) { + return iterateNormalLoaders(options, loaderContext, args, callback); + } + + convertArgs(args, currentLoaderObject.raw); + + runSyncOrAsync(fn, loaderContext, args, function(err) { + if(err) return callback(err); + + var args = Array.prototype.slice.call(arguments, 1); + iterateNormalLoaders(options, loaderContext, args, callback); + }); +} + +exports.getContext = function getContext(resource) { + var splitted = splitQuery(resource); + return dirname(splitted[0]); +}; + +exports.runLoaders = function runLoaders(options, callback) { + // read options + var resource = options.resource || ""; + var loaders = options.loaders || []; + var loaderContext = options.context || {}; + var readResource = options.readResource || readFile; + + // + var splittedResource = resource && splitQuery(resource); + var resourcePath = splittedResource ? splittedResource[0] : undefined; + var resourceQuery = splittedResource ? splittedResource[1] : undefined; + var contextDirectory = resourcePath ? dirname(resourcePath) : null; + + // execution state + var requestCacheable = true; + var fileDependencies = []; + var contextDependencies = []; + + // prepare loader objects + loaders = loaders.map(createLoaderObject); + + loaderContext.context = contextDirectory; + loaderContext.loaderIndex = 0; + loaderContext.loaders = loaders; + loaderContext.resourcePath = resourcePath; + loaderContext.resourceQuery = resourceQuery; + loaderContext.async = null; + loaderContext.callback = null; + loaderContext.cacheable = function cacheable(flag) { + if(flag === false) { + requestCacheable = false; + } + }; + loaderContext.dependency = loaderContext.addDependency = function addDependency(file) { + fileDependencies.push(file); + }; + loaderContext.addContextDependency = function addContextDependency(context) { + contextDependencies.push(context); + }; + loaderContext.getDependencies = function getDependencies() { + return fileDependencies.slice(); + }; + loaderContext.getContextDependencies = function getContextDependencies() { + return contextDependencies.slice(); + }; + loaderContext.clearDependencies = function clearDependencies() { + fileDependencies.length = 0; + contextDependencies.length = 0; + requestCacheable = true; + }; + Object.defineProperty(loaderContext, "resource", { + enumerable: true, + get: function() { + if(loaderContext.resourcePath === undefined) + return undefined; + return loaderContext.resourcePath + loaderContext.resourceQuery; + }, + set: function(value) { + var splittedResource = value && splitQuery(value); + loaderContext.resourcePath = splittedResource ? splittedResource[0] : undefined; + loaderContext.resourceQuery = splittedResource ? splittedResource[1] : undefined; + } + }); + Object.defineProperty(loaderContext, "request", { + enumerable: true, + get: function() { + return loaderContext.loaders.map(function(o) { + return o.request; + }).concat(loaderContext.resource || "").join("!"); + } + }); + Object.defineProperty(loaderContext, "remainingRequest", { + enumerable: true, + get: function() { + if(loaderContext.loaderIndex >= loaderContext.loaders.length - 1 && !loaderContext.resource) + return ""; + return loaderContext.loaders.slice(loaderContext.loaderIndex + 1).map(function(o) { + return o.request; + }).concat(loaderContext.resource || "").join("!"); + } + }); + Object.defineProperty(loaderContext, "currentRequest", { + enumerable: true, + get: function() { + return loaderContext.loaders.slice(loaderContext.loaderIndex).map(function(o) { + return o.request; + }).concat(loaderContext.resource || "").join("!"); + } + }); + Object.defineProperty(loaderContext, "previousRequest", { + enumerable: true, + get: function() { + return loaderContext.loaders.slice(0, loaderContext.loaderIndex).map(function(o) { + return o.request; + }).join("!"); + } + }); + Object.defineProperty(loaderContext, "query", { + enumerable: true, + get: function() { + var entry = loaderContext.loaders[loaderContext.loaderIndex]; + return entry.options && typeof entry.options === "object" ? entry.options : entry.query; + } + }); + Object.defineProperty(loaderContext, "data", { + enumerable: true, + get: function() { + return loaderContext.loaders[loaderContext.loaderIndex].data; + } + }); + + // finish loader context + if(Object.preventExtensions) { + Object.preventExtensions(loaderContext); + } + + var processOptions = { + resourceBuffer: null, + readResource: readResource + }; + iteratePitchingLoaders(processOptions, loaderContext, function(err, result) { + if(err) { + return callback(err, { + cacheable: requestCacheable, + fileDependencies: fileDependencies, + contextDependencies: contextDependencies + }); + } + callback(null, { + result: result, + resourceBuffer: processOptions.resourceBuffer, + cacheable: requestCacheable, + fileDependencies: fileDependencies, + contextDependencies: contextDependencies + }); + }); +}; diff --git a/node_modules/loader-runner/lib/loadLoader.js b/node_modules/loader-runner/lib/loadLoader.js new file mode 100644 index 000000000..ff2b9386c --- /dev/null +++ b/node_modules/loader-runner/lib/loadLoader.js @@ -0,0 +1,38 @@ +module.exports = function loadLoader(loader, callback) { + if(typeof System === "object" && typeof System.import === "function") { + System.import(loader.path).catch(callback).then(function(module) { + loader.normal = typeof module === "function" ? module : module.default; + loader.pitch = module.pitch; + loader.raw = module.raw; + if(typeof loader.normal !== "function" && typeof loader.pitch !== "function") + throw new Error("Module '" + loader.path + "' is not a loader (must have normal or pitch function)"); + callback(); + }); + } else { + try { + var module = require(loader.path); + } catch(e) { + // it is possible for node to choke on a require if the FD descriptor + // limit has been reached. give it a chance to recover. + if(e instanceof Error && e.code === "EMFILE") { + var retry = loadLoader.bind(null, loader, callback); + if(typeof setImmediate === "function") { + // node >= 0.9.0 + return setImmediate(retry); + } else { + // node < 0.9.0 + return process.nextTick(retry); + } + } + return callback(e); + } + if(typeof loader !== "function" && typeof loader !== "object") + throw new Error("Module '" + loader.path + "' is not a loader (export function or es6 module))"); + loader.normal = typeof module === "function" ? module : module.default; + loader.pitch = module.pitch; + loader.raw = module.raw; + if(typeof loader.normal !== "function" && typeof loader.pitch !== "function") + throw new Error("Module '" + loader.path + "' is not a loader (must have normal or pitch function)"); + callback(); + } +}; diff --git a/node_modules/loader-runner/package.json b/node_modules/loader-runner/package.json new file mode 100644 index 000000000..45aecbf19 --- /dev/null +++ b/node_modules/loader-runner/package.json @@ -0,0 +1,78 @@ +{ + "_from": "loader-runner@^2.3.0", + "_id": "loader-runner@2.3.0", + "_inBundle": false, + "_integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "_location": "/loader-runner", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "loader-runner@^2.3.0", + "name": "loader-runner", + "escapedName": "loader-runner", + "rawSpec": "^2.3.0", + "saveSpec": null, + "fetchSpec": "^2.3.0" + }, + "_requiredBy": [ + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "_shasum": "f482aea82d543e07921700d5a46ef26fdac6b8a2", + "_spec": "loader-runner@^2.3.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack", + "author": { + "name": "Tobias Koppers @sokra" + }, + "bugs": { + "url": "https://github.com/webpack/loader-runner/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Runs (webpack) loaders", + "devDependencies": { + "beautify-lint": "^1.0.4", + "codecov.io": "^0.1.6", + "coveralls": "^2.11.6", + "eslint": "^3.12.2", + "eslint-plugin-node": "^3.0.5", + "eslint-plugin-nodeca": "^1.0.3", + "istanbul": "^0.4.1", + "mocha": "^3.2.0", + "should": "^8.0.2" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + }, + "files": [ + "lib/", + "bin/", + "hot/", + "web_modules/", + "schemas/" + ], + "homepage": "https://github.com/webpack/loader-runner#readme", + "keywords": [ + "webpack", + "loader" + ], + "license": "MIT", + "main": "lib/LoaderRunner.js", + "name": "loader-runner", + "repository": { + "type": "git", + "url": "git+https://github.com/webpack/loader-runner.git" + }, + "scripts": { + "beautify": "beautify-rewrite lib/**.js test/*.js", + "beautify-lint": "beautify-lint lib/**.js test/*.js", + "cover": "istanbul cover node_modules/mocha/bin/_mocha", + "lint": "eslint lib test", + "precover": "npm run lint && npm run beautify-lint", + "pretest": "npm run lint && npm run beautify-lint", + "test": "mocha --reporter spec", + "travis": "npm run cover -- --report lcovonly" + }, + "version": "2.3.0" +} diff --git a/node_modules/loader-utils/CHANGELOG.md b/node_modules/loader-utils/CHANGELOG.md new file mode 100644 index 000000000..30545e99f --- /dev/null +++ b/node_modules/loader-utils/CHANGELOG.md @@ -0,0 +1,18 @@ +# 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/webpack/loader-utils/compare/v1.0.4...v1.1.0) (2017-03-16) + + +### Features + +* **automatic-release:** Generation of automatic release ([7484d13](https://github.com/webpack/loader-utils/commit/7484d13)) +* **parseQuery:** export parseQuery ([ddf64e4](https://github.com/webpack/loader-utils/commit/ddf64e4)) + + + +# 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. diff --git a/node_modules/loader-utils/LICENSE b/node_modules/loader-utils/LICENSE new file mode 100644 index 000000000..8c11fc728 --- /dev/null +++ b/node_modules/loader-utils/LICENSE @@ -0,0 +1,20 @@ +Copyright JS Foundation and other 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/node_modules/loader-utils/README.md b/node_modules/loader-utils/README.md new file mode 100644 index 000000000..84bf788cc --- /dev/null +++ b/node_modules/loader-utils/README.md @@ -0,0 +1,229 @@ +# loader-utils + +## Methods + +### `getOptions` + +Recommended way to retrieve the options of a loader invocation: + +```javascript +// inside your loader +const options = loaderUtils.getOptions(this); +``` + +1. If `this.query` is a string: + - Tries to parse the query string and returns a new object + - Throws if it's not a valid query string +2. If `this.query` is object-like, it just returns `this.query` +3. In any other case, it just returns `null` + +**Please note:** The returned `options` object is *read-only*. It may be re-used across multiple invocations. +If you pass it on to another library, make sure to make a *deep copy* of it: + +```javascript +const options = Object.assign( + {}, + loaderUtils.getOptions(this), // it is safe to pass null to Object.assign() + defaultOptions +); +// don't forget nested objects or arrays +options.obj = Object.assign({}, options.obj); +options.arr = options.arr.slice(); +someLibrary(options); +``` + +[clone-deep](https://www.npmjs.com/package/clone-deep) is a good library to make a deep copy of the options. + +#### Options as query strings + +If the loader options have been passed as loader query string (`loader?some¶ms`), the string is parsed by using [`parseQuery`](#parsequery). + +### `parseQuery` + +Parses a passed string (e.g. `loaderContext.resourceQuery`) as a query string, and returns an object. + +``` javascript +const params = loaderUtils.parseQuery(this.resourceQuery); // resource: `file?param1=foo` +if (params.param1 === "foo") { + // do something +} +``` + +The string is parsed like this: + +``` text + -> Error +? -> {} +?flag -> { flag: true } +?+flag -> { flag: true } +?-flag -> { flag: false } +?xyz=test -> { xyz: "test" } +?xyz=1 -> { xyz: "1" } // numbers are NOT parsed +?xyz[]=a -> { xyz: ["a"] } +?flag1&flag2 -> { flag1: true, flag2: true } +?+flag1,-flag2 -> { flag1: true, flag2: false } +?xyz[]=a,xyz[]=b -> { xyz: ["a", "b"] } +?a%2C%26b=c%2C%26d -> { "a,&b": "c,&d" } +?{data:{a:1},isJSON5:true} -> { data: { a: 1 }, isJSON5: true } +``` + +### `stringifyRequest` + +Turns a request into a string that can be used inside `require()` or `import` while avoiding absolute paths. +Use it instead of `JSON.stringify(...)` if you're generating code inside a loader. + +**Why is this necessary?** Since webpack calculates the hash before module paths are translated into module ids, we must avoid absolute paths to ensure +consistent hashes across different compilations. + +This function: + +- resolves absolute requests into relative requests if the request and the module are on the same hard drive +- replaces `\` with `/` if the request and the module are on the same hard drive +- won't change the path at all if the request and the module are on different hard drives +- applies `JSON.stringify` to the result + +```javascript +loaderUtils.stringifyRequest(this, "./test.js"); +// "\"./test.js\"" + +loaderUtils.stringifyRequest(this, ".\\test.js"); +// "\"./test.js\"" + +loaderUtils.stringifyRequest(this, "test"); +// "\"test\"" + +loaderUtils.stringifyRequest(this, "test/lib/index.js"); +// "\"test/lib/index.js\"" + +loaderUtils.stringifyRequest(this, "otherLoader?andConfig!test?someConfig"); +// "\"otherLoader?andConfig!test?someConfig\"" + +loaderUtils.stringifyRequest(this, require.resolve("test")); +// "\"../node_modules/some-loader/lib/test.js\"" + +loaderUtils.stringifyRequest(this, "C:\\module\\test.js"); +// "\"../../test.js\"" (on Windows, in case the module and the request are on the same drive) + +loaderUtils.stringifyRequest(this, "C:\\module\\test.js"); +// "\"C:\\module\\test.js\"" (on Windows, in case the module and the request are on different drives) + +loaderUtils.stringifyRequest(this, "\\\\network-drive\\test.js"); +// "\"\\\\network-drive\\\\test.js\"" (on Windows, in case the module and the request are on different drives) +``` + +### `urlToRequest` + +Converts some resource URL to a webpack module request. + +```javascript +const url = "path/to/module.js"; +const request = loaderUtils.urlToRequest(url); // "./path/to/module.js" +``` + +#### Module URLs + +Any URL containing a `~` will be interpreted as a module request. Anything after the `~` will be considered the request path. + +```javascript +const url = "~path/to/module.js"; +const request = loaderUtils.urlToRequest(url); // "path/to/module.js" +``` + +#### Root-relative URLs + +URLs that are root-relative (start with `/`) can be resolved relative to some arbitrary path by using the `root` parameter: + +```javascript +const url = "/path/to/module.js"; +const root = "./root"; +const request = loaderUtils.urlToRequest(url, root); // "./root/path/to/module.js" +``` + +To convert a root-relative URL into a module URL, specify a `root` value that starts with `~`: + +```javascript +const url = "/path/to/module.js"; +const root = "~"; +const request = loaderUtils.urlToRequest(url, root); // "path/to/module.js" +``` + +### `interpolateName` + +Interpolates a filename template using multiple placeholders and/or a regular expression. +The template and regular expression are set as query params called `name` and `regExp` on the current loader's context. + +```javascript +const interpolatedName = loaderUtils.interpolateName(loaderContext, name, options); +``` + +The following tokens are replaced in the `name` parameter: + +* `[ext]` the extension of the resource +* `[name]` the basename of the resource +* `[path]` the path of the resource relative to the `context` query parameter or option. +* `[folder]` the folder of the resource is in. +* `[emoji]` a random emoji representation of `options.content` +* `[emoji:]` same as above, but with a customizable number of emojis +* `[hash]` the hash of `options.content` (Buffer) (by default it's the hex digest of the md5 hash) +* `[:hash::]` optionally one can configure + * other `hashType`s, i. e. `sha1`, `md5`, `sha256`, `sha512` + * other `digestType`s, i. e. `hex`, `base26`, `base32`, `base36`, `base49`, `base52`, `base58`, `base62`, `base64` + * and `length` the length in chars +* `[N]` the N-th match obtained from matching the current file name against `options.regExp` + +Examples + +``` javascript +// loaderContext.resourcePath = "/app/js/javascript.js" +loaderUtils.interpolateName(loaderContext, "js/[hash].script.[ext]", { content: ... }); +// => js/9473fdd0d880a43c21b7778d34872157.script.js + +// loaderContext.resourcePath = "/app/page.html" +loaderUtils.interpolateName(loaderContext, "html-[hash:6].html", { content: ... }); +// => html-9473fd.html + +// loaderContext.resourcePath = "/app/flash.txt" +loaderUtils.interpolateName(loaderContext, "[hash]", { content: ... }); +// => c31e9820c001c9c4a86bce33ce43b679 + +// loaderContext.resourcePath = "/app/img/image.gif" +loaderUtils.interpolateName(loaderContext, "[emoji]", { content: ... }); +// => 👍 + +// loaderContext.resourcePath = "/app/img/image.gif" +loaderUtils.interpolateName(loaderContext, "[emoji:4]", { content: ... }); +// => 🙍🏢📤🐝 + +// loaderContext.resourcePath = "/app/img/image.png" +loaderUtils.interpolateName(loaderContext, "[sha512:hash:base64:7].[ext]", { content: ... }); +// => 2BKDTjl.png +// use sha512 hash instead of md5 and with only 7 chars of base64 + +// loaderContext.resourcePath = "/app/img/myself.png" +// loaderContext.query.name = +loaderUtils.interpolateName(loaderContext, "picture.png"); +// => picture.png + +// loaderContext.resourcePath = "/app/dir/file.png" +loaderUtils.interpolateName(loaderContext, "[path][name].[ext]?[hash]", { content: ... }); +// => /app/dir/file.png?9473fdd0d880a43c21b7778d34872157 + +// loaderContext.resourcePath = "/app/js/page-home.js" +loaderUtils.interpolateName(loaderContext, "script-[1].[ext]", { regExp: "page-(.*)\\.js", content: ... }); +// => script-home.js +``` + +### `getHashDigest` + +``` javascript +const digestString = loaderUtils.getHashDigest(buffer, hashType, digestType, maxLength); +``` + +* `buffer` the content that should be hashed +* `hashType` one of `sha1`, `md5`, `sha256`, `sha512` or any other node.js supported hash type +* `digestType` one of `hex`, `base26`, `base32`, `base36`, `base49`, `base52`, `base58`, `base62`, `base64` +* `maxLength` the maximum length in chars + +## License + +MIT (http://www.opensource.org/licenses/mit-license.php) diff --git a/node_modules/loader-utils/lib/getCurrentRequest.js b/node_modules/loader-utils/lib/getCurrentRequest.js new file mode 100644 index 000000000..f05e112ac --- /dev/null +++ b/node_modules/loader-utils/lib/getCurrentRequest.js @@ -0,0 +1,13 @@ +"use strict"; + +function getCurrentRequest(loaderContext) { + if(loaderContext.currentRequest) + return loaderContext.currentRequest; + const request = loaderContext.loaders + .slice(loaderContext.loaderIndex) + .map(obj => obj.request) + .concat([loaderContext.resource]); + return request.join("!"); +} + +module.exports = getCurrentRequest; diff --git a/node_modules/loader-utils/lib/getHashDigest.js b/node_modules/loader-utils/lib/getHashDigest.js new file mode 100644 index 000000000..6f4a427e5 --- /dev/null +++ b/node_modules/loader-utils/lib/getHashDigest.js @@ -0,0 +1,53 @@ +"use strict"; + +const baseEncodeTables = { + 26: "abcdefghijklmnopqrstuvwxyz", + 32: "123456789abcdefghjkmnpqrstuvwxyz", // no 0lio + 36: "0123456789abcdefghijklmnopqrstuvwxyz", + 49: "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ", // no lIO + 52: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", + 58: "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ", // no 0lIO + 62: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", + 64: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_" +}; + +function encodeBufferToBase(buffer, base) { + const encodeTable = baseEncodeTables[base]; + if(!encodeTable) throw new Error("Unknown encoding base" + base); + + const readLength = buffer.length; + + const Big = require("big.js"); + Big.RM = Big.DP = 0; + let b = new Big(0); + for(let i = readLength - 1; i >= 0; i--) { + b = b.times(256).plus(buffer[i]); + } + + let output = ""; + while(b.gt(0)) { + output = encodeTable[b.mod(base)] + output; + b = b.div(base); + } + + Big.DP = 20; + Big.RM = 1; + + return output; +} + +function getHashDigest(buffer, hashType, digestType, maxLength) { + hashType = hashType || "md5"; + maxLength = maxLength || 9999; + const hash = require("crypto").createHash(hashType); + hash.update(buffer); + if(digestType === "base26" || digestType === "base32" || digestType === "base36" || + digestType === "base49" || digestType === "base52" || digestType === "base58" || + digestType === "base62" || digestType === "base64") { + return encodeBufferToBase(hash.digest(), digestType.substr(4)).substr(0, maxLength); + } else { + return hash.digest(digestType || "hex").substr(0, maxLength); + } +} + +module.exports = getHashDigest; diff --git a/node_modules/loader-utils/lib/getOptions.js b/node_modules/loader-utils/lib/getOptions.js new file mode 100644 index 000000000..24bcae47b --- /dev/null +++ b/node_modules/loader-utils/lib/getOptions.js @@ -0,0 +1,17 @@ +"use strict"; + +const parseQuery = require("./parseQuery"); + +function getOptions(loaderContext) { + const query = loaderContext.query; + if(typeof query === "string" && query !== "") { + return parseQuery(loaderContext.query); + } + if(!query || typeof query !== "object") { + // Not object-like queries are not supported. + return null; + } + return query; +} + +module.exports = getOptions; diff --git a/node_modules/loader-utils/lib/getRemainingRequest.js b/node_modules/loader-utils/lib/getRemainingRequest.js new file mode 100644 index 000000000..f48c71a49 --- /dev/null +++ b/node_modules/loader-utils/lib/getRemainingRequest.js @@ -0,0 +1,13 @@ +"use strict"; + +function getRemainingRequest(loaderContext) { + if(loaderContext.remainingRequest) + return loaderContext.remainingRequest; + const request = loaderContext.loaders + .slice(loaderContext.loaderIndex + 1) + .map(obj => obj.request) + .concat([loaderContext.resource]); + return request.join("!"); +} + +module.exports = getRemainingRequest; diff --git a/node_modules/loader-utils/lib/index.js b/node_modules/loader-utils/lib/index.js new file mode 100644 index 000000000..a5950922f --- /dev/null +++ b/node_modules/loader-utils/lib/index.js @@ -0,0 +1,23 @@ +"use strict"; + +const getOptions = require("./getOptions"); +const parseQuery = require("./parseQuery"); +const stringifyRequest = require("./stringifyRequest"); +const getRemainingRequest = require("./getRemainingRequest"); +const getCurrentRequest = require("./getCurrentRequest"); +const isUrlRequest = require("./isUrlRequest"); +const urlToRequest = require("./urlToRequest"); +const parseString = require("./parseString"); +const getHashDigest = require("./getHashDigest"); +const interpolateName = require("./interpolateName"); + +exports.getOptions = getOptions; +exports.parseQuery = parseQuery; +exports.stringifyRequest = stringifyRequest; +exports.getRemainingRequest = getRemainingRequest; +exports.getCurrentRequest = getCurrentRequest; +exports.isUrlRequest = isUrlRequest; +exports.urlToRequest = urlToRequest; +exports.parseString = parseString; +exports.getHashDigest = getHashDigest; +exports.interpolateName = interpolateName; diff --git a/node_modules/loader-utils/lib/interpolateName.js b/node_modules/loader-utils/lib/interpolateName.js new file mode 100644 index 000000000..5e5b65326 --- /dev/null +++ b/node_modules/loader-utils/lib/interpolateName.js @@ -0,0 +1,95 @@ +"use strict"; + +const path = require("path"); +const emojisList = require("emojis-list"); +const getHashDigest = require("./getHashDigest"); + +const emojiRegex = /[\uD800-\uDFFF]./; +const emojiList = emojisList.filter(emoji => emojiRegex.test(emoji)); +const emojiCache = {}; + +function encodeStringToEmoji(content, length) { + if(emojiCache[content]) return emojiCache[content]; + length = length || 1; + const emojis = []; + do { + const index = Math.floor(Math.random() * emojiList.length); + emojis.push(emojiList[index]); + emojiList.splice(index, 1); + } while(--length > 0); + const emojiEncoding = emojis.join(""); + emojiCache[content] = emojiEncoding; + return emojiEncoding; +} + +function interpolateName(loaderContext, name, options) { + let filename; + if(typeof name === "function") { + filename = name(loaderContext.resourcePath); + } else { + filename = name || "[hash].[ext]"; + } + const context = options.context; + const content = options.content; + const regExp = options.regExp; + let ext = "bin"; + let basename = "file"; + let directory = ""; + let folder = ""; + if(loaderContext.resourcePath) { + const parsed = path.parse(loaderContext.resourcePath); + let resourcePath = loaderContext.resourcePath; + + if(parsed.ext) { + ext = parsed.ext.substr(1); + } + if(parsed.dir) { + basename = parsed.name; + resourcePath = parsed.dir + path.sep; + } + if(typeof context !== "undefined") { + directory = path.relative(context, resourcePath + "_").replace(/\\/g, "/").replace(/\.\.(\/)?/g, "_$1"); + directory = directory.substr(0, directory.length - 1); + } else { + directory = resourcePath.replace(/\\/g, "/").replace(/\.\.(\/)?/g, "_$1"); + } + if(directory.length === 1) { + directory = ""; + } else if(directory.length > 1) { + folder = path.basename(directory); + } + } + let url = filename; + if(content) { + // Match hash template + url = url + .replace( + /\[(?:(\w+):)?hash(?::([a-z]+\d*))?(?::(\d+))?\]/ig, + (all, hashType, digestType, maxLength) => getHashDigest(content, hashType, digestType, parseInt(maxLength, 10)) + ) + .replace( + /\[emoji(?::(\d+))?\]/ig, + (all, length) => encodeStringToEmoji(content, length) + ); + } + url = url + .replace(/\[ext\]/ig, () => ext) + .replace(/\[name\]/ig, () => basename) + .replace(/\[path\]/ig, () => directory) + .replace(/\[folder\]/ig, () => folder); + if(regExp && loaderContext.resourcePath) { + const match = loaderContext.resourcePath.match(new RegExp(regExp)); + match && match.forEach((matched, i) => { + url = url.replace( + new RegExp("\\[" + i + "\\]", "ig"), + matched + ); + }); + } + if(typeof loaderContext.options === "object" && typeof loaderContext.options.customInterpolateName === "function") { + url = loaderContext.options.customInterpolateName.call(loaderContext, url, name, options); + } + return url; +} + +module.exports = interpolateName; diff --git a/node_modules/loader-utils/lib/isUrlRequest.js b/node_modules/loader-utils/lib/isUrlRequest.js new file mode 100644 index 000000000..bee968ee8 --- /dev/null +++ b/node_modules/loader-utils/lib/isUrlRequest.js @@ -0,0 +1,14 @@ +"use strict"; + +function isUrlRequest(url, root) { + // An URL is not an request if + // 1. it's a Data Url + // 2. it's an absolute url or and protocol-relative + // 3. it's some kind of url for a template + if(/^data:|^chrome-extension:|^(https?:)?\/\/|^[\{\}\[\]#*;,'§\$%&\(=?`´\^°<>]/.test(url)) return false; + // 4. It's also not an request if root isn't set and it's a root-relative url + if((root === undefined || root === false) && /^\//.test(url)) return false; + return true; +} + +module.exports = isUrlRequest; diff --git a/node_modules/loader-utils/lib/parseQuery.js b/node_modules/loader-utils/lib/parseQuery.js new file mode 100644 index 000000000..5748cded8 --- /dev/null +++ b/node_modules/loader-utils/lib/parseQuery.js @@ -0,0 +1,54 @@ +"use strict"; + +const JSON5 = require("json5"); + +const specialValues = { + "null": null, + "true": true, + "false": false +}; + +function parseQuery(query) { + if(query.substr(0, 1) !== "?") { + throw new Error("A valid query string passed to parseQuery should begin with '?'"); + } + query = query.substr(1); + if(!query) { + return {}; + } + if(query.substr(0, 1) === "{" && query.substr(-1) === "}") { + return JSON5.parse(query); + } + const queryArgs = query.split(/[,&]/g); + const result = {}; + queryArgs.forEach(arg => { + const idx = arg.indexOf("="); + if(idx >= 0) { + let name = arg.substr(0, idx); + let value = decodeURIComponent(arg.substr(idx + 1)); + if(specialValues.hasOwnProperty(value)) { + value = specialValues[value]; + } + if(name.substr(-2) === "[]") { + name = decodeURIComponent(name.substr(0, name.length - 2)); + if(!Array.isArray(result[name])) + result[name] = []; + result[name].push(value); + } else { + name = decodeURIComponent(name); + result[name] = value; + } + } else { + if(arg.substr(0, 1) === "-") { + result[decodeURIComponent(arg.substr(1))] = false; + } else if(arg.substr(0, 1) === "+") { + result[decodeURIComponent(arg.substr(1))] = true; + } else { + result[decodeURIComponent(arg)] = true; + } + } + }); + return result; +} + +module.exports = parseQuery; diff --git a/node_modules/loader-utils/lib/parseString.js b/node_modules/loader-utils/lib/parseString.js new file mode 100644 index 000000000..ca69dfd06 --- /dev/null +++ b/node_modules/loader-utils/lib/parseString.js @@ -0,0 +1,19 @@ +"use strict"; + +function parseString(str) { + try { + if(str[0] === "\"") return JSON.parse(str); + if(str[0] === "'" && str.substr(str.length - 1) === "'") { + return parseString( + str + .replace(/\\.|"/g, x => x === "\"" ? "\\\"" : x) + .replace(/^'|'$/g, "\"") + ); + } + return JSON.parse("\"" + str + "\""); + } catch(e) { + return str; + } +} + +module.exports = parseString; diff --git a/node_modules/loader-utils/lib/stringifyRequest.js b/node_modules/loader-utils/lib/stringifyRequest.js new file mode 100644 index 000000000..46e9ae2e9 --- /dev/null +++ b/node_modules/loader-utils/lib/stringifyRequest.js @@ -0,0 +1,40 @@ +"use strict"; + +const path = require("path"); + +const matchRelativePath = /^\.\.?[/\\]/; + +function isAbsolutePath(str) { + return path.posix.isAbsolute(str) || path.win32.isAbsolute(str); +} + +function isRelativePath(str) { + return matchRelativePath.test(str); +} + +function stringifyRequest(loaderContext, request) { + const splitted = request.split("!"); + const context = loaderContext.context || (loaderContext.options && loaderContext.options.context); + return JSON.stringify(splitted.map(part => { + // First, separate singlePath from query, because the query might contain paths again + const splittedPart = part.match(/^(.*?)(\?.*)/); + let singlePath = splittedPart ? splittedPart[1] : part; + const query = splittedPart ? splittedPart[2] : ""; + if(isAbsolutePath(singlePath) && context) { + singlePath = path.relative(context, singlePath); + if(isAbsolutePath(singlePath)) { + // If singlePath still matches an absolute path, singlePath was on a different drive than context. + // In this case, we leave the path platform-specific without replacing any separators. + // @see https://github.com/webpack/loader-utils/pull/14 + return singlePath + query; + } + if(isRelativePath(singlePath) === false) { + // Ensure that the relative path starts at least with ./ otherwise it would be a request into the modules directory (like node_modules). + singlePath = "./" + singlePath; + } + } + return singlePath.replace(/\\/g, "/") + query; + }).join("!")); +} + +module.exports = stringifyRequest; diff --git a/node_modules/loader-utils/lib/urlToRequest.js b/node_modules/loader-utils/lib/urlToRequest.js new file mode 100644 index 000000000..06c3cd046 --- /dev/null +++ b/node_modules/loader-utils/lib/urlToRequest.js @@ -0,0 +1,49 @@ +"use strict"; + +// we can't use path.win32.isAbsolute because it also matches paths starting with a forward slash +const matchNativeWin32Path = /^[A-Z]:[/\\]|^\\\\/i; + +function urlToRequest(url, root) { + const moduleRequestRegex = /^[^?]*~/; + let request; + + if(matchNativeWin32Path.test(url)) { + // absolute windows path, keep it + request = url; + } else if(root !== undefined && root !== false && /^\//.test(url)) { + // if root is set and the url is root-relative + switch(typeof root) { + // 1. root is a string: root is prefixed to the url + case "string": + // special case: `~` roots convert to module request + if(moduleRequestRegex.test(root)) { + request = root.replace(/([^~\/])$/, "$1/") + url.slice(1); + } else { + request = root + url; + } + break; + // 2. root is `true`: absolute paths are allowed + // *nix only, windows-style absolute paths are always allowed as they doesn't start with a `/` + case "boolean": + request = url; + break; + default: + throw new Error("Unexpected parameters to loader-utils 'urlToRequest': url = " + url + ", root = " + root + "."); + } + } else if(/^\.\.?\//.test(url)) { + // A relative url stays + request = url; + } else { + // every other url is threaded like a relative url + request = "./" + url; + } + + // A `~` makes the url an module + if(moduleRequestRegex.test(request)) { + request = request.replace(moduleRequestRegex, ""); + } + + return request; +} + +module.exports = urlToRequest; diff --git a/node_modules/loader-utils/package.json b/node_modules/loader-utils/package.json new file mode 100644 index 000000000..95b4b15d3 --- /dev/null +++ b/node_modules/loader-utils/package.json @@ -0,0 +1,71 @@ +{ + "_from": "loader-utils@^1.0.2", + "_id": "loader-utils@1.1.0", + "_inBundle": false, + "_integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "_location": "/loader-utils", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "loader-utils@^1.0.2", + "name": "loader-utils", + "escapedName": "loader-utils", + "rawSpec": "^1.0.2", + "saveSpec": null, + "fetchSpec": "^1.0.2" + }, + "_requiredBy": [ + "/babel-loader", + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "_shasum": "c98aef488bcceda2ffb5e2de646d6a754429f5cd", + "_spec": "loader-utils@^1.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-loader", + "author": { + "name": "Tobias Koppers @sokra" + }, + "bugs": { + "url": "https://github.com/webpack/loader-utils/issues" + }, + "bundleDependencies": false, + "dependencies": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + }, + "deprecated": false, + "description": "utils for webpack loaders", + "devDependencies": { + "coveralls": "^2.11.2", + "eslint": "^3.15.0", + "eslint-plugin-node": "^4.0.1", + "istanbul": "^0.3.14", + "mocha": "^1.21.4", + "standard-version": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/webpack/loader-utils#readme", + "license": "MIT", + "main": "lib/index.js", + "name": "loader-utils", + "repository": { + "type": "git", + "url": "git+https://github.com/webpack/loader-utils.git" + }, + "scripts": { + "cover": "istanbul cover -x *.runtime.js node_modules/mocha/bin/_mocha", + "lint": "eslint lib test", + "posttest": "npm run lint", + "release": "npm test && standard-version", + "test": "mocha", + "travis": "npm run cover -- --report lcovonly" + }, + "version": "1.1.0" +} diff --git a/node_modules/locate-path/index.js b/node_modules/locate-path/index.js new file mode 100644 index 000000000..32b108d19 --- /dev/null +++ b/node_modules/locate-path/index.js @@ -0,0 +1,24 @@ +'use strict'; +const path = require('path'); +const pathExists = require('path-exists'); +const pLocate = require('p-locate'); + +module.exports = (iterable, opts) => { + opts = Object.assign({ + cwd: process.cwd() + }, opts); + + return pLocate(iterable, el => pathExists(path.resolve(opts.cwd, el)), opts); +}; + +module.exports.sync = (iterable, opts) => { + opts = Object.assign({ + cwd: process.cwd() + }, opts); + + for (const el of iterable) { + if (pathExists.sync(path.resolve(opts.cwd, el))) { + return el; + } + } +}; diff --git a/node_modules/locate-path/license b/node_modules/locate-path/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/locate-path/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/locate-path/package.json b/node_modules/locate-path/package.json new file mode 100644 index 000000000..5740e7a10 --- /dev/null +++ b/node_modules/locate-path/package.json @@ -0,0 +1,79 @@ +{ + "_from": "locate-path@^2.0.0", + "_id": "locate-path@2.0.0", + "_inBundle": false, + "_integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "_location": "/locate-path", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "locate-path@^2.0.0", + "name": "locate-path", + "escapedName": "locate-path", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/find-up" + ], + "_resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "_shasum": "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e", + "_spec": "locate-path@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/find-up", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/locate-path/issues" + }, + "bundleDependencies": false, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "deprecated": false, + "description": "Get the first path that exists on disk of multiple paths", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/locate-path#readme", + "keywords": [ + "locate", + "path", + "paths", + "file", + "files", + "exists", + "find", + "finder", + "search", + "searcher", + "array", + "iterable", + "iterator" + ], + "license": "MIT", + "name": "locate-path", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/locate-path.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0", + "xo": { + "esnext": true + } +} diff --git a/node_modules/locate-path/readme.md b/node_modules/locate-path/readme.md new file mode 100644 index 000000000..f7b337bb2 --- /dev/null +++ b/node_modules/locate-path/readme.md @@ -0,0 +1,99 @@ +# locate-path [![Build Status](https://travis-ci.org/sindresorhus/locate-path.svg?branch=master)](https://travis-ci.org/sindresorhus/locate-path) + +> Get the first path that exists on disk of multiple paths + + +## Install + +``` +$ npm install --save locate-path +``` + + +## Usage + +Here we find the first file that exists on disk, in array order. + +```js +const locatePath = require('locate-path'); + +const files = [ + 'unicorn.png', + 'rainbow.png', // only this one actually exists on disk + 'pony.png' +]; + +locatePath(files).then(foundPath => { + console.log(foundPath); + //=> 'rainbow' +}); +``` + + +## API + +### locatePath(input, [options]) + +Returns a `Promise` for the first path that exists or `undefined` if none exists. + +#### input + +Type: `Iterable` + +Paths to check. + +#### options + +Type: `Object` + +##### concurrency + +Type: `number`
+Default: `Infinity`
+Minimum: `1` + +Number of concurrently pending promises. + +##### preserveOrder + +Type: `boolean`
+Default: `true` + +Preserve `input` order when searching. + +Disable this to improve performance if you don't care about the order. + +##### cwd + +Type: `string`
+Default: `process.cwd()` + +Current working directory. + +### locatePath.sync(input, [options]) + +Returns the first path that exists or `undefined` if none exists. + +#### input + +Type: `Iterable` + +Paths to check. + +#### options + +Type: `Object` + +##### cwd + +Same as above. + + +## Related + +- [path-exists](https://github.com/sindresorhus/path-exists) - Check if a path exists + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/lodash/LICENSE b/node_modules/lodash/LICENSE new file mode 100644 index 000000000..c6f2f6145 --- /dev/null +++ b/node_modules/lodash/LICENSE @@ -0,0 +1,47 @@ +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/node_modules/lodash/README.md b/node_modules/lodash/README.md new file mode 100644 index 000000000..acdd128cd --- /dev/null +++ b/node_modules/lodash/README.md @@ -0,0 +1,39 @@ +# lodash v4.17.4 + +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.4-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 54-55, Firefox 49-50, 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/node_modules/lodash/_DataView.js b/node_modules/lodash/_DataView.js new file mode 100644 index 000000000..ac2d57ca6 --- /dev/null +++ b/node_modules/lodash/_DataView.js @@ -0,0 +1,7 @@ +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/node_modules/lodash/_Hash.js b/node_modules/lodash/_Hash.js new file mode 100644 index 000000000..b504fe340 --- /dev/null +++ b/node_modules/lodash/_Hash.js @@ -0,0 +1,32 @@ +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/node_modules/lodash/_LazyWrapper.js b/node_modules/lodash/_LazyWrapper.js new file mode 100644 index 000000000..81786c7f1 --- /dev/null +++ b/node_modules/lodash/_LazyWrapper.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/_ListCache.js b/node_modules/lodash/_ListCache.js new file mode 100644 index 000000000..26895c3a8 --- /dev/null +++ b/node_modules/lodash/_ListCache.js @@ -0,0 +1,32 @@ +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/node_modules/lodash/_LodashWrapper.js b/node_modules/lodash/_LodashWrapper.js new file mode 100644 index 000000000..c1e4d9df7 --- /dev/null +++ b/node_modules/lodash/_LodashWrapper.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/_Map.js b/node_modules/lodash/_Map.js new file mode 100644 index 000000000..b73f29a0f --- /dev/null +++ b/node_modules/lodash/_Map.js @@ -0,0 +1,7 @@ +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/node_modules/lodash/_MapCache.js b/node_modules/lodash/_MapCache.js new file mode 100644 index 000000000..4a4eea7bf --- /dev/null +++ b/node_modules/lodash/_MapCache.js @@ -0,0 +1,32 @@ +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/node_modules/lodash/_Promise.js b/node_modules/lodash/_Promise.js new file mode 100644 index 000000000..247b9e1ba --- /dev/null +++ b/node_modules/lodash/_Promise.js @@ -0,0 +1,7 @@ +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/node_modules/lodash/_Set.js b/node_modules/lodash/_Set.js new file mode 100644 index 000000000..b3c8dcbf0 --- /dev/null +++ b/node_modules/lodash/_Set.js @@ -0,0 +1,7 @@ +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/node_modules/lodash/_SetCache.js b/node_modules/lodash/_SetCache.js new file mode 100644 index 000000000..6468b0647 --- /dev/null +++ b/node_modules/lodash/_SetCache.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/_Stack.js b/node_modules/lodash/_Stack.js new file mode 100644 index 000000000..80b2cf1b0 --- /dev/null +++ b/node_modules/lodash/_Stack.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/_Symbol.js b/node_modules/lodash/_Symbol.js new file mode 100644 index 000000000..a013f7c5b --- /dev/null +++ b/node_modules/lodash/_Symbol.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; diff --git a/node_modules/lodash/_Uint8Array.js b/node_modules/lodash/_Uint8Array.js new file mode 100644 index 000000000..2fb30e157 --- /dev/null +++ b/node_modules/lodash/_Uint8Array.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +module.exports = Uint8Array; diff --git a/node_modules/lodash/_WeakMap.js b/node_modules/lodash/_WeakMap.js new file mode 100644 index 000000000..567f86c61 --- /dev/null +++ b/node_modules/lodash/_WeakMap.js @@ -0,0 +1,7 @@ +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/node_modules/lodash/_addMapEntry.js b/node_modules/lodash/_addMapEntry.js new file mode 100644 index 000000000..5a6921216 --- /dev/null +++ b/node_modules/lodash/_addMapEntry.js @@ -0,0 +1,15 @@ +/** + * 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/node_modules/lodash/_addSetEntry.js b/node_modules/lodash/_addSetEntry.js new file mode 100644 index 000000000..1a07b708a --- /dev/null +++ b/node_modules/lodash/_addSetEntry.js @@ -0,0 +1,15 @@ +/** + * 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/node_modules/lodash/_apply.js b/node_modules/lodash/_apply.js new file mode 100644 index 000000000..36436dda5 --- /dev/null +++ b/node_modules/lodash/_apply.js @@ -0,0 +1,21 @@ +/** + * 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/node_modules/lodash/_arrayAggregator.js b/node_modules/lodash/_arrayAggregator.js new file mode 100644 index 000000000..d96c3ca47 --- /dev/null +++ b/node_modules/lodash/_arrayAggregator.js @@ -0,0 +1,22 @@ +/** + * 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/node_modules/lodash/_arrayEach.js b/node_modules/lodash/_arrayEach.js new file mode 100644 index 000000000..2c5f57968 --- /dev/null +++ b/node_modules/lodash/_arrayEach.js @@ -0,0 +1,22 @@ +/** + * 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/node_modules/lodash/_arrayEachRight.js b/node_modules/lodash/_arrayEachRight.js new file mode 100644 index 000000000..976ca5c29 --- /dev/null +++ b/node_modules/lodash/_arrayEachRight.js @@ -0,0 +1,21 @@ +/** + * 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/node_modules/lodash/_arrayEvery.js b/node_modules/lodash/_arrayEvery.js new file mode 100644 index 000000000..e26a91845 --- /dev/null +++ b/node_modules/lodash/_arrayEvery.js @@ -0,0 +1,23 @@ +/** + * 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/node_modules/lodash/_arrayFilter.js b/node_modules/lodash/_arrayFilter.js new file mode 100644 index 000000000..75ea25445 --- /dev/null +++ b/node_modules/lodash/_arrayFilter.js @@ -0,0 +1,25 @@ +/** + * 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/node_modules/lodash/_arrayIncludes.js b/node_modules/lodash/_arrayIncludes.js new file mode 100644 index 000000000..3737a6d9e --- /dev/null +++ b/node_modules/lodash/_arrayIncludes.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_arrayIncludesWith.js b/node_modules/lodash/_arrayIncludesWith.js new file mode 100644 index 000000000..235fd9758 --- /dev/null +++ b/node_modules/lodash/_arrayIncludesWith.js @@ -0,0 +1,22 @@ +/** + * 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/node_modules/lodash/_arrayLikeKeys.js b/node_modules/lodash/_arrayLikeKeys.js new file mode 100644 index 000000000..b2ec9ce78 --- /dev/null +++ b/node_modules/lodash/_arrayLikeKeys.js @@ -0,0 +1,49 @@ +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/node_modules/lodash/_arrayMap.js b/node_modules/lodash/_arrayMap.js new file mode 100644 index 000000000..22b22464e --- /dev/null +++ b/node_modules/lodash/_arrayMap.js @@ -0,0 +1,21 @@ +/** + * 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/node_modules/lodash/_arrayPush.js b/node_modules/lodash/_arrayPush.js new file mode 100644 index 000000000..7d742b383 --- /dev/null +++ b/node_modules/lodash/_arrayPush.js @@ -0,0 +1,20 @@ +/** + * 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/node_modules/lodash/_arrayReduce.js b/node_modules/lodash/_arrayReduce.js new file mode 100644 index 000000000..de8b79b28 --- /dev/null +++ b/node_modules/lodash/_arrayReduce.js @@ -0,0 +1,26 @@ +/** + * 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/node_modules/lodash/_arrayReduceRight.js b/node_modules/lodash/_arrayReduceRight.js new file mode 100644 index 000000000..22d8976de --- /dev/null +++ b/node_modules/lodash/_arrayReduceRight.js @@ -0,0 +1,24 @@ +/** + * 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/node_modules/lodash/_arraySample.js b/node_modules/lodash/_arraySample.js new file mode 100644 index 000000000..fcab0105e --- /dev/null +++ b/node_modules/lodash/_arraySample.js @@ -0,0 +1,15 @@ +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/node_modules/lodash/_arraySampleSize.js b/node_modules/lodash/_arraySampleSize.js new file mode 100644 index 000000000..8c7e364f5 --- /dev/null +++ b/node_modules/lodash/_arraySampleSize.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_arrayShuffle.js b/node_modules/lodash/_arrayShuffle.js new file mode 100644 index 000000000..46313a39b --- /dev/null +++ b/node_modules/lodash/_arrayShuffle.js @@ -0,0 +1,15 @@ +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/node_modules/lodash/_arraySome.js b/node_modules/lodash/_arraySome.js new file mode 100644 index 000000000..6fd02fd4a --- /dev/null +++ b/node_modules/lodash/_arraySome.js @@ -0,0 +1,23 @@ +/** + * 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/node_modules/lodash/_asciiSize.js b/node_modules/lodash/_asciiSize.js new file mode 100644 index 000000000..11d29c33a --- /dev/null +++ b/node_modules/lodash/_asciiSize.js @@ -0,0 +1,12 @@ +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/node_modules/lodash/_asciiToArray.js b/node_modules/lodash/_asciiToArray.js new file mode 100644 index 000000000..8e3dd5b47 --- /dev/null +++ b/node_modules/lodash/_asciiToArray.js @@ -0,0 +1,12 @@ +/** + * 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/node_modules/lodash/_asciiWords.js b/node_modules/lodash/_asciiWords.js new file mode 100644 index 000000000..d765f0f76 --- /dev/null +++ b/node_modules/lodash/_asciiWords.js @@ -0,0 +1,15 @@ +/** 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/node_modules/lodash/_assignMergeValue.js b/node_modules/lodash/_assignMergeValue.js new file mode 100644 index 000000000..cb1185e99 --- /dev/null +++ b/node_modules/lodash/_assignMergeValue.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_assignValue.js b/node_modules/lodash/_assignValue.js new file mode 100644 index 000000000..40839575b --- /dev/null +++ b/node_modules/lodash/_assignValue.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/_assocIndexOf.js b/node_modules/lodash/_assocIndexOf.js new file mode 100644 index 000000000..5b77a2bdd --- /dev/null +++ b/node_modules/lodash/_assocIndexOf.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_baseAggregator.js b/node_modules/lodash/_baseAggregator.js new file mode 100644 index 000000000..4bc9e91f4 --- /dev/null +++ b/node_modules/lodash/_baseAggregator.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_baseAssign.js b/node_modules/lodash/_baseAssign.js new file mode 100644 index 000000000..e5c4a1a5b --- /dev/null +++ b/node_modules/lodash/_baseAssign.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_baseAssignIn.js b/node_modules/lodash/_baseAssignIn.js new file mode 100644 index 000000000..6624f9006 --- /dev/null +++ b/node_modules/lodash/_baseAssignIn.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_baseAssignValue.js b/node_modules/lodash/_baseAssignValue.js new file mode 100644 index 000000000..d6f66ef3a --- /dev/null +++ b/node_modules/lodash/_baseAssignValue.js @@ -0,0 +1,25 @@ +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/node_modules/lodash/_baseAt.js b/node_modules/lodash/_baseAt.js new file mode 100644 index 000000000..90e4237a0 --- /dev/null +++ b/node_modules/lodash/_baseAt.js @@ -0,0 +1,23 @@ +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/node_modules/lodash/_baseClamp.js b/node_modules/lodash/_baseClamp.js new file mode 100644 index 000000000..a1c569292 --- /dev/null +++ b/node_modules/lodash/_baseClamp.js @@ -0,0 +1,22 @@ +/** + * 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/node_modules/lodash/_baseClone.js b/node_modules/lodash/_baseClone.js new file mode 100644 index 000000000..7c27a37d3 --- /dev/null +++ b/node_modules/lodash/_baseClone.js @@ -0,0 +1,153 @@ +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/node_modules/lodash/_baseConforms.js b/node_modules/lodash/_baseConforms.js new file mode 100644 index 000000000..947e20d40 --- /dev/null +++ b/node_modules/lodash/_baseConforms.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_baseConformsTo.js b/node_modules/lodash/_baseConformsTo.js new file mode 100644 index 000000000..e449cb84b --- /dev/null +++ b/node_modules/lodash/_baseConformsTo.js @@ -0,0 +1,27 @@ +/** + * 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/node_modules/lodash/_baseCreate.js b/node_modules/lodash/_baseCreate.js new file mode 100644 index 000000000..ffa6a52ac --- /dev/null +++ b/node_modules/lodash/_baseCreate.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/_baseDelay.js b/node_modules/lodash/_baseDelay.js new file mode 100644 index 000000000..1486d697e --- /dev/null +++ b/node_modules/lodash/_baseDelay.js @@ -0,0 +1,21 @@ +/** 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/node_modules/lodash/_baseDifference.js b/node_modules/lodash/_baseDifference.js new file mode 100644 index 000000000..343ac19f0 --- /dev/null +++ b/node_modules/lodash/_baseDifference.js @@ -0,0 +1,67 @@ +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/node_modules/lodash/_baseEach.js b/node_modules/lodash/_baseEach.js new file mode 100644 index 000000000..512c06768 --- /dev/null +++ b/node_modules/lodash/_baseEach.js @@ -0,0 +1,14 @@ +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/node_modules/lodash/_baseEachRight.js b/node_modules/lodash/_baseEachRight.js new file mode 100644 index 000000000..0a8feeca4 --- /dev/null +++ b/node_modules/lodash/_baseEachRight.js @@ -0,0 +1,14 @@ +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/node_modules/lodash/_baseEvery.js b/node_modules/lodash/_baseEvery.js new file mode 100644 index 000000000..fa52f7bc7 --- /dev/null +++ b/node_modules/lodash/_baseEvery.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_baseExtremum.js b/node_modules/lodash/_baseExtremum.js new file mode 100644 index 000000000..9d6aa77ed --- /dev/null +++ b/node_modules/lodash/_baseExtremum.js @@ -0,0 +1,32 @@ +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/node_modules/lodash/_baseFill.js b/node_modules/lodash/_baseFill.js new file mode 100644 index 000000000..46ef9c761 --- /dev/null +++ b/node_modules/lodash/_baseFill.js @@ -0,0 +1,32 @@ +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/node_modules/lodash/_baseFilter.js b/node_modules/lodash/_baseFilter.js new file mode 100644 index 000000000..467847736 --- /dev/null +++ b/node_modules/lodash/_baseFilter.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_baseFindIndex.js b/node_modules/lodash/_baseFindIndex.js new file mode 100644 index 000000000..e3f5d8aa2 --- /dev/null +++ b/node_modules/lodash/_baseFindIndex.js @@ -0,0 +1,24 @@ +/** + * 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/node_modules/lodash/_baseFindKey.js b/node_modules/lodash/_baseFindKey.js new file mode 100644 index 000000000..2e430f3a2 --- /dev/null +++ b/node_modules/lodash/_baseFindKey.js @@ -0,0 +1,23 @@ +/** + * 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/node_modules/lodash/_baseFlatten.js b/node_modules/lodash/_baseFlatten.js new file mode 100644 index 000000000..4b1e009b1 --- /dev/null +++ b/node_modules/lodash/_baseFlatten.js @@ -0,0 +1,38 @@ +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/node_modules/lodash/_baseFor.js b/node_modules/lodash/_baseFor.js new file mode 100644 index 000000000..d946590f8 --- /dev/null +++ b/node_modules/lodash/_baseFor.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_baseForOwn.js b/node_modules/lodash/_baseForOwn.js new file mode 100644 index 000000000..503d52344 --- /dev/null +++ b/node_modules/lodash/_baseForOwn.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_baseForOwnRight.js b/node_modules/lodash/_baseForOwnRight.js new file mode 100644 index 000000000..a4b10e6c5 --- /dev/null +++ b/node_modules/lodash/_baseForOwnRight.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_baseForRight.js b/node_modules/lodash/_baseForRight.js new file mode 100644 index 000000000..32842cd81 --- /dev/null +++ b/node_modules/lodash/_baseForRight.js @@ -0,0 +1,15 @@ +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/node_modules/lodash/_baseFunctions.js b/node_modules/lodash/_baseFunctions.js new file mode 100644 index 000000000..d23bc9b47 --- /dev/null +++ b/node_modules/lodash/_baseFunctions.js @@ -0,0 +1,19 @@ +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/node_modules/lodash/_baseGet.js b/node_modules/lodash/_baseGet.js new file mode 100644 index 000000000..a194913d2 --- /dev/null +++ b/node_modules/lodash/_baseGet.js @@ -0,0 +1,24 @@ +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/node_modules/lodash/_baseGetAllKeys.js b/node_modules/lodash/_baseGetAllKeys.js new file mode 100644 index 000000000..8ad204ea4 --- /dev/null +++ b/node_modules/lodash/_baseGetAllKeys.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_baseGetTag.js b/node_modules/lodash/_baseGetTag.js new file mode 100644 index 000000000..b927ccc17 --- /dev/null +++ b/node_modules/lodash/_baseGetTag.js @@ -0,0 +1,28 @@ +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; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; diff --git a/node_modules/lodash/_baseGt.js b/node_modules/lodash/_baseGt.js new file mode 100644 index 000000000..502d273ca --- /dev/null +++ b/node_modules/lodash/_baseGt.js @@ -0,0 +1,14 @@ +/** + * 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/node_modules/lodash/_baseHas.js b/node_modules/lodash/_baseHas.js new file mode 100644 index 000000000..1b730321c --- /dev/null +++ b/node_modules/lodash/_baseHas.js @@ -0,0 +1,19 @@ +/** 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/node_modules/lodash/_baseHasIn.js b/node_modules/lodash/_baseHasIn.js new file mode 100644 index 000000000..2e0d04269 --- /dev/null +++ b/node_modules/lodash/_baseHasIn.js @@ -0,0 +1,13 @@ +/** + * 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/node_modules/lodash/_baseInRange.js b/node_modules/lodash/_baseInRange.js new file mode 100644 index 000000000..ec9566618 --- /dev/null +++ b/node_modules/lodash/_baseInRange.js @@ -0,0 +1,18 @@ +/* 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/node_modules/lodash/_baseIndexOf.js b/node_modules/lodash/_baseIndexOf.js new file mode 100644 index 000000000..167e706e7 --- /dev/null +++ b/node_modules/lodash/_baseIndexOf.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_baseIndexOfWith.js b/node_modules/lodash/_baseIndexOfWith.js new file mode 100644 index 000000000..f815fe0dd --- /dev/null +++ b/node_modules/lodash/_baseIndexOfWith.js @@ -0,0 +1,23 @@ +/** + * 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/node_modules/lodash/_baseIntersection.js b/node_modules/lodash/_baseIntersection.js new file mode 100644 index 000000000..c1d250c2a --- /dev/null +++ b/node_modules/lodash/_baseIntersection.js @@ -0,0 +1,74 @@ +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/node_modules/lodash/_baseInverter.js b/node_modules/lodash/_baseInverter.js new file mode 100644 index 000000000..fbc337f01 --- /dev/null +++ b/node_modules/lodash/_baseInverter.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_baseInvoke.js b/node_modules/lodash/_baseInvoke.js new file mode 100644 index 000000000..49bcf3c35 --- /dev/null +++ b/node_modules/lodash/_baseInvoke.js @@ -0,0 +1,24 @@ +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/node_modules/lodash/_baseIsArguments.js b/node_modules/lodash/_baseIsArguments.js new file mode 100644 index 000000000..b3562cca2 --- /dev/null +++ b/node_modules/lodash/_baseIsArguments.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_baseIsArrayBuffer.js b/node_modules/lodash/_baseIsArrayBuffer.js new file mode 100644 index 000000000..a2c4f30a8 --- /dev/null +++ b/node_modules/lodash/_baseIsArrayBuffer.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_baseIsDate.js b/node_modules/lodash/_baseIsDate.js new file mode 100644 index 000000000..ba67c7857 --- /dev/null +++ b/node_modules/lodash/_baseIsDate.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_baseIsEqual.js b/node_modules/lodash/_baseIsEqual.js new file mode 100644 index 000000000..00a68a4f5 --- /dev/null +++ b/node_modules/lodash/_baseIsEqual.js @@ -0,0 +1,28 @@ +var baseIsEqualDeep = require('./_baseIsEqualDeep'), + 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 || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +module.exports = baseIsEqual; diff --git a/node_modules/lodash/_baseIsEqualDeep.js b/node_modules/lodash/_baseIsEqualDeep.js new file mode 100644 index 000000000..e3cfd6a8d --- /dev/null +++ b/node_modules/lodash/_baseIsEqualDeep.js @@ -0,0 +1,83 @@ +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 = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + 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/node_modules/lodash/_baseIsMap.js b/node_modules/lodash/_baseIsMap.js new file mode 100644 index 000000000..02a4021ca --- /dev/null +++ b/node_modules/lodash/_baseIsMap.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_baseIsMatch.js b/node_modules/lodash/_baseIsMatch.js new file mode 100644 index 000000000..72494bed4 --- /dev/null +++ b/node_modules/lodash/_baseIsMatch.js @@ -0,0 +1,62 @@ +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/node_modules/lodash/_baseIsNaN.js b/node_modules/lodash/_baseIsNaN.js new file mode 100644 index 000000000..316f1eb1e --- /dev/null +++ b/node_modules/lodash/_baseIsNaN.js @@ -0,0 +1,12 @@ +/** + * 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/node_modules/lodash/_baseIsNative.js b/node_modules/lodash/_baseIsNative.js new file mode 100644 index 000000000..870233049 --- /dev/null +++ b/node_modules/lodash/_baseIsNative.js @@ -0,0 +1,47 @@ +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/node_modules/lodash/_baseIsRegExp.js b/node_modules/lodash/_baseIsRegExp.js new file mode 100644 index 000000000..6cd7c1aee --- /dev/null +++ b/node_modules/lodash/_baseIsRegExp.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_baseIsSet.js b/node_modules/lodash/_baseIsSet.js new file mode 100644 index 000000000..6dee36716 --- /dev/null +++ b/node_modules/lodash/_baseIsSet.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_baseIsTypedArray.js b/node_modules/lodash/_baseIsTypedArray.js new file mode 100644 index 000000000..1edb32ff3 --- /dev/null +++ b/node_modules/lodash/_baseIsTypedArray.js @@ -0,0 +1,60 @@ +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/node_modules/lodash/_baseIteratee.js b/node_modules/lodash/_baseIteratee.js new file mode 100644 index 000000000..995c25756 --- /dev/null +++ b/node_modules/lodash/_baseIteratee.js @@ -0,0 +1,31 @@ +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/node_modules/lodash/_baseKeys.js b/node_modules/lodash/_baseKeys.js new file mode 100644 index 000000000..45e9e6f39 --- /dev/null +++ b/node_modules/lodash/_baseKeys.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/_baseKeysIn.js b/node_modules/lodash/_baseKeysIn.js new file mode 100644 index 000000000..ea8a0a174 --- /dev/null +++ b/node_modules/lodash/_baseKeysIn.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/_baseLodash.js b/node_modules/lodash/_baseLodash.js new file mode 100644 index 000000000..f76c790e2 --- /dev/null +++ b/node_modules/lodash/_baseLodash.js @@ -0,0 +1,10 @@ +/** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ +function baseLodash() { + // No operation performed. +} + +module.exports = baseLodash; diff --git a/node_modules/lodash/_baseLt.js b/node_modules/lodash/_baseLt.js new file mode 100644 index 000000000..8674d2946 --- /dev/null +++ b/node_modules/lodash/_baseLt.js @@ -0,0 +1,14 @@ +/** + * 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/node_modules/lodash/_baseMap.js b/node_modules/lodash/_baseMap.js new file mode 100644 index 000000000..0bf5cead5 --- /dev/null +++ b/node_modules/lodash/_baseMap.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/_baseMatches.js b/node_modules/lodash/_baseMatches.js new file mode 100644 index 000000000..e56582ad8 --- /dev/null +++ b/node_modules/lodash/_baseMatches.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/_baseMatchesProperty.js b/node_modules/lodash/_baseMatchesProperty.js new file mode 100644 index 000000000..24afd893d --- /dev/null +++ b/node_modules/lodash/_baseMatchesProperty.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/_baseMean.js b/node_modules/lodash/_baseMean.js new file mode 100644 index 000000000..fa9e00a0a --- /dev/null +++ b/node_modules/lodash/_baseMean.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_baseMerge.js b/node_modules/lodash/_baseMerge.js new file mode 100644 index 000000000..f4cb8c698 --- /dev/null +++ b/node_modules/lodash/_baseMerge.js @@ -0,0 +1,41 @@ +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/node_modules/lodash/_baseMergeDeep.js b/node_modules/lodash/_baseMergeDeep.js new file mode 100644 index 000000000..42b405a3d --- /dev/null +++ b/node_modules/lodash/_baseMergeDeep.js @@ -0,0 +1,93 @@ +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/node_modules/lodash/_baseNth.js b/node_modules/lodash/_baseNth.js new file mode 100644 index 000000000..0403c2a36 --- /dev/null +++ b/node_modules/lodash/_baseNth.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_baseOrderBy.js b/node_modules/lodash/_baseOrderBy.js new file mode 100644 index 000000000..d8a46ab20 --- /dev/null +++ b/node_modules/lodash/_baseOrderBy.js @@ -0,0 +1,34 @@ +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/node_modules/lodash/_basePick.js b/node_modules/lodash/_basePick.js new file mode 100644 index 000000000..09b458a60 --- /dev/null +++ b/node_modules/lodash/_basePick.js @@ -0,0 +1,19 @@ +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) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); +} + +module.exports = basePick; diff --git a/node_modules/lodash/_basePickBy.js b/node_modules/lodash/_basePickBy.js new file mode 100644 index 000000000..85be68c84 --- /dev/null +++ b/node_modules/lodash/_basePickBy.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/_baseProperty.js b/node_modules/lodash/_baseProperty.js new file mode 100644 index 000000000..496281ec4 --- /dev/null +++ b/node_modules/lodash/_baseProperty.js @@ -0,0 +1,14 @@ +/** + * 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/node_modules/lodash/_basePropertyDeep.js b/node_modules/lodash/_basePropertyDeep.js new file mode 100644 index 000000000..1e5aae50c --- /dev/null +++ b/node_modules/lodash/_basePropertyDeep.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_basePropertyOf.js b/node_modules/lodash/_basePropertyOf.js new file mode 100644 index 000000000..461739990 --- /dev/null +++ b/node_modules/lodash/_basePropertyOf.js @@ -0,0 +1,14 @@ +/** + * 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/node_modules/lodash/_basePullAll.js b/node_modules/lodash/_basePullAll.js new file mode 100644 index 000000000..305720ede --- /dev/null +++ b/node_modules/lodash/_basePullAll.js @@ -0,0 +1,51 @@ +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/node_modules/lodash/_basePullAt.js b/node_modules/lodash/_basePullAt.js new file mode 100644 index 000000000..c3e9e7102 --- /dev/null +++ b/node_modules/lodash/_basePullAt.js @@ -0,0 +1,37 @@ +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/node_modules/lodash/_baseRandom.js b/node_modules/lodash/_baseRandom.js new file mode 100644 index 000000000..94f76a766 --- /dev/null +++ b/node_modules/lodash/_baseRandom.js @@ -0,0 +1,18 @@ +/* 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/node_modules/lodash/_baseRange.js b/node_modules/lodash/_baseRange.js new file mode 100644 index 000000000..0fb8e419f --- /dev/null +++ b/node_modules/lodash/_baseRange.js @@ -0,0 +1,28 @@ +/* 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/node_modules/lodash/_baseReduce.js b/node_modules/lodash/_baseReduce.js new file mode 100644 index 000000000..5a1f8b57f --- /dev/null +++ b/node_modules/lodash/_baseReduce.js @@ -0,0 +1,23 @@ +/** + * 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/node_modules/lodash/_baseRepeat.js b/node_modules/lodash/_baseRepeat.js new file mode 100644 index 000000000..ee44c31ab --- /dev/null +++ b/node_modules/lodash/_baseRepeat.js @@ -0,0 +1,35 @@ +/** 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/node_modules/lodash/_baseRest.js b/node_modules/lodash/_baseRest.js new file mode 100644 index 000000000..d0dc4bdd1 --- /dev/null +++ b/node_modules/lodash/_baseRest.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_baseSample.js b/node_modules/lodash/_baseSample.js new file mode 100644 index 000000000..58582b911 --- /dev/null +++ b/node_modules/lodash/_baseSample.js @@ -0,0 +1,15 @@ +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/node_modules/lodash/_baseSampleSize.js b/node_modules/lodash/_baseSampleSize.js new file mode 100644 index 000000000..5c90ec518 --- /dev/null +++ b/node_modules/lodash/_baseSampleSize.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_baseSet.js b/node_modules/lodash/_baseSet.js new file mode 100644 index 000000000..612a24cc8 --- /dev/null +++ b/node_modules/lodash/_baseSet.js @@ -0,0 +1,47 @@ +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/node_modules/lodash/_baseSetData.js b/node_modules/lodash/_baseSetData.js new file mode 100644 index 000000000..c409947dd --- /dev/null +++ b/node_modules/lodash/_baseSetData.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_baseSetToString.js b/node_modules/lodash/_baseSetToString.js new file mode 100644 index 000000000..89eaca38d --- /dev/null +++ b/node_modules/lodash/_baseSetToString.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/_baseShuffle.js b/node_modules/lodash/_baseShuffle.js new file mode 100644 index 000000000..023077ac4 --- /dev/null +++ b/node_modules/lodash/_baseShuffle.js @@ -0,0 +1,15 @@ +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/node_modules/lodash/_baseSlice.js b/node_modules/lodash/_baseSlice.js new file mode 100644 index 000000000..786f6c99e --- /dev/null +++ b/node_modules/lodash/_baseSlice.js @@ -0,0 +1,31 @@ +/** + * 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/node_modules/lodash/_baseSome.js b/node_modules/lodash/_baseSome.js new file mode 100644 index 000000000..58f3f447a --- /dev/null +++ b/node_modules/lodash/_baseSome.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/_baseSortBy.js b/node_modules/lodash/_baseSortBy.js new file mode 100644 index 000000000..a25c92eda --- /dev/null +++ b/node_modules/lodash/_baseSortBy.js @@ -0,0 +1,21 @@ +/** + * 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/node_modules/lodash/_baseSortedIndex.js b/node_modules/lodash/_baseSortedIndex.js new file mode 100644 index 000000000..638c366c7 --- /dev/null +++ b/node_modules/lodash/_baseSortedIndex.js @@ -0,0 +1,42 @@ +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/node_modules/lodash/_baseSortedIndexBy.js b/node_modules/lodash/_baseSortedIndexBy.js new file mode 100644 index 000000000..bb22e36dc --- /dev/null +++ b/node_modules/lodash/_baseSortedIndexBy.js @@ -0,0 +1,64 @@ +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/node_modules/lodash/_baseSortedUniq.js b/node_modules/lodash/_baseSortedUniq.js new file mode 100644 index 000000000..802159a3d --- /dev/null +++ b/node_modules/lodash/_baseSortedUniq.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/_baseSum.js b/node_modules/lodash/_baseSum.js new file mode 100644 index 000000000..a9e84c13c --- /dev/null +++ b/node_modules/lodash/_baseSum.js @@ -0,0 +1,24 @@ +/** + * 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/node_modules/lodash/_baseTimes.js b/node_modules/lodash/_baseTimes.js new file mode 100644 index 000000000..0603fc37e --- /dev/null +++ b/node_modules/lodash/_baseTimes.js @@ -0,0 +1,20 @@ +/** + * 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/node_modules/lodash/_baseToNumber.js b/node_modules/lodash/_baseToNumber.js new file mode 100644 index 000000000..04859f391 --- /dev/null +++ b/node_modules/lodash/_baseToNumber.js @@ -0,0 +1,24 @@ +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/node_modules/lodash/_baseToPairs.js b/node_modules/lodash/_baseToPairs.js new file mode 100644 index 000000000..bff199128 --- /dev/null +++ b/node_modules/lodash/_baseToPairs.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_baseToString.js b/node_modules/lodash/_baseToString.js new file mode 100644 index 000000000..ada6ad298 --- /dev/null +++ b/node_modules/lodash/_baseToString.js @@ -0,0 +1,37 @@ +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/node_modules/lodash/_baseUnary.js b/node_modules/lodash/_baseUnary.js new file mode 100644 index 000000000..98639e92f --- /dev/null +++ b/node_modules/lodash/_baseUnary.js @@ -0,0 +1,14 @@ +/** + * 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/node_modules/lodash/_baseUniq.js b/node_modules/lodash/_baseUniq.js new file mode 100644 index 000000000..aea459dc7 --- /dev/null +++ b/node_modules/lodash/_baseUniq.js @@ -0,0 +1,72 @@ +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/node_modules/lodash/_baseUnset.js b/node_modules/lodash/_baseUnset.js new file mode 100644 index 000000000..eefc6e37d --- /dev/null +++ b/node_modules/lodash/_baseUnset.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_baseUpdate.js b/node_modules/lodash/_baseUpdate.js new file mode 100644 index 000000000..92a623777 --- /dev/null +++ b/node_modules/lodash/_baseUpdate.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_baseValues.js b/node_modules/lodash/_baseValues.js new file mode 100644 index 000000000..b95faadcf --- /dev/null +++ b/node_modules/lodash/_baseValues.js @@ -0,0 +1,19 @@ +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/node_modules/lodash/_baseWhile.js b/node_modules/lodash/_baseWhile.js new file mode 100644 index 000000000..07eac61b9 --- /dev/null +++ b/node_modules/lodash/_baseWhile.js @@ -0,0 +1,26 @@ +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/node_modules/lodash/_baseWrapperValue.js b/node_modules/lodash/_baseWrapperValue.js new file mode 100644 index 000000000..443e0df5e --- /dev/null +++ b/node_modules/lodash/_baseWrapperValue.js @@ -0,0 +1,25 @@ +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/node_modules/lodash/_baseXor.js b/node_modules/lodash/_baseXor.js new file mode 100644 index 000000000..8e69338bf --- /dev/null +++ b/node_modules/lodash/_baseXor.js @@ -0,0 +1,36 @@ +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/node_modules/lodash/_baseZipObject.js b/node_modules/lodash/_baseZipObject.js new file mode 100644 index 000000000..401f85be2 --- /dev/null +++ b/node_modules/lodash/_baseZipObject.js @@ -0,0 +1,23 @@ +/** + * 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/node_modules/lodash/_cacheHas.js b/node_modules/lodash/_cacheHas.js new file mode 100644 index 000000000..2dec89268 --- /dev/null +++ b/node_modules/lodash/_cacheHas.js @@ -0,0 +1,13 @@ +/** + * 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/node_modules/lodash/_castArrayLikeObject.js b/node_modules/lodash/_castArrayLikeObject.js new file mode 100644 index 000000000..92c75fa1a --- /dev/null +++ b/node_modules/lodash/_castArrayLikeObject.js @@ -0,0 +1,14 @@ +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/node_modules/lodash/_castFunction.js b/node_modules/lodash/_castFunction.js new file mode 100644 index 000000000..98c91ae63 --- /dev/null +++ b/node_modules/lodash/_castFunction.js @@ -0,0 +1,14 @@ +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/node_modules/lodash/_castPath.js b/node_modules/lodash/_castPath.js new file mode 100644 index 000000000..017e4c1b4 --- /dev/null +++ b/node_modules/lodash/_castPath.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_castRest.js b/node_modules/lodash/_castRest.js new file mode 100644 index 000000000..213c66f19 --- /dev/null +++ b/node_modules/lodash/_castRest.js @@ -0,0 +1,14 @@ +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/node_modules/lodash/_castSlice.js b/node_modules/lodash/_castSlice.js new file mode 100644 index 000000000..071faeba5 --- /dev/null +++ b/node_modules/lodash/_castSlice.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_charsEndIndex.js b/node_modules/lodash/_charsEndIndex.js new file mode 100644 index 000000000..07908ff3a --- /dev/null +++ b/node_modules/lodash/_charsEndIndex.js @@ -0,0 +1,19 @@ +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/node_modules/lodash/_charsStartIndex.js b/node_modules/lodash/_charsStartIndex.js new file mode 100644 index 000000000..b17afd254 --- /dev/null +++ b/node_modules/lodash/_charsStartIndex.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_cloneArrayBuffer.js b/node_modules/lodash/_cloneArrayBuffer.js new file mode 100644 index 000000000..c3d8f6e39 --- /dev/null +++ b/node_modules/lodash/_cloneArrayBuffer.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_cloneBuffer.js b/node_modules/lodash/_cloneBuffer.js new file mode 100644 index 000000000..27c48109b --- /dev/null +++ b/node_modules/lodash/_cloneBuffer.js @@ -0,0 +1,35 @@ +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/node_modules/lodash/_cloneDataView.js b/node_modules/lodash/_cloneDataView.js new file mode 100644 index 000000000..9c9b7b054 --- /dev/null +++ b/node_modules/lodash/_cloneDataView.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_cloneMap.js b/node_modules/lodash/_cloneMap.js new file mode 100644 index 000000000..334b73e98 --- /dev/null +++ b/node_modules/lodash/_cloneMap.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/_cloneRegExp.js b/node_modules/lodash/_cloneRegExp.js new file mode 100644 index 000000000..64a30dfb4 --- /dev/null +++ b/node_modules/lodash/_cloneRegExp.js @@ -0,0 +1,17 @@ +/** 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/node_modules/lodash/_cloneSet.js b/node_modules/lodash/_cloneSet.js new file mode 100644 index 000000000..713a2f76b --- /dev/null +++ b/node_modules/lodash/_cloneSet.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/_cloneSymbol.js b/node_modules/lodash/_cloneSymbol.js new file mode 100644 index 000000000..bede39f50 --- /dev/null +++ b/node_modules/lodash/_cloneSymbol.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_cloneTypedArray.js b/node_modules/lodash/_cloneTypedArray.js new file mode 100644 index 000000000..7aad84d4f --- /dev/null +++ b/node_modules/lodash/_cloneTypedArray.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_compareAscending.js b/node_modules/lodash/_compareAscending.js new file mode 100644 index 000000000..8dc279108 --- /dev/null +++ b/node_modules/lodash/_compareAscending.js @@ -0,0 +1,41 @@ +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/node_modules/lodash/_compareMultiple.js b/node_modules/lodash/_compareMultiple.js new file mode 100644 index 000000000..ad61f0fbc --- /dev/null +++ b/node_modules/lodash/_compareMultiple.js @@ -0,0 +1,44 @@ +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/node_modules/lodash/_composeArgs.js b/node_modules/lodash/_composeArgs.js new file mode 100644 index 000000000..1ce40f4f9 --- /dev/null +++ b/node_modules/lodash/_composeArgs.js @@ -0,0 +1,39 @@ +/* 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/node_modules/lodash/_composeArgsRight.js b/node_modules/lodash/_composeArgsRight.js new file mode 100644 index 000000000..8dc588d0a --- /dev/null +++ b/node_modules/lodash/_composeArgsRight.js @@ -0,0 +1,41 @@ +/* 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/node_modules/lodash/_copyArray.js b/node_modules/lodash/_copyArray.js new file mode 100644 index 000000000..cd94d5d09 --- /dev/null +++ b/node_modules/lodash/_copyArray.js @@ -0,0 +1,20 @@ +/** + * 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/node_modules/lodash/_copyObject.js b/node_modules/lodash/_copyObject.js new file mode 100644 index 000000000..2f2a5c23b --- /dev/null +++ b/node_modules/lodash/_copyObject.js @@ -0,0 +1,40 @@ +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/node_modules/lodash/_copySymbols.js b/node_modules/lodash/_copySymbols.js new file mode 100644 index 000000000..c35944ab5 --- /dev/null +++ b/node_modules/lodash/_copySymbols.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_copySymbolsIn.js b/node_modules/lodash/_copySymbolsIn.js new file mode 100644 index 000000000..fdf20a73c --- /dev/null +++ b/node_modules/lodash/_copySymbolsIn.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_coreJsData.js b/node_modules/lodash/_coreJsData.js new file mode 100644 index 000000000..f8e5b4e34 --- /dev/null +++ b/node_modules/lodash/_coreJsData.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; diff --git a/node_modules/lodash/_countHolders.js b/node_modules/lodash/_countHolders.js new file mode 100644 index 000000000..718fcdaa8 --- /dev/null +++ b/node_modules/lodash/_countHolders.js @@ -0,0 +1,21 @@ +/** + * 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/node_modules/lodash/_createAggregator.js b/node_modules/lodash/_createAggregator.js new file mode 100644 index 000000000..0be42c41c --- /dev/null +++ b/node_modules/lodash/_createAggregator.js @@ -0,0 +1,23 @@ +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/node_modules/lodash/_createAssigner.js b/node_modules/lodash/_createAssigner.js new file mode 100644 index 000000000..1f904c51b --- /dev/null +++ b/node_modules/lodash/_createAssigner.js @@ -0,0 +1,37 @@ +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/node_modules/lodash/_createBaseEach.js b/node_modules/lodash/_createBaseEach.js new file mode 100644 index 000000000..d24fdd1bb --- /dev/null +++ b/node_modules/lodash/_createBaseEach.js @@ -0,0 +1,32 @@ +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/node_modules/lodash/_createBaseFor.js b/node_modules/lodash/_createBaseFor.js new file mode 100644 index 000000000..94cbf297a --- /dev/null +++ b/node_modules/lodash/_createBaseFor.js @@ -0,0 +1,25 @@ +/** + * 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/node_modules/lodash/_createBind.js b/node_modules/lodash/_createBind.js new file mode 100644 index 000000000..07cb99f4d --- /dev/null +++ b/node_modules/lodash/_createBind.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/_createCaseFirst.js b/node_modules/lodash/_createCaseFirst.js new file mode 100644 index 000000000..fe8ea4830 --- /dev/null +++ b/node_modules/lodash/_createCaseFirst.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/_createCompounder.js b/node_modules/lodash/_createCompounder.js new file mode 100644 index 000000000..8d4cee2cd --- /dev/null +++ b/node_modules/lodash/_createCompounder.js @@ -0,0 +1,24 @@ +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/node_modules/lodash/_createCtor.js b/node_modules/lodash/_createCtor.js new file mode 100644 index 000000000..9047aa5fa --- /dev/null +++ b/node_modules/lodash/_createCtor.js @@ -0,0 +1,37 @@ +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/node_modules/lodash/_createCurry.js b/node_modules/lodash/_createCurry.js new file mode 100644 index 000000000..f06c2cdd8 --- /dev/null +++ b/node_modules/lodash/_createCurry.js @@ -0,0 +1,46 @@ +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/node_modules/lodash/_createFind.js b/node_modules/lodash/_createFind.js new file mode 100644 index 000000000..8859ff89f --- /dev/null +++ b/node_modules/lodash/_createFind.js @@ -0,0 +1,25 @@ +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/node_modules/lodash/_createFlow.js b/node_modules/lodash/_createFlow.js new file mode 100644 index 000000000..baaddbf5e --- /dev/null +++ b/node_modules/lodash/_createFlow.js @@ -0,0 +1,78 @@ +var LodashWrapper = require('./_LodashWrapper'), + flatRest = require('./_flatRest'), + getData = require('./_getData'), + getFuncName = require('./_getFuncName'), + isArray = require('./isArray'), + isLaziable = require('./_isLaziable'); + +/** 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)) { + 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/node_modules/lodash/_createHybrid.js b/node_modules/lodash/_createHybrid.js new file mode 100644 index 000000000..b671bd11f --- /dev/null +++ b/node_modules/lodash/_createHybrid.js @@ -0,0 +1,92 @@ +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/node_modules/lodash/_createInverter.js b/node_modules/lodash/_createInverter.js new file mode 100644 index 000000000..6c0c56299 --- /dev/null +++ b/node_modules/lodash/_createInverter.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_createMathOperation.js b/node_modules/lodash/_createMathOperation.js new file mode 100644 index 000000000..f1e238ac0 --- /dev/null +++ b/node_modules/lodash/_createMathOperation.js @@ -0,0 +1,38 @@ +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/node_modules/lodash/_createOver.js b/node_modules/lodash/_createOver.js new file mode 100644 index 000000000..3b9455161 --- /dev/null +++ b/node_modules/lodash/_createOver.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/_createPadding.js b/node_modules/lodash/_createPadding.js new file mode 100644 index 000000000..2124612b8 --- /dev/null +++ b/node_modules/lodash/_createPadding.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/_createPartial.js b/node_modules/lodash/_createPartial.js new file mode 100644 index 000000000..e16c248b5 --- /dev/null +++ b/node_modules/lodash/_createPartial.js @@ -0,0 +1,43 @@ +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/node_modules/lodash/_createRange.js b/node_modules/lodash/_createRange.js new file mode 100644 index 000000000..9f52c7793 --- /dev/null +++ b/node_modules/lodash/_createRange.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/_createRecurry.js b/node_modules/lodash/_createRecurry.js new file mode 100644 index 000000000..eb29fb24c --- /dev/null +++ b/node_modules/lodash/_createRecurry.js @@ -0,0 +1,56 @@ +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/node_modules/lodash/_createRelationalOperation.js b/node_modules/lodash/_createRelationalOperation.js new file mode 100644 index 000000000..a17c6b5e7 --- /dev/null +++ b/node_modules/lodash/_createRelationalOperation.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_createRound.js b/node_modules/lodash/_createRound.js new file mode 100644 index 000000000..bf9b713fc --- /dev/null +++ b/node_modules/lodash/_createRound.js @@ -0,0 +1,33 @@ +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 = precision == null ? 0 : 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/node_modules/lodash/_createSet.js b/node_modules/lodash/_createSet.js new file mode 100644 index 000000000..0f644eeae --- /dev/null +++ b/node_modules/lodash/_createSet.js @@ -0,0 +1,19 @@ +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/node_modules/lodash/_createToPairs.js b/node_modules/lodash/_createToPairs.js new file mode 100644 index 000000000..568417afd --- /dev/null +++ b/node_modules/lodash/_createToPairs.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/_createWrap.js b/node_modules/lodash/_createWrap.js new file mode 100644 index 000000000..33f0633e4 --- /dev/null +++ b/node_modules/lodash/_createWrap.js @@ -0,0 +1,106 @@ +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] === undefined + ? (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/node_modules/lodash/_customDefaultsAssignIn.js b/node_modules/lodash/_customDefaultsAssignIn.js new file mode 100644 index 000000000..1f49e6fc4 --- /dev/null +++ b/node_modules/lodash/_customDefaultsAssignIn.js @@ -0,0 +1,29 @@ +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 to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @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 customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; +} + +module.exports = customDefaultsAssignIn; diff --git a/node_modules/lodash/_customDefaultsMerge.js b/node_modules/lodash/_customDefaultsMerge.js new file mode 100644 index 000000000..4cab31751 --- /dev/null +++ b/node_modules/lodash/_customDefaultsMerge.js @@ -0,0 +1,28 @@ +var baseMerge = require('./_baseMerge'), + isObject = require('./isObject'); + +/** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @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 customDefaultsMerge(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, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; +} + +module.exports = customDefaultsMerge; diff --git a/node_modules/lodash/_customOmitClone.js b/node_modules/lodash/_customOmitClone.js new file mode 100644 index 000000000..968db2ef3 --- /dev/null +++ b/node_modules/lodash/_customOmitClone.js @@ -0,0 +1,16 @@ +var isPlainObject = require('./isPlainObject'); + +/** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ +function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; +} + +module.exports = customOmitClone; diff --git a/node_modules/lodash/_deburrLetter.js b/node_modules/lodash/_deburrLetter.js new file mode 100644 index 000000000..3e531edcf --- /dev/null +++ b/node_modules/lodash/_deburrLetter.js @@ -0,0 +1,71 @@ +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/node_modules/lodash/_defineProperty.js b/node_modules/lodash/_defineProperty.js new file mode 100644 index 000000000..b6116d92a --- /dev/null +++ b/node_modules/lodash/_defineProperty.js @@ -0,0 +1,11 @@ +var getNative = require('./_getNative'); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; diff --git a/node_modules/lodash/_equalArrays.js b/node_modules/lodash/_equalArrays.js new file mode 100644 index 000000000..f6a3b7c9f --- /dev/null +++ b/node_modules/lodash/_equalArrays.js @@ -0,0 +1,83 @@ +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/node_modules/lodash/_equalByTag.js b/node_modules/lodash/_equalByTag.js new file mode 100644 index 000000000..71919e867 --- /dev/null +++ b/node_modules/lodash/_equalByTag.js @@ -0,0 +1,112 @@ +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/node_modules/lodash/_equalObjects.js b/node_modules/lodash/_equalObjects.js new file mode 100644 index 000000000..17421f374 --- /dev/null +++ b/node_modules/lodash/_equalObjects.js @@ -0,0 +1,89 @@ +var getAllKeys = require('./_getAllKeys'); + +/** 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 = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(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/node_modules/lodash/_escapeHtmlChar.js b/node_modules/lodash/_escapeHtmlChar.js new file mode 100644 index 000000000..7ca68ee62 --- /dev/null +++ b/node_modules/lodash/_escapeHtmlChar.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_escapeStringChar.js b/node_modules/lodash/_escapeStringChar.js new file mode 100644 index 000000000..44eca96ca --- /dev/null +++ b/node_modules/lodash/_escapeStringChar.js @@ -0,0 +1,22 @@ +/** 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/node_modules/lodash/_flatRest.js b/node_modules/lodash/_flatRest.js new file mode 100644 index 000000000..94ab6cca7 --- /dev/null +++ b/node_modules/lodash/_flatRest.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_freeGlobal.js b/node_modules/lodash/_freeGlobal.js new file mode 100644 index 000000000..bbec998fc --- /dev/null +++ b/node_modules/lodash/_freeGlobal.js @@ -0,0 +1,4 @@ +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; diff --git a/node_modules/lodash/_getAllKeys.js b/node_modules/lodash/_getAllKeys.js new file mode 100644 index 000000000..a9ce6995a --- /dev/null +++ b/node_modules/lodash/_getAllKeys.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_getAllKeysIn.js b/node_modules/lodash/_getAllKeysIn.js new file mode 100644 index 000000000..1b4667841 --- /dev/null +++ b/node_modules/lodash/_getAllKeysIn.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_getData.js b/node_modules/lodash/_getData.js new file mode 100644 index 000000000..a1fe7b779 --- /dev/null +++ b/node_modules/lodash/_getData.js @@ -0,0 +1,15 @@ +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/node_modules/lodash/_getFuncName.js b/node_modules/lodash/_getFuncName.js new file mode 100644 index 000000000..21e15b337 --- /dev/null +++ b/node_modules/lodash/_getFuncName.js @@ -0,0 +1,31 @@ +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/node_modules/lodash/_getHolder.js b/node_modules/lodash/_getHolder.js new file mode 100644 index 000000000..65e94b5c2 --- /dev/null +++ b/node_modules/lodash/_getHolder.js @@ -0,0 +1,13 @@ +/** + * 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/node_modules/lodash/_getMapData.js b/node_modules/lodash/_getMapData.js new file mode 100644 index 000000000..17f63032e --- /dev/null +++ b/node_modules/lodash/_getMapData.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_getMatchData.js b/node_modules/lodash/_getMatchData.js new file mode 100644 index 000000000..2cc70f917 --- /dev/null +++ b/node_modules/lodash/_getMatchData.js @@ -0,0 +1,24 @@ +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/node_modules/lodash/_getNative.js b/node_modules/lodash/_getNative.js new file mode 100644 index 000000000..97a622b83 --- /dev/null +++ b/node_modules/lodash/_getNative.js @@ -0,0 +1,17 @@ +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/node_modules/lodash/_getPrototype.js b/node_modules/lodash/_getPrototype.js new file mode 100644 index 000000000..e80861212 --- /dev/null +++ b/node_modules/lodash/_getPrototype.js @@ -0,0 +1,6 @@ +var overArg = require('./_overArg'); + +/** Built-in value references. */ +var getPrototype = overArg(Object.getPrototypeOf, Object); + +module.exports = getPrototype; diff --git a/node_modules/lodash/_getRawTag.js b/node_modules/lodash/_getRawTag.js new file mode 100644 index 000000000..49a95c9c6 --- /dev/null +++ b/node_modules/lodash/_getRawTag.js @@ -0,0 +1,46 @@ +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/node_modules/lodash/_getSymbols.js b/node_modules/lodash/_getSymbols.js new file mode 100644 index 000000000..7d6eafebb --- /dev/null +++ b/node_modules/lodash/_getSymbols.js @@ -0,0 +1,30 @@ +var arrayFilter = require('./_arrayFilter'), + stubArray = require('./stubArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* 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 ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +module.exports = getSymbols; diff --git a/node_modules/lodash/_getSymbolsIn.js b/node_modules/lodash/_getSymbolsIn.js new file mode 100644 index 000000000..cec0855a4 --- /dev/null +++ b/node_modules/lodash/_getSymbolsIn.js @@ -0,0 +1,25 @@ +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/node_modules/lodash/_getTag.js b/node_modules/lodash/_getTag.js new file mode 100644 index 000000000..deaf89d58 --- /dev/null +++ b/node_modules/lodash/_getTag.js @@ -0,0 +1,58 @@ +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/node_modules/lodash/_getValue.js b/node_modules/lodash/_getValue.js new file mode 100644 index 000000000..5f7d77367 --- /dev/null +++ b/node_modules/lodash/_getValue.js @@ -0,0 +1,13 @@ +/** + * 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/node_modules/lodash/_getView.js b/node_modules/lodash/_getView.js new file mode 100644 index 000000000..df1e5d44b --- /dev/null +++ b/node_modules/lodash/_getView.js @@ -0,0 +1,33 @@ +/* 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/node_modules/lodash/_getWrapDetails.js b/node_modules/lodash/_getWrapDetails.js new file mode 100644 index 000000000..3bcc6e48a --- /dev/null +++ b/node_modules/lodash/_getWrapDetails.js @@ -0,0 +1,17 @@ +/** 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/node_modules/lodash/_hasPath.js b/node_modules/lodash/_hasPath.js new file mode 100644 index 000000000..93dbde152 --- /dev/null +++ b/node_modules/lodash/_hasPath.js @@ -0,0 +1,39 @@ +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/node_modules/lodash/_hasUnicode.js b/node_modules/lodash/_hasUnicode.js new file mode 100644 index 000000000..cb6ca15f6 --- /dev/null +++ b/node_modules/lodash/_hasUnicode.js @@ -0,0 +1,26 @@ +/** 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/node_modules/lodash/_hasUnicodeWord.js b/node_modules/lodash/_hasUnicodeWord.js new file mode 100644 index 000000000..a35d6e504 --- /dev/null +++ b/node_modules/lodash/_hasUnicodeWord.js @@ -0,0 +1,15 @@ +/** 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/node_modules/lodash/_hashClear.js b/node_modules/lodash/_hashClear.js new file mode 100644 index 000000000..5d4b70cc4 --- /dev/null +++ b/node_modules/lodash/_hashClear.js @@ -0,0 +1,15 @@ +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/node_modules/lodash/_hashDelete.js b/node_modules/lodash/_hashDelete.js new file mode 100644 index 000000000..ea9dabf13 --- /dev/null +++ b/node_modules/lodash/_hashDelete.js @@ -0,0 +1,17 @@ +/** + * 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/node_modules/lodash/_hashGet.js b/node_modules/lodash/_hashGet.js new file mode 100644 index 000000000..1fc2f34b1 --- /dev/null +++ b/node_modules/lodash/_hashGet.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/_hashHas.js b/node_modules/lodash/_hashHas.js new file mode 100644 index 000000000..281a5517c --- /dev/null +++ b/node_modules/lodash/_hashHas.js @@ -0,0 +1,23 @@ +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/node_modules/lodash/_hashSet.js b/node_modules/lodash/_hashSet.js new file mode 100644 index 000000000..e1055283e --- /dev/null +++ b/node_modules/lodash/_hashSet.js @@ -0,0 +1,23 @@ +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/node_modules/lodash/_initCloneArray.js b/node_modules/lodash/_initCloneArray.js new file mode 100644 index 000000000..aef02120e --- /dev/null +++ b/node_modules/lodash/_initCloneArray.js @@ -0,0 +1,26 @@ +/** 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/node_modules/lodash/_initCloneByTag.js b/node_modules/lodash/_initCloneByTag.js new file mode 100644 index 000000000..e7b77edc6 --- /dev/null +++ b/node_modules/lodash/_initCloneByTag.js @@ -0,0 +1,80 @@ +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/node_modules/lodash/_initCloneObject.js b/node_modules/lodash/_initCloneObject.js new file mode 100644 index 000000000..5a13e64a5 --- /dev/null +++ b/node_modules/lodash/_initCloneObject.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_insertWrapDetails.js b/node_modules/lodash/_insertWrapDetails.js new file mode 100644 index 000000000..e79080864 --- /dev/null +++ b/node_modules/lodash/_insertWrapDetails.js @@ -0,0 +1,23 @@ +/** 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/node_modules/lodash/_isFlattenable.js b/node_modules/lodash/_isFlattenable.js new file mode 100644 index 000000000..4cc2c249c --- /dev/null +++ b/node_modules/lodash/_isFlattenable.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_isIndex.js b/node_modules/lodash/_isIndex.js new file mode 100644 index 000000000..e123dde8b --- /dev/null +++ b/node_modules/lodash/_isIndex.js @@ -0,0 +1,22 @@ +/** 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/node_modules/lodash/_isIterateeCall.js b/node_modules/lodash/_isIterateeCall.js new file mode 100644 index 000000000..a0bb5a9cf --- /dev/null +++ b/node_modules/lodash/_isIterateeCall.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/_isKey.js b/node_modules/lodash/_isKey.js new file mode 100644 index 000000000..ff08b0680 --- /dev/null +++ b/node_modules/lodash/_isKey.js @@ -0,0 +1,29 @@ +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/node_modules/lodash/_isKeyable.js b/node_modules/lodash/_isKeyable.js new file mode 100644 index 000000000..39f1828d4 --- /dev/null +++ b/node_modules/lodash/_isKeyable.js @@ -0,0 +1,15 @@ +/** + * 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/node_modules/lodash/_isLaziable.js b/node_modules/lodash/_isLaziable.js new file mode 100644 index 000000000..a57c4f2dc --- /dev/null +++ b/node_modules/lodash/_isLaziable.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/_isMaskable.js b/node_modules/lodash/_isMaskable.js new file mode 100644 index 000000000..eb98d09f3 --- /dev/null +++ b/node_modules/lodash/_isMaskable.js @@ -0,0 +1,14 @@ +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/node_modules/lodash/_isMasked.js b/node_modules/lodash/_isMasked.js new file mode 100644 index 000000000..4b0f21ba8 --- /dev/null +++ b/node_modules/lodash/_isMasked.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_isPrototype.js b/node_modules/lodash/_isPrototype.js new file mode 100644 index 000000000..0f29498d4 --- /dev/null +++ b/node_modules/lodash/_isPrototype.js @@ -0,0 +1,18 @@ +/** 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/node_modules/lodash/_isStrictComparable.js b/node_modules/lodash/_isStrictComparable.js new file mode 100644 index 000000000..b59f40b85 --- /dev/null +++ b/node_modules/lodash/_isStrictComparable.js @@ -0,0 +1,15 @@ +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/node_modules/lodash/_iteratorToArray.js b/node_modules/lodash/_iteratorToArray.js new file mode 100644 index 000000000..476856647 --- /dev/null +++ b/node_modules/lodash/_iteratorToArray.js @@ -0,0 +1,18 @@ +/** + * 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/node_modules/lodash/_lazyClone.js b/node_modules/lodash/_lazyClone.js new file mode 100644 index 000000000..d8a51f870 --- /dev/null +++ b/node_modules/lodash/_lazyClone.js @@ -0,0 +1,23 @@ +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/node_modules/lodash/_lazyReverse.js b/node_modules/lodash/_lazyReverse.js new file mode 100644 index 000000000..c5b52190f --- /dev/null +++ b/node_modules/lodash/_lazyReverse.js @@ -0,0 +1,23 @@ +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/node_modules/lodash/_lazyValue.js b/node_modules/lodash/_lazyValue.js new file mode 100644 index 000000000..371ca8d22 --- /dev/null +++ b/node_modules/lodash/_lazyValue.js @@ -0,0 +1,69 @@ +var baseWrapperValue = require('./_baseWrapperValue'), + getView = require('./_getView'), + isArray = require('./isArray'); + +/** 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 || (!isRight && 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/node_modules/lodash/_listCacheClear.js b/node_modules/lodash/_listCacheClear.js new file mode 100644 index 000000000..acbe39a59 --- /dev/null +++ b/node_modules/lodash/_listCacheClear.js @@ -0,0 +1,13 @@ +/** + * 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/node_modules/lodash/_listCacheDelete.js b/node_modules/lodash/_listCacheDelete.js new file mode 100644 index 000000000..b1384ade9 --- /dev/null +++ b/node_modules/lodash/_listCacheDelete.js @@ -0,0 +1,35 @@ +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/node_modules/lodash/_listCacheGet.js b/node_modules/lodash/_listCacheGet.js new file mode 100644 index 000000000..f8192fc38 --- /dev/null +++ b/node_modules/lodash/_listCacheGet.js @@ -0,0 +1,19 @@ +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/node_modules/lodash/_listCacheHas.js b/node_modules/lodash/_listCacheHas.js new file mode 100644 index 000000000..2adf67146 --- /dev/null +++ b/node_modules/lodash/_listCacheHas.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_listCacheSet.js b/node_modules/lodash/_listCacheSet.js new file mode 100644 index 000000000..5855c95e4 --- /dev/null +++ b/node_modules/lodash/_listCacheSet.js @@ -0,0 +1,26 @@ +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/node_modules/lodash/_mapCacheClear.js b/node_modules/lodash/_mapCacheClear.js new file mode 100644 index 000000000..bc9ca204a --- /dev/null +++ b/node_modules/lodash/_mapCacheClear.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_mapCacheDelete.js b/node_modules/lodash/_mapCacheDelete.js new file mode 100644 index 000000000..946ca3c93 --- /dev/null +++ b/node_modules/lodash/_mapCacheDelete.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_mapCacheGet.js b/node_modules/lodash/_mapCacheGet.js new file mode 100644 index 000000000..f29f55cfd --- /dev/null +++ b/node_modules/lodash/_mapCacheGet.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_mapCacheHas.js b/node_modules/lodash/_mapCacheHas.js new file mode 100644 index 000000000..a1214c028 --- /dev/null +++ b/node_modules/lodash/_mapCacheHas.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_mapCacheSet.js b/node_modules/lodash/_mapCacheSet.js new file mode 100644 index 000000000..734684927 --- /dev/null +++ b/node_modules/lodash/_mapCacheSet.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/_mapToArray.js b/node_modules/lodash/_mapToArray.js new file mode 100644 index 000000000..fe3dd531a --- /dev/null +++ b/node_modules/lodash/_mapToArray.js @@ -0,0 +1,18 @@ +/** + * 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/node_modules/lodash/_matchesStrictComparable.js b/node_modules/lodash/_matchesStrictComparable.js new file mode 100644 index 000000000..f608af9ec --- /dev/null +++ b/node_modules/lodash/_matchesStrictComparable.js @@ -0,0 +1,20 @@ +/** + * 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/node_modules/lodash/_memoizeCapped.js b/node_modules/lodash/_memoizeCapped.js new file mode 100644 index 000000000..7f71c8fba --- /dev/null +++ b/node_modules/lodash/_memoizeCapped.js @@ -0,0 +1,26 @@ +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/node_modules/lodash/_mergeData.js b/node_modules/lodash/_mergeData.js new file mode 100644 index 000000000..cb570f976 --- /dev/null +++ b/node_modules/lodash/_mergeData.js @@ -0,0 +1,90 @@ +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/node_modules/lodash/_metaMap.js b/node_modules/lodash/_metaMap.js new file mode 100644 index 000000000..0157a0b09 --- /dev/null +++ b/node_modules/lodash/_metaMap.js @@ -0,0 +1,6 @@ +var WeakMap = require('./_WeakMap'); + +/** Used to store function metadata. */ +var metaMap = WeakMap && new WeakMap; + +module.exports = metaMap; diff --git a/node_modules/lodash/_nativeCreate.js b/node_modules/lodash/_nativeCreate.js new file mode 100644 index 000000000..c7aede85b --- /dev/null +++ b/node_modules/lodash/_nativeCreate.js @@ -0,0 +1,6 @@ +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/node_modules/lodash/_nativeKeys.js b/node_modules/lodash/_nativeKeys.js new file mode 100644 index 000000000..479a104a1 --- /dev/null +++ b/node_modules/lodash/_nativeKeys.js @@ -0,0 +1,6 @@ +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/node_modules/lodash/_nativeKeysIn.js b/node_modules/lodash/_nativeKeysIn.js new file mode 100644 index 000000000..00ee50594 --- /dev/null +++ b/node_modules/lodash/_nativeKeysIn.js @@ -0,0 +1,20 @@ +/** + * 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/node_modules/lodash/_nodeUtil.js b/node_modules/lodash/_nodeUtil.js new file mode 100644 index 000000000..14e179fe1 --- /dev/null +++ b/node_modules/lodash/_nodeUtil.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/_objectToString.js b/node_modules/lodash/_objectToString.js new file mode 100644 index 000000000..c614ec09b --- /dev/null +++ b/node_modules/lodash/_objectToString.js @@ -0,0 +1,22 @@ +/** 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/node_modules/lodash/_overArg.js b/node_modules/lodash/_overArg.js new file mode 100644 index 000000000..651c5c55f --- /dev/null +++ b/node_modules/lodash/_overArg.js @@ -0,0 +1,15 @@ +/** + * 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/node_modules/lodash/_overRest.js b/node_modules/lodash/_overRest.js new file mode 100644 index 000000000..c7cdef339 --- /dev/null +++ b/node_modules/lodash/_overRest.js @@ -0,0 +1,36 @@ +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/node_modules/lodash/_parent.js b/node_modules/lodash/_parent.js new file mode 100644 index 000000000..f174328fc --- /dev/null +++ b/node_modules/lodash/_parent.js @@ -0,0 +1,16 @@ +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/node_modules/lodash/_reEscape.js b/node_modules/lodash/_reEscape.js new file mode 100644 index 000000000..7f47eda68 --- /dev/null +++ b/node_modules/lodash/_reEscape.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEscape = /<%-([\s\S]+?)%>/g; + +module.exports = reEscape; diff --git a/node_modules/lodash/_reEvaluate.js b/node_modules/lodash/_reEvaluate.js new file mode 100644 index 000000000..6adfc312c --- /dev/null +++ b/node_modules/lodash/_reEvaluate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEvaluate = /<%([\s\S]+?)%>/g; + +module.exports = reEvaluate; diff --git a/node_modules/lodash/_reInterpolate.js b/node_modules/lodash/_reInterpolate.js new file mode 100644 index 000000000..d02ff0b29 --- /dev/null +++ b/node_modules/lodash/_reInterpolate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/node_modules/lodash/_realNames.js b/node_modules/lodash/_realNames.js new file mode 100644 index 000000000..aa0d52926 --- /dev/null +++ b/node_modules/lodash/_realNames.js @@ -0,0 +1,4 @@ +/** Used to lookup unminified function names. */ +var realNames = {}; + +module.exports = realNames; diff --git a/node_modules/lodash/_reorder.js b/node_modules/lodash/_reorder.js new file mode 100644 index 000000000..a3502b051 --- /dev/null +++ b/node_modules/lodash/_reorder.js @@ -0,0 +1,29 @@ +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/node_modules/lodash/_replaceHolders.js b/node_modules/lodash/_replaceHolders.js new file mode 100644 index 000000000..74360ec4d --- /dev/null +++ b/node_modules/lodash/_replaceHolders.js @@ -0,0 +1,29 @@ +/** 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/node_modules/lodash/_root.js b/node_modules/lodash/_root.js new file mode 100644 index 000000000..d2852bed4 --- /dev/null +++ b/node_modules/lodash/_root.js @@ -0,0 +1,9 @@ +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/node_modules/lodash/_setCacheAdd.js b/node_modules/lodash/_setCacheAdd.js new file mode 100644 index 000000000..1081a7442 --- /dev/null +++ b/node_modules/lodash/_setCacheAdd.js @@ -0,0 +1,19 @@ +/** 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/node_modules/lodash/_setCacheHas.js b/node_modules/lodash/_setCacheHas.js new file mode 100644 index 000000000..9a492556e --- /dev/null +++ b/node_modules/lodash/_setCacheHas.js @@ -0,0 +1,14 @@ +/** + * 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/node_modules/lodash/_setData.js b/node_modules/lodash/_setData.js new file mode 100644 index 000000000..e5cf3eb96 --- /dev/null +++ b/node_modules/lodash/_setData.js @@ -0,0 +1,20 @@ +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/node_modules/lodash/_setToArray.js b/node_modules/lodash/_setToArray.js new file mode 100644 index 000000000..b87f07418 --- /dev/null +++ b/node_modules/lodash/_setToArray.js @@ -0,0 +1,18 @@ +/** + * 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/node_modules/lodash/_setToPairs.js b/node_modules/lodash/_setToPairs.js new file mode 100644 index 000000000..36ad37a05 --- /dev/null +++ b/node_modules/lodash/_setToPairs.js @@ -0,0 +1,18 @@ +/** + * 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/node_modules/lodash/_setToString.js b/node_modules/lodash/_setToString.js new file mode 100644 index 000000000..6ca841967 --- /dev/null +++ b/node_modules/lodash/_setToString.js @@ -0,0 +1,14 @@ +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/node_modules/lodash/_setWrapToString.js b/node_modules/lodash/_setWrapToString.js new file mode 100644 index 000000000..decdc4499 --- /dev/null +++ b/node_modules/lodash/_setWrapToString.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_shortOut.js b/node_modules/lodash/_shortOut.js new file mode 100644 index 000000000..3300a0796 --- /dev/null +++ b/node_modules/lodash/_shortOut.js @@ -0,0 +1,37 @@ +/** 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/node_modules/lodash/_shuffleSelf.js b/node_modules/lodash/_shuffleSelf.js new file mode 100644 index 000000000..8bcc4f5c3 --- /dev/null +++ b/node_modules/lodash/_shuffleSelf.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/_stackClear.js b/node_modules/lodash/_stackClear.js new file mode 100644 index 000000000..ce8e5a92f --- /dev/null +++ b/node_modules/lodash/_stackClear.js @@ -0,0 +1,15 @@ +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/node_modules/lodash/_stackDelete.js b/node_modules/lodash/_stackDelete.js new file mode 100644 index 000000000..ff9887ab6 --- /dev/null +++ b/node_modules/lodash/_stackDelete.js @@ -0,0 +1,18 @@ +/** + * 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/node_modules/lodash/_stackGet.js b/node_modules/lodash/_stackGet.js new file mode 100644 index 000000000..1cdf00409 --- /dev/null +++ b/node_modules/lodash/_stackGet.js @@ -0,0 +1,14 @@ +/** + * 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/node_modules/lodash/_stackHas.js b/node_modules/lodash/_stackHas.js new file mode 100644 index 000000000..16a3ad11b --- /dev/null +++ b/node_modules/lodash/_stackHas.js @@ -0,0 +1,14 @@ +/** + * 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/node_modules/lodash/_stackSet.js b/node_modules/lodash/_stackSet.js new file mode 100644 index 000000000..b790ac5f4 --- /dev/null +++ b/node_modules/lodash/_stackSet.js @@ -0,0 +1,34 @@ +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/node_modules/lodash/_strictIndexOf.js b/node_modules/lodash/_strictIndexOf.js new file mode 100644 index 000000000..0486a4956 --- /dev/null +++ b/node_modules/lodash/_strictIndexOf.js @@ -0,0 +1,23 @@ +/** + * 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/node_modules/lodash/_strictLastIndexOf.js b/node_modules/lodash/_strictLastIndexOf.js new file mode 100644 index 000000000..d7310dcc2 --- /dev/null +++ b/node_modules/lodash/_strictLastIndexOf.js @@ -0,0 +1,21 @@ +/** + * 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/node_modules/lodash/_stringSize.js b/node_modules/lodash/_stringSize.js new file mode 100644 index 000000000..17ef462a6 --- /dev/null +++ b/node_modules/lodash/_stringSize.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_stringToArray.js b/node_modules/lodash/_stringToArray.js new file mode 100644 index 000000000..d161158c6 --- /dev/null +++ b/node_modules/lodash/_stringToArray.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/_stringToPath.js b/node_modules/lodash/_stringToPath.js new file mode 100644 index 000000000..db7b0f7db --- /dev/null +++ b/node_modules/lodash/_stringToPath.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/_toKey.js b/node_modules/lodash/_toKey.js new file mode 100644 index 000000000..c6d645c4d --- /dev/null +++ b/node_modules/lodash/_toKey.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_toSource.js b/node_modules/lodash/_toSource.js new file mode 100644 index 000000000..a020b386c --- /dev/null +++ b/node_modules/lodash/_toSource.js @@ -0,0 +1,26 @@ +/** 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/node_modules/lodash/_unescapeHtmlChar.js b/node_modules/lodash/_unescapeHtmlChar.js new file mode 100644 index 000000000..a71fecb3f --- /dev/null +++ b/node_modules/lodash/_unescapeHtmlChar.js @@ -0,0 +1,21 @@ +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/node_modules/lodash/_unicodeSize.js b/node_modules/lodash/_unicodeSize.js new file mode 100644 index 000000000..68137ec2c --- /dev/null +++ b/node_modules/lodash/_unicodeSize.js @@ -0,0 +1,44 @@ +/** 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/node_modules/lodash/_unicodeToArray.js b/node_modules/lodash/_unicodeToArray.js new file mode 100644 index 000000000..2a725c062 --- /dev/null +++ b/node_modules/lodash/_unicodeToArray.js @@ -0,0 +1,40 @@ +/** 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/node_modules/lodash/_unicodeWords.js b/node_modules/lodash/_unicodeWords.js new file mode 100644 index 000000000..d8b822ada --- /dev/null +++ b/node_modules/lodash/_unicodeWords.js @@ -0,0 +1,69 @@ +/** 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/node_modules/lodash/_updateWrapDetails.js b/node_modules/lodash/_updateWrapDetails.js new file mode 100644 index 000000000..8759fbdf7 --- /dev/null +++ b/node_modules/lodash/_updateWrapDetails.js @@ -0,0 +1,46 @@ +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/node_modules/lodash/_wrapperClone.js b/node_modules/lodash/_wrapperClone.js new file mode 100644 index 000000000..7bb58a2e8 --- /dev/null +++ b/node_modules/lodash/_wrapperClone.js @@ -0,0 +1,23 @@ +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/node_modules/lodash/add.js b/node_modules/lodash/add.js new file mode 100644 index 000000000..f06951564 --- /dev/null +++ b/node_modules/lodash/add.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/after.js b/node_modules/lodash/after.js new file mode 100644 index 000000000..3900c979a --- /dev/null +++ b/node_modules/lodash/after.js @@ -0,0 +1,42 @@ +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/node_modules/lodash/array.js b/node_modules/lodash/array.js new file mode 100644 index 000000000..af688d3ee --- /dev/null +++ b/node_modules/lodash/array.js @@ -0,0 +1,67 @@ +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/node_modules/lodash/ary.js b/node_modules/lodash/ary.js new file mode 100644 index 000000000..70c87d094 --- /dev/null +++ b/node_modules/lodash/ary.js @@ -0,0 +1,29 @@ +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/node_modules/lodash/assign.js b/node_modules/lodash/assign.js new file mode 100644 index 000000000..909db26a3 --- /dev/null +++ b/node_modules/lodash/assign.js @@ -0,0 +1,58 @@ +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/node_modules/lodash/assignIn.js b/node_modules/lodash/assignIn.js new file mode 100644 index 000000000..e663473a0 --- /dev/null +++ b/node_modules/lodash/assignIn.js @@ -0,0 +1,40 @@ +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/node_modules/lodash/assignInWith.js b/node_modules/lodash/assignInWith.js new file mode 100644 index 000000000..68fcc0b03 --- /dev/null +++ b/node_modules/lodash/assignInWith.js @@ -0,0 +1,38 @@ +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/node_modules/lodash/assignWith.js b/node_modules/lodash/assignWith.js new file mode 100644 index 000000000..7dc6c761b --- /dev/null +++ b/node_modules/lodash/assignWith.js @@ -0,0 +1,37 @@ +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/node_modules/lodash/at.js b/node_modules/lodash/at.js new file mode 100644 index 000000000..781ee9e5f --- /dev/null +++ b/node_modules/lodash/at.js @@ -0,0 +1,23 @@ +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/node_modules/lodash/attempt.js b/node_modules/lodash/attempt.js new file mode 100644 index 000000000..624d01524 --- /dev/null +++ b/node_modules/lodash/attempt.js @@ -0,0 +1,35 @@ +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/node_modules/lodash/before.js b/node_modules/lodash/before.js new file mode 100644 index 000000000..a3e0a16c7 --- /dev/null +++ b/node_modules/lodash/before.js @@ -0,0 +1,40 @@ +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/node_modules/lodash/bind.js b/node_modules/lodash/bind.js new file mode 100644 index 000000000..b1076e93e --- /dev/null +++ b/node_modules/lodash/bind.js @@ -0,0 +1,57 @@ +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/node_modules/lodash/bindAll.js b/node_modules/lodash/bindAll.js new file mode 100644 index 000000000..a35706dee --- /dev/null +++ b/node_modules/lodash/bindAll.js @@ -0,0 +1,41 @@ +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/node_modules/lodash/bindKey.js b/node_modules/lodash/bindKey.js new file mode 100644 index 000000000..f7fd64cd4 --- /dev/null +++ b/node_modules/lodash/bindKey.js @@ -0,0 +1,68 @@ +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/node_modules/lodash/camelCase.js b/node_modules/lodash/camelCase.js new file mode 100644 index 000000000..d7390def5 --- /dev/null +++ b/node_modules/lodash/camelCase.js @@ -0,0 +1,29 @@ +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/node_modules/lodash/capitalize.js b/node_modules/lodash/capitalize.js new file mode 100644 index 000000000..3e1600e7d --- /dev/null +++ b/node_modules/lodash/capitalize.js @@ -0,0 +1,23 @@ +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/node_modules/lodash/castArray.js b/node_modules/lodash/castArray.js new file mode 100644 index 000000000..e470bdb9b --- /dev/null +++ b/node_modules/lodash/castArray.js @@ -0,0 +1,44 @@ +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/node_modules/lodash/ceil.js b/node_modules/lodash/ceil.js new file mode 100644 index 000000000..56c8722cf --- /dev/null +++ b/node_modules/lodash/ceil.js @@ -0,0 +1,26 @@ +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/node_modules/lodash/chain.js b/node_modules/lodash/chain.js new file mode 100644 index 000000000..f6cd6475f --- /dev/null +++ b/node_modules/lodash/chain.js @@ -0,0 +1,38 @@ +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/node_modules/lodash/chunk.js b/node_modules/lodash/chunk.js new file mode 100644 index 000000000..5b562fef3 --- /dev/null +++ b/node_modules/lodash/chunk.js @@ -0,0 +1,50 @@ +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/node_modules/lodash/clamp.js b/node_modules/lodash/clamp.js new file mode 100644 index 000000000..91a72c978 --- /dev/null +++ b/node_modules/lodash/clamp.js @@ -0,0 +1,39 @@ +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/node_modules/lodash/clone.js b/node_modules/lodash/clone.js new file mode 100644 index 000000000..dd439d639 --- /dev/null +++ b/node_modules/lodash/clone.js @@ -0,0 +1,36 @@ +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/node_modules/lodash/cloneDeep.js b/node_modules/lodash/cloneDeep.js new file mode 100644 index 000000000..4425fbe8b --- /dev/null +++ b/node_modules/lodash/cloneDeep.js @@ -0,0 +1,29 @@ +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/node_modules/lodash/cloneDeepWith.js b/node_modules/lodash/cloneDeepWith.js new file mode 100644 index 000000000..fd9c6c050 --- /dev/null +++ b/node_modules/lodash/cloneDeepWith.js @@ -0,0 +1,40 @@ +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/node_modules/lodash/cloneWith.js b/node_modules/lodash/cloneWith.js new file mode 100644 index 000000000..d2f4e756d --- /dev/null +++ b/node_modules/lodash/cloneWith.js @@ -0,0 +1,42 @@ +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/node_modules/lodash/collection.js b/node_modules/lodash/collection.js new file mode 100644 index 000000000..77fe837f3 --- /dev/null +++ b/node_modules/lodash/collection.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/commit.js b/node_modules/lodash/commit.js new file mode 100644 index 000000000..fe4db7178 --- /dev/null +++ b/node_modules/lodash/commit.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/compact.js b/node_modules/lodash/compact.js new file mode 100644 index 000000000..031fab4e6 --- /dev/null +++ b/node_modules/lodash/compact.js @@ -0,0 +1,31 @@ +/** + * 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/node_modules/lodash/concat.js b/node_modules/lodash/concat.js new file mode 100644 index 000000000..1da48a4fc --- /dev/null +++ b/node_modules/lodash/concat.js @@ -0,0 +1,43 @@ +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/node_modules/lodash/cond.js b/node_modules/lodash/cond.js new file mode 100644 index 000000000..64555986a --- /dev/null +++ b/node_modules/lodash/cond.js @@ -0,0 +1,60 @@ +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/node_modules/lodash/conforms.js b/node_modules/lodash/conforms.js new file mode 100644 index 000000000..5501a949a --- /dev/null +++ b/node_modules/lodash/conforms.js @@ -0,0 +1,35 @@ +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/node_modules/lodash/conformsTo.js b/node_modules/lodash/conformsTo.js new file mode 100644 index 000000000..b8a93ebf4 --- /dev/null +++ b/node_modules/lodash/conformsTo.js @@ -0,0 +1,32 @@ +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/node_modules/lodash/constant.js b/node_modules/lodash/constant.js new file mode 100644 index 000000000..655ece3fb --- /dev/null +++ b/node_modules/lodash/constant.js @@ -0,0 +1,26 @@ +/** + * 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/node_modules/lodash/core.js b/node_modules/lodash/core.js new file mode 100644 index 000000000..88c263f86 --- /dev/null +++ b/node_modules/lodash/core.js @@ -0,0 +1,3836 @@ +/** + * @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.4'; + + /** 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 and 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; + + /*------------------------------------------------------------------------*/ + + /** + * 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 || (!isObjectLike(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 = objIsArr ? arrayTag : baseGetTag(object), + othTag = othIsArr ? arrayTag : baseGetTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + 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; + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @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 customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * 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 compared by strict equality, i.e. `===`. + * + * @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, customDefaultsAssignIn); + 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/node_modules/lodash/core.min.js b/node_modules/lodash/core.min.js new file mode 100644 index 000000000..b909d31c7 --- /dev/null +++ b/node_modules/lodash/core.min.js @@ -0,0 +1,29 @@ +/** + * @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 j(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){if(typeof n!="function")throw new TypeError("Expected a function"); +return setTimeout(function(){n.apply(nn,r)},t)}function f(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function a(n,t,r){for(var e=-1,u=n.length;++et}function y(n,t,r,e,u){return n===t||(null==n||null==t||!K(n)&&!K(t)?n!==n&&t!==t:b(n,t,r,e,y,u))}function b(n,t,r,e,u,o){var i=Nn(n),c=Nn(t),f=i?"[object Array]":hn.call(n),a=c?"[object Array]":hn.call(t),f="[object Arguments]"==f?"[object Object]":f,a="[object Arguments]"==a?"[object Object]":a,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 g(n){return typeof n=="function"?n:null==n?Y:(typeof n=="object"?d:r)(n)}function _(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=h(r,u);null!=e||H(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=h(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__=A(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=g(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/node_modules/lodash/create.js b/node_modules/lodash/create.js new file mode 100644 index 000000000..919edb850 --- /dev/null +++ b/node_modules/lodash/create.js @@ -0,0 +1,43 @@ +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/node_modules/lodash/curry.js b/node_modules/lodash/curry.js new file mode 100644 index 000000000..918db1a4a --- /dev/null +++ b/node_modules/lodash/curry.js @@ -0,0 +1,57 @@ +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/node_modules/lodash/curryRight.js b/node_modules/lodash/curryRight.js new file mode 100644 index 000000000..c85b6f339 --- /dev/null +++ b/node_modules/lodash/curryRight.js @@ -0,0 +1,54 @@ +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/node_modules/lodash/date.js b/node_modules/lodash/date.js new file mode 100644 index 000000000..cbf5b4109 --- /dev/null +++ b/node_modules/lodash/date.js @@ -0,0 +1,3 @@ +module.exports = { + 'now': require('./now') +}; diff --git a/node_modules/lodash/debounce.js b/node_modules/lodash/debounce.js new file mode 100644 index 000000000..04d7dfd31 --- /dev/null +++ b/node_modules/lodash/debounce.js @@ -0,0 +1,188 @@ +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/node_modules/lodash/deburr.js b/node_modules/lodash/deburr.js new file mode 100644 index 000000000..f85e314a0 --- /dev/null +++ b/node_modules/lodash/deburr.js @@ -0,0 +1,45 @@ +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/node_modules/lodash/defaultTo.js b/node_modules/lodash/defaultTo.js new file mode 100644 index 000000000..5b333592e --- /dev/null +++ b/node_modules/lodash/defaultTo.js @@ -0,0 +1,25 @@ +/** + * 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/node_modules/lodash/defaults.js b/node_modules/lodash/defaults.js new file mode 100644 index 000000000..6b75ee08c --- /dev/null +++ b/node_modules/lodash/defaults.js @@ -0,0 +1,32 @@ +var apply = require('./_apply'), + assignInWith = require('./assignInWith'), + baseRest = require('./_baseRest'), + customDefaultsAssignIn = require('./_customDefaultsAssignIn'); + +/** + * 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, customDefaultsAssignIn); + return apply(assignInWith, undefined, args); +}); + +module.exports = defaults; diff --git a/node_modules/lodash/defaultsDeep.js b/node_modules/lodash/defaultsDeep.js new file mode 100644 index 000000000..9b5fa3ee2 --- /dev/null +++ b/node_modules/lodash/defaultsDeep.js @@ -0,0 +1,30 @@ +var apply = require('./_apply'), + baseRest = require('./_baseRest'), + customDefaultsMerge = require('./_customDefaultsMerge'), + 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, customDefaultsMerge); + return apply(mergeWith, undefined, args); +}); + +module.exports = defaultsDeep; diff --git a/node_modules/lodash/defer.js b/node_modules/lodash/defer.js new file mode 100644 index 000000000..f6d6c6fa6 --- /dev/null +++ b/node_modules/lodash/defer.js @@ -0,0 +1,26 @@ +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/node_modules/lodash/delay.js b/node_modules/lodash/delay.js new file mode 100644 index 000000000..bd554796f --- /dev/null +++ b/node_modules/lodash/delay.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/difference.js b/node_modules/lodash/difference.js new file mode 100644 index 000000000..fa28bb301 --- /dev/null +++ b/node_modules/lodash/difference.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/differenceBy.js b/node_modules/lodash/differenceBy.js new file mode 100644 index 000000000..2cd63e7ec --- /dev/null +++ b/node_modules/lodash/differenceBy.js @@ -0,0 +1,44 @@ +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/node_modules/lodash/differenceWith.js b/node_modules/lodash/differenceWith.js new file mode 100644 index 000000000..c0233f4b9 --- /dev/null +++ b/node_modules/lodash/differenceWith.js @@ -0,0 +1,40 @@ +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/node_modules/lodash/divide.js b/node_modules/lodash/divide.js new file mode 100644 index 000000000..8cae0cd1b --- /dev/null +++ b/node_modules/lodash/divide.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/drop.js b/node_modules/lodash/drop.js new file mode 100644 index 000000000..d5c3cbaa4 --- /dev/null +++ b/node_modules/lodash/drop.js @@ -0,0 +1,38 @@ +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/node_modules/lodash/dropRight.js b/node_modules/lodash/dropRight.js new file mode 100644 index 000000000..441fe9968 --- /dev/null +++ b/node_modules/lodash/dropRight.js @@ -0,0 +1,39 @@ +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/node_modules/lodash/dropRightWhile.js b/node_modules/lodash/dropRightWhile.js new file mode 100644 index 000000000..9ad36a044 --- /dev/null +++ b/node_modules/lodash/dropRightWhile.js @@ -0,0 +1,45 @@ +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/node_modules/lodash/dropWhile.js b/node_modules/lodash/dropWhile.js new file mode 100644 index 000000000..903ef568c --- /dev/null +++ b/node_modules/lodash/dropWhile.js @@ -0,0 +1,45 @@ +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/node_modules/lodash/each.js b/node_modules/lodash/each.js new file mode 100644 index 000000000..8800f4204 --- /dev/null +++ b/node_modules/lodash/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/node_modules/lodash/eachRight.js b/node_modules/lodash/eachRight.js new file mode 100644 index 000000000..3252b2aba --- /dev/null +++ b/node_modules/lodash/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/node_modules/lodash/endsWith.js b/node_modules/lodash/endsWith.js new file mode 100644 index 000000000..76fc866e3 --- /dev/null +++ b/node_modules/lodash/endsWith.js @@ -0,0 +1,43 @@ +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/node_modules/lodash/entries.js b/node_modules/lodash/entries.js new file mode 100644 index 000000000..7a88df204 --- /dev/null +++ b/node_modules/lodash/entries.js @@ -0,0 +1 @@ +module.exports = require('./toPairs'); diff --git a/node_modules/lodash/entriesIn.js b/node_modules/lodash/entriesIn.js new file mode 100644 index 000000000..f6c6331c1 --- /dev/null +++ b/node_modules/lodash/entriesIn.js @@ -0,0 +1 @@ +module.exports = require('./toPairsIn'); diff --git a/node_modules/lodash/eq.js b/node_modules/lodash/eq.js new file mode 100644 index 000000000..a94068805 --- /dev/null +++ b/node_modules/lodash/eq.js @@ -0,0 +1,37 @@ +/** + * 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/node_modules/lodash/escape.js b/node_modules/lodash/escape.js new file mode 100644 index 000000000..9247e0029 --- /dev/null +++ b/node_modules/lodash/escape.js @@ -0,0 +1,43 @@ +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/node_modules/lodash/escapeRegExp.js b/node_modules/lodash/escapeRegExp.js new file mode 100644 index 000000000..0a58c69fc --- /dev/null +++ b/node_modules/lodash/escapeRegExp.js @@ -0,0 +1,32 @@ +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/node_modules/lodash/every.js b/node_modules/lodash/every.js new file mode 100644 index 000000000..25080dac4 --- /dev/null +++ b/node_modules/lodash/every.js @@ -0,0 +1,56 @@ +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/node_modules/lodash/extend.js b/node_modules/lodash/extend.js new file mode 100644 index 000000000..e00166c20 --- /dev/null +++ b/node_modules/lodash/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/node_modules/lodash/extendWith.js b/node_modules/lodash/extendWith.js new file mode 100644 index 000000000..dbdcb3b4e --- /dev/null +++ b/node_modules/lodash/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/node_modules/lodash/fill.js b/node_modules/lodash/fill.js new file mode 100644 index 000000000..ae13aa1c9 --- /dev/null +++ b/node_modules/lodash/fill.js @@ -0,0 +1,45 @@ +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/node_modules/lodash/filter.js b/node_modules/lodash/filter.js new file mode 100644 index 000000000..52616be8b --- /dev/null +++ b/node_modules/lodash/filter.js @@ -0,0 +1,48 @@ +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/node_modules/lodash/find.js b/node_modules/lodash/find.js new file mode 100644 index 000000000..de732ccb4 --- /dev/null +++ b/node_modules/lodash/find.js @@ -0,0 +1,42 @@ +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/node_modules/lodash/findIndex.js b/node_modules/lodash/findIndex.js new file mode 100644 index 000000000..4689069f8 --- /dev/null +++ b/node_modules/lodash/findIndex.js @@ -0,0 +1,55 @@ +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/node_modules/lodash/findKey.js b/node_modules/lodash/findKey.js new file mode 100644 index 000000000..cac0248a9 --- /dev/null +++ b/node_modules/lodash/findKey.js @@ -0,0 +1,44 @@ +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/node_modules/lodash/findLast.js b/node_modules/lodash/findLast.js new file mode 100644 index 000000000..70b4271dc --- /dev/null +++ b/node_modules/lodash/findLast.js @@ -0,0 +1,25 @@ +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/node_modules/lodash/findLastIndex.js b/node_modules/lodash/findLastIndex.js new file mode 100644 index 000000000..7da3431f6 --- /dev/null +++ b/node_modules/lodash/findLastIndex.js @@ -0,0 +1,59 @@ +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/node_modules/lodash/findLastKey.js b/node_modules/lodash/findLastKey.js new file mode 100644 index 000000000..66fb9fbce --- /dev/null +++ b/node_modules/lodash/findLastKey.js @@ -0,0 +1,44 @@ +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/node_modules/lodash/first.js b/node_modules/lodash/first.js new file mode 100644 index 000000000..53f4ad13e --- /dev/null +++ b/node_modules/lodash/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/node_modules/lodash/flatMap.js b/node_modules/lodash/flatMap.js new file mode 100644 index 000000000..e6685068f --- /dev/null +++ b/node_modules/lodash/flatMap.js @@ -0,0 +1,29 @@ +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/node_modules/lodash/flatMapDeep.js b/node_modules/lodash/flatMapDeep.js new file mode 100644 index 000000000..4653d6033 --- /dev/null +++ b/node_modules/lodash/flatMapDeep.js @@ -0,0 +1,31 @@ +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/node_modules/lodash/flatMapDepth.js b/node_modules/lodash/flatMapDepth.js new file mode 100644 index 000000000..6d72005c9 --- /dev/null +++ b/node_modules/lodash/flatMapDepth.js @@ -0,0 +1,31 @@ +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/node_modules/lodash/flatten.js b/node_modules/lodash/flatten.js new file mode 100644 index 000000000..3f09f7f77 --- /dev/null +++ b/node_modules/lodash/flatten.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/flattenDeep.js b/node_modules/lodash/flattenDeep.js new file mode 100644 index 000000000..8ad585cf4 --- /dev/null +++ b/node_modules/lodash/flattenDeep.js @@ -0,0 +1,25 @@ +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/node_modules/lodash/flattenDepth.js b/node_modules/lodash/flattenDepth.js new file mode 100644 index 000000000..441fdcc22 --- /dev/null +++ b/node_modules/lodash/flattenDepth.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/flip.js b/node_modules/lodash/flip.js new file mode 100644 index 000000000..c28dd7896 --- /dev/null +++ b/node_modules/lodash/flip.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/floor.js b/node_modules/lodash/floor.js new file mode 100644 index 000000000..ab6dfa28a --- /dev/null +++ b/node_modules/lodash/floor.js @@ -0,0 +1,26 @@ +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/node_modules/lodash/flow.js b/node_modules/lodash/flow.js new file mode 100644 index 000000000..74b6b62d4 --- /dev/null +++ b/node_modules/lodash/flow.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/flowRight.js b/node_modules/lodash/flowRight.js new file mode 100644 index 000000000..114614105 --- /dev/null +++ b/node_modules/lodash/flowRight.js @@ -0,0 +1,26 @@ +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/node_modules/lodash/forEach.js b/node_modules/lodash/forEach.js new file mode 100644 index 000000000..c64eaa73f --- /dev/null +++ b/node_modules/lodash/forEach.js @@ -0,0 +1,41 @@ +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/node_modules/lodash/forEachRight.js b/node_modules/lodash/forEachRight.js new file mode 100644 index 000000000..7390ebaf8 --- /dev/null +++ b/node_modules/lodash/forEachRight.js @@ -0,0 +1,31 @@ +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/node_modules/lodash/forIn.js b/node_modules/lodash/forIn.js new file mode 100644 index 000000000..583a59638 --- /dev/null +++ b/node_modules/lodash/forIn.js @@ -0,0 +1,39 @@ +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/node_modules/lodash/forInRight.js b/node_modules/lodash/forInRight.js new file mode 100644 index 000000000..4aedf58af --- /dev/null +++ b/node_modules/lodash/forInRight.js @@ -0,0 +1,37 @@ +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/node_modules/lodash/forOwn.js b/node_modules/lodash/forOwn.js new file mode 100644 index 000000000..94eed8402 --- /dev/null +++ b/node_modules/lodash/forOwn.js @@ -0,0 +1,36 @@ +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/node_modules/lodash/forOwnRight.js b/node_modules/lodash/forOwnRight.js new file mode 100644 index 000000000..86f338f03 --- /dev/null +++ b/node_modules/lodash/forOwnRight.js @@ -0,0 +1,34 @@ +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/node_modules/lodash/fp.js b/node_modules/lodash/fp.js new file mode 100644 index 000000000..e372dbbdf --- /dev/null +++ b/node_modules/lodash/fp.js @@ -0,0 +1,2 @@ +var _ = require('./lodash.min').runInContext(); +module.exports = require('./fp/_baseConvert')(_, _); diff --git a/node_modules/lodash/fp/F.js b/node_modules/lodash/fp/F.js new file mode 100644 index 000000000..a05a63ad9 --- /dev/null +++ b/node_modules/lodash/fp/F.js @@ -0,0 +1 @@ +module.exports = require('./stubFalse'); diff --git a/node_modules/lodash/fp/T.js b/node_modules/lodash/fp/T.js new file mode 100644 index 000000000..e2ba8ea56 --- /dev/null +++ b/node_modules/lodash/fp/T.js @@ -0,0 +1 @@ +module.exports = require('./stubTrue'); diff --git a/node_modules/lodash/fp/__.js b/node_modules/lodash/fp/__.js new file mode 100644 index 000000000..4af98deb4 --- /dev/null +++ b/node_modules/lodash/fp/__.js @@ -0,0 +1 @@ +module.exports = require('./placeholder'); diff --git a/node_modules/lodash/fp/_baseConvert.js b/node_modules/lodash/fp/_baseConvert.js new file mode 100644 index 000000000..7af27655b --- /dev/null +++ b/node_modules/lodash/fp/_baseConvert.js @@ -0,0 +1,568 @@ +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); + }; +} + +/** + * A specialized version of `_.spread` which flattens the spread array into + * the arguments of the invoked `func`. + * + * @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 flatSpread(func, start) { + return function() { + var length = arguments.length, + lastIndex = length - 1, + args = Array(length); + + while (length--) { + args[length] = arguments[length]; + } + var array = args[start], + 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) : flatSpread(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 data = mapping.methodSpread[realName], + afterRearg = data && data.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/node_modules/lodash/fp/_convertBrowser.js b/node_modules/lodash/fp/_convertBrowser.js new file mode 100644 index 000000000..bde030dc0 --- /dev/null +++ b/node_modules/lodash/fp/_convertBrowser.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/fp/_falseOptions.js b/node_modules/lodash/fp/_falseOptions.js new file mode 100644 index 000000000..773235e34 --- /dev/null +++ b/node_modules/lodash/fp/_falseOptions.js @@ -0,0 +1,7 @@ +module.exports = { + 'cap': false, + 'curry': false, + 'fixed': false, + 'immutable': false, + 'rearg': false +}; diff --git a/node_modules/lodash/fp/_mapping.js b/node_modules/lodash/fp/_mapping.js new file mode 100644 index 000000000..8f5ddf2d0 --- /dev/null +++ b/node_modules/lodash/fp/_mapping.js @@ -0,0 +1,368 @@ +/** 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], + 'reduceRight': [1, 0] +}; + +/** 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/node_modules/lodash/fp/_util.js b/node_modules/lodash/fp/_util.js new file mode 100644 index 000000000..708446302 --- /dev/null +++ b/node_modules/lodash/fp/_util.js @@ -0,0 +1,14 @@ +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/node_modules/lodash/fp/add.js b/node_modules/lodash/fp/add.js new file mode 100644 index 000000000..816eeece3 --- /dev/null +++ b/node_modules/lodash/fp/add.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('add', require('../add')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/after.js b/node_modules/lodash/fp/after.js new file mode 100644 index 000000000..21a0167ab --- /dev/null +++ b/node_modules/lodash/fp/after.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('after', require('../after')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/all.js b/node_modules/lodash/fp/all.js new file mode 100644 index 000000000..d0839f77e --- /dev/null +++ b/node_modules/lodash/fp/all.js @@ -0,0 +1 @@ +module.exports = require('./every'); diff --git a/node_modules/lodash/fp/allPass.js b/node_modules/lodash/fp/allPass.js new file mode 100644 index 000000000..79b73ef84 --- /dev/null +++ b/node_modules/lodash/fp/allPass.js @@ -0,0 +1 @@ +module.exports = require('./overEvery'); diff --git a/node_modules/lodash/fp/always.js b/node_modules/lodash/fp/always.js new file mode 100644 index 000000000..988770307 --- /dev/null +++ b/node_modules/lodash/fp/always.js @@ -0,0 +1 @@ +module.exports = require('./constant'); diff --git a/node_modules/lodash/fp/any.js b/node_modules/lodash/fp/any.js new file mode 100644 index 000000000..900ac25e8 --- /dev/null +++ b/node_modules/lodash/fp/any.js @@ -0,0 +1 @@ +module.exports = require('./some'); diff --git a/node_modules/lodash/fp/anyPass.js b/node_modules/lodash/fp/anyPass.js new file mode 100644 index 000000000..2774ab37a --- /dev/null +++ b/node_modules/lodash/fp/anyPass.js @@ -0,0 +1 @@ +module.exports = require('./overSome'); diff --git a/node_modules/lodash/fp/apply.js b/node_modules/lodash/fp/apply.js new file mode 100644 index 000000000..2b7571296 --- /dev/null +++ b/node_modules/lodash/fp/apply.js @@ -0,0 +1 @@ +module.exports = require('./spread'); diff --git a/node_modules/lodash/fp/array.js b/node_modules/lodash/fp/array.js new file mode 100644 index 000000000..fe939c2c2 --- /dev/null +++ b/node_modules/lodash/fp/array.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../array')); diff --git a/node_modules/lodash/fp/ary.js b/node_modules/lodash/fp/ary.js new file mode 100644 index 000000000..8edf18778 --- /dev/null +++ b/node_modules/lodash/fp/ary.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('ary', require('../ary')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assign.js b/node_modules/lodash/fp/assign.js new file mode 100644 index 000000000..23f47af17 --- /dev/null +++ b/node_modules/lodash/fp/assign.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assign', require('../assign')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignAll.js b/node_modules/lodash/fp/assignAll.js new file mode 100644 index 000000000..b1d36c7ef --- /dev/null +++ b/node_modules/lodash/fp/assignAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignAll', require('../assign')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignAllWith.js b/node_modules/lodash/fp/assignAllWith.js new file mode 100644 index 000000000..21e836e6f --- /dev/null +++ b/node_modules/lodash/fp/assignAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignAllWith', require('../assignWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignIn.js b/node_modules/lodash/fp/assignIn.js new file mode 100644 index 000000000..6e7c65fad --- /dev/null +++ b/node_modules/lodash/fp/assignIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignIn', require('../assignIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignInAll.js b/node_modules/lodash/fp/assignInAll.js new file mode 100644 index 000000000..7ba75dba1 --- /dev/null +++ b/node_modules/lodash/fp/assignInAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInAll', require('../assignIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignInAllWith.js b/node_modules/lodash/fp/assignInAllWith.js new file mode 100644 index 000000000..e766903d4 --- /dev/null +++ b/node_modules/lodash/fp/assignInAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInAllWith', require('../assignInWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignInWith.js b/node_modules/lodash/fp/assignInWith.js new file mode 100644 index 000000000..acb592367 --- /dev/null +++ b/node_modules/lodash/fp/assignInWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInWith', require('../assignInWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignWith.js b/node_modules/lodash/fp/assignWith.js new file mode 100644 index 000000000..eb925212d --- /dev/null +++ b/node_modules/lodash/fp/assignWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignWith', require('../assignWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assoc.js b/node_modules/lodash/fp/assoc.js new file mode 100644 index 000000000..7648820c9 --- /dev/null +++ b/node_modules/lodash/fp/assoc.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/node_modules/lodash/fp/assocPath.js b/node_modules/lodash/fp/assocPath.js new file mode 100644 index 000000000..7648820c9 --- /dev/null +++ b/node_modules/lodash/fp/assocPath.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/node_modules/lodash/fp/at.js b/node_modules/lodash/fp/at.js new file mode 100644 index 000000000..cc39d257c --- /dev/null +++ b/node_modules/lodash/fp/at.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('at', require('../at')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/attempt.js b/node_modules/lodash/fp/attempt.js new file mode 100644 index 000000000..26ca42ea0 --- /dev/null +++ b/node_modules/lodash/fp/attempt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('attempt', require('../attempt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/before.js b/node_modules/lodash/fp/before.js new file mode 100644 index 000000000..7a2de65d2 --- /dev/null +++ b/node_modules/lodash/fp/before.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('before', require('../before')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/bind.js b/node_modules/lodash/fp/bind.js new file mode 100644 index 000000000..5cbe4f302 --- /dev/null +++ b/node_modules/lodash/fp/bind.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bind', require('../bind')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/bindAll.js b/node_modules/lodash/fp/bindAll.js new file mode 100644 index 000000000..6b4a4a0f2 --- /dev/null +++ b/node_modules/lodash/fp/bindAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bindAll', require('../bindAll')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/bindKey.js b/node_modules/lodash/fp/bindKey.js new file mode 100644 index 000000000..6a46c6b19 --- /dev/null +++ b/node_modules/lodash/fp/bindKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bindKey', require('../bindKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/camelCase.js b/node_modules/lodash/fp/camelCase.js new file mode 100644 index 000000000..87b77b493 --- /dev/null +++ b/node_modules/lodash/fp/camelCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('camelCase', require('../camelCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/capitalize.js b/node_modules/lodash/fp/capitalize.js new file mode 100644 index 000000000..cac74e14f --- /dev/null +++ b/node_modules/lodash/fp/capitalize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('capitalize', require('../capitalize'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/castArray.js b/node_modules/lodash/fp/castArray.js new file mode 100644 index 000000000..8681c099e --- /dev/null +++ b/node_modules/lodash/fp/castArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('castArray', require('../castArray')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/ceil.js b/node_modules/lodash/fp/ceil.js new file mode 100644 index 000000000..f416b7294 --- /dev/null +++ b/node_modules/lodash/fp/ceil.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('ceil', require('../ceil')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/chain.js b/node_modules/lodash/fp/chain.js new file mode 100644 index 000000000..604fe398b --- /dev/null +++ b/node_modules/lodash/fp/chain.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('chain', require('../chain'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/chunk.js b/node_modules/lodash/fp/chunk.js new file mode 100644 index 000000000..871ab0858 --- /dev/null +++ b/node_modules/lodash/fp/chunk.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('chunk', require('../chunk')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/clamp.js b/node_modules/lodash/fp/clamp.js new file mode 100644 index 000000000..3b06c01ce --- /dev/null +++ b/node_modules/lodash/fp/clamp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('clamp', require('../clamp')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/clone.js b/node_modules/lodash/fp/clone.js new file mode 100644 index 000000000..cadb59c91 --- /dev/null +++ b/node_modules/lodash/fp/clone.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('clone', require('../clone'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/cloneDeep.js b/node_modules/lodash/fp/cloneDeep.js new file mode 100644 index 000000000..a6107aac9 --- /dev/null +++ b/node_modules/lodash/fp/cloneDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/cloneDeepWith.js b/node_modules/lodash/fp/cloneDeepWith.js new file mode 100644 index 000000000..6f01e44a3 --- /dev/null +++ b/node_modules/lodash/fp/cloneDeepWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneDeepWith', require('../cloneDeepWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/cloneWith.js b/node_modules/lodash/fp/cloneWith.js new file mode 100644 index 000000000..aa8857810 --- /dev/null +++ b/node_modules/lodash/fp/cloneWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneWith', require('../cloneWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/collection.js b/node_modules/lodash/fp/collection.js new file mode 100644 index 000000000..fc8b328a0 --- /dev/null +++ b/node_modules/lodash/fp/collection.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../collection')); diff --git a/node_modules/lodash/fp/commit.js b/node_modules/lodash/fp/commit.js new file mode 100644 index 000000000..130a894f8 --- /dev/null +++ b/node_modules/lodash/fp/commit.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('commit', require('../commit'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/compact.js b/node_modules/lodash/fp/compact.js new file mode 100644 index 000000000..ce8f7a1ac --- /dev/null +++ b/node_modules/lodash/fp/compact.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('compact', require('../compact'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/complement.js b/node_modules/lodash/fp/complement.js new file mode 100644 index 000000000..93eb462b3 --- /dev/null +++ b/node_modules/lodash/fp/complement.js @@ -0,0 +1 @@ +module.exports = require('./negate'); diff --git a/node_modules/lodash/fp/compose.js b/node_modules/lodash/fp/compose.js new file mode 100644 index 000000000..1954e9423 --- /dev/null +++ b/node_modules/lodash/fp/compose.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/node_modules/lodash/fp/concat.js b/node_modules/lodash/fp/concat.js new file mode 100644 index 000000000..e59346ad9 --- /dev/null +++ b/node_modules/lodash/fp/concat.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('concat', require('../concat')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/cond.js b/node_modules/lodash/fp/cond.js new file mode 100644 index 000000000..6a0120efd --- /dev/null +++ b/node_modules/lodash/fp/cond.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cond', require('../cond'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/conforms.js b/node_modules/lodash/fp/conforms.js new file mode 100644 index 000000000..3247f64a8 --- /dev/null +++ b/node_modules/lodash/fp/conforms.js @@ -0,0 +1 @@ +module.exports = require('./conformsTo'); diff --git a/node_modules/lodash/fp/conformsTo.js b/node_modules/lodash/fp/conformsTo.js new file mode 100644 index 000000000..aa7f41ec0 --- /dev/null +++ b/node_modules/lodash/fp/conformsTo.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('conformsTo', require('../conformsTo')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/constant.js b/node_modules/lodash/fp/constant.js new file mode 100644 index 000000000..9e406fc09 --- /dev/null +++ b/node_modules/lodash/fp/constant.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('constant', require('../constant'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/contains.js b/node_modules/lodash/fp/contains.js new file mode 100644 index 000000000..594722af5 --- /dev/null +++ b/node_modules/lodash/fp/contains.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/node_modules/lodash/fp/convert.js b/node_modules/lodash/fp/convert.js new file mode 100644 index 000000000..4795dc424 --- /dev/null +++ b/node_modules/lodash/fp/convert.js @@ -0,0 +1,18 @@ +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/node_modules/lodash/fp/countBy.js b/node_modules/lodash/fp/countBy.js new file mode 100644 index 000000000..dfa464326 --- /dev/null +++ b/node_modules/lodash/fp/countBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('countBy', require('../countBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/create.js b/node_modules/lodash/fp/create.js new file mode 100644 index 000000000..752025fb8 --- /dev/null +++ b/node_modules/lodash/fp/create.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('create', require('../create')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/curry.js b/node_modules/lodash/fp/curry.js new file mode 100644 index 000000000..b0b4168c5 --- /dev/null +++ b/node_modules/lodash/fp/curry.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curry', require('../curry')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/curryN.js b/node_modules/lodash/fp/curryN.js new file mode 100644 index 000000000..2ae7d00a6 --- /dev/null +++ b/node_modules/lodash/fp/curryN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryN', require('../curry')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/curryRight.js b/node_modules/lodash/fp/curryRight.js new file mode 100644 index 000000000..cb619eb5d --- /dev/null +++ b/node_modules/lodash/fp/curryRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryRight', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/curryRightN.js b/node_modules/lodash/fp/curryRightN.js new file mode 100644 index 000000000..2495afc89 --- /dev/null +++ b/node_modules/lodash/fp/curryRightN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryRightN', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/date.js b/node_modules/lodash/fp/date.js new file mode 100644 index 000000000..82cb952bc --- /dev/null +++ b/node_modules/lodash/fp/date.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../date')); diff --git a/node_modules/lodash/fp/debounce.js b/node_modules/lodash/fp/debounce.js new file mode 100644 index 000000000..26122293a --- /dev/null +++ b/node_modules/lodash/fp/debounce.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('debounce', require('../debounce')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/deburr.js b/node_modules/lodash/fp/deburr.js new file mode 100644 index 000000000..96463ab88 --- /dev/null +++ b/node_modules/lodash/fp/deburr.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('deburr', require('../deburr'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaultTo.js b/node_modules/lodash/fp/defaultTo.js new file mode 100644 index 000000000..d6b52a444 --- /dev/null +++ b/node_modules/lodash/fp/defaultTo.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultTo', require('../defaultTo')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaults.js b/node_modules/lodash/fp/defaults.js new file mode 100644 index 000000000..e1a8e6e7d --- /dev/null +++ b/node_modules/lodash/fp/defaults.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaults', require('../defaults')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaultsAll.js b/node_modules/lodash/fp/defaultsAll.js new file mode 100644 index 000000000..238fcc3c2 --- /dev/null +++ b/node_modules/lodash/fp/defaultsAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsAll', require('../defaults')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaultsDeep.js b/node_modules/lodash/fp/defaultsDeep.js new file mode 100644 index 000000000..1f172ff94 --- /dev/null +++ b/node_modules/lodash/fp/defaultsDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsDeep', require('../defaultsDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaultsDeepAll.js b/node_modules/lodash/fp/defaultsDeepAll.js new file mode 100644 index 000000000..6835f2f07 --- /dev/null +++ b/node_modules/lodash/fp/defaultsDeepAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsDeepAll', require('../defaultsDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defer.js b/node_modules/lodash/fp/defer.js new file mode 100644 index 000000000..ec7990fe2 --- /dev/null +++ b/node_modules/lodash/fp/defer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defer', require('../defer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/delay.js b/node_modules/lodash/fp/delay.js new file mode 100644 index 000000000..556dbd568 --- /dev/null +++ b/node_modules/lodash/fp/delay.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('delay', require('../delay')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/difference.js b/node_modules/lodash/fp/difference.js new file mode 100644 index 000000000..2d0376542 --- /dev/null +++ b/node_modules/lodash/fp/difference.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('difference', require('../difference')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/differenceBy.js b/node_modules/lodash/fp/differenceBy.js new file mode 100644 index 000000000..2f914910a --- /dev/null +++ b/node_modules/lodash/fp/differenceBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('differenceBy', require('../differenceBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/differenceWith.js b/node_modules/lodash/fp/differenceWith.js new file mode 100644 index 000000000..bcf5ad2e1 --- /dev/null +++ b/node_modules/lodash/fp/differenceWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('differenceWith', require('../differenceWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/dissoc.js b/node_modules/lodash/fp/dissoc.js new file mode 100644 index 000000000..7ec7be190 --- /dev/null +++ b/node_modules/lodash/fp/dissoc.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/node_modules/lodash/fp/dissocPath.js b/node_modules/lodash/fp/dissocPath.js new file mode 100644 index 000000000..7ec7be190 --- /dev/null +++ b/node_modules/lodash/fp/dissocPath.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/node_modules/lodash/fp/divide.js b/node_modules/lodash/fp/divide.js new file mode 100644 index 000000000..82048c5e0 --- /dev/null +++ b/node_modules/lodash/fp/divide.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('divide', require('../divide')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/drop.js b/node_modules/lodash/fp/drop.js new file mode 100644 index 000000000..2fa9b4faa --- /dev/null +++ b/node_modules/lodash/fp/drop.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('drop', require('../drop')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/dropLast.js b/node_modules/lodash/fp/dropLast.js new file mode 100644 index 000000000..174e52551 --- /dev/null +++ b/node_modules/lodash/fp/dropLast.js @@ -0,0 +1 @@ +module.exports = require('./dropRight'); diff --git a/node_modules/lodash/fp/dropLastWhile.js b/node_modules/lodash/fp/dropLastWhile.js new file mode 100644 index 000000000..be2a9d24a --- /dev/null +++ b/node_modules/lodash/fp/dropLastWhile.js @@ -0,0 +1 @@ +module.exports = require('./dropRightWhile'); diff --git a/node_modules/lodash/fp/dropRight.js b/node_modules/lodash/fp/dropRight.js new file mode 100644 index 000000000..e98881fcd --- /dev/null +++ b/node_modules/lodash/fp/dropRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropRight', require('../dropRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/dropRightWhile.js b/node_modules/lodash/fp/dropRightWhile.js new file mode 100644 index 000000000..cacaa7019 --- /dev/null +++ b/node_modules/lodash/fp/dropRightWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropRightWhile', require('../dropRightWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/dropWhile.js b/node_modules/lodash/fp/dropWhile.js new file mode 100644 index 000000000..285f864d1 --- /dev/null +++ b/node_modules/lodash/fp/dropWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropWhile', require('../dropWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/each.js b/node_modules/lodash/fp/each.js new file mode 100644 index 000000000..8800f4204 --- /dev/null +++ b/node_modules/lodash/fp/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/node_modules/lodash/fp/eachRight.js b/node_modules/lodash/fp/eachRight.js new file mode 100644 index 000000000..3252b2aba --- /dev/null +++ b/node_modules/lodash/fp/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/node_modules/lodash/fp/endsWith.js b/node_modules/lodash/fp/endsWith.js new file mode 100644 index 000000000..17dc2a495 --- /dev/null +++ b/node_modules/lodash/fp/endsWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('endsWith', require('../endsWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/entries.js b/node_modules/lodash/fp/entries.js new file mode 100644 index 000000000..7a88df204 --- /dev/null +++ b/node_modules/lodash/fp/entries.js @@ -0,0 +1 @@ +module.exports = require('./toPairs'); diff --git a/node_modules/lodash/fp/entriesIn.js b/node_modules/lodash/fp/entriesIn.js new file mode 100644 index 000000000..f6c6331c1 --- /dev/null +++ b/node_modules/lodash/fp/entriesIn.js @@ -0,0 +1 @@ +module.exports = require('./toPairsIn'); diff --git a/node_modules/lodash/fp/eq.js b/node_modules/lodash/fp/eq.js new file mode 100644 index 000000000..9a3d21bf1 --- /dev/null +++ b/node_modules/lodash/fp/eq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('eq', require('../eq')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/equals.js b/node_modules/lodash/fp/equals.js new file mode 100644 index 000000000..e6a5ce0ca --- /dev/null +++ b/node_modules/lodash/fp/equals.js @@ -0,0 +1 @@ +module.exports = require('./isEqual'); diff --git a/node_modules/lodash/fp/escape.js b/node_modules/lodash/fp/escape.js new file mode 100644 index 000000000..52c1fbba6 --- /dev/null +++ b/node_modules/lodash/fp/escape.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('escape', require('../escape'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/escapeRegExp.js b/node_modules/lodash/fp/escapeRegExp.js new file mode 100644 index 000000000..369b2eff6 --- /dev/null +++ b/node_modules/lodash/fp/escapeRegExp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/every.js b/node_modules/lodash/fp/every.js new file mode 100644 index 000000000..95c2776c3 --- /dev/null +++ b/node_modules/lodash/fp/every.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('every', require('../every')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/extend.js b/node_modules/lodash/fp/extend.js new file mode 100644 index 000000000..e00166c20 --- /dev/null +++ b/node_modules/lodash/fp/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/node_modules/lodash/fp/extendAll.js b/node_modules/lodash/fp/extendAll.js new file mode 100644 index 000000000..cc55b64fc --- /dev/null +++ b/node_modules/lodash/fp/extendAll.js @@ -0,0 +1 @@ +module.exports = require('./assignInAll'); diff --git a/node_modules/lodash/fp/extendAllWith.js b/node_modules/lodash/fp/extendAllWith.js new file mode 100644 index 000000000..6679d208b --- /dev/null +++ b/node_modules/lodash/fp/extendAllWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInAllWith'); diff --git a/node_modules/lodash/fp/extendWith.js b/node_modules/lodash/fp/extendWith.js new file mode 100644 index 000000000..dbdcb3b4e --- /dev/null +++ b/node_modules/lodash/fp/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/node_modules/lodash/fp/fill.js b/node_modules/lodash/fp/fill.js new file mode 100644 index 000000000..b2d47e84e --- /dev/null +++ b/node_modules/lodash/fp/fill.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('fill', require('../fill')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/filter.js b/node_modules/lodash/fp/filter.js new file mode 100644 index 000000000..796d501ce --- /dev/null +++ b/node_modules/lodash/fp/filter.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('filter', require('../filter')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/find.js b/node_modules/lodash/fp/find.js new file mode 100644 index 000000000..f805d336a --- /dev/null +++ b/node_modules/lodash/fp/find.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('find', require('../find')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findFrom.js b/node_modules/lodash/fp/findFrom.js new file mode 100644 index 000000000..da8275e84 --- /dev/null +++ b/node_modules/lodash/fp/findFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findFrom', require('../find')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findIndex.js b/node_modules/lodash/fp/findIndex.js new file mode 100644 index 000000000..8c15fd116 --- /dev/null +++ b/node_modules/lodash/fp/findIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findIndex', require('../findIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findIndexFrom.js b/node_modules/lodash/fp/findIndexFrom.js new file mode 100644 index 000000000..32e98cb95 --- /dev/null +++ b/node_modules/lodash/fp/findIndexFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findIndexFrom', require('../findIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findKey.js b/node_modules/lodash/fp/findKey.js new file mode 100644 index 000000000..475bcfa8a --- /dev/null +++ b/node_modules/lodash/fp/findKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findKey', require('../findKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLast.js b/node_modules/lodash/fp/findLast.js new file mode 100644 index 000000000..093fe94e7 --- /dev/null +++ b/node_modules/lodash/fp/findLast.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLast', require('../findLast')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLastFrom.js b/node_modules/lodash/fp/findLastFrom.js new file mode 100644 index 000000000..76c38fbad --- /dev/null +++ b/node_modules/lodash/fp/findLastFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastFrom', require('../findLast')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLastIndex.js b/node_modules/lodash/fp/findLastIndex.js new file mode 100644 index 000000000..36986df0b --- /dev/null +++ b/node_modules/lodash/fp/findLastIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastIndex', require('../findLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLastIndexFrom.js b/node_modules/lodash/fp/findLastIndexFrom.js new file mode 100644 index 000000000..34c8176cf --- /dev/null +++ b/node_modules/lodash/fp/findLastIndexFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastIndexFrom', require('../findLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLastKey.js b/node_modules/lodash/fp/findLastKey.js new file mode 100644 index 000000000..5f81b604e --- /dev/null +++ b/node_modules/lodash/fp/findLastKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastKey', require('../findLastKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/first.js b/node_modules/lodash/fp/first.js new file mode 100644 index 000000000..53f4ad13e --- /dev/null +++ b/node_modules/lodash/fp/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/node_modules/lodash/fp/flatMap.js b/node_modules/lodash/fp/flatMap.js new file mode 100644 index 000000000..d01dc4d04 --- /dev/null +++ b/node_modules/lodash/fp/flatMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMap', require('../flatMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flatMapDeep.js b/node_modules/lodash/fp/flatMapDeep.js new file mode 100644 index 000000000..569c42eb9 --- /dev/null +++ b/node_modules/lodash/fp/flatMapDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMapDeep', require('../flatMapDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flatMapDepth.js b/node_modules/lodash/fp/flatMapDepth.js new file mode 100644 index 000000000..6eb68fdee --- /dev/null +++ b/node_modules/lodash/fp/flatMapDepth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMapDepth', require('../flatMapDepth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flatten.js b/node_modules/lodash/fp/flatten.js new file mode 100644 index 000000000..30425d896 --- /dev/null +++ b/node_modules/lodash/fp/flatten.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatten', require('../flatten'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flattenDeep.js b/node_modules/lodash/fp/flattenDeep.js new file mode 100644 index 000000000..aed5db27c --- /dev/null +++ b/node_modules/lodash/fp/flattenDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flattenDeep', require('../flattenDeep'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flattenDepth.js b/node_modules/lodash/fp/flattenDepth.js new file mode 100644 index 000000000..ad65e378e --- /dev/null +++ b/node_modules/lodash/fp/flattenDepth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flattenDepth', require('../flattenDepth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flip.js b/node_modules/lodash/fp/flip.js new file mode 100644 index 000000000..0547e7b4e --- /dev/null +++ b/node_modules/lodash/fp/flip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flip', require('../flip'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/floor.js b/node_modules/lodash/fp/floor.js new file mode 100644 index 000000000..a6cf3358e --- /dev/null +++ b/node_modules/lodash/fp/floor.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('floor', require('../floor')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flow.js b/node_modules/lodash/fp/flow.js new file mode 100644 index 000000000..cd83677a6 --- /dev/null +++ b/node_modules/lodash/fp/flow.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flow', require('../flow')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flowRight.js b/node_modules/lodash/fp/flowRight.js new file mode 100644 index 000000000..972a5b9b1 --- /dev/null +++ b/node_modules/lodash/fp/flowRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flowRight', require('../flowRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forEach.js b/node_modules/lodash/fp/forEach.js new file mode 100644 index 000000000..2f494521c --- /dev/null +++ b/node_modules/lodash/fp/forEach.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forEach', require('../forEach')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forEachRight.js b/node_modules/lodash/fp/forEachRight.js new file mode 100644 index 000000000..3ff97336b --- /dev/null +++ b/node_modules/lodash/fp/forEachRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forEachRight', require('../forEachRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forIn.js b/node_modules/lodash/fp/forIn.js new file mode 100644 index 000000000..9341749b1 --- /dev/null +++ b/node_modules/lodash/fp/forIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forIn', require('../forIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forInRight.js b/node_modules/lodash/fp/forInRight.js new file mode 100644 index 000000000..cecf8bbfa --- /dev/null +++ b/node_modules/lodash/fp/forInRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forInRight', require('../forInRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forOwn.js b/node_modules/lodash/fp/forOwn.js new file mode 100644 index 000000000..246449e9a --- /dev/null +++ b/node_modules/lodash/fp/forOwn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forOwn', require('../forOwn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forOwnRight.js b/node_modules/lodash/fp/forOwnRight.js new file mode 100644 index 000000000..c5e826e0d --- /dev/null +++ b/node_modules/lodash/fp/forOwnRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forOwnRight', require('../forOwnRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/fromPairs.js b/node_modules/lodash/fp/fromPairs.js new file mode 100644 index 000000000..f8cc5968c --- /dev/null +++ b/node_modules/lodash/fp/fromPairs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('fromPairs', require('../fromPairs')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/function.js b/node_modules/lodash/fp/function.js new file mode 100644 index 000000000..dfe69b1fa --- /dev/null +++ b/node_modules/lodash/fp/function.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../function')); diff --git a/node_modules/lodash/fp/functions.js b/node_modules/lodash/fp/functions.js new file mode 100644 index 000000000..09d1bb1ba --- /dev/null +++ b/node_modules/lodash/fp/functions.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('functions', require('../functions'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/functionsIn.js b/node_modules/lodash/fp/functionsIn.js new file mode 100644 index 000000000..2cfeb83eb --- /dev/null +++ b/node_modules/lodash/fp/functionsIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('functionsIn', require('../functionsIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/get.js b/node_modules/lodash/fp/get.js new file mode 100644 index 000000000..6d3a32863 --- /dev/null +++ b/node_modules/lodash/fp/get.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('get', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/getOr.js b/node_modules/lodash/fp/getOr.js new file mode 100644 index 000000000..7dbf771f0 --- /dev/null +++ b/node_modules/lodash/fp/getOr.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('getOr', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/groupBy.js b/node_modules/lodash/fp/groupBy.js new file mode 100644 index 000000000..fc0bc78a5 --- /dev/null +++ b/node_modules/lodash/fp/groupBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('groupBy', require('../groupBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/gt.js b/node_modules/lodash/fp/gt.js new file mode 100644 index 000000000..9e57c8085 --- /dev/null +++ b/node_modules/lodash/fp/gt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('gt', require('../gt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/gte.js b/node_modules/lodash/fp/gte.js new file mode 100644 index 000000000..458478638 --- /dev/null +++ b/node_modules/lodash/fp/gte.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('gte', require('../gte')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/has.js b/node_modules/lodash/fp/has.js new file mode 100644 index 000000000..b90129839 --- /dev/null +++ b/node_modules/lodash/fp/has.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('has', require('../has')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/hasIn.js b/node_modules/lodash/fp/hasIn.js new file mode 100644 index 000000000..b3c3d1a3f --- /dev/null +++ b/node_modules/lodash/fp/hasIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('hasIn', require('../hasIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/head.js b/node_modules/lodash/fp/head.js new file mode 100644 index 000000000..2694f0a21 --- /dev/null +++ b/node_modules/lodash/fp/head.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('head', require('../head'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/identical.js b/node_modules/lodash/fp/identical.js new file mode 100644 index 000000000..85563f4a4 --- /dev/null +++ b/node_modules/lodash/fp/identical.js @@ -0,0 +1 @@ +module.exports = require('./eq'); diff --git a/node_modules/lodash/fp/identity.js b/node_modules/lodash/fp/identity.js new file mode 100644 index 000000000..096415a5d --- /dev/null +++ b/node_modules/lodash/fp/identity.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('identity', require('../identity'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/inRange.js b/node_modules/lodash/fp/inRange.js new file mode 100644 index 000000000..202d940ba --- /dev/null +++ b/node_modules/lodash/fp/inRange.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('inRange', require('../inRange')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/includes.js b/node_modules/lodash/fp/includes.js new file mode 100644 index 000000000..11467805c --- /dev/null +++ b/node_modules/lodash/fp/includes.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('includes', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/includesFrom.js b/node_modules/lodash/fp/includesFrom.js new file mode 100644 index 000000000..683afdb46 --- /dev/null +++ b/node_modules/lodash/fp/includesFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('includesFrom', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/indexBy.js b/node_modules/lodash/fp/indexBy.js new file mode 100644 index 000000000..7e64bc0fc --- /dev/null +++ b/node_modules/lodash/fp/indexBy.js @@ -0,0 +1 @@ +module.exports = require('./keyBy'); diff --git a/node_modules/lodash/fp/indexOf.js b/node_modules/lodash/fp/indexOf.js new file mode 100644 index 000000000..524658eb9 --- /dev/null +++ b/node_modules/lodash/fp/indexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('indexOf', require('../indexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/indexOfFrom.js b/node_modules/lodash/fp/indexOfFrom.js new file mode 100644 index 000000000..d99c822f4 --- /dev/null +++ b/node_modules/lodash/fp/indexOfFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('indexOfFrom', require('../indexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/init.js b/node_modules/lodash/fp/init.js new file mode 100644 index 000000000..2f88d8b0e --- /dev/null +++ b/node_modules/lodash/fp/init.js @@ -0,0 +1 @@ +module.exports = require('./initial'); diff --git a/node_modules/lodash/fp/initial.js b/node_modules/lodash/fp/initial.js new file mode 100644 index 000000000..b732ba0bd --- /dev/null +++ b/node_modules/lodash/fp/initial.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('initial', require('../initial'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/intersection.js b/node_modules/lodash/fp/intersection.js new file mode 100644 index 000000000..52936d560 --- /dev/null +++ b/node_modules/lodash/fp/intersection.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersection', require('../intersection')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/intersectionBy.js b/node_modules/lodash/fp/intersectionBy.js new file mode 100644 index 000000000..72629f277 --- /dev/null +++ b/node_modules/lodash/fp/intersectionBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersectionBy', require('../intersectionBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/intersectionWith.js b/node_modules/lodash/fp/intersectionWith.js new file mode 100644 index 000000000..e064f400f --- /dev/null +++ b/node_modules/lodash/fp/intersectionWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersectionWith', require('../intersectionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invert.js b/node_modules/lodash/fp/invert.js new file mode 100644 index 000000000..2d5d1f0d4 --- /dev/null +++ b/node_modules/lodash/fp/invert.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invert', require('../invert')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invertBy.js b/node_modules/lodash/fp/invertBy.js new file mode 100644 index 000000000..63ca97ecb --- /dev/null +++ b/node_modules/lodash/fp/invertBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invertBy', require('../invertBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invertObj.js b/node_modules/lodash/fp/invertObj.js new file mode 100644 index 000000000..f1d842e49 --- /dev/null +++ b/node_modules/lodash/fp/invertObj.js @@ -0,0 +1 @@ +module.exports = require('./invert'); diff --git a/node_modules/lodash/fp/invoke.js b/node_modules/lodash/fp/invoke.js new file mode 100644 index 000000000..fcf17f0d5 --- /dev/null +++ b/node_modules/lodash/fp/invoke.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invoke', require('../invoke')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invokeArgs.js b/node_modules/lodash/fp/invokeArgs.js new file mode 100644 index 000000000..d3f2953fa --- /dev/null +++ b/node_modules/lodash/fp/invokeArgs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeArgs', require('../invoke')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invokeArgsMap.js b/node_modules/lodash/fp/invokeArgsMap.js new file mode 100644 index 000000000..eaa9f84ff --- /dev/null +++ b/node_modules/lodash/fp/invokeArgsMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeArgsMap', require('../invokeMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invokeMap.js b/node_modules/lodash/fp/invokeMap.js new file mode 100644 index 000000000..6515fd73f --- /dev/null +++ b/node_modules/lodash/fp/invokeMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeMap', require('../invokeMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArguments.js b/node_modules/lodash/fp/isArguments.js new file mode 100644 index 000000000..1d93c9e59 --- /dev/null +++ b/node_modules/lodash/fp/isArguments.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArguments', require('../isArguments'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArray.js b/node_modules/lodash/fp/isArray.js new file mode 100644 index 000000000..ba7ade8dd --- /dev/null +++ b/node_modules/lodash/fp/isArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArray', require('../isArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArrayBuffer.js b/node_modules/lodash/fp/isArrayBuffer.js new file mode 100644 index 000000000..5088513fa --- /dev/null +++ b/node_modules/lodash/fp/isArrayBuffer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArrayBuffer', require('../isArrayBuffer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArrayLike.js b/node_modules/lodash/fp/isArrayLike.js new file mode 100644 index 000000000..8f1856bf6 --- /dev/null +++ b/node_modules/lodash/fp/isArrayLike.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArrayLike', require('../isArrayLike'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArrayLikeObject.js b/node_modules/lodash/fp/isArrayLikeObject.js new file mode 100644 index 000000000..21084984b --- /dev/null +++ b/node_modules/lodash/fp/isArrayLikeObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArrayLikeObject', require('../isArrayLikeObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isBoolean.js b/node_modules/lodash/fp/isBoolean.js new file mode 100644 index 000000000..9339f75b1 --- /dev/null +++ b/node_modules/lodash/fp/isBoolean.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isBoolean', require('../isBoolean'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isBuffer.js b/node_modules/lodash/fp/isBuffer.js new file mode 100644 index 000000000..e60b12381 --- /dev/null +++ b/node_modules/lodash/fp/isBuffer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isBuffer', require('../isBuffer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isDate.js b/node_modules/lodash/fp/isDate.js new file mode 100644 index 000000000..dc41d089e --- /dev/null +++ b/node_modules/lodash/fp/isDate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isDate', require('../isDate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isElement.js b/node_modules/lodash/fp/isElement.js new file mode 100644 index 000000000..18ee039a2 --- /dev/null +++ b/node_modules/lodash/fp/isElement.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isElement', require('../isElement'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isEmpty.js b/node_modules/lodash/fp/isEmpty.js new file mode 100644 index 000000000..0f4ae841e --- /dev/null +++ b/node_modules/lodash/fp/isEmpty.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isEmpty', require('../isEmpty'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isEqual.js b/node_modules/lodash/fp/isEqual.js new file mode 100644 index 000000000..41383865f --- /dev/null +++ b/node_modules/lodash/fp/isEqual.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isEqual', require('../isEqual')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isEqualWith.js b/node_modules/lodash/fp/isEqualWith.js new file mode 100644 index 000000000..029ff5cda --- /dev/null +++ b/node_modules/lodash/fp/isEqualWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isEqualWith', require('../isEqualWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isError.js b/node_modules/lodash/fp/isError.js new file mode 100644 index 000000000..3dfd81ccc --- /dev/null +++ b/node_modules/lodash/fp/isError.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isError', require('../isError'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isFinite.js b/node_modules/lodash/fp/isFinite.js new file mode 100644 index 000000000..0b647b841 --- /dev/null +++ b/node_modules/lodash/fp/isFinite.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isFinite', require('../isFinite'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isFunction.js b/node_modules/lodash/fp/isFunction.js new file mode 100644 index 000000000..ff8e5c458 --- /dev/null +++ b/node_modules/lodash/fp/isFunction.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isFunction', require('../isFunction'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isInteger.js b/node_modules/lodash/fp/isInteger.js new file mode 100644 index 000000000..67af4ff6d --- /dev/null +++ b/node_modules/lodash/fp/isInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isInteger', require('../isInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isLength.js b/node_modules/lodash/fp/isLength.js new file mode 100644 index 000000000..fc101c5a6 --- /dev/null +++ b/node_modules/lodash/fp/isLength.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isLength', require('../isLength'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isMap.js b/node_modules/lodash/fp/isMap.js new file mode 100644 index 000000000..a209aa66f --- /dev/null +++ b/node_modules/lodash/fp/isMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isMap', require('../isMap'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isMatch.js b/node_modules/lodash/fp/isMatch.js new file mode 100644 index 000000000..6264ca17f --- /dev/null +++ b/node_modules/lodash/fp/isMatch.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isMatch', require('../isMatch')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isMatchWith.js b/node_modules/lodash/fp/isMatchWith.js new file mode 100644 index 000000000..d95f31935 --- /dev/null +++ b/node_modules/lodash/fp/isMatchWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isMatchWith', require('../isMatchWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNaN.js b/node_modules/lodash/fp/isNaN.js new file mode 100644 index 000000000..66a978f11 --- /dev/null +++ b/node_modules/lodash/fp/isNaN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNaN', require('../isNaN'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNative.js b/node_modules/lodash/fp/isNative.js new file mode 100644 index 000000000..3d775ba95 --- /dev/null +++ b/node_modules/lodash/fp/isNative.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNative', require('../isNative'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNil.js b/node_modules/lodash/fp/isNil.js new file mode 100644 index 000000000..5952c028a --- /dev/null +++ b/node_modules/lodash/fp/isNil.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNil', require('../isNil'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNull.js b/node_modules/lodash/fp/isNull.js new file mode 100644 index 000000000..f201a354b --- /dev/null +++ b/node_modules/lodash/fp/isNull.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNull', require('../isNull'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNumber.js b/node_modules/lodash/fp/isNumber.js new file mode 100644 index 000000000..a2b5fa049 --- /dev/null +++ b/node_modules/lodash/fp/isNumber.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNumber', require('../isNumber'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isObject.js b/node_modules/lodash/fp/isObject.js new file mode 100644 index 000000000..231ace03b --- /dev/null +++ b/node_modules/lodash/fp/isObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isObject', require('../isObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isObjectLike.js b/node_modules/lodash/fp/isObjectLike.js new file mode 100644 index 000000000..f16082e6f --- /dev/null +++ b/node_modules/lodash/fp/isObjectLike.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isPlainObject.js b/node_modules/lodash/fp/isPlainObject.js new file mode 100644 index 000000000..b5bea90d3 --- /dev/null +++ b/node_modules/lodash/fp/isPlainObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isRegExp.js b/node_modules/lodash/fp/isRegExp.js new file mode 100644 index 000000000..12a1a3d71 --- /dev/null +++ b/node_modules/lodash/fp/isRegExp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isRegExp', require('../isRegExp'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isSafeInteger.js b/node_modules/lodash/fp/isSafeInteger.js new file mode 100644 index 000000000..7230f5520 --- /dev/null +++ b/node_modules/lodash/fp/isSafeInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isSet.js b/node_modules/lodash/fp/isSet.js new file mode 100644 index 000000000..35c01f6fa --- /dev/null +++ b/node_modules/lodash/fp/isSet.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSet', require('../isSet'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isString.js b/node_modules/lodash/fp/isString.js new file mode 100644 index 000000000..1fd0679ef --- /dev/null +++ b/node_modules/lodash/fp/isString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isString', require('../isString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isSymbol.js b/node_modules/lodash/fp/isSymbol.js new file mode 100644 index 000000000..38676956d --- /dev/null +++ b/node_modules/lodash/fp/isSymbol.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isTypedArray.js b/node_modules/lodash/fp/isTypedArray.js new file mode 100644 index 000000000..856795387 --- /dev/null +++ b/node_modules/lodash/fp/isTypedArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isUndefined.js b/node_modules/lodash/fp/isUndefined.js new file mode 100644 index 000000000..ddbca31ca --- /dev/null +++ b/node_modules/lodash/fp/isUndefined.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isWeakMap.js b/node_modules/lodash/fp/isWeakMap.js new file mode 100644 index 000000000..ef60c613c --- /dev/null +++ b/node_modules/lodash/fp/isWeakMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isWeakSet.js b/node_modules/lodash/fp/isWeakSet.js new file mode 100644 index 000000000..c99bfaa6d --- /dev/null +++ b/node_modules/lodash/fp/isWeakSet.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isWeakSet', require('../isWeakSet'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/iteratee.js b/node_modules/lodash/fp/iteratee.js new file mode 100644 index 000000000..9f0f71738 --- /dev/null +++ b/node_modules/lodash/fp/iteratee.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('iteratee', require('../iteratee')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/join.js b/node_modules/lodash/fp/join.js new file mode 100644 index 000000000..a220e003c --- /dev/null +++ b/node_modules/lodash/fp/join.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('join', require('../join')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/juxt.js b/node_modules/lodash/fp/juxt.js new file mode 100644 index 000000000..f71e04e00 --- /dev/null +++ b/node_modules/lodash/fp/juxt.js @@ -0,0 +1 @@ +module.exports = require('./over'); diff --git a/node_modules/lodash/fp/kebabCase.js b/node_modules/lodash/fp/kebabCase.js new file mode 100644 index 000000000..60737f17c --- /dev/null +++ b/node_modules/lodash/fp/kebabCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('kebabCase', require('../kebabCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/keyBy.js b/node_modules/lodash/fp/keyBy.js new file mode 100644 index 000000000..9a6a85d42 --- /dev/null +++ b/node_modules/lodash/fp/keyBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('keyBy', require('../keyBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/keys.js b/node_modules/lodash/fp/keys.js new file mode 100644 index 000000000..e12bb07f1 --- /dev/null +++ b/node_modules/lodash/fp/keys.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('keys', require('../keys'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/keysIn.js b/node_modules/lodash/fp/keysIn.js new file mode 100644 index 000000000..f3eb36a8d --- /dev/null +++ b/node_modules/lodash/fp/keysIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('keysIn', require('../keysIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lang.js b/node_modules/lodash/fp/lang.js new file mode 100644 index 000000000..08cc9c14b --- /dev/null +++ b/node_modules/lodash/fp/lang.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../lang')); diff --git a/node_modules/lodash/fp/last.js b/node_modules/lodash/fp/last.js new file mode 100644 index 000000000..0f716993f --- /dev/null +++ b/node_modules/lodash/fp/last.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('last', require('../last'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lastIndexOf.js b/node_modules/lodash/fp/lastIndexOf.js new file mode 100644 index 000000000..ddf39c301 --- /dev/null +++ b/node_modules/lodash/fp/lastIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lastIndexOf', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lastIndexOfFrom.js b/node_modules/lodash/fp/lastIndexOfFrom.js new file mode 100644 index 000000000..1ff6a0b5a --- /dev/null +++ b/node_modules/lodash/fp/lastIndexOfFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lastIndexOfFrom', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lowerCase.js b/node_modules/lodash/fp/lowerCase.js new file mode 100644 index 000000000..ea64bc15d --- /dev/null +++ b/node_modules/lodash/fp/lowerCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lowerFirst.js b/node_modules/lodash/fp/lowerFirst.js new file mode 100644 index 000000000..539720a3d --- /dev/null +++ b/node_modules/lodash/fp/lowerFirst.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lowerFirst', require('../lowerFirst'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lt.js b/node_modules/lodash/fp/lt.js new file mode 100644 index 000000000..a31d21ecc --- /dev/null +++ b/node_modules/lodash/fp/lt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lt', require('../lt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lte.js b/node_modules/lodash/fp/lte.js new file mode 100644 index 000000000..d795d10ee --- /dev/null +++ b/node_modules/lodash/fp/lte.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lte', require('../lte')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/map.js b/node_modules/lodash/fp/map.js new file mode 100644 index 000000000..cf9879436 --- /dev/null +++ b/node_modules/lodash/fp/map.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('map', require('../map')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mapKeys.js b/node_modules/lodash/fp/mapKeys.js new file mode 100644 index 000000000..168458709 --- /dev/null +++ b/node_modules/lodash/fp/mapKeys.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mapKeys', require('../mapKeys')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mapValues.js b/node_modules/lodash/fp/mapValues.js new file mode 100644 index 000000000..400497275 --- /dev/null +++ b/node_modules/lodash/fp/mapValues.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mapValues', require('../mapValues')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/matches.js b/node_modules/lodash/fp/matches.js new file mode 100644 index 000000000..29d1e1e4f --- /dev/null +++ b/node_modules/lodash/fp/matches.js @@ -0,0 +1 @@ +module.exports = require('./isMatch'); diff --git a/node_modules/lodash/fp/matchesProperty.js b/node_modules/lodash/fp/matchesProperty.js new file mode 100644 index 000000000..4575bd243 --- /dev/null +++ b/node_modules/lodash/fp/matchesProperty.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('matchesProperty', require('../matchesProperty')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/math.js b/node_modules/lodash/fp/math.js new file mode 100644 index 000000000..e8f50f792 --- /dev/null +++ b/node_modules/lodash/fp/math.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../math')); diff --git a/node_modules/lodash/fp/max.js b/node_modules/lodash/fp/max.js new file mode 100644 index 000000000..a66acac22 --- /dev/null +++ b/node_modules/lodash/fp/max.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('max', require('../max'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/maxBy.js b/node_modules/lodash/fp/maxBy.js new file mode 100644 index 000000000..d083fd64f --- /dev/null +++ b/node_modules/lodash/fp/maxBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('maxBy', require('../maxBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mean.js b/node_modules/lodash/fp/mean.js new file mode 100644 index 000000000..31172460c --- /dev/null +++ b/node_modules/lodash/fp/mean.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mean', require('../mean'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/meanBy.js b/node_modules/lodash/fp/meanBy.js new file mode 100644 index 000000000..556f25edf --- /dev/null +++ b/node_modules/lodash/fp/meanBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('meanBy', require('../meanBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/memoize.js b/node_modules/lodash/fp/memoize.js new file mode 100644 index 000000000..638eec63b --- /dev/null +++ b/node_modules/lodash/fp/memoize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('memoize', require('../memoize')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/merge.js b/node_modules/lodash/fp/merge.js new file mode 100644 index 000000000..ac66adde1 --- /dev/null +++ b/node_modules/lodash/fp/merge.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('merge', require('../merge')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mergeAll.js b/node_modules/lodash/fp/mergeAll.js new file mode 100644 index 000000000..a3674d671 --- /dev/null +++ b/node_modules/lodash/fp/mergeAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mergeAll', require('../merge')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mergeAllWith.js b/node_modules/lodash/fp/mergeAllWith.js new file mode 100644 index 000000000..4bd4206dc --- /dev/null +++ b/node_modules/lodash/fp/mergeAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mergeAllWith', require('../mergeWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mergeWith.js b/node_modules/lodash/fp/mergeWith.js new file mode 100644 index 000000000..00d44d5e1 --- /dev/null +++ b/node_modules/lodash/fp/mergeWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mergeWith', require('../mergeWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/method.js b/node_modules/lodash/fp/method.js new file mode 100644 index 000000000..f4060c687 --- /dev/null +++ b/node_modules/lodash/fp/method.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('method', require('../method')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/methodOf.js b/node_modules/lodash/fp/methodOf.js new file mode 100644 index 000000000..61399056f --- /dev/null +++ b/node_modules/lodash/fp/methodOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('methodOf', require('../methodOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/min.js b/node_modules/lodash/fp/min.js new file mode 100644 index 000000000..d12c6b40d --- /dev/null +++ b/node_modules/lodash/fp/min.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('min', require('../min'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/minBy.js b/node_modules/lodash/fp/minBy.js new file mode 100644 index 000000000..fdb9e24d8 --- /dev/null +++ b/node_modules/lodash/fp/minBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('minBy', require('../minBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mixin.js b/node_modules/lodash/fp/mixin.js new file mode 100644 index 000000000..332e6fbfd --- /dev/null +++ b/node_modules/lodash/fp/mixin.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mixin', require('../mixin')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/multiply.js b/node_modules/lodash/fp/multiply.js new file mode 100644 index 000000000..4dcf0b0d4 --- /dev/null +++ b/node_modules/lodash/fp/multiply.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('multiply', require('../multiply')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/nAry.js b/node_modules/lodash/fp/nAry.js new file mode 100644 index 000000000..f262a76cc --- /dev/null +++ b/node_modules/lodash/fp/nAry.js @@ -0,0 +1 @@ +module.exports = require('./ary'); diff --git a/node_modules/lodash/fp/negate.js b/node_modules/lodash/fp/negate.js new file mode 100644 index 000000000..8b6dc7c5b --- /dev/null +++ b/node_modules/lodash/fp/negate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('negate', require('../negate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/next.js b/node_modules/lodash/fp/next.js new file mode 100644 index 000000000..140155e23 --- /dev/null +++ b/node_modules/lodash/fp/next.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('next', require('../next'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/noop.js b/node_modules/lodash/fp/noop.js new file mode 100644 index 000000000..b9e32cc8c --- /dev/null +++ b/node_modules/lodash/fp/noop.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('noop', require('../noop'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/now.js b/node_modules/lodash/fp/now.js new file mode 100644 index 000000000..6de2068aa --- /dev/null +++ b/node_modules/lodash/fp/now.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('now', require('../now'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/nth.js b/node_modules/lodash/fp/nth.js new file mode 100644 index 000000000..da4fda740 --- /dev/null +++ b/node_modules/lodash/fp/nth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('nth', require('../nth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/nthArg.js b/node_modules/lodash/fp/nthArg.js new file mode 100644 index 000000000..fce316594 --- /dev/null +++ b/node_modules/lodash/fp/nthArg.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('nthArg', require('../nthArg')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/number.js b/node_modules/lodash/fp/number.js new file mode 100644 index 000000000..5c10b8842 --- /dev/null +++ b/node_modules/lodash/fp/number.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../number')); diff --git a/node_modules/lodash/fp/object.js b/node_modules/lodash/fp/object.js new file mode 100644 index 000000000..ae39a1346 --- /dev/null +++ b/node_modules/lodash/fp/object.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../object')); diff --git a/node_modules/lodash/fp/omit.js b/node_modules/lodash/fp/omit.js new file mode 100644 index 000000000..fd685291e --- /dev/null +++ b/node_modules/lodash/fp/omit.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('omit', require('../omit')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/omitAll.js b/node_modules/lodash/fp/omitAll.js new file mode 100644 index 000000000..144cf4b96 --- /dev/null +++ b/node_modules/lodash/fp/omitAll.js @@ -0,0 +1 @@ +module.exports = require('./omit'); diff --git a/node_modules/lodash/fp/omitBy.js b/node_modules/lodash/fp/omitBy.js new file mode 100644 index 000000000..90df73802 --- /dev/null +++ b/node_modules/lodash/fp/omitBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('omitBy', require('../omitBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/once.js b/node_modules/lodash/fp/once.js new file mode 100644 index 000000000..f8f0a5c73 --- /dev/null +++ b/node_modules/lodash/fp/once.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('once', require('../once'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/orderBy.js b/node_modules/lodash/fp/orderBy.js new file mode 100644 index 000000000..848e21075 --- /dev/null +++ b/node_modules/lodash/fp/orderBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('orderBy', require('../orderBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/over.js b/node_modules/lodash/fp/over.js new file mode 100644 index 000000000..01eba7b98 --- /dev/null +++ b/node_modules/lodash/fp/over.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('over', require('../over')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/overArgs.js b/node_modules/lodash/fp/overArgs.js new file mode 100644 index 000000000..738556f0c --- /dev/null +++ b/node_modules/lodash/fp/overArgs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overArgs', require('../overArgs')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/overEvery.js b/node_modules/lodash/fp/overEvery.js new file mode 100644 index 000000000..9f5a032dc --- /dev/null +++ b/node_modules/lodash/fp/overEvery.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overEvery', require('../overEvery')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/overSome.js b/node_modules/lodash/fp/overSome.js new file mode 100644 index 000000000..15939d586 --- /dev/null +++ b/node_modules/lodash/fp/overSome.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overSome', require('../overSome')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pad.js b/node_modules/lodash/fp/pad.js new file mode 100644 index 000000000..f1dea4a98 --- /dev/null +++ b/node_modules/lodash/fp/pad.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pad', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padChars.js b/node_modules/lodash/fp/padChars.js new file mode 100644 index 000000000..d6e0804cd --- /dev/null +++ b/node_modules/lodash/fp/padChars.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padChars', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padCharsEnd.js b/node_modules/lodash/fp/padCharsEnd.js new file mode 100644 index 000000000..d4ab79ad3 --- /dev/null +++ b/node_modules/lodash/fp/padCharsEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padCharsEnd', require('../padEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padCharsStart.js b/node_modules/lodash/fp/padCharsStart.js new file mode 100644 index 000000000..a08a30000 --- /dev/null +++ b/node_modules/lodash/fp/padCharsStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padCharsStart', require('../padStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padEnd.js b/node_modules/lodash/fp/padEnd.js new file mode 100644 index 000000000..a8522ec36 --- /dev/null +++ b/node_modules/lodash/fp/padEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padEnd', require('../padEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padStart.js b/node_modules/lodash/fp/padStart.js new file mode 100644 index 000000000..f4ca79d4a --- /dev/null +++ b/node_modules/lodash/fp/padStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padStart', require('../padStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/parseInt.js b/node_modules/lodash/fp/parseInt.js new file mode 100644 index 000000000..27314ccbc --- /dev/null +++ b/node_modules/lodash/fp/parseInt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('parseInt', require('../parseInt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/partial.js b/node_modules/lodash/fp/partial.js new file mode 100644 index 000000000..5d4601598 --- /dev/null +++ b/node_modules/lodash/fp/partial.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('partial', require('../partial')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/partialRight.js b/node_modules/lodash/fp/partialRight.js new file mode 100644 index 000000000..7f05fed0a --- /dev/null +++ b/node_modules/lodash/fp/partialRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('partialRight', require('../partialRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/partition.js b/node_modules/lodash/fp/partition.js new file mode 100644 index 000000000..2ebcacc1f --- /dev/null +++ b/node_modules/lodash/fp/partition.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('partition', require('../partition')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/path.js b/node_modules/lodash/fp/path.js new file mode 100644 index 000000000..b29cfb213 --- /dev/null +++ b/node_modules/lodash/fp/path.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/node_modules/lodash/fp/pathEq.js b/node_modules/lodash/fp/pathEq.js new file mode 100644 index 000000000..36c027a38 --- /dev/null +++ b/node_modules/lodash/fp/pathEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/node_modules/lodash/fp/pathOr.js b/node_modules/lodash/fp/pathOr.js new file mode 100644 index 000000000..4ab582091 --- /dev/null +++ b/node_modules/lodash/fp/pathOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/node_modules/lodash/fp/paths.js b/node_modules/lodash/fp/paths.js new file mode 100644 index 000000000..1eb7950ac --- /dev/null +++ b/node_modules/lodash/fp/paths.js @@ -0,0 +1 @@ +module.exports = require('./at'); diff --git a/node_modules/lodash/fp/pick.js b/node_modules/lodash/fp/pick.js new file mode 100644 index 000000000..197393de1 --- /dev/null +++ b/node_modules/lodash/fp/pick.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pick', require('../pick')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pickAll.js b/node_modules/lodash/fp/pickAll.js new file mode 100644 index 000000000..a8ecd4613 --- /dev/null +++ b/node_modules/lodash/fp/pickAll.js @@ -0,0 +1 @@ +module.exports = require('./pick'); diff --git a/node_modules/lodash/fp/pickBy.js b/node_modules/lodash/fp/pickBy.js new file mode 100644 index 000000000..d832d16b6 --- /dev/null +++ b/node_modules/lodash/fp/pickBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pickBy', require('../pickBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pipe.js b/node_modules/lodash/fp/pipe.js new file mode 100644 index 000000000..b2e1e2cc8 --- /dev/null +++ b/node_modules/lodash/fp/pipe.js @@ -0,0 +1 @@ +module.exports = require('./flow'); diff --git a/node_modules/lodash/fp/placeholder.js b/node_modules/lodash/fp/placeholder.js new file mode 100644 index 000000000..1ce17393b --- /dev/null +++ b/node_modules/lodash/fp/placeholder.js @@ -0,0 +1,6 @@ +/** + * The default argument placeholder value for methods. + * + * @type {Object} + */ +module.exports = {}; diff --git a/node_modules/lodash/fp/plant.js b/node_modules/lodash/fp/plant.js new file mode 100644 index 000000000..eca8f32b4 --- /dev/null +++ b/node_modules/lodash/fp/plant.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('plant', require('../plant'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pluck.js b/node_modules/lodash/fp/pluck.js new file mode 100644 index 000000000..0d1e1abfa --- /dev/null +++ b/node_modules/lodash/fp/pluck.js @@ -0,0 +1 @@ +module.exports = require('./map'); diff --git a/node_modules/lodash/fp/prop.js b/node_modules/lodash/fp/prop.js new file mode 100644 index 000000000..b29cfb213 --- /dev/null +++ b/node_modules/lodash/fp/prop.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/node_modules/lodash/fp/propEq.js b/node_modules/lodash/fp/propEq.js new file mode 100644 index 000000000..36c027a38 --- /dev/null +++ b/node_modules/lodash/fp/propEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/node_modules/lodash/fp/propOr.js b/node_modules/lodash/fp/propOr.js new file mode 100644 index 000000000..4ab582091 --- /dev/null +++ b/node_modules/lodash/fp/propOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/node_modules/lodash/fp/property.js b/node_modules/lodash/fp/property.js new file mode 100644 index 000000000..b29cfb213 --- /dev/null +++ b/node_modules/lodash/fp/property.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/node_modules/lodash/fp/propertyOf.js b/node_modules/lodash/fp/propertyOf.js new file mode 100644 index 000000000..f6273ee47 --- /dev/null +++ b/node_modules/lodash/fp/propertyOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('propertyOf', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/props.js b/node_modules/lodash/fp/props.js new file mode 100644 index 000000000..1eb7950ac --- /dev/null +++ b/node_modules/lodash/fp/props.js @@ -0,0 +1 @@ +module.exports = require('./at'); diff --git a/node_modules/lodash/fp/pull.js b/node_modules/lodash/fp/pull.js new file mode 100644 index 000000000..8d7084f07 --- /dev/null +++ b/node_modules/lodash/fp/pull.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pull', require('../pull')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pullAll.js b/node_modules/lodash/fp/pullAll.js new file mode 100644 index 000000000..98d5c9a73 --- /dev/null +++ b/node_modules/lodash/fp/pullAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAll', require('../pullAll')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pullAllBy.js b/node_modules/lodash/fp/pullAllBy.js new file mode 100644 index 000000000..876bc3bf1 --- /dev/null +++ b/node_modules/lodash/fp/pullAllBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAllBy', require('../pullAllBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pullAllWith.js b/node_modules/lodash/fp/pullAllWith.js new file mode 100644 index 000000000..f71ba4d73 --- /dev/null +++ b/node_modules/lodash/fp/pullAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAllWith', require('../pullAllWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pullAt.js b/node_modules/lodash/fp/pullAt.js new file mode 100644 index 000000000..e8b3bb612 --- /dev/null +++ b/node_modules/lodash/fp/pullAt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAt', require('../pullAt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/random.js b/node_modules/lodash/fp/random.js new file mode 100644 index 000000000..99d852e4a --- /dev/null +++ b/node_modules/lodash/fp/random.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('random', require('../random')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/range.js b/node_modules/lodash/fp/range.js new file mode 100644 index 000000000..a6bb59118 --- /dev/null +++ b/node_modules/lodash/fp/range.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('range', require('../range')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rangeRight.js b/node_modules/lodash/fp/rangeRight.js new file mode 100644 index 000000000..fdb712f94 --- /dev/null +++ b/node_modules/lodash/fp/rangeRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rangeRight', require('../rangeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rangeStep.js b/node_modules/lodash/fp/rangeStep.js new file mode 100644 index 000000000..d72dfc200 --- /dev/null +++ b/node_modules/lodash/fp/rangeStep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rangeStep', require('../range')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rangeStepRight.js b/node_modules/lodash/fp/rangeStepRight.js new file mode 100644 index 000000000..8b2a67bc6 --- /dev/null +++ b/node_modules/lodash/fp/rangeStepRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rangeStepRight', require('../rangeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rearg.js b/node_modules/lodash/fp/rearg.js new file mode 100644 index 000000000..678e02a32 --- /dev/null +++ b/node_modules/lodash/fp/rearg.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rearg', require('../rearg')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/reduce.js b/node_modules/lodash/fp/reduce.js new file mode 100644 index 000000000..4cef0a008 --- /dev/null +++ b/node_modules/lodash/fp/reduce.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reduce', require('../reduce')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/reduceRight.js b/node_modules/lodash/fp/reduceRight.js new file mode 100644 index 000000000..caf5bb515 --- /dev/null +++ b/node_modules/lodash/fp/reduceRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reduceRight', require('../reduceRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/reject.js b/node_modules/lodash/fp/reject.js new file mode 100644 index 000000000..c16327386 --- /dev/null +++ b/node_modules/lodash/fp/reject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reject', require('../reject')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/remove.js b/node_modules/lodash/fp/remove.js new file mode 100644 index 000000000..e9d132736 --- /dev/null +++ b/node_modules/lodash/fp/remove.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('remove', require('../remove')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/repeat.js b/node_modules/lodash/fp/repeat.js new file mode 100644 index 000000000..08470f247 --- /dev/null +++ b/node_modules/lodash/fp/repeat.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('repeat', require('../repeat')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/replace.js b/node_modules/lodash/fp/replace.js new file mode 100644 index 000000000..2227db625 --- /dev/null +++ b/node_modules/lodash/fp/replace.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('replace', require('../replace')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rest.js b/node_modules/lodash/fp/rest.js new file mode 100644 index 000000000..c1f3d64bd --- /dev/null +++ b/node_modules/lodash/fp/rest.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rest', require('../rest')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/restFrom.js b/node_modules/lodash/fp/restFrom.js new file mode 100644 index 000000000..714e42b5d --- /dev/null +++ b/node_modules/lodash/fp/restFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('restFrom', require('../rest')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/result.js b/node_modules/lodash/fp/result.js new file mode 100644 index 000000000..f86ce0712 --- /dev/null +++ b/node_modules/lodash/fp/result.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('result', require('../result')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/reverse.js b/node_modules/lodash/fp/reverse.js new file mode 100644 index 000000000..07c9f5e49 --- /dev/null +++ b/node_modules/lodash/fp/reverse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reverse', require('../reverse')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/round.js b/node_modules/lodash/fp/round.js new file mode 100644 index 000000000..4c0e5c829 --- /dev/null +++ b/node_modules/lodash/fp/round.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('round', require('../round')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sample.js b/node_modules/lodash/fp/sample.js new file mode 100644 index 000000000..6bea1254d --- /dev/null +++ b/node_modules/lodash/fp/sample.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sample', require('../sample'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sampleSize.js b/node_modules/lodash/fp/sampleSize.js new file mode 100644 index 000000000..359ed6fcd --- /dev/null +++ b/node_modules/lodash/fp/sampleSize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sampleSize', require('../sampleSize')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/seq.js b/node_modules/lodash/fp/seq.js new file mode 100644 index 000000000..d8f42b0a4 --- /dev/null +++ b/node_modules/lodash/fp/seq.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../seq')); diff --git a/node_modules/lodash/fp/set.js b/node_modules/lodash/fp/set.js new file mode 100644 index 000000000..0b56a56c8 --- /dev/null +++ b/node_modules/lodash/fp/set.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('set', require('../set')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/setWith.js b/node_modules/lodash/fp/setWith.js new file mode 100644 index 000000000..0b584952b --- /dev/null +++ b/node_modules/lodash/fp/setWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('setWith', require('../setWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/shuffle.js b/node_modules/lodash/fp/shuffle.js new file mode 100644 index 000000000..aa3a1ca5b --- /dev/null +++ b/node_modules/lodash/fp/shuffle.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('shuffle', require('../shuffle'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/size.js b/node_modules/lodash/fp/size.js new file mode 100644 index 000000000..7490136e1 --- /dev/null +++ b/node_modules/lodash/fp/size.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('size', require('../size'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/slice.js b/node_modules/lodash/fp/slice.js new file mode 100644 index 000000000..15945d321 --- /dev/null +++ b/node_modules/lodash/fp/slice.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('slice', require('../slice')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/snakeCase.js b/node_modules/lodash/fp/snakeCase.js new file mode 100644 index 000000000..a0ff7808e --- /dev/null +++ b/node_modules/lodash/fp/snakeCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('snakeCase', require('../snakeCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/some.js b/node_modules/lodash/fp/some.js new file mode 100644 index 000000000..a4fa2d006 --- /dev/null +++ b/node_modules/lodash/fp/some.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('some', require('../some')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortBy.js b/node_modules/lodash/fp/sortBy.js new file mode 100644 index 000000000..e0790ad5b --- /dev/null +++ b/node_modules/lodash/fp/sortBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortBy', require('../sortBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndex.js b/node_modules/lodash/fp/sortedIndex.js new file mode 100644 index 000000000..364a05435 --- /dev/null +++ b/node_modules/lodash/fp/sortedIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedIndex', require('../sortedIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndexBy.js b/node_modules/lodash/fp/sortedIndexBy.js new file mode 100644 index 000000000..9593dbd13 --- /dev/null +++ b/node_modules/lodash/fp/sortedIndexBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedIndexBy', require('../sortedIndexBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndexOf.js b/node_modules/lodash/fp/sortedIndexOf.js new file mode 100644 index 000000000..c9084cab6 --- /dev/null +++ b/node_modules/lodash/fp/sortedIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedIndexOf', require('../sortedIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndex.js b/node_modules/lodash/fp/sortedLastIndex.js new file mode 100644 index 000000000..47fe241af --- /dev/null +++ b/node_modules/lodash/fp/sortedLastIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedLastIndex', require('../sortedLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndexBy.js b/node_modules/lodash/fp/sortedLastIndexBy.js new file mode 100644 index 000000000..0f9a34732 --- /dev/null +++ b/node_modules/lodash/fp/sortedLastIndexBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndexOf.js b/node_modules/lodash/fp/sortedLastIndexOf.js new file mode 100644 index 000000000..0d4d93278 --- /dev/null +++ b/node_modules/lodash/fp/sortedLastIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedUniq.js b/node_modules/lodash/fp/sortedUniq.js new file mode 100644 index 000000000..882d28370 --- /dev/null +++ b/node_modules/lodash/fp/sortedUniq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedUniq', require('../sortedUniq'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedUniqBy.js b/node_modules/lodash/fp/sortedUniqBy.js new file mode 100644 index 000000000..033db91ca --- /dev/null +++ b/node_modules/lodash/fp/sortedUniqBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedUniqBy', require('../sortedUniqBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/split.js b/node_modules/lodash/fp/split.js new file mode 100644 index 000000000..14de1a7ef --- /dev/null +++ b/node_modules/lodash/fp/split.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('split', require('../split')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/spread.js b/node_modules/lodash/fp/spread.js new file mode 100644 index 000000000..2d11b7072 --- /dev/null +++ b/node_modules/lodash/fp/spread.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('spread', require('../spread')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/spreadFrom.js b/node_modules/lodash/fp/spreadFrom.js new file mode 100644 index 000000000..0b630df1b --- /dev/null +++ b/node_modules/lodash/fp/spreadFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('spreadFrom', require('../spread')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/startCase.js b/node_modules/lodash/fp/startCase.js new file mode 100644 index 000000000..ada98c943 --- /dev/null +++ b/node_modules/lodash/fp/startCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('startCase', require('../startCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/startsWith.js b/node_modules/lodash/fp/startsWith.js new file mode 100644 index 000000000..985e2f294 --- /dev/null +++ b/node_modules/lodash/fp/startsWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('startsWith', require('../startsWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/string.js b/node_modules/lodash/fp/string.js new file mode 100644 index 000000000..773b03704 --- /dev/null +++ b/node_modules/lodash/fp/string.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../string')); diff --git a/node_modules/lodash/fp/stubArray.js b/node_modules/lodash/fp/stubArray.js new file mode 100644 index 000000000..cd604cb49 --- /dev/null +++ b/node_modules/lodash/fp/stubArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubArray', require('../stubArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/stubFalse.js b/node_modules/lodash/fp/stubFalse.js new file mode 100644 index 000000000..329666454 --- /dev/null +++ b/node_modules/lodash/fp/stubFalse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubFalse', require('../stubFalse'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/stubObject.js b/node_modules/lodash/fp/stubObject.js new file mode 100644 index 000000000..c6c8ec472 --- /dev/null +++ b/node_modules/lodash/fp/stubObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubObject', require('../stubObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/stubString.js b/node_modules/lodash/fp/stubString.js new file mode 100644 index 000000000..701051e8b --- /dev/null +++ b/node_modules/lodash/fp/stubString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubString', require('../stubString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/stubTrue.js b/node_modules/lodash/fp/stubTrue.js new file mode 100644 index 000000000..9249082ce --- /dev/null +++ b/node_modules/lodash/fp/stubTrue.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubTrue', require('../stubTrue'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/subtract.js b/node_modules/lodash/fp/subtract.js new file mode 100644 index 000000000..d32b16d47 --- /dev/null +++ b/node_modules/lodash/fp/subtract.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('subtract', require('../subtract')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sum.js b/node_modules/lodash/fp/sum.js new file mode 100644 index 000000000..5cce12b32 --- /dev/null +++ b/node_modules/lodash/fp/sum.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sum', require('../sum'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sumBy.js b/node_modules/lodash/fp/sumBy.js new file mode 100644 index 000000000..c8826565f --- /dev/null +++ b/node_modules/lodash/fp/sumBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sumBy', require('../sumBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/symmetricDifference.js b/node_modules/lodash/fp/symmetricDifference.js new file mode 100644 index 000000000..78c16add6 --- /dev/null +++ b/node_modules/lodash/fp/symmetricDifference.js @@ -0,0 +1 @@ +module.exports = require('./xor'); diff --git a/node_modules/lodash/fp/symmetricDifferenceBy.js b/node_modules/lodash/fp/symmetricDifferenceBy.js new file mode 100644 index 000000000..298fc7ff6 --- /dev/null +++ b/node_modules/lodash/fp/symmetricDifferenceBy.js @@ -0,0 +1 @@ +module.exports = require('./xorBy'); diff --git a/node_modules/lodash/fp/symmetricDifferenceWith.js b/node_modules/lodash/fp/symmetricDifferenceWith.js new file mode 100644 index 000000000..70bc6faf2 --- /dev/null +++ b/node_modules/lodash/fp/symmetricDifferenceWith.js @@ -0,0 +1 @@ +module.exports = require('./xorWith'); diff --git a/node_modules/lodash/fp/tail.js b/node_modules/lodash/fp/tail.js new file mode 100644 index 000000000..f122f0ac3 --- /dev/null +++ b/node_modules/lodash/fp/tail.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('tail', require('../tail'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/take.js b/node_modules/lodash/fp/take.js new file mode 100644 index 000000000..9af98a7bd --- /dev/null +++ b/node_modules/lodash/fp/take.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('take', require('../take')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/takeLast.js b/node_modules/lodash/fp/takeLast.js new file mode 100644 index 000000000..e98c84a16 --- /dev/null +++ b/node_modules/lodash/fp/takeLast.js @@ -0,0 +1 @@ +module.exports = require('./takeRight'); diff --git a/node_modules/lodash/fp/takeLastWhile.js b/node_modules/lodash/fp/takeLastWhile.js new file mode 100644 index 000000000..5367968a3 --- /dev/null +++ b/node_modules/lodash/fp/takeLastWhile.js @@ -0,0 +1 @@ +module.exports = require('./takeRightWhile'); diff --git a/node_modules/lodash/fp/takeRight.js b/node_modules/lodash/fp/takeRight.js new file mode 100644 index 000000000..b82950a69 --- /dev/null +++ b/node_modules/lodash/fp/takeRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeRight', require('../takeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/takeRightWhile.js b/node_modules/lodash/fp/takeRightWhile.js new file mode 100644 index 000000000..8ffb0a285 --- /dev/null +++ b/node_modules/lodash/fp/takeRightWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeRightWhile', require('../takeRightWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/takeWhile.js b/node_modules/lodash/fp/takeWhile.js new file mode 100644 index 000000000..28136644f --- /dev/null +++ b/node_modules/lodash/fp/takeWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeWhile', require('../takeWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/tap.js b/node_modules/lodash/fp/tap.js new file mode 100644 index 000000000..d33ad6ec1 --- /dev/null +++ b/node_modules/lodash/fp/tap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('tap', require('../tap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/template.js b/node_modules/lodash/fp/template.js new file mode 100644 index 000000000..74857e1c8 --- /dev/null +++ b/node_modules/lodash/fp/template.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('template', require('../template')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/templateSettings.js b/node_modules/lodash/fp/templateSettings.js new file mode 100644 index 000000000..7bcc0a82b --- /dev/null +++ b/node_modules/lodash/fp/templateSettings.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('templateSettings', require('../templateSettings'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/throttle.js b/node_modules/lodash/fp/throttle.js new file mode 100644 index 000000000..77fff1428 --- /dev/null +++ b/node_modules/lodash/fp/throttle.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('throttle', require('../throttle')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/thru.js b/node_modules/lodash/fp/thru.js new file mode 100644 index 000000000..d42b3b1d8 --- /dev/null +++ b/node_modules/lodash/fp/thru.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('thru', require('../thru')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/times.js b/node_modules/lodash/fp/times.js new file mode 100644 index 000000000..0dab06dad --- /dev/null +++ b/node_modules/lodash/fp/times.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('times', require('../times')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toArray.js b/node_modules/lodash/fp/toArray.js new file mode 100644 index 000000000..f0c360aca --- /dev/null +++ b/node_modules/lodash/fp/toArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toArray', require('../toArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toFinite.js b/node_modules/lodash/fp/toFinite.js new file mode 100644 index 000000000..3a47687d6 --- /dev/null +++ b/node_modules/lodash/fp/toFinite.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toFinite', require('../toFinite'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toInteger.js b/node_modules/lodash/fp/toInteger.js new file mode 100644 index 000000000..e0af6a750 --- /dev/null +++ b/node_modules/lodash/fp/toInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toInteger', require('../toInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toIterator.js b/node_modules/lodash/fp/toIterator.js new file mode 100644 index 000000000..65e6baa9d --- /dev/null +++ b/node_modules/lodash/fp/toIterator.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toIterator', require('../toIterator'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toJSON.js b/node_modules/lodash/fp/toJSON.js new file mode 100644 index 000000000..2d718d0bc --- /dev/null +++ b/node_modules/lodash/fp/toJSON.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toJSON', require('../toJSON'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toLength.js b/node_modules/lodash/fp/toLength.js new file mode 100644 index 000000000..b97cdd935 --- /dev/null +++ b/node_modules/lodash/fp/toLength.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toLength', require('../toLength'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toLower.js b/node_modules/lodash/fp/toLower.js new file mode 100644 index 000000000..616ef36ad --- /dev/null +++ b/node_modules/lodash/fp/toLower.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toLower', require('../toLower'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toNumber.js b/node_modules/lodash/fp/toNumber.js new file mode 100644 index 000000000..d0c6f4d3d --- /dev/null +++ b/node_modules/lodash/fp/toNumber.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toNumber', require('../toNumber'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toPairs.js b/node_modules/lodash/fp/toPairs.js new file mode 100644 index 000000000..af783786e --- /dev/null +++ b/node_modules/lodash/fp/toPairs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPairs', require('../toPairs'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toPairsIn.js b/node_modules/lodash/fp/toPairsIn.js new file mode 100644 index 000000000..66504abf1 --- /dev/null +++ b/node_modules/lodash/fp/toPairsIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPairsIn', require('../toPairsIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toPath.js b/node_modules/lodash/fp/toPath.js new file mode 100644 index 000000000..b4d5e50fb --- /dev/null +++ b/node_modules/lodash/fp/toPath.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPath', require('../toPath'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toPlainObject.js b/node_modules/lodash/fp/toPlainObject.js new file mode 100644 index 000000000..278bb8639 --- /dev/null +++ b/node_modules/lodash/fp/toPlainObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPlainObject', require('../toPlainObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toSafeInteger.js b/node_modules/lodash/fp/toSafeInteger.js new file mode 100644 index 000000000..367a26fdd --- /dev/null +++ b/node_modules/lodash/fp/toSafeInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toString.js b/node_modules/lodash/fp/toString.js new file mode 100644 index 000000000..cec4f8e22 --- /dev/null +++ b/node_modules/lodash/fp/toString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toString', require('../toString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toUpper.js b/node_modules/lodash/fp/toUpper.js new file mode 100644 index 000000000..54f9a5605 --- /dev/null +++ b/node_modules/lodash/fp/toUpper.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toUpper', require('../toUpper'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/transform.js b/node_modules/lodash/fp/transform.js new file mode 100644 index 000000000..759d088f1 --- /dev/null +++ b/node_modules/lodash/fp/transform.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('transform', require('../transform')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trim.js b/node_modules/lodash/fp/trim.js new file mode 100644 index 000000000..e6319a741 --- /dev/null +++ b/node_modules/lodash/fp/trim.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trim', require('../trim')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimChars.js b/node_modules/lodash/fp/trimChars.js new file mode 100644 index 000000000..c9294de48 --- /dev/null +++ b/node_modules/lodash/fp/trimChars.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimChars', require('../trim')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimCharsEnd.js b/node_modules/lodash/fp/trimCharsEnd.js new file mode 100644 index 000000000..284bc2f81 --- /dev/null +++ b/node_modules/lodash/fp/trimCharsEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimCharsEnd', require('../trimEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimCharsStart.js b/node_modules/lodash/fp/trimCharsStart.js new file mode 100644 index 000000000..ff0ee65df --- /dev/null +++ b/node_modules/lodash/fp/trimCharsStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimCharsStart', require('../trimStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimEnd.js b/node_modules/lodash/fp/trimEnd.js new file mode 100644 index 000000000..71908805f --- /dev/null +++ b/node_modules/lodash/fp/trimEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimEnd', require('../trimEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimStart.js b/node_modules/lodash/fp/trimStart.js new file mode 100644 index 000000000..fda902c38 --- /dev/null +++ b/node_modules/lodash/fp/trimStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimStart', require('../trimStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/truncate.js b/node_modules/lodash/fp/truncate.js new file mode 100644 index 000000000..d265c1dec --- /dev/null +++ b/node_modules/lodash/fp/truncate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('truncate', require('../truncate')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unapply.js b/node_modules/lodash/fp/unapply.js new file mode 100644 index 000000000..c5dfe779d --- /dev/null +++ b/node_modules/lodash/fp/unapply.js @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/node_modules/lodash/fp/unary.js b/node_modules/lodash/fp/unary.js new file mode 100644 index 000000000..286c945fb --- /dev/null +++ b/node_modules/lodash/fp/unary.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unary', require('../unary'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unescape.js b/node_modules/lodash/fp/unescape.js new file mode 100644 index 000000000..fddcb46e2 --- /dev/null +++ b/node_modules/lodash/fp/unescape.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unescape', require('../unescape'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/union.js b/node_modules/lodash/fp/union.js new file mode 100644 index 000000000..ef8228d74 --- /dev/null +++ b/node_modules/lodash/fp/union.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('union', require('../union')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unionBy.js b/node_modules/lodash/fp/unionBy.js new file mode 100644 index 000000000..603687a18 --- /dev/null +++ b/node_modules/lodash/fp/unionBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unionBy', require('../unionBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unionWith.js b/node_modules/lodash/fp/unionWith.js new file mode 100644 index 000000000..65bb3a792 --- /dev/null +++ b/node_modules/lodash/fp/unionWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unionWith', require('../unionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/uniq.js b/node_modules/lodash/fp/uniq.js new file mode 100644 index 000000000..bc1852490 --- /dev/null +++ b/node_modules/lodash/fp/uniq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniq', require('../uniq'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/uniqBy.js b/node_modules/lodash/fp/uniqBy.js new file mode 100644 index 000000000..634c6a8bb --- /dev/null +++ b/node_modules/lodash/fp/uniqBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqBy', require('../uniqBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/uniqWith.js b/node_modules/lodash/fp/uniqWith.js new file mode 100644 index 000000000..0ec601a91 --- /dev/null +++ b/node_modules/lodash/fp/uniqWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqWith', require('../uniqWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/uniqueId.js b/node_modules/lodash/fp/uniqueId.js new file mode 100644 index 000000000..aa8fc2f73 --- /dev/null +++ b/node_modules/lodash/fp/uniqueId.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqueId', require('../uniqueId')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unnest.js b/node_modules/lodash/fp/unnest.js new file mode 100644 index 000000000..5d34060aa --- /dev/null +++ b/node_modules/lodash/fp/unnest.js @@ -0,0 +1 @@ +module.exports = require('./flatten'); diff --git a/node_modules/lodash/fp/unset.js b/node_modules/lodash/fp/unset.js new file mode 100644 index 000000000..ea203a0f3 --- /dev/null +++ b/node_modules/lodash/fp/unset.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unset', require('../unset')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unzip.js b/node_modules/lodash/fp/unzip.js new file mode 100644 index 000000000..cc364b3c5 --- /dev/null +++ b/node_modules/lodash/fp/unzip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unzip', require('../unzip'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unzipWith.js b/node_modules/lodash/fp/unzipWith.js new file mode 100644 index 000000000..182eaa104 --- /dev/null +++ b/node_modules/lodash/fp/unzipWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unzipWith', require('../unzipWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/update.js b/node_modules/lodash/fp/update.js new file mode 100644 index 000000000..b8ce2cc9e --- /dev/null +++ b/node_modules/lodash/fp/update.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('update', require('../update')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/updateWith.js b/node_modules/lodash/fp/updateWith.js new file mode 100644 index 000000000..d5e8282d9 --- /dev/null +++ b/node_modules/lodash/fp/updateWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('updateWith', require('../updateWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/upperCase.js b/node_modules/lodash/fp/upperCase.js new file mode 100644 index 000000000..c886f2021 --- /dev/null +++ b/node_modules/lodash/fp/upperCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('upperCase', require('../upperCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/upperFirst.js b/node_modules/lodash/fp/upperFirst.js new file mode 100644 index 000000000..d8c04df54 --- /dev/null +++ b/node_modules/lodash/fp/upperFirst.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('upperFirst', require('../upperFirst'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/useWith.js b/node_modules/lodash/fp/useWith.js new file mode 100644 index 000000000..d8b3df5a4 --- /dev/null +++ b/node_modules/lodash/fp/useWith.js @@ -0,0 +1 @@ +module.exports = require('./overArgs'); diff --git a/node_modules/lodash/fp/util.js b/node_modules/lodash/fp/util.js new file mode 100644 index 000000000..18c00baed --- /dev/null +++ b/node_modules/lodash/fp/util.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../util')); diff --git a/node_modules/lodash/fp/value.js b/node_modules/lodash/fp/value.js new file mode 100644 index 000000000..555eec7a3 --- /dev/null +++ b/node_modules/lodash/fp/value.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('value', require('../value'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/valueOf.js b/node_modules/lodash/fp/valueOf.js new file mode 100644 index 000000000..f968807d7 --- /dev/null +++ b/node_modules/lodash/fp/valueOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('valueOf', require('../valueOf'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/values.js b/node_modules/lodash/fp/values.js new file mode 100644 index 000000000..2dfc56136 --- /dev/null +++ b/node_modules/lodash/fp/values.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('values', require('../values'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/valuesIn.js b/node_modules/lodash/fp/valuesIn.js new file mode 100644 index 000000000..a1b2bb872 --- /dev/null +++ b/node_modules/lodash/fp/valuesIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('valuesIn', require('../valuesIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/where.js b/node_modules/lodash/fp/where.js new file mode 100644 index 000000000..3247f64a8 --- /dev/null +++ b/node_modules/lodash/fp/where.js @@ -0,0 +1 @@ +module.exports = require('./conformsTo'); diff --git a/node_modules/lodash/fp/whereEq.js b/node_modules/lodash/fp/whereEq.js new file mode 100644 index 000000000..29d1e1e4f --- /dev/null +++ b/node_modules/lodash/fp/whereEq.js @@ -0,0 +1 @@ +module.exports = require('./isMatch'); diff --git a/node_modules/lodash/fp/without.js b/node_modules/lodash/fp/without.js new file mode 100644 index 000000000..bad9e125b --- /dev/null +++ b/node_modules/lodash/fp/without.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('without', require('../without')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/words.js b/node_modules/lodash/fp/words.js new file mode 100644 index 000000000..4a901414b --- /dev/null +++ b/node_modules/lodash/fp/words.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('words', require('../words')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrap.js b/node_modules/lodash/fp/wrap.js new file mode 100644 index 000000000..e93bd8a1d --- /dev/null +++ b/node_modules/lodash/fp/wrap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrap', require('../wrap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperAt.js b/node_modules/lodash/fp/wrapperAt.js new file mode 100644 index 000000000..8f0a310fe --- /dev/null +++ b/node_modules/lodash/fp/wrapperAt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperChain.js b/node_modules/lodash/fp/wrapperChain.js new file mode 100644 index 000000000..2a48ea2b5 --- /dev/null +++ b/node_modules/lodash/fp/wrapperChain.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperChain', require('../wrapperChain'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperLodash.js b/node_modules/lodash/fp/wrapperLodash.js new file mode 100644 index 000000000..a7162d084 --- /dev/null +++ b/node_modules/lodash/fp/wrapperLodash.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperReverse.js b/node_modules/lodash/fp/wrapperReverse.js new file mode 100644 index 000000000..e1481aab9 --- /dev/null +++ b/node_modules/lodash/fp/wrapperReverse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperReverse', require('../wrapperReverse'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperValue.js b/node_modules/lodash/fp/wrapperValue.js new file mode 100644 index 000000000..8eb9112f6 --- /dev/null +++ b/node_modules/lodash/fp/wrapperValue.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperValue', require('../wrapperValue'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/xor.js b/node_modules/lodash/fp/xor.js new file mode 100644 index 000000000..29e281948 --- /dev/null +++ b/node_modules/lodash/fp/xor.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('xor', require('../xor')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/xorBy.js b/node_modules/lodash/fp/xorBy.js new file mode 100644 index 000000000..b355686db --- /dev/null +++ b/node_modules/lodash/fp/xorBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('xorBy', require('../xorBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/xorWith.js b/node_modules/lodash/fp/xorWith.js new file mode 100644 index 000000000..8e05739ad --- /dev/null +++ b/node_modules/lodash/fp/xorWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('xorWith', require('../xorWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zip.js b/node_modules/lodash/fp/zip.js new file mode 100644 index 000000000..69e147a44 --- /dev/null +++ b/node_modules/lodash/fp/zip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zip', require('../zip')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zipAll.js b/node_modules/lodash/fp/zipAll.js new file mode 100644 index 000000000..efa8ccbfb --- /dev/null +++ b/node_modules/lodash/fp/zipAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipAll', require('../zip')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zipObj.js b/node_modules/lodash/fp/zipObj.js new file mode 100644 index 000000000..f4a34531b --- /dev/null +++ b/node_modules/lodash/fp/zipObj.js @@ -0,0 +1 @@ +module.exports = require('./zipObject'); diff --git a/node_modules/lodash/fp/zipObject.js b/node_modules/lodash/fp/zipObject.js new file mode 100644 index 000000000..462dbb68c --- /dev/null +++ b/node_modules/lodash/fp/zipObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipObject', require('../zipObject')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zipObjectDeep.js b/node_modules/lodash/fp/zipObjectDeep.js new file mode 100644 index 000000000..53a5d3380 --- /dev/null +++ b/node_modules/lodash/fp/zipObjectDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipObjectDeep', require('../zipObjectDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zipWith.js b/node_modules/lodash/fp/zipWith.js new file mode 100644 index 000000000..c5cf9e212 --- /dev/null +++ b/node_modules/lodash/fp/zipWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipWith', require('../zipWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fromPairs.js b/node_modules/lodash/fromPairs.js new file mode 100644 index 000000000..ee7940d24 --- /dev/null +++ b/node_modules/lodash/fromPairs.js @@ -0,0 +1,28 @@ +/** + * 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/node_modules/lodash/function.js b/node_modules/lodash/function.js new file mode 100644 index 000000000..b0fc6d93e --- /dev/null +++ b/node_modules/lodash/function.js @@ -0,0 +1,25 @@ +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/node_modules/lodash/functions.js b/node_modules/lodash/functions.js new file mode 100644 index 000000000..9722928f5 --- /dev/null +++ b/node_modules/lodash/functions.js @@ -0,0 +1,31 @@ +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/node_modules/lodash/functionsIn.js b/node_modules/lodash/functionsIn.js new file mode 100644 index 000000000..f00345d06 --- /dev/null +++ b/node_modules/lodash/functionsIn.js @@ -0,0 +1,31 @@ +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/node_modules/lodash/get.js b/node_modules/lodash/get.js new file mode 100644 index 000000000..8805ff92c --- /dev/null +++ b/node_modules/lodash/get.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/groupBy.js b/node_modules/lodash/groupBy.js new file mode 100644 index 000000000..babf4f6ba --- /dev/null +++ b/node_modules/lodash/groupBy.js @@ -0,0 +1,41 @@ +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/node_modules/lodash/gt.js b/node_modules/lodash/gt.js new file mode 100644 index 000000000..3a6628288 --- /dev/null +++ b/node_modules/lodash/gt.js @@ -0,0 +1,29 @@ +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/node_modules/lodash/gte.js b/node_modules/lodash/gte.js new file mode 100644 index 000000000..4180a687d --- /dev/null +++ b/node_modules/lodash/gte.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/has.js b/node_modules/lodash/has.js new file mode 100644 index 000000000..34df55e8e --- /dev/null +++ b/node_modules/lodash/has.js @@ -0,0 +1,35 @@ +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/node_modules/lodash/hasIn.js b/node_modules/lodash/hasIn.js new file mode 100644 index 000000000..06a368654 --- /dev/null +++ b/node_modules/lodash/hasIn.js @@ -0,0 +1,34 @@ +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/node_modules/lodash/head.js b/node_modules/lodash/head.js new file mode 100644 index 000000000..dee9d1f1e --- /dev/null +++ b/node_modules/lodash/head.js @@ -0,0 +1,23 @@ +/** + * 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/node_modules/lodash/identity.js b/node_modules/lodash/identity.js new file mode 100644 index 000000000..2d5d963cd --- /dev/null +++ b/node_modules/lodash/identity.js @@ -0,0 +1,21 @@ +/** + * 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/node_modules/lodash/inRange.js b/node_modules/lodash/inRange.js new file mode 100644 index 000000000..f20728d92 --- /dev/null +++ b/node_modules/lodash/inRange.js @@ -0,0 +1,55 @@ +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/node_modules/lodash/includes.js b/node_modules/lodash/includes.js new file mode 100644 index 000000000..ae0deedc9 --- /dev/null +++ b/node_modules/lodash/includes.js @@ -0,0 +1,53 @@ +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/node_modules/lodash/index.js b/node_modules/lodash/index.js new file mode 100644 index 000000000..5d063e21f --- /dev/null +++ b/node_modules/lodash/index.js @@ -0,0 +1 @@ +module.exports = require('./lodash'); \ No newline at end of file diff --git a/node_modules/lodash/indexOf.js b/node_modules/lodash/indexOf.js new file mode 100644 index 000000000..3c644af2e --- /dev/null +++ b/node_modules/lodash/indexOf.js @@ -0,0 +1,42 @@ +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/node_modules/lodash/initial.js b/node_modules/lodash/initial.js new file mode 100644 index 000000000..f47fc5092 --- /dev/null +++ b/node_modules/lodash/initial.js @@ -0,0 +1,22 @@ +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/node_modules/lodash/intersection.js b/node_modules/lodash/intersection.js new file mode 100644 index 000000000..a94c13512 --- /dev/null +++ b/node_modules/lodash/intersection.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/intersectionBy.js b/node_modules/lodash/intersectionBy.js new file mode 100644 index 000000000..31461aae5 --- /dev/null +++ b/node_modules/lodash/intersectionBy.js @@ -0,0 +1,45 @@ +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/node_modules/lodash/intersectionWith.js b/node_modules/lodash/intersectionWith.js new file mode 100644 index 000000000..63cabfaa4 --- /dev/null +++ b/node_modules/lodash/intersectionWith.js @@ -0,0 +1,41 @@ +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/node_modules/lodash/invert.js b/node_modules/lodash/invert.js new file mode 100644 index 000000000..21d10aba3 --- /dev/null +++ b/node_modules/lodash/invert.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/invertBy.js b/node_modules/lodash/invertBy.js new file mode 100644 index 000000000..e5ba0f709 --- /dev/null +++ b/node_modules/lodash/invertBy.js @@ -0,0 +1,44 @@ +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/node_modules/lodash/invoke.js b/node_modules/lodash/invoke.js new file mode 100644 index 000000000..97d51eb5b --- /dev/null +++ b/node_modules/lodash/invoke.js @@ -0,0 +1,24 @@ +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/node_modules/lodash/invokeMap.js b/node_modules/lodash/invokeMap.js new file mode 100644 index 000000000..8da5126c6 --- /dev/null +++ b/node_modules/lodash/invokeMap.js @@ -0,0 +1,41 @@ +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/node_modules/lodash/isArguments.js b/node_modules/lodash/isArguments.js new file mode 100644 index 000000000..8b9ed66cd --- /dev/null +++ b/node_modules/lodash/isArguments.js @@ -0,0 +1,36 @@ +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/node_modules/lodash/isArray.js b/node_modules/lodash/isArray.js new file mode 100644 index 000000000..88ab55fd0 --- /dev/null +++ b/node_modules/lodash/isArray.js @@ -0,0 +1,26 @@ +/** + * 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/node_modules/lodash/isArrayBuffer.js b/node_modules/lodash/isArrayBuffer.js new file mode 100644 index 000000000..12904a64b --- /dev/null +++ b/node_modules/lodash/isArrayBuffer.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/isArrayLike.js b/node_modules/lodash/isArrayLike.js new file mode 100644 index 000000000..0f9668056 --- /dev/null +++ b/node_modules/lodash/isArrayLike.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/isArrayLikeObject.js b/node_modules/lodash/isArrayLikeObject.js new file mode 100644 index 000000000..6c4812a8d --- /dev/null +++ b/node_modules/lodash/isArrayLikeObject.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/isBoolean.js b/node_modules/lodash/isBoolean.js new file mode 100644 index 000000000..a43ed4b8f --- /dev/null +++ b/node_modules/lodash/isBoolean.js @@ -0,0 +1,29 @@ +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/node_modules/lodash/isBuffer.js b/node_modules/lodash/isBuffer.js new file mode 100644 index 000000000..c103cc74e --- /dev/null +++ b/node_modules/lodash/isBuffer.js @@ -0,0 +1,38 @@ +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/node_modules/lodash/isDate.js b/node_modules/lodash/isDate.js new file mode 100644 index 000000000..7f0209fca --- /dev/null +++ b/node_modules/lodash/isDate.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/isElement.js b/node_modules/lodash/isElement.js new file mode 100644 index 000000000..76ae29c3b --- /dev/null +++ b/node_modules/lodash/isElement.js @@ -0,0 +1,25 @@ +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/node_modules/lodash/isEmpty.js b/node_modules/lodash/isEmpty.js new file mode 100644 index 000000000..3597294a4 --- /dev/null +++ b/node_modules/lodash/isEmpty.js @@ -0,0 +1,77 @@ +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/node_modules/lodash/isEqual.js b/node_modules/lodash/isEqual.js new file mode 100644 index 000000000..5e23e76c9 --- /dev/null +++ b/node_modules/lodash/isEqual.js @@ -0,0 +1,35 @@ +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 compared by strict equality, i.e. `===`. + * + * @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/node_modules/lodash/isEqualWith.js b/node_modules/lodash/isEqualWith.js new file mode 100644 index 000000000..21bdc7ffe --- /dev/null +++ b/node_modules/lodash/isEqualWith.js @@ -0,0 +1,41 @@ +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/node_modules/lodash/isError.js b/node_modules/lodash/isError.js new file mode 100644 index 000000000..b4f41e000 --- /dev/null +++ b/node_modules/lodash/isError.js @@ -0,0 +1,36 @@ +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/node_modules/lodash/isFinite.js b/node_modules/lodash/isFinite.js new file mode 100644 index 000000000..601842bc4 --- /dev/null +++ b/node_modules/lodash/isFinite.js @@ -0,0 +1,36 @@ +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/node_modules/lodash/isFunction.js b/node_modules/lodash/isFunction.js new file mode 100644 index 000000000..907a8cd8b --- /dev/null +++ b/node_modules/lodash/isFunction.js @@ -0,0 +1,37 @@ +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/node_modules/lodash/isInteger.js b/node_modules/lodash/isInteger.js new file mode 100644 index 000000000..66aa87d57 --- /dev/null +++ b/node_modules/lodash/isInteger.js @@ -0,0 +1,33 @@ +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/node_modules/lodash/isLength.js b/node_modules/lodash/isLength.js new file mode 100644 index 000000000..3a95caa96 --- /dev/null +++ b/node_modules/lodash/isLength.js @@ -0,0 +1,35 @@ +/** 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/node_modules/lodash/isMap.js b/node_modules/lodash/isMap.js new file mode 100644 index 000000000..44f8517ee --- /dev/null +++ b/node_modules/lodash/isMap.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/isMatch.js b/node_modules/lodash/isMatch.js new file mode 100644 index 000000000..9773a18cd --- /dev/null +++ b/node_modules/lodash/isMatch.js @@ -0,0 +1,36 @@ +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/node_modules/lodash/isMatchWith.js b/node_modules/lodash/isMatchWith.js new file mode 100644 index 000000000..187b6a61d --- /dev/null +++ b/node_modules/lodash/isMatchWith.js @@ -0,0 +1,41 @@ +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/node_modules/lodash/isNaN.js b/node_modules/lodash/isNaN.js new file mode 100644 index 000000000..7d0d783ba --- /dev/null +++ b/node_modules/lodash/isNaN.js @@ -0,0 +1,38 @@ +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/node_modules/lodash/isNative.js b/node_modules/lodash/isNative.js new file mode 100644 index 000000000..f0cb8d580 --- /dev/null +++ b/node_modules/lodash/isNative.js @@ -0,0 +1,40 @@ +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/node_modules/lodash/isNil.js b/node_modules/lodash/isNil.js new file mode 100644 index 000000000..79f05052c --- /dev/null +++ b/node_modules/lodash/isNil.js @@ -0,0 +1,25 @@ +/** + * 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/node_modules/lodash/isNull.js b/node_modules/lodash/isNull.js new file mode 100644 index 000000000..c0a374d7d --- /dev/null +++ b/node_modules/lodash/isNull.js @@ -0,0 +1,22 @@ +/** + * 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/node_modules/lodash/isNumber.js b/node_modules/lodash/isNumber.js new file mode 100644 index 000000000..cd34ee464 --- /dev/null +++ b/node_modules/lodash/isNumber.js @@ -0,0 +1,38 @@ +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/node_modules/lodash/isObject.js b/node_modules/lodash/isObject.js new file mode 100644 index 000000000..1dc893918 --- /dev/null +++ b/node_modules/lodash/isObject.js @@ -0,0 +1,31 @@ +/** + * 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/node_modules/lodash/isObjectLike.js b/node_modules/lodash/isObjectLike.js new file mode 100644 index 000000000..301716b5a --- /dev/null +++ b/node_modules/lodash/isObjectLike.js @@ -0,0 +1,29 @@ +/** + * 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/node_modules/lodash/isPlainObject.js b/node_modules/lodash/isPlainObject.js new file mode 100644 index 000000000..238737313 --- /dev/null +++ b/node_modules/lodash/isPlainObject.js @@ -0,0 +1,62 @@ +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/node_modules/lodash/isRegExp.js b/node_modules/lodash/isRegExp.js new file mode 100644 index 000000000..76c9b6e9c --- /dev/null +++ b/node_modules/lodash/isRegExp.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/isSafeInteger.js b/node_modules/lodash/isSafeInteger.js new file mode 100644 index 000000000..2a48526e1 --- /dev/null +++ b/node_modules/lodash/isSafeInteger.js @@ -0,0 +1,37 @@ +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/node_modules/lodash/isSet.js b/node_modules/lodash/isSet.js new file mode 100644 index 000000000..ab88bdf81 --- /dev/null +++ b/node_modules/lodash/isSet.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/isString.js b/node_modules/lodash/isString.js new file mode 100644 index 000000000..627eb9c38 --- /dev/null +++ b/node_modules/lodash/isString.js @@ -0,0 +1,30 @@ +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/node_modules/lodash/isSymbol.js b/node_modules/lodash/isSymbol.js new file mode 100644 index 000000000..dfb60b97f --- /dev/null +++ b/node_modules/lodash/isSymbol.js @@ -0,0 +1,29 @@ +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/node_modules/lodash/isTypedArray.js b/node_modules/lodash/isTypedArray.js new file mode 100644 index 000000000..da3f8dd19 --- /dev/null +++ b/node_modules/lodash/isTypedArray.js @@ -0,0 +1,27 @@ +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/node_modules/lodash/isUndefined.js b/node_modules/lodash/isUndefined.js new file mode 100644 index 000000000..377d121ab --- /dev/null +++ b/node_modules/lodash/isUndefined.js @@ -0,0 +1,22 @@ +/** + * 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/node_modules/lodash/isWeakMap.js b/node_modules/lodash/isWeakMap.js new file mode 100644 index 000000000..8d36f6638 --- /dev/null +++ b/node_modules/lodash/isWeakMap.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/isWeakSet.js b/node_modules/lodash/isWeakSet.js new file mode 100644 index 000000000..e628b261c --- /dev/null +++ b/node_modules/lodash/isWeakSet.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/iteratee.js b/node_modules/lodash/iteratee.js new file mode 100644 index 000000000..61b73a8c0 --- /dev/null +++ b/node_modules/lodash/iteratee.js @@ -0,0 +1,53 @@ +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/node_modules/lodash/join.js b/node_modules/lodash/join.js new file mode 100644 index 000000000..45de079ff --- /dev/null +++ b/node_modules/lodash/join.js @@ -0,0 +1,26 @@ +/** 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/node_modules/lodash/kebabCase.js b/node_modules/lodash/kebabCase.js new file mode 100644 index 000000000..8a52be645 --- /dev/null +++ b/node_modules/lodash/kebabCase.js @@ -0,0 +1,28 @@ +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/node_modules/lodash/keyBy.js b/node_modules/lodash/keyBy.js new file mode 100644 index 000000000..acc007a0a --- /dev/null +++ b/node_modules/lodash/keyBy.js @@ -0,0 +1,36 @@ +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/node_modules/lodash/keys.js b/node_modules/lodash/keys.js new file mode 100644 index 000000000..d143c7186 --- /dev/null +++ b/node_modules/lodash/keys.js @@ -0,0 +1,37 @@ +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/node_modules/lodash/keysIn.js b/node_modules/lodash/keysIn.js new file mode 100644 index 000000000..a62308f2c --- /dev/null +++ b/node_modules/lodash/keysIn.js @@ -0,0 +1,32 @@ +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/node_modules/lodash/lang.js b/node_modules/lodash/lang.js new file mode 100644 index 000000000..a3962169a --- /dev/null +++ b/node_modules/lodash/lang.js @@ -0,0 +1,58 @@ +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/node_modules/lodash/last.js b/node_modules/lodash/last.js new file mode 100644 index 000000000..cad1eafaf --- /dev/null +++ b/node_modules/lodash/last.js @@ -0,0 +1,20 @@ +/** + * 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/node_modules/lodash/lastIndexOf.js b/node_modules/lodash/lastIndexOf.js new file mode 100644 index 000000000..dabfb613a --- /dev/null +++ b/node_modules/lodash/lastIndexOf.js @@ -0,0 +1,46 @@ +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/node_modules/lodash/lodash.js b/node_modules/lodash/lodash.js new file mode 100644 index 000000000..b39ddce69 --- /dev/null +++ b/node_modules/lodash/lodash.js @@ -0,0 +1,17084 @@ +/** + * @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.4'; + + /** 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 and 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) as well as ES2015 template strings. 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 || (!isRight && 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)); + } + + /** + * 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; + } + return (symToStringTag && symToStringTag in Object(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 || (!isObjectLike(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 = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + 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) { + 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)) { + 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 = precision == null ? 0 : 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] === undefined + ? (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); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @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 customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @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 customDefaultsMerge(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, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** + * 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 = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(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 ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * 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; + } + + /** + * 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 == null ? 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 compared by strict equality, i.e. `===`. + * + * @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 value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * 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, customDefaultsAssignIn); + 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, customDefaultsMerge); + 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, customOmitClone); + } + 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 = position == null + ? 0 + : 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': ' +``` + +In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/): + +```js +var punycode = require('punycode'); +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('punycode.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'punycode': 'path/to/punycode' + } + }, + ['punycode'], + function(punycode) { + console.log(punycode); + } +); +``` + +## API + +### `punycode.decode(string)` + +Converts a Punycode string of ASCII symbols to a string of Unicode symbols. + +```js +// decode domain name parts +punycode.decode('maana-pta'); // 'mañana' +punycode.decode('--dqo34k'); // '☃-⌘' +``` + +### `punycode.encode(string)` + +Converts a string of Unicode symbols to a Punycode string of ASCII symbols. + +```js +// encode domain name parts +punycode.encode('mañana'); // 'maana-pta' +punycode.encode('☃-⌘'); // '--dqo34k' +``` + +### `punycode.toUnicode(input)` + +Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. + +```js +// decode domain names +punycode.toUnicode('xn--maana-pta.com'); +// → 'mañana.com' +punycode.toUnicode('xn----dqo34k.com'); +// → '☃-⌘.com' + +// decode email addresses +punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); +// → 'джумла@джpумлатест.bрфa' +``` + +### `punycode.toASCII(input)` + +Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. + +```js +// encode domain names +punycode.toASCII('mañana.com'); +// → 'xn--maana-pta.com' +punycode.toASCII('☃-⌘.com'); +// → 'xn----dqo34k.com' + +// encode email addresses +punycode.toASCII('джумла@джpумлатест.bрфa'); +// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' +``` + +### `punycode.ucs2` + +#### `punycode.ucs2.decode(string)` + +Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. + +```js +punycode.ucs2.decode('abc'); +// → [0x61, 0x62, 0x63] +// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: +punycode.ucs2.decode('\uD834\uDF06'); +// → [0x1D306] +``` + +#### `punycode.ucs2.encode(codePoints)` + +Creates a string based on an array of numeric code point values. + +```js +punycode.ucs2.encode([0x61, 0x62, 0x63]); +// → 'abc' +punycode.ucs2.encode([0x1D306]); +// → '\uD834\uDF06' +``` + +### `punycode.version` + +A string representing the current Punycode.js version number. + +## Unit tests & code coverage + +After cloning this repository, run `npm install --dev` to install the dependencies needed for Punycode.js development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +Feel free to fork if you see possible improvements! + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## Contributors + +| [![twitter/jdalton](https://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## License + +Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/punycode/package.json b/node_modules/punycode/package.json new file mode 100644 index 000000000..348b56b0d --- /dev/null +++ b/node_modules/punycode/package.json @@ -0,0 +1,87 @@ +{ + "_from": "punycode@^1.2.4", + "_id": "punycode@1.4.1", + "_inBundle": false, + "_integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "_location": "/punycode", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "punycode@^1.2.4", + "name": "punycode", + "escapedName": "punycode", + "rawSpec": "^1.2.4", + "saveSpec": null, + "fetchSpec": "^1.2.4" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "_shasum": "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e", + "_spec": "punycode@^1.2.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bugs": { + "url": "https://github.com/bestiejs/punycode.js/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + { + "name": "John-David Dalton", + "url": "http://allyoucanleet.com/" + } + ], + "deprecated": false, + "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", + "devDependencies": { + "coveralls": "^2.11.4", + "grunt": "^0.4.5", + "grunt-contrib-uglify": "^0.11.0", + "grunt-shell": "^1.1.2", + "istanbul": "^0.4.1", + "qunit-extras": "^1.4.4", + "qunitjs": "~1.11.0", + "requirejs": "^2.1.22" + }, + "files": [ + "LICENSE-MIT.txt", + "punycode.js" + ], + "homepage": "https://mths.be/punycode", + "jspm": { + "map": { + "./punycode.js": { + "node": "@node/punycode" + } + } + }, + "keywords": [ + "punycode", + "unicode", + "idn", + "idna", + "dns", + "url", + "domain" + ], + "license": "MIT", + "main": "punycode.js", + "name": "punycode", + "repository": { + "type": "git", + "url": "git+https://github.com/bestiejs/punycode.js.git" + }, + "scripts": { + "test": "node tests/tests.js" + }, + "version": "1.4.1" +} diff --git a/node_modules/punycode/punycode.js b/node_modules/punycode/punycode.js new file mode 100644 index 000000000..2c87f6cc4 --- /dev/null +++ b/node_modules/punycode/punycode.js @@ -0,0 +1,533 @@ +/*! https://mths.be/punycode v1.4.1 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw new RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.4.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { + // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { + // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); diff --git a/node_modules/qs/.jshintignore b/node_modules/qs/.jshintignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/node_modules/qs/.jshintignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/qs/.jshintrc b/node_modules/qs/.jshintrc new file mode 100644 index 000000000..997b3f7d4 --- /dev/null +++ b/node_modules/qs/.jshintrc @@ -0,0 +1,10 @@ +{ + "node": true, + + "curly": true, + "latedef": true, + "quotmark": true, + "undef": true, + "unused": true, + "trailing": true +} diff --git a/node_modules/qs/.npmignore b/node_modules/qs/.npmignore new file mode 100644 index 000000000..7e1574dc5 --- /dev/null +++ b/node_modules/qs/.npmignore @@ -0,0 +1,18 @@ +.idea +*.iml +npm-debug.log +dump.rdb +node_modules +results.tap +results.xml +npm-shrinkwrap.json +config.json +.DS_Store +*/.DS_Store +*/*/.DS_Store +._* +*/._* +*/*/._* +coverage.* +lib-cov +complexity.md diff --git a/node_modules/qs/.travis.yml b/node_modules/qs/.travis.yml new file mode 100644 index 000000000..c891dd0e0 --- /dev/null +++ b/node_modules/qs/.travis.yml @@ -0,0 +1,4 @@ +language: node_js + +node_js: + - 0.10 \ No newline at end of file diff --git a/node_modules/qs/CHANGELOG.md b/node_modules/qs/CHANGELOG.md new file mode 100644 index 000000000..f5ee8b464 --- /dev/null +++ b/node_modules/qs/CHANGELOG.md @@ -0,0 +1,68 @@ + +## [**2.3.3**](https://github.com/hapijs/qs/issues?milestone=18&state=open) +- [**#59**](https://github.com/hapijs/qs/issues/59) make sure array indexes are >= 0, closes #57 +- [**#58**](https://github.com/hapijs/qs/issues/58) make qs usable for browser loader + +## [**2.3.2**](https://github.com/hapijs/qs/issues?milestone=17&state=closed) +- [**#55**](https://github.com/hapijs/qs/issues/55) allow merging a string into an object + +## [**2.3.1**](https://github.com/hapijs/qs/issues?milestone=16&state=closed) +- [**#52**](https://github.com/hapijs/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". + +## [**2.3.0**](https://github.com/hapijs/qs/issues?milestone=15&state=closed) +- [**#50**](https://github.com/hapijs/qs/issues/50) add option to omit array indices, closes #46 + +## [**2.2.5**](https://github.com/hapijs/qs/issues?milestone=14&state=closed) +- [**#39**](https://github.com/hapijs/qs/issues/39) Is there an alternative to Buffer.isBuffer? +- [**#49**](https://github.com/hapijs/qs/issues/49) refactor utils.merge, fixes #45 +- [**#41**](https://github.com/hapijs/qs/issues/41) avoid browserifying Buffer, for #39 + +## [**2.2.4**](https://github.com/hapijs/qs/issues?milestone=13&state=closed) +- [**#38**](https://github.com/hapijs/qs/issues/38) how to handle object keys beginning with a number + +## [**2.2.3**](https://github.com/hapijs/qs/issues?milestone=12&state=closed) +- [**#37**](https://github.com/hapijs/qs/issues/37) parser discards first empty value in array +- [**#36**](https://github.com/hapijs/qs/issues/36) Update to lab 4.x + +## [**2.2.2**](https://github.com/hapijs/qs/issues?milestone=11&state=closed) +- [**#33**](https://github.com/hapijs/qs/issues/33) Error when plain object in a value +- [**#34**](https://github.com/hapijs/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty +- [**#24**](https://github.com/hapijs/qs/issues/24) Changelog? Semver? + +## [**2.2.1**](https://github.com/hapijs/qs/issues?milestone=10&state=closed) +- [**#32**](https://github.com/hapijs/qs/issues/32) account for circular references properly, closes #31 +- [**#31**](https://github.com/hapijs/qs/issues/31) qs.parse stackoverflow on circular objects + +## [**2.2.0**](https://github.com/hapijs/qs/issues?milestone=9&state=closed) +- [**#26**](https://github.com/hapijs/qs/issues/26) Don't use Buffer global if it's not present +- [**#30**](https://github.com/hapijs/qs/issues/30) Bug when merging non-object values into arrays +- [**#29**](https://github.com/hapijs/qs/issues/29) Don't call Utils.clone at the top of Utils.merge +- [**#23**](https://github.com/hapijs/qs/issues/23) Ability to not limit parameters? + +## [**2.1.0**](https://github.com/hapijs/qs/issues?milestone=8&state=closed) +- [**#22**](https://github.com/hapijs/qs/issues/22) Enable using a RegExp as delimiter + +## [**2.0.0**](https://github.com/hapijs/qs/issues?milestone=7&state=closed) +- [**#18**](https://github.com/hapijs/qs/issues/18) Why is there arrayLimit? +- [**#20**](https://github.com/hapijs/qs/issues/20) Configurable parametersLimit +- [**#21**](https://github.com/hapijs/qs/issues/21) make all limits optional, for #18, for #20 + +## [**1.2.2**](https://github.com/hapijs/qs/issues?milestone=6&state=closed) +- [**#19**](https://github.com/hapijs/qs/issues/19) Don't overwrite null values + +## [**1.2.1**](https://github.com/hapijs/qs/issues?milestone=5&state=closed) +- [**#16**](https://github.com/hapijs/qs/issues/16) ignore non-string delimiters +- [**#15**](https://github.com/hapijs/qs/issues/15) Close code block + +## [**1.2.0**](https://github.com/hapijs/qs/issues?milestone=4&state=closed) +- [**#12**](https://github.com/hapijs/qs/issues/12) Add optional delim argument +- [**#13**](https://github.com/hapijs/qs/issues/13) fix #11: flattened keys in array are now correctly parsed + +## [**1.1.0**](https://github.com/hapijs/qs/issues?milestone=3&state=closed) +- [**#7**](https://github.com/hapijs/qs/issues/7) Empty values of a POST array disappear after being submitted +- [**#9**](https://github.com/hapijs/qs/issues/9) Should not omit equals signs (=) when value is null +- [**#6**](https://github.com/hapijs/qs/issues/6) Minor grammar fix in README + +## [**1.0.2**](https://github.com/hapijs/qs/issues?milestone=2&state=closed) +- [**#5**](https://github.com/hapijs/qs/issues/5) array holes incorrectly copied into object on large index + diff --git a/node_modules/qs/CONTRIBUTING.md b/node_modules/qs/CONTRIBUTING.md new file mode 100644 index 000000000..892836159 --- /dev/null +++ b/node_modules/qs/CONTRIBUTING.md @@ -0,0 +1 @@ +Please view our [hapijs contributing guide](https://github.com/hapijs/hapi/blob/master/CONTRIBUTING.md). diff --git a/node_modules/qs/LICENSE b/node_modules/qs/LICENSE new file mode 100755 index 000000000..d4569487a --- /dev/null +++ b/node_modules/qs/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2014 Nathan LaFreniere and other contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * The names of any contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * * * + +The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors diff --git a/node_modules/qs/Makefile b/node_modules/qs/Makefile new file mode 100644 index 000000000..31cc899d4 --- /dev/null +++ b/node_modules/qs/Makefile @@ -0,0 +1,8 @@ +test: + @node node_modules/lab/bin/lab -a code -L +test-cov: + @node node_modules/lab/bin/lab -a code -t 100 -L +test-cov-html: + @node node_modules/lab/bin/lab -a code -L -r html -o coverage.html + +.PHONY: test test-cov test-cov-html diff --git a/node_modules/qs/README.md b/node_modules/qs/README.md new file mode 100755 index 000000000..21bf3faf3 --- /dev/null +++ b/node_modules/qs/README.md @@ -0,0 +1,222 @@ +# qs + +A querystring parsing and stringifying library with some added security. + +[![Build Status](https://secure.travis-ci.org/hapijs/qs.svg)](http://travis-ci.org/hapijs/qs) + +Lead Maintainer: [Nathan LaFreniere](https://github.com/nlf) + +The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). + +## Usage + +```javascript +var Qs = require('qs'); + +var obj = Qs.parse('a=c'); // { a: 'c' } +var str = Qs.stringify(obj); // 'a=c' +``` + +### Parsing Objects + +```javascript +Qs.parse(string, [options]); +``` + +**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. +For example, the string `'foo[bar]=baz'` converts to: + +```javascript +{ + foo: { + bar: 'baz' + } +} +``` + +URI encoded strings work too: + +```javascript +Qs.parse('a%5Bb%5D=c'); +// { a: { b: 'c' } } +``` + +You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: + +```javascript +{ + foo: { + bar: { + baz: 'foobarbaz' + } + } +} +``` + +By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like +`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: + +```javascript +{ + a: { + b: { + c: { + d: { + e: { + f: { + '[g][h][i]': 'j' + } + } + } + } + } + } +} +``` + +This depth can be overridden by passing a `depth` option to `Qs.parse(string, [options])`: + +```javascript +Qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); +// { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } } +``` + +The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. + +For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: + +```javascript +Qs.parse('a=b&c=d', { parameterLimit: 1 }); +// { a: 'b' } +``` + +An optional delimiter can also be passed: + +```javascript +Qs.parse('a=b;c=d', { delimiter: ';' }); +// { a: 'b', c: 'd' } +``` + +Delimiters can be a regular expression too: + +```javascript +Qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); +// { a: 'b', c: 'd', e: 'f' } +``` + +### Parsing Arrays + +**qs** can also parse arrays using a similar `[]` notation: + +```javascript +Qs.parse('a[]=b&a[]=c'); +// { a: ['b', 'c'] } +``` + +You may specify an index as well: + +```javascript +Qs.parse('a[1]=c&a[0]=b'); +// { a: ['b', 'c'] } +``` + +Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number +to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving +their order: + +```javascript +Qs.parse('a[1]=b&a[15]=c'); +// { a: ['b', 'c'] } +``` + +Note that an empty string is also a value, and will be preserved: + +```javascript +Qs.parse('a[]=&a[]=b'); +// { a: ['', 'b'] } +Qs.parse('a[0]=b&a[1]=&a[2]=c'); +// { a: ['b', '', 'c'] } +``` + +**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will +instead be converted to an object with the index as the key: + +```javascript +Qs.parse('a[100]=b'); +// { a: { '100': 'b' } } +``` + +This limit can be overridden by passing an `arrayLimit` option: + +```javascript +Qs.parse('a[1]=b', { arrayLimit: 0 }); +// { a: { '1': 'b' } } +``` + +To disable array parsing entirely, set `arrayLimit` to `-1`. + +If you mix notations, **qs** will merge the two items into an object: + +```javascript +Qs.parse('a[0]=b&a[b]=c'); +// { a: { '0': 'b', b: 'c' } } +``` + +You can also create arrays of objects: + +```javascript +Qs.parse('a[][b]=c'); +// { a: [{ b: 'c' }] } +``` + +### Stringifying + +```javascript +Qs.stringify(object, [options]); +``` + +When stringifying, **qs** always URI encodes output. Objects are stringified as you would expect: + +```javascript +Qs.stringify({ a: 'b' }); +// 'a=b' +Qs.stringify({ a: { b: 'c' } }); +// 'a%5Bb%5D=c' +``` + +Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. + +When arrays are stringified, by default they are given explicit indices: + +```javascript +Qs.stringify({ a: ['b', 'c', 'd'] }); +// 'a[0]=b&a[1]=c&a[2]=d' +``` + +You may override this by setting the `indices` option to `false`: + +```javascript +Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); +// 'a=b&a=c&a=d' +``` + +Empty strings and null values will omit the value, but the equals sign (=) remains in place: + +```javascript +Qs.stringify({ a: '' }); +// 'a=' +``` + +Properties that are set to `undefined` will be omitted entirely: + +```javascript +Qs.stringify({ a: null, b: undefined }); +// 'a=' +``` + +The delimiter may be overridden with stringify as well: + +```javascript +Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }); +// 'a=b;c=d' +``` diff --git a/node_modules/qs/index.js b/node_modules/qs/index.js new file mode 100644 index 000000000..2291cd858 --- /dev/null +++ b/node_modules/qs/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/'); diff --git a/node_modules/qs/lib/index.js b/node_modules/qs/lib/index.js new file mode 100755 index 000000000..0e094933d --- /dev/null +++ b/node_modules/qs/lib/index.js @@ -0,0 +1,15 @@ +// Load modules + +var Stringify = require('./stringify'); +var Parse = require('./parse'); + + +// Declare internals + +var internals = {}; + + +module.exports = { + stringify: Stringify, + parse: Parse +}; diff --git a/node_modules/qs/lib/parse.js b/node_modules/qs/lib/parse.js new file mode 100755 index 000000000..4e7d02a1b --- /dev/null +++ b/node_modules/qs/lib/parse.js @@ -0,0 +1,157 @@ +// Load modules + +var Utils = require('./utils'); + + +// Declare internals + +var internals = { + delimiter: '&', + depth: 5, + arrayLimit: 20, + parameterLimit: 1000 +}; + + +internals.parseValues = function (str, options) { + + var obj = {}; + var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit); + + for (var i = 0, il = parts.length; i < il; ++i) { + var part = parts[i]; + var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1; + + if (pos === -1) { + obj[Utils.decode(part)] = ''; + } + else { + var key = Utils.decode(part.slice(0, pos)); + var val = Utils.decode(part.slice(pos + 1)); + + if (!obj.hasOwnProperty(key)) { + obj[key] = val; + } + else { + obj[key] = [].concat(obj[key]).concat(val); + } + } + } + + return obj; +}; + + +internals.parseObject = function (chain, val, options) { + + if (!chain.length) { + return val; + } + + var root = chain.shift(); + + var obj = {}; + if (root === '[]') { + obj = []; + obj = obj.concat(internals.parseObject(chain, val, options)); + } + else { + var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root; + var index = parseInt(cleanRoot, 10); + var indexString = '' + index; + if (!isNaN(index) && + root !== cleanRoot && + indexString === cleanRoot && + index >= 0 && + index <= options.arrayLimit) { + + obj = []; + obj[index] = internals.parseObject(chain, val, options); + } + else { + obj[cleanRoot] = internals.parseObject(chain, val, options); + } + } + + return obj; +}; + + +internals.parseKeys = function (key, val, options) { + + if (!key) { + return; + } + + // The regex chunks + + var parent = /^([^\[\]]*)/; + var child = /(\[[^\[\]]*\])/g; + + // Get the parent + + var segment = parent.exec(key); + + // Don't allow them to overwrite object prototype properties + + if (Object.prototype.hasOwnProperty(segment[1])) { + return; + } + + // Stash the parent if it exists + + var keys = []; + if (segment[1]) { + keys.push(segment[1]); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + + ++i; + if (!Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) { + keys.push(segment[1]); + } + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return internals.parseObject(keys, val, options); +}; + + +module.exports = function (str, options) { + + if (str === '' || + str === null || + typeof str === 'undefined') { + + return {}; + } + + options = options || {}; + options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter; + options.depth = typeof options.depth === 'number' ? options.depth : internals.depth; + options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit; + options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit; + + var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str; + var obj = {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0, il = keys.length; i < il; ++i) { + var key = keys[i]; + var newObj = internals.parseKeys(key, tempObj[key], options); + obj = Utils.merge(obj, newObj); + } + + return Utils.compact(obj); +}; diff --git a/node_modules/qs/lib/stringify.js b/node_modules/qs/lib/stringify.js new file mode 100755 index 000000000..b4411047f --- /dev/null +++ b/node_modules/qs/lib/stringify.js @@ -0,0 +1,77 @@ +// Load modules + +var Utils = require('./utils'); + + +// Declare internals + +var internals = { + delimiter: '&', + indices: true +}; + + +internals.stringify = function (obj, prefix, options) { + + if (Utils.isBuffer(obj)) { + obj = obj.toString(); + } + else if (obj instanceof Date) { + obj = obj.toISOString(); + } + else if (obj === null) { + obj = ''; + } + + if (typeof obj === 'string' || + typeof obj === 'number' || + typeof obj === 'boolean') { + + return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys = Object.keys(obj); + for (var i = 0, il = objKeys.length; i < il; ++i) { + var key = objKeys[i]; + if (!options.indices && + Array.isArray(obj)) { + + values = values.concat(internals.stringify(obj[key], prefix, options)); + } + else { + values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', options)); + } + } + + return values; +}; + + +module.exports = function (obj, options) { + + options = options || {}; + var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter; + options.indices = typeof options.indices === 'boolean' ? options.indices : internals.indices; + + var keys = []; + + if (typeof obj !== 'object' || + obj === null) { + + return ''; + } + + var objKeys = Object.keys(obj); + for (var i = 0, il = objKeys.length; i < il; ++i) { + var key = objKeys[i]; + keys = keys.concat(internals.stringify(obj[key], key, options)); + } + + return keys.join(delimiter); +}; diff --git a/node_modules/qs/lib/utils.js b/node_modules/qs/lib/utils.js new file mode 100755 index 000000000..5240bd5b0 --- /dev/null +++ b/node_modules/qs/lib/utils.js @@ -0,0 +1,132 @@ +// Load modules + + +// Declare internals + +var internals = {}; + + +exports.arrayToObject = function (source) { + + var obj = {}; + for (var i = 0, il = source.length; i < il; ++i) { + if (typeof source[i] !== 'undefined') { + + obj[i] = source[i]; + } + } + + return obj; +}; + + +exports.merge = function (target, source) { + + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (Array.isArray(target)) { + target.push(source); + } + else { + target[source] = true; + } + + return target; + } + + if (typeof target !== 'object') { + target = [target].concat(source); + return target; + } + + if (Array.isArray(target) && + !Array.isArray(source)) { + + target = exports.arrayToObject(target); + } + + var keys = Object.keys(source); + for (var k = 0, kl = keys.length; k < kl; ++k) { + var key = keys[k]; + var value = source[key]; + + if (!target[key]) { + target[key] = value; + } + else { + target[key] = exports.merge(target[key], value); + } + } + + return target; +}; + + +exports.decode = function (str) { + + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (e) { + return str; + } +}; + + +exports.compact = function (obj, refs) { + + if (typeof obj !== 'object' || + obj === null) { + + return obj; + } + + refs = refs || []; + var lookup = refs.indexOf(obj); + if (lookup !== -1) { + return refs[lookup]; + } + + refs.push(obj); + + if (Array.isArray(obj)) { + var compacted = []; + + for (var i = 0, il = obj.length; i < il; ++i) { + if (typeof obj[i] !== 'undefined') { + compacted.push(obj[i]); + } + } + + return compacted; + } + + var keys = Object.keys(obj); + for (i = 0, il = keys.length; i < il; ++i) { + var key = keys[i]; + obj[key] = exports.compact(obj[key], refs); + } + + return obj; +}; + + +exports.isRegExp = function (obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + + +exports.isBuffer = function (obj) { + + if (obj === null || + typeof obj === 'undefined') { + + return false; + } + + return !!(obj.constructor && + obj.constructor.isBuffer && + obj.constructor.isBuffer(obj)); +}; diff --git a/node_modules/qs/package.json b/node_modules/qs/package.json new file mode 100644 index 000000000..5c713cfa1 --- /dev/null +++ b/node_modules/qs/package.json @@ -0,0 +1,57 @@ +{ + "_from": "qs@~2.3.3", + "_id": "qs@2.3.3", + "_inBundle": false, + "_integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=", + "_location": "/qs", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "qs@~2.3.3", + "name": "qs", + "escapedName": "qs", + "rawSpec": "~2.3.3", + "saveSpec": null, + "fetchSpec": "~2.3.3" + }, + "_requiredBy": [ + "/union" + ], + "_resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "_shasum": "e9e85adbe75da0bbe4c8e0476a086290f863b404", + "_spec": "qs@~2.3.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/union", + "bugs": { + "url": "https://github.com/hapijs/qs/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "devDependencies": { + "code": "1.x.x", + "lab": "5.x.x" + }, + "homepage": "https://github.com/hapijs/qs", + "keywords": [ + "querystring", + "qs" + ], + "licenses": [ + { + "type": "BSD", + "url": "http://github.com/hapijs/qs/raw/master/LICENSE" + } + ], + "main": "index.js", + "name": "qs", + "repository": { + "type": "git", + "url": "git+https://github.com/hapijs/qs.git" + }, + "scripts": { + "test": "make test-cov" + }, + "version": "2.3.3" +} diff --git a/node_modules/qs/test/parse.js b/node_modules/qs/test/parse.js new file mode 100755 index 000000000..6c20cc1be --- /dev/null +++ b/node_modules/qs/test/parse.js @@ -0,0 +1,413 @@ +/* eslint no-extend-native:0 */ +// Load modules + +var Code = require('code'); +var Lab = require('lab'); +var Qs = require('../'); + + +// Declare internals + +var internals = {}; + + +// Test shortcuts + +var lab = exports.lab = Lab.script(); +var expect = Code.expect; +var describe = lab.experiment; +var it = lab.test; + + +describe('parse()', function () { + + it('parses a simple string', function (done) { + + expect(Qs.parse('0=foo')).to.deep.equal({ '0': 'foo' }); + expect(Qs.parse('foo=c++')).to.deep.equal({ foo: 'c ' }); + expect(Qs.parse('a[>=]=23')).to.deep.equal({ a: { '>=': '23' } }); + expect(Qs.parse('a[<=>]==23')).to.deep.equal({ a: { '<=>': '=23' } }); + expect(Qs.parse('a[==]=23')).to.deep.equal({ a: { '==': '23' } }); + expect(Qs.parse('foo')).to.deep.equal({ foo: '' }); + expect(Qs.parse('foo=bar')).to.deep.equal({ foo: 'bar' }); + expect(Qs.parse(' foo = bar = baz ')).to.deep.equal({ ' foo ': ' bar = baz ' }); + expect(Qs.parse('foo=bar=baz')).to.deep.equal({ foo: 'bar=baz' }); + expect(Qs.parse('foo=bar&bar=baz')).to.deep.equal({ foo: 'bar', bar: 'baz' }); + expect(Qs.parse('foo=bar&baz')).to.deep.equal({ foo: 'bar', baz: '' }); + expect(Qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World')).to.deep.equal({ + cht: 'p3', + chd: 't:60,40', + chs: '250x100', + chl: 'Hello|World' + }); + done(); + }); + + it('parses a single nested string', function (done) { + + expect(Qs.parse('a[b]=c')).to.deep.equal({ a: { b: 'c' } }); + done(); + }); + + it('parses a double nested string', function (done) { + + expect(Qs.parse('a[b][c]=d')).to.deep.equal({ a: { b: { c: 'd' } } }); + done(); + }); + + it('defaults to a depth of 5', function (done) { + + expect(Qs.parse('a[b][c][d][e][f][g][h]=i')).to.deep.equal({ a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }); + done(); + }); + + it('only parses one level when depth = 1', function (done) { + + expect(Qs.parse('a[b][c]=d', { depth: 1 })).to.deep.equal({ a: { b: { '[c]': 'd' } } }); + expect(Qs.parse('a[b][c][d]=e', { depth: 1 })).to.deep.equal({ a: { b: { '[c][d]': 'e' } } }); + done(); + }); + + it('parses a simple array', function (done) { + + expect(Qs.parse('a=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + done(); + }); + + it('parses an explicit array', function (done) { + + expect(Qs.parse('a[]=b')).to.deep.equal({ a: ['b'] }); + expect(Qs.parse('a[]=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[]=b&a[]=c&a[]=d')).to.deep.equal({ a: ['b', 'c', 'd'] }); + done(); + }); + + it('parses a mix of simple and explicit arrays', function (done) { + + expect(Qs.parse('a=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[0]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a=b&a[0]=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[1]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a=b&a[1]=c')).to.deep.equal({ a: ['b', 'c'] }); + done(); + }); + + it('parses a nested array', function (done) { + + expect(Qs.parse('a[b][]=c&a[b][]=d')).to.deep.equal({ a: { b: ['c', 'd'] } }); + expect(Qs.parse('a[>=]=25')).to.deep.equal({ a: { '>=': '25' } }); + done(); + }); + + it('allows to specify array indices', function (done) { + + expect(Qs.parse('a[1]=c&a[0]=b&a[2]=d')).to.deep.equal({ a: ['b', 'c', 'd'] }); + expect(Qs.parse('a[1]=c&a[0]=b')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[1]=c')).to.deep.equal({ a: ['c'] }); + done(); + }); + + it('limits specific array indices to 20', function (done) { + + expect(Qs.parse('a[20]=a')).to.deep.equal({ a: ['a'] }); + expect(Qs.parse('a[21]=a')).to.deep.equal({ a: { '21': 'a' } }); + done(); + }); + + it('supports keys that begin with a number', function (done) { + + expect(Qs.parse('a[12b]=c')).to.deep.equal({ a: { '12b': 'c' } }); + done(); + }); + + it('supports encoded = signs', function (done) { + + expect(Qs.parse('he%3Dllo=th%3Dere')).to.deep.equal({ 'he=llo': 'th=ere' }); + done(); + }); + + it('is ok with url encoded strings', function (done) { + + expect(Qs.parse('a[b%20c]=d')).to.deep.equal({ a: { 'b c': 'd' } }); + expect(Qs.parse('a[b]=c%20d')).to.deep.equal({ a: { b: 'c d' } }); + done(); + }); + + it('allows brackets in the value', function (done) { + + expect(Qs.parse('pets=["tobi"]')).to.deep.equal({ pets: '["tobi"]' }); + expect(Qs.parse('operators=[">=", "<="]')).to.deep.equal({ operators: '[">=", "<="]' }); + done(); + }); + + it('allows empty values', function (done) { + + expect(Qs.parse('')).to.deep.equal({}); + expect(Qs.parse(null)).to.deep.equal({}); + expect(Qs.parse(undefined)).to.deep.equal({}); + done(); + }); + + it('transforms arrays to objects', function (done) { + + expect(Qs.parse('foo[0]=bar&foo[bad]=baz')).to.deep.equal({ foo: { '0': 'bar', bad: 'baz' } }); + expect(Qs.parse('foo[bad]=baz&foo[0]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }); + expect(Qs.parse('foo[bad]=baz&foo[]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }); + expect(Qs.parse('foo[]=bar&foo[bad]=baz')).to.deep.equal({ foo: { '0': 'bar', bad: 'baz' } }); + expect(Qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar', '1': 'foo' } }); + expect(Qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb')).to.deep.equal({foo: [ {a: 'a', b: 'b'}, {a: 'aa', b: 'bb'} ]}); + done(); + }); + + it('can add keys to objects', function (done) { + + expect(Qs.parse('a[b]=c&a=d')).to.deep.equal({ a: { b: 'c', d: true } }); + done(); + }); + + it('correctly prunes undefined values when converting an array to an object', function (done) { + + expect(Qs.parse('a[2]=b&a[99999999]=c')).to.deep.equal({ a: { '2': 'b', '99999999': 'c' } }); + done(); + }); + + it('supports malformed uri characters', function (done) { + + expect(Qs.parse('{%:%}')).to.deep.equal({ '{%:%}': '' }); + expect(Qs.parse('foo=%:%}')).to.deep.equal({ foo: '%:%}' }); + done(); + }); + + it('doesn\'t produce empty keys', function (done) { + + expect(Qs.parse('_r=1&')).to.deep.equal({ '_r': '1' }); + done(); + }); + + it('cannot override prototypes', function (done) { + + var obj = Qs.parse('toString=bad&bad[toString]=bad&constructor=bad'); + expect(typeof obj.toString).to.equal('function'); + expect(typeof obj.bad.toString).to.equal('function'); + expect(typeof obj.constructor).to.equal('function'); + done(); + }); + + it('cannot access Object prototype', function (done) { + + Qs.parse('constructor[prototype][bad]=bad'); + Qs.parse('bad[constructor][prototype][bad]=bad'); + expect(typeof Object.prototype.bad).to.equal('undefined'); + done(); + }); + + it('parses arrays of objects', function (done) { + + expect(Qs.parse('a[][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }); + expect(Qs.parse('a[0][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }); + done(); + }); + + it('allows for empty strings in arrays', function (done) { + + expect(Qs.parse('a[]=b&a[]=&a[]=c')).to.deep.equal({ a: ['b', '', 'c'] }); + expect(Qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]=')).to.deep.equal({ a: ['b', '', 'c', ''] }); + expect(Qs.parse('a[]=&a[]=b&a[]=c')).to.deep.equal({ a: ['', 'b', 'c'] }); + done(); + }); + + it('compacts sparse arrays', function (done) { + + expect(Qs.parse('a[10]=1&a[2]=2')).to.deep.equal({ a: ['2', '1'] }); + done(); + }); + + it('parses semi-parsed strings', function (done) { + + expect(Qs.parse({ 'a[b]': 'c' })).to.deep.equal({ a: { b: 'c' } }); + expect(Qs.parse({ 'a[b]': 'c', 'a[d]': 'e' })).to.deep.equal({ a: { b: 'c', d: 'e' } }); + done(); + }); + + it('parses buffers correctly', function (done) { + + var b = new Buffer('test'); + expect(Qs.parse({ a: b })).to.deep.equal({ a: b }); + done(); + }); + + it('continues parsing when no parent is found', function (done) { + + expect(Qs.parse('[]&a=b')).to.deep.equal({ '0': '', a: 'b' }); + expect(Qs.parse('[foo]=bar')).to.deep.equal({ foo: 'bar' }); + done(); + }); + + it('does not error when parsing a very long array', function (done) { + + var str = 'a[]=a'; + while (Buffer.byteLength(str) < 128 * 1024) { + str += '&' + str; + } + + expect(function () { + + Qs.parse(str); + }).to.not.throw(); + + done(); + }); + + it('should not throw when a native prototype has an enumerable property', { parallel: false }, function (done) { + + Object.prototype.crash = ''; + Array.prototype.crash = ''; + expect(Qs.parse.bind(null, 'a=b')).to.not.throw(); + expect(Qs.parse('a=b')).to.deep.equal({ a: 'b' }); + expect(Qs.parse.bind(null, 'a[][b]=c')).to.not.throw(); + expect(Qs.parse('a[][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }); + delete Object.prototype.crash; + delete Array.prototype.crash; + done(); + }); + + it('parses a string with an alternative string delimiter', function (done) { + + expect(Qs.parse('a=b;c=d', { delimiter: ';' })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('parses a string with an alternative RegExp delimiter', function (done) { + + expect(Qs.parse('a=b; c=d', { delimiter: /[;,] */ })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('does not use non-splittable objects as delimiters', function (done) { + + expect(Qs.parse('a=b&c=d', { delimiter: true })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('allows overriding parameter limit', function (done) { + + expect(Qs.parse('a=b&c=d', { parameterLimit: 1 })).to.deep.equal({ a: 'b' }); + done(); + }); + + it('allows setting the parameter limit to Infinity', function (done) { + + expect(Qs.parse('a=b&c=d', { parameterLimit: Infinity })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('allows overriding array limit', function (done) { + + expect(Qs.parse('a[0]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '0': 'b' } }); + expect(Qs.parse('a[-1]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '-1': 'b' } }); + expect(Qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 })).to.deep.equal({ a: { '0': 'b', '1': 'c' } }); + done(); + }); + + it('parses an object', function (done) { + + var input = { + 'user[name]': {'pop[bob]': 3}, + 'user[email]': null + }; + + var expected = { + 'user': { + 'name': {'pop[bob]': 3}, + 'email': null + } + }; + + var result = Qs.parse(input); + + expect(result).to.deep.equal(expected); + done(); + }); + + it('parses an object and not child values', function (done) { + + var input = { + 'user[name]': {'pop[bob]': { 'test': 3 }}, + 'user[email]': null + }; + + var expected = { + 'user': { + 'name': {'pop[bob]': { 'test': 3 }}, + 'email': null + } + }; + + var result = Qs.parse(input); + + expect(result).to.deep.equal(expected); + done(); + }); + + it('does not blow up when Buffer global is missing', function (done) { + + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = Qs.parse('a=b&c=d'); + global.Buffer = tempBuffer; + expect(result).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('does not crash when using invalid dot notation', function (done) { + + expect(Qs.parse('roomInfoList[0].childrenAges[0]=15&roomInfoList[0].numberOfAdults=2')).to.deep.equal({ roomInfoList: [['15', '2']] }); + done(); + }); + + it('does not crash when parsing circular references', function (done) { + + var a = {}; + a.b = a; + + var parsed; + + expect(function () { + + parsed = Qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); + }).to.not.throw(); + + expect(parsed).to.contain('foo'); + expect(parsed.foo).to.contain('bar', 'baz'); + expect(parsed.foo.bar).to.equal('baz'); + expect(parsed.foo.baz).to.deep.equal(a); + done(); + }); + + it('parses plain objects correctly', function (done) { + + var a = Object.create(null); + a.b = 'c'; + + expect(Qs.parse(a)).to.deep.equal({ b: 'c' }); + var result = Qs.parse({ a: a }); + expect(result).to.contain('a'); + expect(result.a).to.deep.equal(a); + done(); + }); + + it('parses dates correctly', function (done) { + + var now = new Date(); + expect(Qs.parse({ a: now })).to.deep.equal({ a: now }); + done(); + }); + + it('parses regular expressions correctly', function (done) { + + var re = /^test$/; + expect(Qs.parse({ a: re })).to.deep.equal({ a: re }); + done(); + }); +}); diff --git a/node_modules/qs/test/stringify.js b/node_modules/qs/test/stringify.js new file mode 100755 index 000000000..75e397a74 --- /dev/null +++ b/node_modules/qs/test/stringify.js @@ -0,0 +1,179 @@ +/* eslint no-extend-native:0 */ +// Load modules + +var Code = require('code'); +var Lab = require('lab'); +var Qs = require('../'); + + +// Declare internals + +var internals = {}; + + +// Test shortcuts + +var lab = exports.lab = Lab.script(); +var expect = Code.expect; +var describe = lab.experiment; +var it = lab.test; + + +describe('stringify()', function () { + + it('stringifies a querystring object', function (done) { + + expect(Qs.stringify({ a: 'b' })).to.equal('a=b'); + expect(Qs.stringify({ a: 1 })).to.equal('a=1'); + expect(Qs.stringify({ a: 1, b: 2 })).to.equal('a=1&b=2'); + done(); + }); + + it('stringifies a nested object', function (done) { + + expect(Qs.stringify({ a: { b: 'c' } })).to.equal('a%5Bb%5D=c'); + expect(Qs.stringify({ a: { b: { c: { d: 'e' } } } })).to.equal('a%5Bb%5D%5Bc%5D%5Bd%5D=e'); + done(); + }); + + it('stringifies an array value', function (done) { + + expect(Qs.stringify({ a: ['b', 'c', 'd'] })).to.equal('a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d'); + done(); + }); + + it('omits array indices when asked', function (done) { + + expect(Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false })).to.equal('a=b&a=c&a=d'); + done(); + }); + + it('stringifies a nested array value', function (done) { + + expect(Qs.stringify({ a: { b: ['c', 'd'] } })).to.equal('a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + done(); + }); + + it('stringifies an object inside an array', function (done) { + + expect(Qs.stringify({ a: [{ b: 'c' }] })).to.equal('a%5B0%5D%5Bb%5D=c'); + expect(Qs.stringify({ a: [{ b: { c: [1] } }] })).to.equal('a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1'); + done(); + }); + + it('does not omit object keys when indices = false', function (done) { + + expect(Qs.stringify({ a: [{ b: 'c' }] }, { indices: false })).to.equal('a%5Bb%5D=c'); + done(); + }); + + it('stringifies a complicated object', function (done) { + + expect(Qs.stringify({ a: { b: 'c', d: 'e' } })).to.equal('a%5Bb%5D=c&a%5Bd%5D=e'); + done(); + }); + + it('stringifies an empty value', function (done) { + + expect(Qs.stringify({ a: '' })).to.equal('a='); + expect(Qs.stringify({ a: '', b: '' })).to.equal('a=&b='); + expect(Qs.stringify({ a: null })).to.equal('a='); + expect(Qs.stringify({ a: { b: null } })).to.equal('a%5Bb%5D='); + done(); + }); + + it('stringifies an empty object', function (done) { + + var obj = Object.create(null); + obj.a = 'b'; + expect(Qs.stringify(obj)).to.equal('a=b'); + done(); + }); + + it('returns an empty string for invalid input', function (done) { + + expect(Qs.stringify(undefined)).to.equal(''); + expect(Qs.stringify(false)).to.equal(''); + expect(Qs.stringify(null)).to.equal(''); + expect(Qs.stringify('')).to.equal(''); + done(); + }); + + it('stringifies an object with an empty object as a child', function (done) { + + var obj = { + a: Object.create(null) + }; + + obj.a.b = 'c'; + expect(Qs.stringify(obj)).to.equal('a%5Bb%5D=c'); + done(); + }); + + it('drops keys with a value of undefined', function (done) { + + expect(Qs.stringify({ a: undefined })).to.equal(''); + expect(Qs.stringify({ a: { b: undefined, c: null } })).to.equal('a%5Bc%5D='); + done(); + }); + + it('url encodes values', function (done) { + + expect(Qs.stringify({ a: 'b c' })).to.equal('a=b%20c'); + done(); + }); + + it('stringifies a date', function (done) { + + var now = new Date(); + var str = 'a=' + encodeURIComponent(now.toISOString()); + expect(Qs.stringify({ a: now })).to.equal(str); + done(); + }); + + it('stringifies the weird object from qs', function (done) { + + expect(Qs.stringify({ 'my weird field': 'q1!2"\'w$5&7/z8)?' })).to.equal('my%20weird%20field=q1!2%22\'w%245%267%2Fz8)%3F'); + done(); + }); + + it('skips properties that are part of the object prototype', function (done) { + + Object.prototype.crash = 'test'; + expect(Qs.stringify({ a: 'b'})).to.equal('a=b'); + expect(Qs.stringify({ a: { b: 'c' } })).to.equal('a%5Bb%5D=c'); + delete Object.prototype.crash; + done(); + }); + + it('stringifies boolean values', function (done) { + + expect(Qs.stringify({ a: true })).to.equal('a=true'); + expect(Qs.stringify({ a: { b: true } })).to.equal('a%5Bb%5D=true'); + expect(Qs.stringify({ b: false })).to.equal('b=false'); + expect(Qs.stringify({ b: { c: false } })).to.equal('b%5Bc%5D=false'); + done(); + }); + + it('stringifies buffer values', function (done) { + + expect(Qs.stringify({ a: new Buffer('test') })).to.equal('a=test'); + expect(Qs.stringify({ a: { b: new Buffer('test') } })).to.equal('a%5Bb%5D=test'); + done(); + }); + + it('stringifies an object using an alternative delimiter', function (done) { + + expect(Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' })).to.equal('a=b;c=d'); + done(); + }); + + it('doesn\'t blow up when Buffer global is missing', function (done) { + + var tempBuffer = global.Buffer; + delete global.Buffer; + expect(Qs.stringify({ a: 'b', c: 'd' })).to.equal('a=b&c=d'); + global.Buffer = tempBuffer; + done(); + }); +}); diff --git a/node_modules/querystring-es3/.travis.yml b/node_modules/querystring-es3/.travis.yml new file mode 100644 index 000000000..895dbd362 --- /dev/null +++ b/node_modules/querystring-es3/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.6 + - 0.8 diff --git a/node_modules/querystring-es3/History.md b/node_modules/querystring-es3/History.md new file mode 100644 index 000000000..4fddbaf78 --- /dev/null +++ b/node_modules/querystring-es3/History.md @@ -0,0 +1,20 @@ +# 0.2.0 / 2013-02-21 + + - Refactor into function per-module idiomatic style. + - Improved test coverage. + +# 0.1.0 / 2011-12-13 + + - Minor project reorganization + +# 0.0.3 / 2011-04-16 + - Support for AMD module loaders + +# 0.0.2 / 2011-04-16 + + - Ported unit tests + - Removed functionality that depended on Buffers + +# 0.0.1 / 2011-04-15 + + - Initial release diff --git a/node_modules/querystring-es3/License.md b/node_modules/querystring-es3/License.md new file mode 100644 index 000000000..fc80e85f2 --- /dev/null +++ b/node_modules/querystring-es3/License.md @@ -0,0 +1,19 @@ + +Copyright 2012 Irakli Gozalishvili. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/node_modules/querystring-es3/Readme.md b/node_modules/querystring-es3/Readme.md new file mode 100644 index 000000000..be1668df0 --- /dev/null +++ b/node_modules/querystring-es3/Readme.md @@ -0,0 +1,15 @@ +# querystring + +[![Build Status](https://secure.travis-ci.org/mike-spainhower/querystring.png)](http://travis-ci.org/mike-spainhower/querystring) + + +[![Browser support](http://ci.testling.com/mike-spainhower/querystring.png)](http://ci.testling.com/mike-spainhower/querystring) + + + +Node's querystring module for all engines. + +## Install ## + + npm install querystring + diff --git a/node_modules/querystring-es3/decode.js b/node_modules/querystring-es3/decode.js new file mode 100644 index 000000000..b5825c0b7 --- /dev/null +++ b/node_modules/querystring-es3/decode.js @@ -0,0 +1,84 @@ +// 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. + +'use strict'; + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; diff --git a/node_modules/querystring-es3/encode.js b/node_modules/querystring-es3/encode.js new file mode 100644 index 000000000..76e4cfb09 --- /dev/null +++ b/node_modules/querystring-es3/encode.js @@ -0,0 +1,85 @@ +// 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. + +'use strict'; + +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +}; + +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} + +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; diff --git a/node_modules/querystring-es3/index.js b/node_modules/querystring-es3/index.js new file mode 100644 index 000000000..99826ea8a --- /dev/null +++ b/node_modules/querystring-es3/index.js @@ -0,0 +1,4 @@ +'use strict'; + +exports.decode = exports.parse = require('./decode'); +exports.encode = exports.stringify = require('./encode'); diff --git a/node_modules/querystring-es3/package.json b/node_modules/querystring-es3/package.json new file mode 100644 index 000000000..061e6fdd1 --- /dev/null +++ b/node_modules/querystring-es3/package.json @@ -0,0 +1,100 @@ +{ + "_from": "querystring-es3@^0.2.0", + "_id": "querystring-es3@0.2.1", + "_inBundle": false, + "_integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "_location": "/querystring-es3", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "querystring-es3@^0.2.0", + "name": "querystring-es3", + "escapedName": "querystring-es3", + "rawSpec": "^0.2.0", + "saveSpec": null, + "fetchSpec": "^0.2.0" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "_shasum": "9ec61f79049875707d69414596fd907a4d711e73", + "_spec": "querystring-es3@^0.2.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com" + }, + "bugs": { + "url": "http://github.com/mike-spainhower/querystring/issues/" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Node's querystring module for all engines. (ES3 compat fork)", + "devDependencies": { + "phantomify": "~0.x.0", + "retape": "~0.x.0", + "tape": "~0.1.5", + "test": "~0.x.0" + }, + "engines": { + "node": ">=0.4.x" + }, + "homepage": "https://github.com/mike-spainhower/querystring#readme", + "id": "querystring-es3", + "keywords": [ + "commonjs", + "query", + "querystring" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/Gozala/enchain/License.md" + } + ], + "name": "querystring-es3", + "repository": { + "type": "git", + "url": "git://github.com/mike-spainhower/querystring.git", + "web": "https://github.com/mike-spainhower/querystring" + }, + "scripts": { + "test": "npm run test-node && npm run test-browser && npm run test-tap", + "test-browser": "node ./node_modules/phantomify/bin/cmd.js ./test/common-index.js", + "test-node": "node ./test/common-index.js", + "test-tap": "node ./test/tap-index.js" + }, + "testling": { + "files": "test/tap-index.js", + "browsers": { + "iexplore": [ + 9, + 10 + ], + "chrome": [ + 16, + 20, + 25, + "canary" + ], + "firefox": [ + 10, + 15, + 16, + 17, + 18, + "nightly" + ], + "safari": [ + 5, + 6 + ], + "opera": [ + 12 + ] + } + }, + "version": "0.2.1" +} diff --git a/node_modules/querystring-es3/test/common-index.js b/node_modules/querystring-es3/test/common-index.js new file mode 100644 index 000000000..f356f9875 --- /dev/null +++ b/node_modules/querystring-es3/test/common-index.js @@ -0,0 +1,3 @@ +"use strict"; + +require("test").run(require("./index")) \ No newline at end of file diff --git a/node_modules/querystring-es3/test/index.js b/node_modules/querystring-es3/test/index.js new file mode 100644 index 000000000..62eb2ac89 --- /dev/null +++ b/node_modules/querystring-es3/test/index.js @@ -0,0 +1,210 @@ +// 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. + +"use strict"; + +// test using assert +var qs = require('../'); + +// folding block, commented to pass gjslint +// {{{ +// [ wonkyQS, canonicalQS, obj ] +var qsTestCases = [ + ['foo=918854443121279438895193', + 'foo=918854443121279438895193', + {'foo': '918854443121279438895193'}], + ['foo=bar', 'foo=bar', {'foo': 'bar'}], + ['foo=bar&foo=quux', 'foo=bar&foo=quux', {'foo': ['bar', 'quux']}], + ['foo=1&bar=2', 'foo=1&bar=2', {'foo': '1', 'bar': '2'}], + ['my+weird+field=q1%212%22%27w%245%267%2Fz8%29%3F', + 'my%20weird%20field=q1!2%22\'w%245%267%2Fz8)%3F', + {'my weird field': 'q1!2"\'w$5&7/z8)?' }], + ['foo%3Dbaz=bar', 'foo%3Dbaz=bar', {'foo=baz': 'bar'}], + ['foo=baz=bar', 'foo=baz%3Dbar', {'foo': 'baz=bar'}], + ['str=foo&arr=1&arr=2&arr=3&somenull=&undef=', + 'str=foo&arr=1&arr=2&arr=3&somenull=&undef=', + { 'str': 'foo', + 'arr': ['1', '2', '3'], + 'somenull': '', + 'undef': ''}], + [' foo = bar ', '%20foo%20=%20bar%20', {' foo ': ' bar '}], + // disable test that fails ['foo=%zx', 'foo=%25zx', {'foo': '%zx'}], + ['foo=%EF%BF%BD', 'foo=%EF%BF%BD', {'foo': '\ufffd' }], + // See: https://github.com/joyent/node/issues/1707 + ['hasOwnProperty=x&toString=foo&valueOf=bar&__defineGetter__=baz', + 'hasOwnProperty=x&toString=foo&valueOf=bar&__defineGetter__=baz', + { hasOwnProperty: 'x', + toString: 'foo', + valueOf: 'bar', + __defineGetter__: 'baz' }], + // See: https://github.com/joyent/node/issues/3058 + ['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }] +]; + +// [ wonkyQS, canonicalQS, obj ] +var qsColonTestCases = [ + ['foo:bar', 'foo:bar', {'foo': 'bar'}], + ['foo:bar;foo:quux', 'foo:bar;foo:quux', {'foo': ['bar', 'quux']}], + ['foo:1&bar:2;baz:quux', + 'foo:1%26bar%3A2;baz:quux', + {'foo': '1&bar:2', 'baz': 'quux'}], + ['foo%3Abaz:bar', 'foo%3Abaz:bar', {'foo:baz': 'bar'}], + ['foo:baz:bar', 'foo:baz%3Abar', {'foo': 'baz:bar'}] +]; + +// [wonkyObj, qs, canonicalObj] +var extendedFunction = function() {}; +extendedFunction.prototype = {a: 'b'}; +var qsWeirdObjects = [ + [{regexp: /./g}, 'regexp=', {'regexp': ''}], + [{regexp: new RegExp('.', 'g')}, 'regexp=', {'regexp': ''}], + [{fn: function() {}}, 'fn=', {'fn': ''}], + [{fn: new Function('')}, 'fn=', {'fn': ''}], + [{math: Math}, 'math=', {'math': ''}], + [{e: extendedFunction}, 'e=', {'e': ''}], + [{d: new Date()}, 'd=', {'d': ''}], + [{d: Date}, 'd=', {'d': ''}], + [{f: new Boolean(false), t: new Boolean(true)}, 'f=&t=', {'f': '', 't': ''}], + [{f: false, t: true}, 'f=false&t=true', {'f': 'false', 't': 'true'}], + [{n: null}, 'n=', {'n': ''}], + [{nan: NaN}, 'nan=', {'nan': ''}], + [{inf: Infinity}, 'inf=', {'inf': ''}] +]; +// }}} + +var qsNoMungeTestCases = [ + ['', {}], + ['foo=bar&foo=baz', {'foo': ['bar', 'baz']}], + ['blah=burp', {'blah': 'burp'}], + ['gragh=1&gragh=3&goo=2', {'gragh': ['1', '3'], 'goo': '2'}], + ['frappucino=muffin&goat%5B%5D=scone&pond=moose', + {'frappucino': 'muffin', 'goat[]': 'scone', 'pond': 'moose'}], + ['trololol=yes&lololo=no', {'trololol': 'yes', 'lololo': 'no'}] +]; + +exports['test basic'] = function(assert) { + assert.strictEqual('918854443121279438895193', + qs.parse('id=918854443121279438895193').id, + 'prase id=918854443121279438895193'); +}; + +exports['test that the canonical qs is parsed properly'] = function(assert) { + qsTestCases.forEach(function(testCase) { + assert.deepEqual(testCase[2], qs.parse(testCase[0]), + 'parse ' + testCase[0]); + }); +}; + + +exports['test that the colon test cases can do the same'] = function(assert) { + qsColonTestCases.forEach(function(testCase) { + assert.deepEqual(testCase[2], qs.parse(testCase[0], ';', ':'), + 'parse ' + testCase[0] + ' -> ; :'); + }); +}; + +exports['test the weird objects, that they get parsed properly'] = function(assert) { + qsWeirdObjects.forEach(function(testCase) { + assert.deepEqual(testCase[2], qs.parse(testCase[1]), + 'parse ' + testCase[1]); + }); +}; + +exports['test non munge test cases'] = function(assert) { + qsNoMungeTestCases.forEach(function(testCase) { + assert.deepEqual(testCase[0], qs.stringify(testCase[1], '&', '=', false), + 'stringify ' + JSON.stringify(testCase[1]) + ' -> & ='); + }); +}; + +exports['test the nested qs-in-qs case'] = function(assert) { + var f = qs.parse('a=b&q=x%3Dy%26y%3Dz'); + f.q = qs.parse(f.q); + assert.deepEqual(f, { a: 'b', q: { x: 'y', y: 'z' } }, + 'parse a=b&q=x%3Dy%26y%3Dz'); +}; + +exports['test nested in colon'] = function(assert) { + var f = qs.parse('a:b;q:x%3Ay%3By%3Az', ';', ':'); + f.q = qs.parse(f.q, ';', ':'); + assert.deepEqual(f, { a: 'b', q: { x: 'y', y: 'z' } }, + 'parse a:b;q:x%3Ay%3By%3Az -> ; :'); +}; + +exports['test stringifying'] = function(assert) { + qsTestCases.forEach(function(testCase) { + assert.equal(testCase[1], qs.stringify(testCase[2]), + 'stringify ' + JSON.stringify(testCase[2])); + }); + + qsColonTestCases.forEach(function(testCase) { + assert.equal(testCase[1], qs.stringify(testCase[2], ';', ':'), + 'stringify ' + JSON.stringify(testCase[2]) + ' -> ; :'); + }); + + qsWeirdObjects.forEach(function(testCase) { + assert.equal(testCase[1], qs.stringify(testCase[0]), + 'stringify ' + JSON.stringify(testCase[0])); + }); +}; + +exports['test stringifying nested'] = function(assert) { + var f = qs.stringify({ + a: 'b', + q: qs.stringify({ + x: 'y', + y: 'z' + }) + }); + assert.equal(f, 'a=b&q=x%3Dy%26y%3Dz', + JSON.stringify({ + a: 'b', + 'qs.stringify -> q': { + x: 'y', + y: 'z' + } + })); + + var threw = false; + try { qs.parse(undefined); } catch(error) { threw = true; } + assert.ok(!threw, "does not throws on undefined"); +}; + +exports['test nested in colon'] = function(assert) { + var f = qs.stringify({ + a: 'b', + q: qs.stringify({ + x: 'y', + y: 'z' + }, ';', ':') + }, ';', ':'); + assert.equal(f, 'a:b;q:x%3Ay%3By%3Az', + 'stringify ' + JSON.stringify({ + a: 'b', + 'qs.stringify -> q': { + x: 'y', + y: 'z' + } + }) + ' -> ; : '); + + + assert.deepEqual({}, qs.parse(), 'parse undefined'); +}; diff --git a/node_modules/querystring-es3/test/tap-index.js b/node_modules/querystring-es3/test/tap-index.js new file mode 100644 index 000000000..70679b3fc --- /dev/null +++ b/node_modules/querystring-es3/test/tap-index.js @@ -0,0 +1,3 @@ +"use strict"; + +require("retape")(require("./index")) \ No newline at end of file diff --git a/node_modules/querystring/.History.md.un~ b/node_modules/querystring/.History.md.un~ new file mode 100644 index 0000000000000000000000000000000000000000..c96a7dd8c8c86e2e4b6af0478b1bc122b929528d GIT binary patch literal 7960 zcmeI1O>0v@6ozk__}SL4mLj+rD1;VG%uP&mDblr2L05iY+Y|yOx0H0*MfHaW;zHes zKR`F`T=@gs`hk0K;X==IGN(>L?aJBB3n!DAdy@?3;XU`)S!)7yiU;&V2&^z8MM z_O~xGQz3{XCeC6fM$1j%OzWXru>3x=E^Ac0e$!mpo5+#Xq5{S_vTkUMz zuW+=IJ^08`5g#ydh*13&{hirr8vkDgRy%8%;>fZe=l$2h@R$S`78YHj-l(_SW!G%v zd987!mUrA@dr#qUMp?pSNJ_l70&gjVNBWOSOu%a%Tp;ai+aKUqn`0q4k1WKLz+3(o zyv!FzkZ`p#0hgesNr*^7R0*PsAtG=bmpCcGHEe#=fQ9Dmz#6q#%RwOxR6L$U>@xmX=tfkh&gPir=9Y8Y%7Y^LoR2jl5aQTOJ*#w5#Al zqW${GB%vb7^QPhnO@ ZFiAa69(m~N+kCx4vvqx5-`@NB>JPML-n9S# literal 0 HcmV?d00001 diff --git a/node_modules/querystring/.Readme.md.un~ b/node_modules/querystring/.Readme.md.un~ new file mode 100644 index 0000000000000000000000000000000000000000..71613b59ba1b551647a6ba1b47180a44ac70212b GIT binary patch literal 3225 zcmeHJyGjE=6dhxHHnxHY5fx2g(wK;m2tL4CM2U#VlB~&Ul8rO75g(v-*8YIKrG>3O zV4?PwVrgY5de3Y|*AUQ%YqbYXhTNHb%sprCofWHezFeNSA6e+|G>1{HPna%a9q zp?4>dB~Fx_m_f}bEc`<0w6uAF!lBtZI=41*ERw;dU*sfHzCq6QQM z(+C8rAq#$jR2#4V2qA}7&H7al*JZhx3SRRAv~Tn57%zhgoI^2MwfumpG2qeK*kR#H{5#i5Mo3~;7 L>#09+@^tYI$G;b9 literal 0 HcmV?d00001 diff --git a/node_modules/querystring/.package.json.un~ b/node_modules/querystring/.package.json.un~ new file mode 100644 index 0000000000000000000000000000000000000000..d86fe314c5aaeffce89d94a968668c5dc133ba5b GIT binary patch literal 5710 zcmeHLOKTKC5T3-u_&`k*#kb>v5n;0rb>mwIL_}{n=tV>}yR&9w=i$t5j7Sb%Jt!(3 z#j~D7Px=RZ9K@@FM-@en9!0;erhB)O4H6P_n}%advIf~Yu2>IpEI{p6-nwZjxRQ_iVj17;! z7CJ2J*JjwJ>o);g0aDRz+b#V7{%--S(oLa`NW0+oTY(hIAm$NE$+IKoH;x2dTe_-tEeJ1%Z=M1ZOox*jx?OI z;BL#4u&_;g6>?JdLDdHdv+jf{mN*-jUEZjtZacu}T8rR|E0G&EBxgdCoe_|JP<3oZ zXPoEn(AB0BU5^`)>tD`Yi8Hi<9^r$q^VYWWHHj*1MG`eAH4Fdhb|Wvc+)NN4N9X%K3+ zEKs&QiS=YhP9l&-zN|bI3e_tiYvT!kL8pQ(EANE5Xp-L@KxffBJhNzqo*gxPshdMm zK?etI-&BrA!L`_lYweI$<0LH0a(RkNUQlh;oj4y(l>J8FxwY&0ao5jRyeew2 zos-I(uLPbK_$!kb(xC? zt2)(Y$kTvqZ^(7(P+!ME0h4Y(wM`b+Ts#Sv$$c2M2V_`zKp#dnPzh76GZof@h|h5W zrq(2C3>?Ad7${aGii>=7F@&MYL=<>>1t?2eW`Ch`$$B+bb0en~OsT8j8I-=rHMHF} zQ!I6w(N~VkwQ}StEA1tvTv3d)?|!(`M!&jb5IRx0!$fg^vZ61UbrHAJ%kDHfW@cd~ z(O;#|l`L}{QeLLg%tDteqM4b6{W(rzm1mM!mM6vG7$z~Zi~!6m;A}dp-<-?}fHC2X k7WsA2O1YvJ7SZOxmG@1!>PxuN-yAeobAJIY-TeCGFNStew*UYD literal 0 HcmV?d00001 diff --git a/node_modules/querystring/.travis.yml b/node_modules/querystring/.travis.yml new file mode 100644 index 000000000..895dbd362 --- /dev/null +++ b/node_modules/querystring/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.6 + - 0.8 diff --git a/node_modules/querystring/History.md b/node_modules/querystring/History.md new file mode 100644 index 000000000..4fddbaf78 --- /dev/null +++ b/node_modules/querystring/History.md @@ -0,0 +1,20 @@ +# 0.2.0 / 2013-02-21 + + - Refactor into function per-module idiomatic style. + - Improved test coverage. + +# 0.1.0 / 2011-12-13 + + - Minor project reorganization + +# 0.0.3 / 2011-04-16 + - Support for AMD module loaders + +# 0.0.2 / 2011-04-16 + + - Ported unit tests + - Removed functionality that depended on Buffers + +# 0.0.1 / 2011-04-15 + + - Initial release diff --git a/node_modules/querystring/License.md b/node_modules/querystring/License.md new file mode 100644 index 000000000..fc80e85f2 --- /dev/null +++ b/node_modules/querystring/License.md @@ -0,0 +1,19 @@ + +Copyright 2012 Irakli Gozalishvili. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/node_modules/querystring/Readme.md b/node_modules/querystring/Readme.md new file mode 100644 index 000000000..a4fe2520d --- /dev/null +++ b/node_modules/querystring/Readme.md @@ -0,0 +1,15 @@ +# querystring + +[![Build Status](https://secure.travis-ci.org/Gozala/querystring.png)](http://travis-ci.org/Gozala/querystring) + + +[![Browser support](http://ci.testling.com/Gozala/querystring.png)](http://ci.testling.com/Gozala/querystring) + + + +Node's querystring module for all engines. + +## Install ## + + npm install querystring + diff --git a/node_modules/querystring/decode.js b/node_modules/querystring/decode.js new file mode 100644 index 000000000..a6518b8ff --- /dev/null +++ b/node_modules/querystring/decode.js @@ -0,0 +1,80 @@ +// 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. + +'use strict'; + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (Array.isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +}; diff --git a/node_modules/querystring/encode.js b/node_modules/querystring/encode.js new file mode 100644 index 000000000..4f2b561b2 --- /dev/null +++ b/node_modules/querystring/encode.js @@ -0,0 +1,64 @@ +// 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. + +'use strict'; + +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +}; + +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return Object.keys(obj).map(function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (Array.isArray(obj[k])) { + return obj[k].map(function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +}; diff --git a/node_modules/querystring/index.js b/node_modules/querystring/index.js new file mode 100644 index 000000000..99826ea8a --- /dev/null +++ b/node_modules/querystring/index.js @@ -0,0 +1,4 @@ +'use strict'; + +exports.decode = exports.parse = require('./decode'); +exports.encode = exports.stringify = require('./encode'); diff --git a/node_modules/querystring/package.json b/node_modules/querystring/package.json new file mode 100644 index 000000000..00da2ed4a --- /dev/null +++ b/node_modules/querystring/package.json @@ -0,0 +1,100 @@ +{ + "_from": "querystring@0.2.0", + "_id": "querystring@0.2.0", + "_inBundle": false, + "_integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "_location": "/querystring", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "querystring@0.2.0", + "name": "querystring", + "escapedName": "querystring", + "rawSpec": "0.2.0", + "saveSpec": null, + "fetchSpec": "0.2.0" + }, + "_requiredBy": [ + "/url" + ], + "_resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "_shasum": "b209849203bb25df820da756e747005878521620", + "_spec": "querystring@0.2.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/url", + "author": { + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com" + }, + "bugs": { + "url": "http://github.com/Gozala/querystring/issues/" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Node's querystring module for all engines.", + "devDependencies": { + "phantomify": "~0.x.0", + "retape": "~0.x.0", + "tape": "~0.1.5", + "test": "~0.x.0" + }, + "engines": { + "node": ">=0.4.x" + }, + "homepage": "https://github.com/Gozala/querystring#readme", + "id": "querystring", + "keywords": [ + "commonjs", + "query", + "querystring" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/Gozala/enchain/License.md" + } + ], + "name": "querystring", + "repository": { + "type": "git", + "url": "git://github.com/Gozala/querystring.git", + "web": "https://github.com/Gozala/querystring" + }, + "scripts": { + "test": "npm run test-node && npm run test-browser && npm run test-tap", + "test-browser": "node ./node_modules/phantomify/bin/cmd.js ./test/common-index.js", + "test-node": "node ./test/common-index.js", + "test-tap": "node ./test/tap-index.js" + }, + "testling": { + "files": "test/tap-index.js", + "browsers": { + "iexplore": [ + 9, + 10 + ], + "chrome": [ + 16, + 20, + 25, + "canary" + ], + "firefox": [ + 10, + 15, + 16, + 17, + 18, + "nightly" + ], + "safari": [ + 5, + 6 + ], + "opera": [ + 12 + ] + } + }, + "version": "0.2.0" +} diff --git a/node_modules/querystring/test/.index.js.un~ b/node_modules/querystring/test/.index.js.un~ new file mode 100644 index 0000000000000000000000000000000000000000..898eceddc9e485e85275e41f9b8b98294bb3fe08 GIT binary patch literal 975 zcmWH`%$*;a=aT=Ffr(>^0h6blXhl42hkT^^Cju)3aORMz^9E7#J=A zF*0BTa+sh3AR2}l0?m@ovVde68R9P>DS$G8!VCjM7vN0bq2T0Y?V| z!&eEQ*`RoY1wSY%7)%?%(FA6L_)q|fPnbG}(P)AN3$18)G%;e2CfTCY!qUv5R1Kw) b)Z!8)O}(PhJdM ; :'); + }); +}; + +exports['test the weird objects, that they get parsed properly'] = function(assert) { + qsWeirdObjects.forEach(function(testCase) { + assert.deepEqual(testCase[2], qs.parse(testCase[1]), + 'parse ' + testCase[1]); + }); +}; + +exports['test non munge test cases'] = function(assert) { + qsNoMungeTestCases.forEach(function(testCase) { + assert.deepEqual(testCase[0], qs.stringify(testCase[1], '&', '=', false), + 'stringify ' + JSON.stringify(testCase[1]) + ' -> & ='); + }); +}; + +exports['test the nested qs-in-qs case'] = function(assert) { + var f = qs.parse('a=b&q=x%3Dy%26y%3Dz'); + f.q = qs.parse(f.q); + assert.deepEqual(f, { a: 'b', q: { x: 'y', y: 'z' } }, + 'parse a=b&q=x%3Dy%26y%3Dz'); +}; + +exports['test nested in colon'] = function(assert) { + var f = qs.parse('a:b;q:x%3Ay%3By%3Az', ';', ':'); + f.q = qs.parse(f.q, ';', ':'); + assert.deepEqual(f, { a: 'b', q: { x: 'y', y: 'z' } }, + 'parse a:b;q:x%3Ay%3By%3Az -> ; :'); +}; + +exports['test stringifying'] = function(assert) { + qsTestCases.forEach(function(testCase) { + assert.equal(testCase[1], qs.stringify(testCase[2]), + 'stringify ' + JSON.stringify(testCase[2])); + }); + + qsColonTestCases.forEach(function(testCase) { + assert.equal(testCase[1], qs.stringify(testCase[2], ';', ':'), + 'stringify ' + JSON.stringify(testCase[2]) + ' -> ; :'); + }); + + qsWeirdObjects.forEach(function(testCase) { + assert.equal(testCase[1], qs.stringify(testCase[0]), + 'stringify ' + JSON.stringify(testCase[0])); + }); +}; + +exports['test stringifying nested'] = function(assert) { + var f = qs.stringify({ + a: 'b', + q: qs.stringify({ + x: 'y', + y: 'z' + }) + }); + assert.equal(f, 'a=b&q=x%3Dy%26y%3Dz', + JSON.stringify({ + a: 'b', + 'qs.stringify -> q': { + x: 'y', + y: 'z' + } + })); + + var threw = false; + try { qs.parse(undefined); } catch(error) { threw = true; } + assert.ok(!threw, "does not throws on undefined"); +}; + +exports['test nested in colon'] = function(assert) { + var f = qs.stringify({ + a: 'b', + q: qs.stringify({ + x: 'y', + y: 'z' + }, ';', ':') + }, ';', ':'); + assert.equal(f, 'a:b;q:x%3Ay%3By%3Az', + 'stringify ' + JSON.stringify({ + a: 'b', + 'qs.stringify -> q': { + x: 'y', + y: 'z' + } + }) + ' -> ; : '); + + + assert.deepEqual({}, qs.parse(), 'parse undefined'); +}; diff --git a/node_modules/querystring/test/tap-index.js b/node_modules/querystring/test/tap-index.js new file mode 100644 index 000000000..70679b3fc --- /dev/null +++ b/node_modules/querystring/test/tap-index.js @@ -0,0 +1,3 @@ +"use strict"; + +require("retape")(require("./index")) \ No newline at end of file diff --git a/node_modules/randomatic/LICENSE b/node_modules/randomatic/LICENSE new file mode 100755 index 000000000..3ea726752 --- /dev/null +++ b/node_modules/randomatic/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/randomatic/README.md b/node_modules/randomatic/README.md new file mode 100644 index 000000000..14485ffa2 --- /dev/null +++ b/node_modules/randomatic/README.md @@ -0,0 +1,154 @@ +# randomatic [![NPM version](https://img.shields.io/npm/v/randomatic.svg?style=flat)](https://www.npmjs.com/package/randomatic) [![NPM monthly downloads](https://img.shields.io/npm/dm/randomatic.svg?style=flat)](https://npmjs.org/package/randomatic) [![NPM total downloads](https://img.shields.io/npm/dt/randomatic.svg?style=flat)](https://npmjs.org/package/randomatic) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/randomatic.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/randomatic) + +> Generate randomized strings of a specified length, fast. Only the length is necessary, but you can optionally generate patterns using any combination of numeric, alpha-numeric, alphabetical, special or custom characters. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save randomatic +``` + +## Usage + +```js +var randomize = require('randomatic'); +``` + +## API + +```js +randomize(pattern, length, options); +``` + +* `pattern` **{String}**: The pattern to use for randomizing +* `length` **{Object}**: The length of the string to generate + +### pattern + +> The pattern to use for randomizing + +Patterns can contain any combination of the below characters, specified in any order. + +**Example:** + +To generate a 10-character randomized string using all available characters: + +```js +randomize('*', 10); +//=> + +randomize('Aa0!', 10); +//=> +``` + +* `a`: Lowercase alpha characters (`abcdefghijklmnopqrstuvwxyz'`) +* `A`: Uppercase alpha characters (`ABCDEFGHIJKLMNOPQRSTUVWXYZ'`) +* `0`: Numeric characters (`0123456789'`) +* `!`: Special characters (`~!@#$%^&()_+-={}[];\',.`) +* `*`: All characters (all of the above combined) +* `?`: Custom characters (pass a string of custom characters to the options) + +### length + +> the length of the string to generate + +**Examples:** + +* `randomize('A', 5)` will generate a 5-character, uppercase, alphabetical, randomized string, e.g. `KDJWJ`. +* `randomize('0', 2)` will generate a 2-digit random number +* `randomize('0', 3)` will generate a 3-digit random number +* `randomize('0', 12)` will generate a 12-digit random number +* `randomize('A0', 16)` will generate a 16-character, alpha-numeric randomized string + +If `length` is left undefined, the length of the pattern in the first parameter will be used. For example: + +* `randomize('00')` will generate a 2-digit random number +* `randomize('000')` will generate a 3-digit random number +* `randomize('0000')` will generate a 4-digit random number... +* `randomize('AAAAA')` will generate a 5-character, uppercase alphabetical random string... + +These are just examples, [see the tests](./test.js) for more use cases and examples. + +#### chars + +Type: `String` + +Default: `undefined` + +Define a custom string to be randomized. + +**Example:** + +* `randomize('?', 20, {chars: 'jonschlinkert'})` will generate a 20-character randomized string from the letters contained in `jonschlinkert`. +* `randomize('?', {chars: 'jonschlinkert'})` will generate a 13-character randomized string from the letters contained in `jonschlinkert`. + +## Usage Examples + +* `randomize('A', 4)` (_whitespace insenstive_) would result in randomized 4-digit uppercase letters, like, `ZAKH`, `UJSL`... etc. +* `randomize('AAAA')` is equivelant to `randomize('A', 4)` +* `randomize('AAA0')` and `randomize('AA00')` and `randomize('A0A0')` are equivelant to `randomize('A0', 4)` +* `randomize('aa')`: results in double-digit, randomized, lower-case letters (`abcdefghijklmnopqrstuvwxyz`) +* `randomize('AAA')`: results in triple-digit, randomized, upper-case letters (`ABCDEFGHIJKLMNOPQRSTUVWXYZ`) +* `randomize('0', 6)`: results in six-digit, randomized numbers (`0123456789`) +* `randomize('!', 5)`: results in single-digit randomized, _valid_ non-letter characters (`~!@#$%^&()_+-={}[] +* `randomize('A!a0', 9)`: results in nine-digit, randomized characters (any of the above) + +_The order in which the characters are defined is insignificant._ + +## About + +### Related projects + +* [pad-left](https://www.npmjs.com/package/pad-left): Left pad a string with zeros or a specified string. Fastest implementation. | [homepage](https://github.com/jonschlinkert/pad-left "Left pad a string with zeros or a specified string. Fastest implementation.") +* [pad-right](https://www.npmjs.com/package/pad-right): Right pad a string with zeros or a specified string. Fastest implementation. | [homepage](https://github.com/jonschlinkert/pad-right "Right pad a string with zeros or a specified string. Fastest implementation.") +* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 41 | [jonschlinkert](https://github.com/jonschlinkert) | +| 1 | [TrySound](https://github.com/TrySound) | +| 1 | [Drag0s](https://github.com/Drag0s) | +| 1 | [paulmillr](https://github.com/paulmillr) | +| 1 | [sunknudsen](https://github.com/sunknudsen) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on June 09, 2017._ \ No newline at end of file diff --git a/node_modules/randomatic/index.js b/node_modules/randomatic/index.js new file mode 100644 index 000000000..4681b03e7 --- /dev/null +++ b/node_modules/randomatic/index.js @@ -0,0 +1,82 @@ +/*! + * randomatic + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +var isNumber = require('is-number'); +var typeOf = require('kind-of'); + +/** + * Expose `randomatic` + */ + +module.exports = randomatic; + +/** + * Available mask characters + */ + +var type = { + lower: 'abcdefghijklmnopqrstuvwxyz', + upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + number: '0123456789', + special: '~!@#$%^&()_+-={}[];\',.' +}; + +type.all = type.lower + type.upper + type.number + type.special; + +/** + * Generate random character sequences of a specified `length`, + * based on the given `pattern`. + * + * @param {String} `pattern` The pattern to use for generating the random string. + * @param {String} `length` The length of the string to generate. + * @param {String} `options` + * @return {String} + * @api public + */ + +function randomatic(pattern, length, options) { + if (typeof pattern === 'undefined') { + throw new Error('randomatic expects a string or number.'); + } + + var custom = false; + if (arguments.length === 1) { + if (typeof pattern === 'string') { + length = pattern.length; + + } else if (isNumber(pattern)) { + options = {}; length = pattern; pattern = '*'; + } + } + + if (typeOf(length) === 'object' && length.hasOwnProperty('chars')) { + options = length; + pattern = options.chars; + length = pattern.length; + custom = true; + } + + var opts = options || {}; + var mask = ''; + var res = ''; + + // Characters to be used + if (pattern.indexOf('?') !== -1) mask += opts.chars; + if (pattern.indexOf('a') !== -1) mask += type.lower; + if (pattern.indexOf('A') !== -1) mask += type.upper; + if (pattern.indexOf('0') !== -1) mask += type.number; + if (pattern.indexOf('!') !== -1) mask += type.special; + if (pattern.indexOf('*') !== -1) mask += type.all; + if (custom) mask += pattern; + + while (length--) { + res += mask.charAt(parseInt(Math.random() * mask.length, 10)); + } + return res; +}; diff --git a/node_modules/randomatic/node_modules/is-number/LICENSE b/node_modules/randomatic/node_modules/is-number/LICENSE new file mode 100644 index 000000000..842218cf0 --- /dev/null +++ b/node_modules/randomatic/node_modules/is-number/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/randomatic/node_modules/is-number/README.md b/node_modules/randomatic/node_modules/is-number/README.md new file mode 100644 index 000000000..281165dce --- /dev/null +++ b/node_modules/randomatic/node_modules/is-number/README.md @@ -0,0 +1,115 @@ +# is-number [![NPM version](https://img.shields.io/npm/v/is-number.svg?style=flat)](https://www.npmjs.com/package/is-number) [![NPM downloads](https://img.shields.io/npm/dm/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-number.svg?style=flat)](https://travis-ci.org/jonschlinkert/is-number) + +> Returns true if the value is a number. comprehensive tests. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save is-number +``` + +## Usage + +To understand some of the rationale behind the decisions made in this library (and to learn about some oddities of number evaluation in JavaScript), [see this gist](https://gist.github.com/jonschlinkert/e30c70c713da325d0e81). + +```js +var isNumber = require('is-number'); +``` + +### true + +See the [tests](./test.js) for more examples. + +```js +isNumber(5e3) //=> 'true' +isNumber(0xff) //=> 'true' +isNumber(-1.1) //=> 'true' +isNumber(0) //=> 'true' +isNumber(1) //=> 'true' +isNumber(1.1) //=> 'true' +isNumber(10) //=> 'true' +isNumber(10.10) //=> 'true' +isNumber(100) //=> 'true' +isNumber('-1.1') //=> 'true' +isNumber('0') //=> 'true' +isNumber('012') //=> 'true' +isNumber('0xff') //=> 'true' +isNumber('1') //=> 'true' +isNumber('1.1') //=> 'true' +isNumber('10') //=> 'true' +isNumber('10.10') //=> 'true' +isNumber('100') //=> 'true' +isNumber('5e3') //=> 'true' +isNumber(parseInt('012')) //=> 'true' +isNumber(parseFloat('012')) //=> 'true' +``` + +### False + +See the [tests](./test.js) for more examples. + +```js +isNumber('foo') //=> 'false' +isNumber([1]) //=> 'false' +isNumber([]) //=> 'false' +isNumber(function () {}) //=> 'false' +isNumber(Infinity) //=> 'false' +isNumber(NaN) //=> 'false' +isNumber(new Array('abc')) //=> 'false' +isNumber(new Array(2)) //=> 'false' +isNumber(new Buffer('abc')) //=> 'false' +isNumber(null) //=> 'false' +isNumber(undefined) //=> 'false' +isNumber({abc: 'abc'}) //=> 'false' +``` + +## About + +### Related projects + +* [even](https://www.npmjs.com/package/even): Get the even numbered items from an array. | [homepage](https://github.com/jonschlinkert/even "Get the even numbered items from an array.") +* [is-even](https://www.npmjs.com/package/is-even): Return true if the given number is even. | [homepage](https://github.com/jonschlinkert/is-even "Return true if the given number is even.") +* [is-odd](https://www.npmjs.com/package/is-odd): Returns true if the given number is odd. | [homepage](https://github.com/jonschlinkert/is-odd "Returns true if the given number is odd.") +* [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. ") +* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.") +* [odd](https://www.npmjs.com/package/odd): Get the odd numbered items from an array. | [homepage](https://github.com/jonschlinkert/odd "Get the odd numbered items from an array.") + +### 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/is-number/blob/master/LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.30, on September 10, 2016._ \ No newline at end of file diff --git a/node_modules/randomatic/node_modules/is-number/index.js b/node_modules/randomatic/node_modules/is-number/index.js new file mode 100644 index 000000000..7a2a45bed --- /dev/null +++ b/node_modules/randomatic/node_modules/is-number/index.js @@ -0,0 +1,22 @@ +/*! + * is-number + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var typeOf = require('kind-of'); + +module.exports = function isNumber(num) { + var type = typeOf(num); + + if (type === 'string') { + if (!num.trim()) return false; + } else if (type !== 'number') { + return false; + } + + return (num - num + 1) >= 0; +}; diff --git a/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/LICENSE b/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/LICENSE new file mode 100644 index 000000000..d734237bd --- /dev/null +++ b/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/README.md b/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/README.md new file mode 100644 index 000000000..6a9df36d3 --- /dev/null +++ b/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/README.md @@ -0,0 +1,261 @@ +# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of) + +> Get the native type of a value. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save kind-of +``` + +## Install + +Install with [bower](https://bower.io/) + +```sh +$ bower install kind-of --save +``` + +## Usage + +> es5, browser and es6 ready + +```js +var kindOf = require('kind-of'); + +kindOf(undefined); +//=> 'undefined' + +kindOf(null); +//=> 'null' + +kindOf(true); +//=> 'boolean' + +kindOf(false); +//=> 'boolean' + +kindOf(new Boolean(true)); +//=> 'boolean' + +kindOf(new Buffer('')); +//=> 'buffer' + +kindOf(42); +//=> 'number' + +kindOf(new Number(42)); +//=> 'number' + +kindOf('str'); +//=> 'string' + +kindOf(new String('str')); +//=> 'string' + +kindOf(arguments); +//=> 'arguments' + +kindOf({}); +//=> 'object' + +kindOf(Object.create(null)); +//=> 'object' + +kindOf(new Test()); +//=> 'object' + +kindOf(new Date()); +//=> 'date' + +kindOf([]); +//=> 'array' + +kindOf([1, 2, 3]); +//=> 'array' + +kindOf(new Array()); +//=> 'array' + +kindOf(/foo/); +//=> 'regexp' + +kindOf(new RegExp('foo')); +//=> 'regexp' + +kindOf(function () {}); +//=> 'function' + +kindOf(function * () {}); +//=> 'function' + +kindOf(new Function()); +//=> 'function' + +kindOf(new Map()); +//=> 'map' + +kindOf(new WeakMap()); +//=> 'weakmap' + +kindOf(new Set()); +//=> 'set' + +kindOf(new WeakSet()); +//=> 'weakset' + +kindOf(Symbol('str')); +//=> 'symbol' + +kindOf(new Int8Array()); +//=> 'int8array' + +kindOf(new Uint8Array()); +//=> 'uint8array' + +kindOf(new Uint8ClampedArray()); +//=> 'uint8clampedarray' + +kindOf(new Int16Array()); +//=> 'int16array' + +kindOf(new Uint16Array()); +//=> 'uint16array' + +kindOf(new Int32Array()); +//=> 'int32array' + +kindOf(new Uint32Array()); +//=> 'uint32array' + +kindOf(new Float32Array()); +//=> 'float32array' + +kindOf(new Float64Array()); +//=> 'float64array' +``` + +## Benchmarks + +Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). +Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`. + +```bash +#1: array + current x 23,329,397 ops/sec ±0.82% (94 runs sampled) + lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled) + lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled) + +#2: boolean + current x 27,197,115 ops/sec ±0.85% (94 runs sampled) + lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled) + lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled) + +#3: date + current x 20,190,117 ops/sec ±0.86% (92 runs sampled) + lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled) + lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled) + +#4: function + current x 23,855,460 ops/sec ±0.60% (97 runs sampled) + lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled) + lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled) + +#5: null + current x 27,061,047 ops/sec ±0.97% (96 runs sampled) + lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled) + lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled) + +#6: number + current x 25,075,682 ops/sec ±0.53% (99 runs sampled) + lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled) + lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled) + +#7: object + current x 3,348,980 ops/sec ±0.49% (99 runs sampled) + lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled) + lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled) + +#8: regex + current x 21,284,827 ops/sec ±0.72% (96 runs sampled) + lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled) + lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled) + +#9: string + current x 25,379,234 ops/sec ±0.58% (96 runs sampled) + lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled) + lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled) + +#10: undef + current x 27,459,221 ops/sec ±1.01% (93 runs sampled) + lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled) + lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled) + +``` + +## Optimizations + +In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: + +1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. +2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. +3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` + +## About + +### Related projects + +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") +* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.") +* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 59 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [miguelmota](https://github.com/miguelmota) | +| 1 | [dtothefp](https://github.com/dtothefp) | +| 1 | [ksheedlo](https://github.com/ksheedlo) | +| 1 | [pdehaan](https://github.com/pdehaan) | +| 1 | [laggingreflex](https://github.com/laggingreflex) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 16, 2017._ \ No newline at end of file diff --git a/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/index.js b/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/index.js new file mode 100644 index 000000000..b52c2917f --- /dev/null +++ b/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/index.js @@ -0,0 +1,116 @@ +var isBuffer = require('is-buffer'); +var toString = Object.prototype.toString; + +/** + * Get the native `typeof` a value. + * + * @param {*} `val` + * @return {*} Native javascript type + */ + +module.exports = function kindOf(val) { + // primitivies + if (typeof val === 'undefined') { + return 'undefined'; + } + if (val === null) { + return 'null'; + } + if (val === true || val === false || val instanceof Boolean) { + return 'boolean'; + } + if (typeof val === 'string' || val instanceof String) { + return 'string'; + } + if (typeof val === 'number' || val instanceof Number) { + return 'number'; + } + + // functions + if (typeof val === 'function' || val instanceof Function) { + return 'function'; + } + + // array + if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { + return 'array'; + } + + // check for instances of RegExp and Date before calling `toString` + if (val instanceof RegExp) { + return 'regexp'; + } + if (val instanceof Date) { + return 'date'; + } + + // other objects + var type = toString.call(val); + + if (type === '[object RegExp]') { + return 'regexp'; + } + if (type === '[object Date]') { + return 'date'; + } + if (type === '[object Arguments]') { + return 'arguments'; + } + if (type === '[object Error]') { + return 'error'; + } + + // buffer + if (isBuffer(val)) { + return 'buffer'; + } + + // es6: Map, WeakMap, Set, WeakSet + if (type === '[object Set]') { + return 'set'; + } + if (type === '[object WeakSet]') { + return 'weakset'; + } + if (type === '[object Map]') { + return 'map'; + } + if (type === '[object WeakMap]') { + return 'weakmap'; + } + if (type === '[object Symbol]') { + return 'symbol'; + } + + // typed arrays + if (type === '[object Int8Array]') { + return 'int8array'; + } + if (type === '[object Uint8Array]') { + return 'uint8array'; + } + if (type === '[object Uint8ClampedArray]') { + return 'uint8clampedarray'; + } + if (type === '[object Int16Array]') { + return 'int16array'; + } + if (type === '[object Uint16Array]') { + return 'uint16array'; + } + if (type === '[object Int32Array]') { + return 'int32array'; + } + if (type === '[object Uint32Array]') { + return 'uint32array'; + } + if (type === '[object Float32Array]') { + return 'float32array'; + } + if (type === '[object Float64Array]') { + return 'float64array'; + } + + // must be a plain object + return 'object'; +}; diff --git a/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/package.json b/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/package.json new file mode 100644 index 000000000..2c68b8c42 --- /dev/null +++ b/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/package.json @@ -0,0 +1,139 @@ +{ + "_from": "kind-of@^3.0.2", + "_id": "kind-of@3.2.2", + "_inBundle": false, + "_integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "_location": "/randomatic/is-number/kind-of", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "kind-of@^3.0.2", + "name": "kind-of", + "escapedName": "kind-of", + "rawSpec": "^3.0.2", + "saveSpec": null, + "fetchSpec": "^3.0.2" + }, + "_requiredBy": [ + "/randomatic/is-number" + ], + "_resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "_shasum": "31ea21a734bab9bbb0f32466d893aea51e4a3c64", + "_spec": "kind-of@^3.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/randomatic/node_modules/is-number", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/kind-of/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "David Fox-Powell", + "url": "https://dtothefp.github.io/me" + }, + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Ken Sheedlo", + "url": "kensheedlo.com" + }, + { + "name": "laggingreflex", + "url": "https://github.com/laggingreflex" + }, + { + "name": "Miguel Mota", + "url": "https://miguelmota.com" + }, + { + "name": "Peter deHaan", + "url": "http://about.me/peterdehaan" + } + ], + "dependencies": { + "is-buffer": "^1.1.5" + }, + "deprecated": false, + "description": "Get the native type of a value.", + "devDependencies": { + "ansi-bold": "^0.1.1", + "benchmarked": "^1.0.0", + "browserify": "^14.3.0", + "glob": "^7.1.1", + "gulp-format-md": "^0.1.12", + "mocha": "^3.3.0", + "type-of": "^2.0.1", + "typeof": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "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", + "name": "kind-of", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/kind-of.git" + }, + "scripts": { + "prepublish": "browserify -o browser.js -e index.js -s index --bare", + "test": "mocha" + }, + "verb": { + "related": { + "list": [ + "is-glob", + "is-number", + "is-primitive" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "reflinks": [ + "verb" + ] + }, + "version": "3.2.2" +} diff --git a/node_modules/randomatic/node_modules/is-number/package.json b/node_modules/randomatic/node_modules/is-number/package.json new file mode 100644 index 000000000..9b27ba31f --- /dev/null +++ b/node_modules/randomatic/node_modules/is-number/package.json @@ -0,0 +1,123 @@ +{ + "_from": "is-number@^3.0.0", + "_id": "is-number@3.0.0", + "_inBundle": false, + "_integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "_location": "/randomatic/is-number", + "_phantomChildren": { + "is-buffer": "1.1.5" + }, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-number@^3.0.0", + "name": "is-number", + "escapedName": "is-number", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/randomatic" + ], + "_resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "_shasum": "24fd6201a4782cf50561c810276afc7d12d71195", + "_spec": "is-number@^3.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/randomatic", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-number/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Charlike Mike Reagent", + "url": "http://www.tunnckocore.tk" + }, + { + "name": "Jon Schlinkert", + "email": "jon.schlinkert@sellside.com", + "url": "http://twitter.com/jonschlinkert" + } + ], + "dependencies": { + "kind-of": "^3.0.2" + }, + "deprecated": false, + "description": "Returns true if the value is a number. comprehensive tests.", + "devDependencies": { + "benchmarked": "^0.2.5", + "chalk": "^1.1.3", + "gulp-format-md": "^0.1.10", + "mocha": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-number", + "keywords": [ + "check", + "coerce", + "coercion", + "integer", + "is", + "is-nan", + "is-num", + "is-number", + "istype", + "kind", + "math", + "nan", + "num", + "number", + "numeric", + "test", + "type", + "typeof", + "value" + ], + "license": "MIT", + "main": "index.js", + "name": "is-number", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-number.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "related": { + "list": [ + "even", + "is-even", + "is-odd", + "is-primitive", + "kind-of", + "odd" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "reflinks": [ + "verb", + "verb-generate-readme" + ] + }, + "version": "3.0.0" +} diff --git a/node_modules/randomatic/node_modules/kind-of/LICENSE b/node_modules/randomatic/node_modules/kind-of/LICENSE new file mode 100644 index 000000000..d734237bd --- /dev/null +++ b/node_modules/randomatic/node_modules/kind-of/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/randomatic/node_modules/kind-of/README.md b/node_modules/randomatic/node_modules/kind-of/README.md new file mode 100644 index 000000000..83469b0b6 --- /dev/null +++ b/node_modules/randomatic/node_modules/kind-of/README.md @@ -0,0 +1,267 @@ +# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](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](https://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) + +``` + +## Release history + +### v4.0.0 + +**Added** + +* `promise` support + +## Optimizations + +In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: + +1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. +2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. +3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` + +## About + +### Related projects + +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") +* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.") +* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 64 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [miguelmota](https://github.com/miguelmota) | +| 1 | [dtothefp](https://github.com/dtothefp) | +| 1 | [ksheedlo](https://github.com/ksheedlo) | +| 1 | [pdehaan](https://github.com/pdehaan) | +| 1 | [laggingreflex](https://github.com/laggingreflex) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 19, 2017._ \ No newline at end of file diff --git a/node_modules/randomatic/node_modules/kind-of/index.js b/node_modules/randomatic/node_modules/kind-of/index.js new file mode 100644 index 000000000..4c0233bc7 --- /dev/null +++ b/node_modules/randomatic/node_modules/kind-of/index.js @@ -0,0 +1,119 @@ +var isBuffer = require('is-buffer'); +var toString = Object.prototype.toString; + +/** + * Get the native `typeof` a value. + * + * @param {*} `val` + * @return {*} Native javascript type + */ + +module.exports = function kindOf(val) { + // primitivies + if (typeof val === 'undefined') { + return 'undefined'; + } + if (val === null) { + return 'null'; + } + if (val === true || val === false || val instanceof Boolean) { + return 'boolean'; + } + if (typeof val === 'string' || val instanceof String) { + return 'string'; + } + if (typeof val === 'number' || val instanceof Number) { + return 'number'; + } + + // functions + if (typeof val === 'function' || val instanceof Function) { + return 'function'; + } + + // array + if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { + return 'array'; + } + + // check for instances of RegExp and Date before calling `toString` + if (val instanceof RegExp) { + return 'regexp'; + } + if (val instanceof Date) { + return 'date'; + } + + // other objects + var type = toString.call(val); + + if (type === '[object RegExp]') { + return 'regexp'; + } + if (type === '[object Date]') { + return 'date'; + } + if (type === '[object Arguments]') { + return 'arguments'; + } + if (type === '[object Error]') { + return 'error'; + } + if (type === '[object Promise]') { + return 'promise'; + } + + // buffer + if (isBuffer(val)) { + return 'buffer'; + } + + // es6: Map, WeakMap, Set, WeakSet + if (type === '[object Set]') { + return 'set'; + } + if (type === '[object WeakSet]') { + return 'weakset'; + } + if (type === '[object Map]') { + return 'map'; + } + if (type === '[object WeakMap]') { + return 'weakmap'; + } + if (type === '[object Symbol]') { + return 'symbol'; + } + + // typed arrays + if (type === '[object Int8Array]') { + return 'int8array'; + } + if (type === '[object Uint8Array]') { + return 'uint8array'; + } + if (type === '[object Uint8ClampedArray]') { + return 'uint8clampedarray'; + } + if (type === '[object Int16Array]') { + return 'int16array'; + } + if (type === '[object Uint16Array]') { + return 'uint16array'; + } + if (type === '[object Int32Array]') { + return 'int32array'; + } + if (type === '[object Uint32Array]') { + return 'uint32array'; + } + if (type === '[object Float32Array]') { + return 'float32array'; + } + if (type === '[object Float64Array]') { + return 'float64array'; + } + + // must be a plain object + return 'object'; +}; diff --git a/node_modules/randomatic/node_modules/kind-of/package.json b/node_modules/randomatic/node_modules/kind-of/package.json new file mode 100644 index 000000000..53818c393 --- /dev/null +++ b/node_modules/randomatic/node_modules/kind-of/package.json @@ -0,0 +1,139 @@ +{ + "_from": "kind-of@^4.0.0", + "_id": "kind-of@4.0.0", + "_inBundle": false, + "_integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "_location": "/randomatic/kind-of", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "kind-of@^4.0.0", + "name": "kind-of", + "escapedName": "kind-of", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/randomatic" + ], + "_resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "_shasum": "20813df3d712928b207378691a45066fae72dd57", + "_spec": "kind-of@^4.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/randomatic", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/kind-of/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "David Fox-Powell", + "url": "https://dtothefp.github.io/me" + }, + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Ken Sheedlo", + "url": "kensheedlo.com" + }, + { + "name": "laggingreflex", + "url": "https://github.com/laggingreflex" + }, + { + "name": "Miguel Mota", + "url": "https://miguelmota.com" + }, + { + "name": "Peter deHaan", + "url": "http://about.me/peterdehaan" + } + ], + "dependencies": { + "is-buffer": "^1.1.5" + }, + "deprecated": false, + "description": "Get the native type of a value.", + "devDependencies": { + "ansi-bold": "^0.1.1", + "benchmarked": "^1.1.1", + "browserify": "^14.3.0", + "glob": "^7.1.1", + "gulp-format-md": "^0.1.12", + "mocha": "^3.4.1", + "type-of": "^2.0.1", + "typeof": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "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", + "name": "kind-of", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/kind-of.git" + }, + "scripts": { + "prepublish": "browserify -o browser.js -e index.js -s index --bare", + "test": "mocha" + }, + "verb": { + "related": { + "list": [ + "is-glob", + "is-number", + "is-primitive" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "reflinks": [ + "verb" + ] + }, + "version": "4.0.0" +} diff --git a/node_modules/randomatic/package.json b/node_modules/randomatic/package.json new file mode 100644 index 000000000..b65ae6ae2 --- /dev/null +++ b/node_modules/randomatic/package.json @@ -0,0 +1,126 @@ +{ + "_from": "randomatic@^1.1.3", + "_id": "randomatic@1.1.7", + "_inBundle": false, + "_integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "_location": "/randomatic", + "_phantomChildren": { + "is-buffer": "1.1.5" + }, + "_requested": { + "type": "range", + "registry": true, + "raw": "randomatic@^1.1.3", + "name": "randomatic", + "escapedName": "randomatic", + "rawSpec": "^1.1.3", + "saveSpec": null, + "fetchSpec": "^1.1.3" + }, + "_requiredBy": [ + "/fill-range" + ], + "_resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "_shasum": "c7abe9cc8b87c0baa876b19fde83fd464797e38c", + "_spec": "randomatic@^1.1.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/fill-range", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/randomatic/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Bogdan Chadkin", + "url": "https://github.com/TrySound" + }, + { + "name": "Dragos Fotescu", + "url": "http://dragosfotescu.com" + }, + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Paul Miller", + "url": "paulmillr.com" + }, + { + "name": "Sun Knudsen", + "url": "http://sunknudsen.com" + } + ], + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "deprecated": false, + "description": "Generate randomized strings of a specified length, fast. Only the length is necessary, but you can optionally generate patterns using any combination of numeric, alpha-numeric, alphabetical, special or custom characters.", + "devDependencies": { + "ansi-bold": "^0.1.1", + "benchmarked": "^1.1.1", + "glob": "^7.1.2", + "gulp-format-md": "^0.1.12", + "mocha": "^3.4.2", + "should": "^11.2.1" + }, + "engines": { + "node": ">= 0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/randomatic", + "keywords": [ + "alpha", + "alpha-numeric", + "alphanumeric", + "characters", + "chars", + "numeric", + "rand", + "random", + "randomatic", + "randomize", + "randomized" + ], + "license": "MIT", + "main": "index.js", + "name": "randomatic", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/randomatic.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "pad-left", + "pad-right", + "repeat-string" + ] + }, + "lint": { + "reflinks": true + }, + "reflinks": [ + "verb", + "verb-generate-readme" + ] + }, + "version": "1.1.7" +} diff --git a/node_modules/randombytes/.npmignore b/node_modules/randombytes/.npmignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/node_modules/randombytes/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/randombytes/.travis.yml b/node_modules/randombytes/.travis.yml new file mode 100644 index 000000000..69fdf7130 --- /dev/null +++ b/node_modules/randombytes/.travis.yml @@ -0,0 +1,15 @@ +sudo: false +language: node_js +matrix: + include: + - node_js: '7' + env: TEST_SUITE=test + - node_js: '6' + env: TEST_SUITE=test + - node_js: '5' + env: TEST_SUITE=test + - node_js: '4' + env: TEST_SUITE=test + - node_js: '4' + env: TEST_SUITE=phantom +script: "npm run-script $TEST_SUITE" diff --git a/node_modules/randombytes/.zuul.yml b/node_modules/randombytes/.zuul.yml new file mode 100644 index 000000000..96d9cfbd3 --- /dev/null +++ b/node_modules/randombytes/.zuul.yml @@ -0,0 +1 @@ +ui: tape diff --git a/node_modules/randombytes/LICENSE b/node_modules/randombytes/LICENSE new file mode 100644 index 000000000..fea9d48a4 --- /dev/null +++ b/node_modules/randombytes/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 crypto-browserify + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/randombytes/README.md b/node_modules/randombytes/README.md new file mode 100644 index 000000000..3bacba4d1 --- /dev/null +++ b/node_modules/randombytes/README.md @@ -0,0 +1,14 @@ +randombytes +=== + +[![Version](http://img.shields.io/npm/v/randombytes.svg)](https://www.npmjs.org/package/randombytes) [![Build Status](https://travis-ci.org/crypto-browserify/randombytes.svg?branch=master)](https://travis-ci.org/crypto-browserify/randombytes) + +randombytes from node that works in the browser. In node you just get crypto.randomBytes, but in the browser it uses .crypto/msCrypto.getRandomValues + +```js +var randomBytes = require('randombytes'); +randomBytes(16);//get 16 random bytes +randomBytes(16, function (err, resp) { + // resp is 16 random bytes +}); +``` diff --git a/node_modules/randombytes/browser.js b/node_modules/randombytes/browser.js new file mode 100644 index 000000000..9669903b8 --- /dev/null +++ b/node_modules/randombytes/browser.js @@ -0,0 +1,38 @@ +'use strict' + +function oldBrowser () { + throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') +} + +var Buffer = require('safe-buffer').Buffer +var crypto = global.crypto || global.msCrypto + +if (crypto && crypto.getRandomValues) { + module.exports = randomBytes +} else { + module.exports = oldBrowser +} + +function randomBytes (size, cb) { + // phantomjs needs to throw + if (size > 65536) throw new Error('requested too many random bytes') + // in case browserify isn't using the Uint8Array version + var rawBytes = new global.Uint8Array(size) + + // This will not work in older browsers. + // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + if (size > 0) { // getRandomValues fails on IE if size == 0 + crypto.getRandomValues(rawBytes) + } + + // XXX: phantomjs doesn't like a buffer being passed here + var bytes = Buffer.from(rawBytes.buffer) + + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes) + }) + } + + return bytes +} diff --git a/node_modules/randombytes/index.js b/node_modules/randombytes/index.js new file mode 100644 index 000000000..a2d9e3911 --- /dev/null +++ b/node_modules/randombytes/index.js @@ -0,0 +1 @@ +module.exports = require('crypto').randomBytes diff --git a/node_modules/randombytes/package.json b/node_modules/randombytes/package.json new file mode 100644 index 000000000..9bc86d253 --- /dev/null +++ b/node_modules/randombytes/package.json @@ -0,0 +1,64 @@ +{ + "_from": "randombytes@^2.0.0", + "_id": "randombytes@2.0.5", + "_inBundle": false, + "_integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "_location": "/randombytes", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "randombytes@^2.0.0", + "name": "randombytes", + "escapedName": "randombytes", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/browserify-rsa", + "/crypto-browserify", + "/diffie-hellman", + "/public-encrypt" + ], + "_resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "_shasum": "dc009a246b8d09a177b4b7a0ae77bc570f4b1b79", + "_spec": "randombytes@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/crypto-browserify", + "author": "", + "browser": "browser.js", + "bugs": { + "url": "https://github.com/crypto-browserify/randombytes/issues" + }, + "bundleDependencies": false, + "dependencies": { + "safe-buffer": "^5.1.0" + }, + "deprecated": false, + "description": "random bytes from browserify stand alone", + "devDependencies": { + "phantomjs": "^1.9.9", + "standard": "^10.0.2", + "tap-spec": "^2.1.2", + "tape": "^4.6.3", + "zuul": "^3.7.2" + }, + "homepage": "https://github.com/crypto-browserify/randombytes", + "keywords": [ + "crypto", + "random" + ], + "license": "MIT", + "main": "index.js", + "name": "randombytes", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/crypto-browserify/randombytes.git" + }, + "scripts": { + "local": "zuul --local --no-coverage -- test.js", + "phantom": "zuul --phantom -- test.js", + "test": "standard && node test.js | tspec" + }, + "version": "2.0.5" +} diff --git a/node_modules/randombytes/test.js b/node_modules/randombytes/test.js new file mode 100644 index 000000000..8e34dcaa4 --- /dev/null +++ b/node_modules/randombytes/test.js @@ -0,0 +1,56 @@ +var test = require('tape') +var randomBytes = require('./') + +test('sync', function (t) { + t.plan(4) + t.equals(randomBytes(0).length, 0, 'len: ' + 0) + t.equals(randomBytes(3).length, 3, 'len: ' + 3) + t.equals(randomBytes(30).length, 30, 'len: ' + 30) + t.equals(randomBytes(300).length, 300, 'len: ' + 300) +}) + +test('async', function (t) { + t.plan(4) + + randomBytes(0, function (err, resp) { + if (err) throw err + + t.equals(resp.length, 0, 'len: ' + 0) + }) + + randomBytes(3, function (err, resp) { + if (err) throw err + + t.equals(resp.length, 3, 'len: ' + 3) + }) + + randomBytes(30, function (err, resp) { + if (err) throw err + + t.equals(resp.length, 30, 'len: ' + 30) + }) + + randomBytes(300, function (err, resp) { + if (err) throw err + + t.equals(resp.length, 300, 'len: ' + 300) + }) +}) + +if (process.browser) { + test('requesting to much throws', function (t) { + t.plan(1) + t.throws(function () { + randomBytes(65537) + }) + }) + + test('requesting to much throws async', function (t) { + t.plan(1) + t.throws(function () { + randomBytes(65537, function () { + t.ok(false, 'should not get here') + }) + }) + }) +} diff --git a/node_modules/read-pkg-up/index.js b/node_modules/read-pkg-up/index.js new file mode 100644 index 000000000..26079760f --- /dev/null +++ b/node_modules/read-pkg-up/index.js @@ -0,0 +1,26 @@ +'use strict'; +const findUp = require('find-up'); +const readPkg = require('read-pkg'); + +module.exports = opts => { + return findUp('package.json', opts).then(fp => { + if (!fp) { + return {}; + } + + return readPkg(fp, opts).then(pkg => ({pkg, path: fp})); + }); +}; + +module.exports.sync = opts => { + const fp = findUp.sync('package.json', opts); + + if (!fp) { + return {}; + } + + return { + pkg: readPkg.sync(fp, opts), + path: fp + }; +}; diff --git a/node_modules/read-pkg-up/license b/node_modules/read-pkg-up/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/read-pkg-up/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/read-pkg-up/package.json b/node_modules/read-pkg-up/package.json new file mode 100644 index 000000000..131de258d --- /dev/null +++ b/node_modules/read-pkg-up/package.json @@ -0,0 +1,94 @@ +{ + "_from": "read-pkg-up@^2.0.0", + "_id": "read-pkg-up@2.0.0", + "_inBundle": false, + "_integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "_location": "/read-pkg-up", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "read-pkg-up@^2.0.0", + "name": "read-pkg-up", + "escapedName": "read-pkg-up", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "_shasum": "6b72a8048984e0c41e79510fd5e9fa99b3b549be", + "_spec": "read-pkg-up@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/yargs", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/read-pkg-up/issues" + }, + "bundleDependencies": false, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "deprecated": false, + "description": "Read the closest package.json file", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/read-pkg-up#readme", + "keywords": [ + "json", + "read", + "parse", + "file", + "fs", + "graceful", + "load", + "pkg", + "package", + "find", + "up", + "find-up", + "findup", + "look-up", + "look", + "file", + "search", + "match", + "package", + "resolve", + "parent", + "parents", + "folder", + "directory", + "dir", + "walk", + "walking", + "path" + ], + "license": "MIT", + "name": "read-pkg-up", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/read-pkg-up.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0", + "xo": { + "esnext": true + } +} diff --git a/node_modules/read-pkg-up/readme.md b/node_modules/read-pkg-up/readme.md new file mode 100644 index 000000000..ba18780f9 --- /dev/null +++ b/node_modules/read-pkg-up/readme.md @@ -0,0 +1,80 @@ +# read-pkg-up [![Build Status](https://travis-ci.org/sindresorhus/read-pkg-up.svg?branch=master)](https://travis-ci.org/sindresorhus/read-pkg-up) + +> Read the closest package.json file + + +## Why + +- [Finds the closest package.json](https://github.com/sindresorhus/find-up) +- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs) +- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom) +- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json) +- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) + + +## Install + +``` +$ npm install --save read-pkg-up +``` + + +## Usage + +```js +const readPkgUp = require('read-pkg-up'); + +readPkgUp().then(result => { + console.log(result); + /* + { + pkg: { + name: 'awesome-package', + version: '1.0.0', + ... + }, + path: '/Users/sindresorhus/dev/awesome-package/package.json' + } + */ +}); +``` + + +## API + +### readPkgUp([options]) + +Returns a `Promise` for the result object. + +### readPkgUp.sync([options]) + +Returns the result object. + +#### options + +##### cwd + +Type: `string`
+Default: `.` + +Directory to start looking for a package.json file. + +##### normalize + +Type: `boolean`
+Default: `true` + +[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data. + + +## Related + +- [read-pkg](https://github.com/sindresorhus/read-pkg) - Read a package.json file +- [pkg-up](https://github.com/sindresorhus/pkg-up) - Find the closest package.json file +- [find-up](https://github.com/sindresorhus/find-up) - Find a file by walking up parent directories +- [pkg-conf](https://github.com/sindresorhus/pkg-conf) - Get namespaced config from the closest package.json + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/read-pkg/index.js b/node_modules/read-pkg/index.js new file mode 100644 index 000000000..dff948b69 --- /dev/null +++ b/node_modules/read-pkg/index.js @@ -0,0 +1,47 @@ +'use strict'; +const path = require('path'); +const loadJsonFile = require('load-json-file'); +const pathType = require('path-type'); + +module.exports = (fp, opts) => { + if (typeof fp !== 'string') { + opts = fp; + fp = '.'; + } + + opts = opts || {}; + + return pathType.dir(fp) + .then(isDir => { + if (isDir) { + fp = path.join(fp, 'package.json'); + } + + return loadJsonFile(fp); + }) + .then(x => { + if (opts.normalize !== false) { + require('normalize-package-data')(x); + } + + return x; + }); +}; + +module.exports.sync = (fp, opts) => { + if (typeof fp !== 'string') { + opts = fp; + fp = '.'; + } + + opts = opts || {}; + fp = pathType.dirSync(fp) ? path.join(fp, 'package.json') : fp; + + const x = loadJsonFile.sync(fp); + + if (opts.normalize !== false) { + require('normalize-package-data')(x); + } + + return x; +}; diff --git a/node_modules/read-pkg/license b/node_modules/read-pkg/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/read-pkg/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/read-pkg/package.json b/node_modules/read-pkg/package.json new file mode 100644 index 000000000..a39b545d6 --- /dev/null +++ b/node_modules/read-pkg/package.json @@ -0,0 +1,77 @@ +{ + "_from": "read-pkg@^2.0.0", + "_id": "read-pkg@2.0.0", + "_inBundle": false, + "_integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "_location": "/read-pkg", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "read-pkg@^2.0.0", + "name": "read-pkg", + "escapedName": "read-pkg", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/read-pkg-up" + ], + "_resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "_shasum": "8ef1c0623c6a6db0dc6713c4bfac46332b2368f8", + "_spec": "read-pkg@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/read-pkg-up", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/read-pkg/issues" + }, + "bundleDependencies": false, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "deprecated": false, + "description": "Read a package.json file", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/read-pkg#readme", + "keywords": [ + "json", + "read", + "parse", + "file", + "fs", + "graceful", + "load", + "pkg", + "package", + "normalize" + ], + "license": "MIT", + "name": "read-pkg", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/read-pkg.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0", + "xo": { + "esnext": true + } +} diff --git a/node_modules/read-pkg/readme.md b/node_modules/read-pkg/readme.md new file mode 100644 index 000000000..5796008b8 --- /dev/null +++ b/node_modules/read-pkg/readme.md @@ -0,0 +1,79 @@ +# read-pkg [![Build Status](https://travis-ci.org/sindresorhus/read-pkg.svg?branch=master)](https://travis-ci.org/sindresorhus/read-pkg) + +> Read a package.json file + + +## Why + +- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs) +- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom) +- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json) +- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) + + +## Install + +``` +$ npm install --save read-pkg +``` + + +## Usage + +```js +const readPkg = require('read-pkg'); + +readPkg().then(pkg => { + console.log(pkg); + //=> {name: 'read-pkg', ...} +}); + +readPkg(__dirname).then(pkg => { + console.log(pkg); + //=> {name: 'read-pkg', ...} +}); + +readPkg(path.join('unicorn', 'package.json')).then(pkg => { + console.log(pkg); + //=> {name: 'read-pkg', ...} +}); +``` + + +## API + +### readPkg([path], [options]) + +Returns a `Promise` for the parsed JSON. + +### readPkg.sync([path], [options]) + +Returns the parsed JSON. + +#### path + +Type: `string`
+Default: `.` + +Path to a `package.json` file or its directory. + +#### options + +##### normalize + +Type: `boolean`
+Default: `true` + +[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data. + + +## Related + +- [read-pkg-up](https://github.com/sindresorhus/read-pkg-up) - Read the closest package.json file +- [write-pkg](https://github.com/sindresorhus/write-pkg) - Write a `package.json` file +- [load-json-file](https://github.com/sindresorhus/load-json-file) - Read and parse a JSON file + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/readable-stream/.npmignore b/node_modules/readable-stream/.npmignore new file mode 100644 index 000000000..6d270c6cc --- /dev/null +++ b/node_modules/readable-stream/.npmignore @@ -0,0 +1,9 @@ +build/ +test/ +examples/ +fs.js +zlib.js +.zuul.yml +.nyc_output +coverage +docs/ diff --git a/node_modules/readable-stream/.travis.yml b/node_modules/readable-stream/.travis.yml new file mode 100644 index 000000000..0c5d2bc26 --- /dev/null +++ b/node_modules/readable-stream/.travis.yml @@ -0,0 +1,65 @@ +sudo: false +language: node_js +before_install: + - npm install -g npm@2 + - test $NPM_LEGACY && npm install -g npm@latest-3 || npm install npm -g +notifications: + email: false +matrix: + fast_finish: true + include: + - node_js: '0.8' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.10' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.11' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.12' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 1 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 2 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 3 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 4 + env: TASK=test + - node_js: 5 + env: TASK=test + - node_js: 6 + env: TASK=test + - node_js: 7 + env: TASK=test + - node_js: 8 + env: TASK=test + - node_js: 6 + env: TASK=browser BROWSER_NAME=ie BROWSER_VERSION="9..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=opera BROWSER_VERSION="11..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=chrome BROWSER_VERSION="-3..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=firefox BROWSER_VERSION="-3..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=safari BROWSER_VERSION="5..latest" + - node_js: 6 + env: TASK=browser BROWSER_NAME=microsoftedge BROWSER_VERSION=latest +script: "npm run $TASK" +env: + global: + - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= + - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/node_modules/readable-stream/CONTRIBUTING.md b/node_modules/readable-stream/CONTRIBUTING.md new file mode 100644 index 000000000..f478d58dc --- /dev/null +++ b/node_modules/readable-stream/CONTRIBUTING.md @@ -0,0 +1,38 @@ +# Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +* (a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +* (b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +* (c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +* (d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. + +## Moderation Policy + +The [Node.js Moderation Policy] applies to this WG. + +## Code of Conduct + +The [Node.js Code of Conduct][] applies to this WG. + +[Node.js Code of Conduct]: +https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md +[Node.js Moderation Policy]: +https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/node_modules/readable-stream/GOVERNANCE.md b/node_modules/readable-stream/GOVERNANCE.md new file mode 100644 index 000000000..16ffb93f2 --- /dev/null +++ b/node_modules/readable-stream/GOVERNANCE.md @@ -0,0 +1,136 @@ +### Streams Working Group + +The Node.js Streams is jointly governed by a Working Group +(WG) +that is responsible for high-level guidance of the project. + +The WG has final authority over this project including: + +* Technical direction +* Project governance and process (including this policy) +* Contribution policy +* GitHub repository hosting +* Conduct guidelines +* Maintaining the list of additional Collaborators + +For the current list of WG members, see the project +[README.md](./README.md#current-project-team-members). + +### Collaborators + +The readable-stream GitHub repository is +maintained by the WG and additional Collaborators who are added by the +WG on an ongoing basis. + +Individuals making significant and valuable contributions are made +Collaborators and given commit-access to the project. These +individuals are identified by the WG and their addition as +Collaborators is discussed during the WG meeting. + +_Note:_ If you make a significant contribution and are not considered +for commit-access log an issue or contact a WG member directly and it +will be brought up in the next WG meeting. + +Modifications of the contents of the readable-stream repository are +made on +a collaborative basis. Anybody with a GitHub account may propose a +modification via pull request and it will be considered by the project +Collaborators. All pull requests must be reviewed and accepted by a +Collaborator with sufficient expertise who is able to take full +responsibility for the change. In the case of pull requests proposed +by an existing Collaborator, an additional Collaborator is required +for sign-off. Consensus should be sought if additional Collaborators +participate and there is disagreement around a particular +modification. See _Consensus Seeking Process_ below for further detail +on the consensus model used for governance. + +Collaborators may opt to elevate significant or controversial +modifications, or modifications that have not found consensus to the +WG for discussion by assigning the ***WG-agenda*** tag to a pull +request or issue. The WG should serve as the final arbiter where +required. + +For the current list of Collaborators, see the project +[README.md](./README.md#members). + +### WG Membership + +WG seats are not time-limited. There is no fixed size of the WG. +However, the expected target is between 6 and 12, to ensure adequate +coverage of important areas of expertise, balanced with the ability to +make decisions efficiently. + +There is no specific set of requirements or qualifications for WG +membership beyond these rules. + +The WG may add additional members to the WG by unanimous consensus. + +A WG member may be removed from the WG by voluntary resignation, or by +unanimous consensus of all other WG members. + +Changes to WG membership should be posted in the agenda, and may be +suggested as any other agenda item (see "WG Meetings" below). + +If an addition or removal is proposed during a meeting, and the full +WG is not in attendance to participate, then the addition or removal +is added to the agenda for the subsequent meeting. This is to ensure +that all members are given the opportunity to participate in all +membership decisions. If a WG member is unable to attend a meeting +where a planned membership decision is being made, then their consent +is assumed. + +No more than 1/3 of the WG members may be affiliated with the same +employer. If removal or resignation of a WG member, or a change of +employment by a WG member, creates a situation where more than 1/3 of +the WG membership shares an employer, then the situation must be +immediately remedied by the resignation or removal of one or more WG +members affiliated with the over-represented employer(s). + +### WG Meetings + +The WG meets occasionally on a Google Hangout On Air. A designated moderator +approved by the WG runs the meeting. Each meeting should be +published to YouTube. + +Items are added to the WG agenda that are considered contentious or +are modifications of governance, contribution policy, WG membership, +or release process. + +The intention of the agenda is not to approve or review all patches; +that should happen continuously on GitHub and be handled by the larger +group of Collaborators. + +Any community member or contributor can ask that something be added to +the next meeting's agenda by logging a GitHub Issue. Any Collaborator, +WG member or the moderator can add the item to the agenda by adding +the ***WG-agenda*** tag to the issue. + +Prior to each WG meeting the moderator will share the Agenda with +members of the WG. WG members can add any items they like to the +agenda at the beginning of each meeting. The moderator and the WG +cannot veto or remove items. + +The WG may invite persons or representatives from certain projects to +participate in a non-voting capacity. + +The moderator is responsible for summarizing the discussion of each +agenda item and sends it as a pull request after the meeting. + +### Consensus Seeking Process + +The WG follows a +[Consensus +Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) +decision-making model. + +When an agenda item has appeared to reach a consensus the moderator +will ask "Does anyone object?" as a final call for dissent from the +consensus. + +If an agenda item cannot reach a consensus a WG member can call for +either a closing vote or a vote to table the issue to the next +meeting. The call for a vote must be seconded by a majority of the WG +or else the discussion will continue. Simple majority wins. + +Note that changes to WG membership require a majority consensus. See +"WG Membership" above. diff --git a/node_modules/readable-stream/LICENSE b/node_modules/readable-stream/LICENSE new file mode 100644 index 000000000..2873b3b2e --- /dev/null +++ b/node_modules/readable-stream/LICENSE @@ -0,0 +1,47 @@ +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" diff --git a/node_modules/readable-stream/README.md b/node_modules/readable-stream/README.md new file mode 100644 index 000000000..b24a2c88f --- /dev/null +++ b/node_modules/readable-stream/README.md @@ -0,0 +1,57 @@ +# readable-stream + +***Node-core v8.1.3 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) + + +[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) +[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) + + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) + +```bash +npm install --save readable-stream +``` + +***Node-core streams for userland*** + +This package is a mirror of the Streams2 and Streams3 implementations in +Node-core. + +Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.1.3/docs/api/stream.html). + +If you want to guarantee a stable streams base, regardless of what version of +Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). + +As of version 2.0.0 **readable-stream** uses semantic versioning. + +# Streams Working Group + +`readable-stream` is maintained by the Streams Working Group, which +oversees the development and maintenance of the Streams API within +Node.js. The responsibilities of the Streams Working Group include: + +* Addressing stream issues on the Node.js issue tracker. +* Authoring and editing stream documentation within the Node.js project. +* Reviewing changes to stream subclasses within the Node.js project. +* Redirecting changes to streams from the Node.js project to this + project. +* Assisting in the implementation of stream providers within Node.js. +* Recommending versions of `readable-stream` to be included in Node.js. +* Messaging about the future of streams to give the community advance + notice of changes. + + +## Team Members + +* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> + - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B +* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> + - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 +* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> + - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D +* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> +* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> +* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> +* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> + - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E diff --git a/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md new file mode 100644 index 000000000..83275f192 --- /dev/null +++ b/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md @@ -0,0 +1,60 @@ +# streams WG Meeting 2015-01-30 + +## Links + +* **Google Hangouts Video**: http://www.youtube.com/watch?v=I9nDOSGfwZg +* **GitHub Issue**: https://github.com/iojs/readable-stream/issues/106 +* **Original Minutes Google Doc**: https://docs.google.com/document/d/17aTgLnjMXIrfjgNaTUnHQO7m3xgzHR2VXBTmi03Qii4/ + +## Agenda + +Extracted from https://github.com/iojs/readable-stream/labels/wg-agenda prior to meeting. + +* adopt a charter [#105](https://github.com/iojs/readable-stream/issues/105) +* release and versioning strategy [#101](https://github.com/iojs/readable-stream/issues/101) +* simpler stream creation [#102](https://github.com/iojs/readable-stream/issues/102) +* proposal: deprecate implicit flowing of streams [#99](https://github.com/iojs/readable-stream/issues/99) + +## Minutes + +### adopt a charter + +* group: +1's all around + +### What versioning scheme should be adopted? +* group: +1’s 3.0.0 +* domenic+group: pulling in patches from other sources where appropriate +* mikeal: version independently, suggesting versions for io.js +* mikeal+domenic: work with TC to notify in advance of changes +simpler stream creation + +### streamline creation of streams +* sam: streamline creation of streams +* domenic: nice simple solution posted + but, we lose the opportunity to change the model + may not be backwards incompatible (double check keys) + + **action item:** domenic will check + +### remove implicit flowing of streams on(‘data’) +* add isFlowing / isPaused +* mikeal: worrying that we’re documenting polyfill methods – confuses users +* domenic: more reflective API is probably good, with warning labels for users +* new section for mad scientists (reflective stream access) +* calvin: name the “third state” +* mikeal: maybe borrow the name from whatwg? +* domenic: we’re missing the “third state” +* consensus: kind of difficult to name the third state +* mikeal: figure out differences in states / compat +* mathias: always flow on data – eliminates third state + * explore what it breaks + +**action items:** +* ask isaac for ability to list packages by what public io.js APIs they use (esp. Stream) +* ask rod/build for infrastructure +* **chris**: explore the “flow on data” approach +* add isPaused/isFlowing +* add new docs section +* move isPaused to that section + + diff --git a/node_modules/readable-stream/duplex-browser.js b/node_modules/readable-stream/duplex-browser.js new file mode 100644 index 000000000..f8b2db83d --- /dev/null +++ b/node_modules/readable-stream/duplex-browser.js @@ -0,0 +1 @@ +module.exports = require('./lib/_stream_duplex.js'); diff --git a/node_modules/readable-stream/duplex.js b/node_modules/readable-stream/duplex.js new file mode 100644 index 000000000..46924cbfd --- /dev/null +++ b/node_modules/readable-stream/duplex.js @@ -0,0 +1 @@ +module.exports = require('./readable').Duplex diff --git a/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/readable-stream/lib/_stream_duplex.js new file mode 100644 index 000000000..c599463dd --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_duplex.js @@ -0,0 +1,124 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ + +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +var keys = objectKeys(Writable.prototype); +for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + processNextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + + processNextTick(cb, err); +}; + +function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/readable-stream/lib/_stream_passthrough.js new file mode 100644 index 000000000..a9c835884 --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_passthrough.js @@ -0,0 +1,47 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/readable-stream/lib/_stream_readable.js new file mode 100644 index 000000000..ee9001cdf --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_readable.js @@ -0,0 +1,1007 @@ +// 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. + +'use strict'; + +/**/ + +var processNextTick = require('process-nextick-args'); +/**/ + +module.exports = Readable; + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +// TODO(bmeurer): Change this back to const once hole checks are +// properly optimized away early in Ignition+TurboFan. +/**/ +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +/**/ + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = require('./internal/streams/BufferList'); +var destroyImpl = require('./internal/streams/destroy'); +var StringDecoder; + +util.inherits(Readable, Stream); + +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') { + return emitter.prependListener(event, fn); + } else { + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; + } +} + +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); +} + +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); + +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; + +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + + return needMoreData(state); +} + +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + processNextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { hasUnpiped: false }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, unpipeInfo); + }return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this, unpipeInfo); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + processNextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + processNextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var state = this._readableState; + var paused = false; + + var self = this; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) self.push(chunk); + } + + self.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; +}; + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + processNextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/readable-stream/lib/_stream_transform.js new file mode 100644 index 000000000..a0c23173d --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_transform.js @@ -0,0 +1,214 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function TransformState(stream) { + this.afterTransform = function (er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; + this.writeencoding = null; +} + +function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) { + return stream.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + + if (data !== null && data !== undefined) stream.push(data); + + cb(er); + + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = new TransformState(this); + + var stream = this; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.once('prefinish', function () { + if (typeof this._flush === 'function') this._flush(function (er, data) { + done(stream, er, data); + });else done(stream); + }); +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data !== null && data !== undefined) stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var ts = stream._transformState; + + if (ws.length) throw new Error('Calling transform done when ws.length != 0'); + + if (ts.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/readable-stream/lib/_stream_writable.js new file mode 100644 index 000000000..d20da88c7 --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_writable.js @@ -0,0 +1,664 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +/**/ + +var processNextTick = require('process-nextick-args'); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +/**/ + +var destroyImpl = require('./internal/streams/destroy'); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + processNextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + processNextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = _isUint8Array(chunk) && !state.objectMode; + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + processNextTick(cb, er); + // this can emit finish, and it will always happen + // after error + processNextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequestCount = 0; + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + processNextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) processNextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = corkReq; + } else { + state.corkedRequestsFree = corkReq; + } +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); + +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/BufferList.js b/node_modules/readable-stream/lib/internal/streams/BufferList.js new file mode 100644 index 000000000..d46761597 --- /dev/null +++ b/node_modules/readable-stream/lib/internal/streams/BufferList.js @@ -0,0 +1,74 @@ +'use strict'; + +/**/ + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Buffer = require('safe-buffer').Buffer; +/**/ + +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} + +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function push(v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function unshift(v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + + return BufferList; +}(); \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/destroy.js b/node_modules/readable-stream/lib/internal/streams/destroy.js new file mode 100644 index 000000000..b3e58c33b --- /dev/null +++ b/node_modules/readable-stream/lib/internal/streams/destroy.js @@ -0,0 +1,72 @@ +'use strict'; + +/**/ + +var processNextTick = require('process-nextick-args'); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { + processNextTick(emitErrorNT, this, err); + } + return; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + processNextTick(emitErrorNT, _this, err); + if (_this._writableState) { + _this._writableState.errorEmitted = true; + } + } else if (cb) { + cb(err); + } + }); +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/node_modules/readable-stream/lib/internal/streams/stream-browser.js new file mode 100644 index 000000000..9332a3fda --- /dev/null +++ b/node_modules/readable-stream/lib/internal/streams/stream-browser.js @@ -0,0 +1 @@ +module.exports = require('events').EventEmitter; diff --git a/node_modules/readable-stream/lib/internal/streams/stream.js b/node_modules/readable-stream/lib/internal/streams/stream.js new file mode 100644 index 000000000..ce2ad5b6e --- /dev/null +++ b/node_modules/readable-stream/lib/internal/streams/stream.js @@ -0,0 +1 @@ +module.exports = require('stream'); diff --git a/node_modules/readable-stream/package.json b/node_modules/readable-stream/package.json new file mode 100644 index 000000000..c8bcaf85a --- /dev/null +++ b/node_modules/readable-stream/package.json @@ -0,0 +1,83 @@ +{ + "_from": "readable-stream@^2.0.2", + "_id": "readable-stream@2.3.3", + "_inBundle": false, + "_integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "_location": "/readable-stream", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "readable-stream@^2.0.2", + "name": "readable-stream", + "escapedName": "readable-stream", + "rawSpec": "^2.0.2", + "saveSpec": null, + "fetchSpec": "^2.0.2" + }, + "_requiredBy": [ + "/readdirp" + ], + "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "_shasum": "368f2512d79f9d46fdfc71349ae7878bbc1eb95c", + "_spec": "readable-stream@^2.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/readdirp", + "browser": { + "util": false, + "./readable.js": "./readable-browser.js", + "./writable.js": "./writable-browser.js", + "./duplex.js": "./duplex-browser.js", + "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" + }, + "bugs": { + "url": "https://github.com/nodejs/readable-stream/issues" + }, + "bundleDependencies": false, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + }, + "deprecated": false, + "description": "Streams3, a user-land copy of the stream library from Node.js", + "devDependencies": { + "assert": "~1.4.0", + "babel-polyfill": "^6.9.1", + "buffer": "^4.9.0", + "nyc": "^6.4.0", + "tap": "~0.7.1", + "tape": "~4.5.1", + "zuul": "~3.10.0" + }, + "homepage": "https://github.com/nodejs/readable-stream#readme", + "keywords": [ + "readable", + "stream", + "pipe" + ], + "license": "MIT", + "main": "readable.js", + "name": "readable-stream", + "nyc": { + "include": [ + "lib/**.js" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/nodejs/readable-stream.git" + }, + "scripts": { + "browser": "npm run write-zuul && zuul --browser-retries 2 -- test/browser.js", + "cover": "nyc npm test", + "local": "zuul --local 3000 --no-coverage -- test/browser.js", + "report": "nyc report --reporter=lcov", + "test": "tap test/parallel/*.js test/ours/*.js && node test/verify-dependencies.js", + "write-zuul": "printf \"ui: tape\nbrowsers:\n - name: $BROWSER_NAME\n version: $BROWSER_VERSION\n\">.zuul.yml" + }, + "version": "2.3.3" +} diff --git a/node_modules/readable-stream/passthrough.js b/node_modules/readable-stream/passthrough.js new file mode 100644 index 000000000..ffd791d7f --- /dev/null +++ b/node_modules/readable-stream/passthrough.js @@ -0,0 +1 @@ +module.exports = require('./readable').PassThrough diff --git a/node_modules/readable-stream/readable-browser.js b/node_modules/readable-stream/readable-browser.js new file mode 100644 index 000000000..e50372592 --- /dev/null +++ b/node_modules/readable-stream/readable-browser.js @@ -0,0 +1,7 @@ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_modules/readable-stream/readable.js b/node_modules/readable-stream/readable.js new file mode 100644 index 000000000..ec89ec533 --- /dev/null +++ b/node_modules/readable-stream/readable.js @@ -0,0 +1,19 @@ +var Stream = require('stream'); +if (process.env.READABLE_STREAM === 'disable' && Stream) { + module.exports = Stream; + exports = module.exports = Stream.Readable; + exports.Readable = Stream.Readable; + exports.Writable = Stream.Writable; + exports.Duplex = Stream.Duplex; + exports.Transform = Stream.Transform; + exports.PassThrough = Stream.PassThrough; + exports.Stream = Stream; +} else { + exports = module.exports = require('./lib/_stream_readable.js'); + exports.Stream = Stream || exports; + exports.Readable = exports; + exports.Writable = require('./lib/_stream_writable.js'); + exports.Duplex = require('./lib/_stream_duplex.js'); + exports.Transform = require('./lib/_stream_transform.js'); + exports.PassThrough = require('./lib/_stream_passthrough.js'); +} diff --git a/node_modules/readable-stream/transform.js b/node_modules/readable-stream/transform.js new file mode 100644 index 000000000..b1baba26d --- /dev/null +++ b/node_modules/readable-stream/transform.js @@ -0,0 +1 @@ +module.exports = require('./readable').Transform diff --git a/node_modules/readable-stream/writable-browser.js b/node_modules/readable-stream/writable-browser.js new file mode 100644 index 000000000..ebdde6a85 --- /dev/null +++ b/node_modules/readable-stream/writable-browser.js @@ -0,0 +1 @@ +module.exports = require('./lib/_stream_writable.js'); diff --git a/node_modules/readable-stream/writable.js b/node_modules/readable-stream/writable.js new file mode 100644 index 000000000..3211a6f80 --- /dev/null +++ b/node_modules/readable-stream/writable.js @@ -0,0 +1,8 @@ +var Stream = require("stream") +var Writable = require("./lib/_stream_writable.js") + +if (process.env.READABLE_STREAM === 'disable') { + module.exports = Stream && Stream.Writable || Writable +} else { + module.exports = Writable +} diff --git a/node_modules/readdirp/.npmignore b/node_modules/readdirp/.npmignore new file mode 100644 index 000000000..7dccd9707 --- /dev/null +++ b/node_modules/readdirp/.npmignore @@ -0,0 +1,15 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +node_modules +npm-debug.log \ No newline at end of file diff --git a/node_modules/readdirp/.travis.yml b/node_modules/readdirp/.travis.yml new file mode 100644 index 000000000..0cdb6c360 --- /dev/null +++ b/node_modules/readdirp/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - "0.10" + - "0.12" + - "4.4" + - "6.2" diff --git a/node_modules/readdirp/LICENSE b/node_modules/readdirp/LICENSE new file mode 100644 index 000000000..8a63b80ba --- /dev/null +++ b/node_modules/readdirp/LICENSE @@ -0,0 +1,20 @@ +This software is released under the MIT license: + +Copyright (c) 2012-2015 Thorsten Lorenz + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/readdirp/README.md b/node_modules/readdirp/README.md new file mode 100644 index 000000000..b0c1626ac --- /dev/null +++ b/node_modules/readdirp/README.md @@ -0,0 +1,233 @@ +# readdirp [![Build Status](https://secure.travis-ci.org/thlorenz/readdirp.png)](http://travis-ci.org/thlorenz/readdirp) + +[![NPM](https://nodei.co/npm/readdirp.png?downloads=true&stars=true)](https://nodei.co/npm/readdirp/) + +Recursive version of [fs.readdir](http://nodejs.org/docs/latest/api/fs.html#fs_fs_readdir_path_callback). Exposes a **stream api**. + +```javascript +var readdirp = require('readdirp') + , path = require('path') + , es = require('event-stream'); + +// print out all JavaScript files along with their size + +var stream = readdirp({ root: path.join(__dirname), fileFilter: '*.js' }); +stream + .on('warn', function (err) { + console.error('non-fatal error', err); + // optionally call stream.destroy() here in order to abort and cause 'close' to be emitted + }) + .on('error', function (err) { console.error('fatal error', err); }) + .pipe(es.mapSync(function (entry) { + return { path: entry.path, size: entry.stat.size }; + })) + .pipe(es.stringify()) + .pipe(process.stdout); +``` + +Meant to be one of the recursive versions of [fs](http://nodejs.org/docs/latest/api/fs.html) functions, e.g., like [mkdirp](https://github.com/substack/node-mkdirp). + +**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* + +- [Installation](#installation) +- [API](#api) + - [entry stream](#entry-stream) + - [options](#options) + - [entry info](#entry-info) + - [Filters](#filters) + - [Callback API](#callback-api) + - [allProcessed ](#allprocessed) + - [fileProcessed](#fileprocessed) +- [More Examples](#more-examples) + - [stream api](#stream-api) + - [stream api pipe](#stream-api-pipe) + - [grep](#grep) + - [using callback api](#using-callback-api) + - [tests](#tests) + + +# Installation + + npm install readdirp + +# API + +***var entryStream = readdirp (options)*** + +Reads given root recursively and returns a `stream` of [entry info](#entry-info)s. + +## entry stream + +Behaves as follows: + +- `emit('data')` passes an [entry info](#entry-info) whenever one is found +- `emit('warn')` passes a non-fatal `Error` that prevents a file/directory from being processed (i.e., if it is + inaccessible to the user) +- `emit('error')` passes a fatal `Error` which also ends the stream (i.e., when illegal options where passed) +- `emit('end')` called when all entries were found and no more will be emitted (i.e., we are done) +- `emit('close')` called when the stream is destroyed via `stream.destroy()` (which could be useful if you want to + manually abort even on a non fatal error) - at that point the stream is no longer `readable` and no more entries, + warning or errors are emitted +- to learn more about streams, consult the very detailed + [nodejs streams documentation](http://nodejs.org/api/stream.html) or the + [stream-handbook](https://github.com/substack/stream-handbook) + + +## options + +- **root**: path in which to start reading and recursing into subdirectories + +- **fileFilter**: filter to include/exclude files found (see [Filters](#filters) for more) + +- **directoryFilter**: filter to include/exclude directories found and to recurse into (see [Filters](#filters) for more) + +- **depth**: depth at which to stop recursing even if more subdirectories are found + +- **entryType**: determines if data events on the stream should be emitted for `'files'`, `'directories'`, `'both'`, or `'all'`. Setting to `'all'` will also include entries for other types of file descriptors like character devices, unix sockets and named pipes. Defaults to `'files'`. + +- **lstat**: if `true`, readdirp uses `fs.lstat` instead of `fs.stat` in order to stat files and includes symlink entries in the stream along with files. + +## entry info + +Has the following properties: + +- **parentDir** : directory in which entry was found (relative to given root) +- **fullParentDir** : full path to parent directory +- **name** : name of the file/directory +- **path** : path to the file/directory (relative to given root) +- **fullPath** : full path to the file/directory found +- **stat** : built in [stat object](http://nodejs.org/docs/v0.4.9/api/fs.html#fs.Stats) +- **Example**: (assuming root was `/User/dev/readdirp`) + + parentDir : 'test/bed/root_dir1', + fullParentDir : '/User/dev/readdirp/test/bed/root_dir1', + name : 'root_dir1_subdir1', + path : 'test/bed/root_dir1/root_dir1_subdir1', + fullPath : '/User/dev/readdirp/test/bed/root_dir1/root_dir1_subdir1', + stat : [ ... ] + +## Filters + +There are three different ways to specify filters for files and directories respectively. + +- **function**: a function that takes an entry info as a parameter and returns true to include or false to exclude the entry + +- **glob string**: a string (e.g., `*.js`) which is matched using [minimatch](https://github.com/isaacs/minimatch), so go there for more + information. + + Globstars (`**`) are not supported since specifiying a recursive pattern for an already recursive function doesn't make sense. + + Negated globs (as explained in the minimatch documentation) are allowed, e.g., `!*.txt` matches everything but text files. + +- **array of glob strings**: either need to be all inclusive or all exclusive (negated) patterns otherwise an error is thrown. + + `[ '*.json', '*.js' ]` includes all JavaScript and Json files. + + + `[ '!.git', '!node_modules' ]` includes all directories except the '.git' and 'node_modules'. + +Directories that do not pass a filter will not be recursed into. + +## Callback API + +Although the stream api is recommended, readdirp also exposes a callback based api. + +***readdirp (options, callback1 [, callback2])*** + +If callback2 is given, callback1 functions as the **fileProcessed** callback, and callback2 as the **allProcessed** callback. + +If only callback1 is given, it functions as the **allProcessed** callback. + +### allProcessed + +- function with err and res parameters, e.g., `function (err, res) { ... }` +- **err**: array of errors that occurred during the operation, **res may still be present, even if errors occurred** +- **res**: collection of file/directory [entry infos](#entry-info) + +### fileProcessed + +- function with [entry info](#entry-info) parameter e.g., `function (entryInfo) { ... }` + + +# More Examples + +`on('error', ..)`, `on('warn', ..)` and `on('end', ..)` handling omitted for brevity + +```javascript +var readdirp = require('readdirp'); + +// Glob file filter +readdirp({ root: './test/bed', fileFilter: '*.js' }) + .on('data', function (entry) { + // do something with each JavaScript file entry + }); + +// Combined glob file filters +readdirp({ root: './test/bed', fileFilter: [ '*.js', '*.json' ] }) + .on('data', function (entry) { + // do something with each JavaScript and Json file entry + }); + +// Combined negated directory filters +readdirp({ root: './test/bed', directoryFilter: [ '!.git', '!*modules' ] }) + .on('data', function (entry) { + // do something with each file entry found outside '.git' or any modules directory + }); + +// Function directory filter +readdirp({ root: './test/bed', directoryFilter: function (di) { return di.name.length === 9; } }) + .on('data', function (entry) { + // do something with each file entry found inside directories whose name has length 9 + }); + +// Limiting depth +readdirp({ root: './test/bed', depth: 1 }) + .on('data', function (entry) { + // do something with each file entry found up to 1 subdirectory deep + }); + +// callback api +readdirp( + { root: '.' } + , function(fileInfo) { + // do something with file entry here + } + , function (err, res) { + // all done, move on or do final step for all file entries here + } +); +``` + +Try more examples by following [instructions](https://github.com/thlorenz/readdirp/blob/master/examples/Readme.md) +on how to get going. + +## stream api + +[stream-api.js](https://github.com/thlorenz/readdirp/blob/master/examples/stream-api.js) + +Demonstrates error and data handling by listening to events emitted from the readdirp stream. + +## stream api pipe + +[stream-api-pipe.js](https://github.com/thlorenz/readdirp/blob/master/examples/stream-api-pipe.js) + +Demonstrates error handling by listening to events emitted from the readdirp stream and how to pipe the data stream into +another destination stream. + +## grep + +[grep.js](https://github.com/thlorenz/readdirp/blob/master/examples/grep.js) + +Very naive implementation of grep, for demonstration purposes only. + +## using callback api + +[callback-api.js](https://github.com/thlorenz/readdirp/blob/master/examples/callback-api.js) + +Shows how to pass callbacks in order to handle errors and/or data. + +## tests + +The [readdirp tests](https://github.com/thlorenz/readdirp/blob/master/test/readdirp.js) also will give you a good idea on +how things work. + diff --git a/node_modules/readdirp/examples/Readme.md b/node_modules/readdirp/examples/Readme.md new file mode 100644 index 000000000..55fc4611b --- /dev/null +++ b/node_modules/readdirp/examples/Readme.md @@ -0,0 +1,37 @@ +# readdirp examples + +## How to run the examples + +Assuming you installed readdirp (`npm install readdirp`), you can do the following: + +1. `npm explore readdirp` +2. `cd examples` +3. `npm install` + +At that point you can run the examples with node, i.e., `node grep`. + +## stream api + +[stream-api.js](https://github.com/thlorenz/readdirp/blob/master/examples/stream-api.js) + +Demonstrates error and data handling by listening to events emitted from the readdirp stream. + +## stream api pipe + +[stream-api-pipe.js](https://github.com/thlorenz/readdirp/blob/master/examples/stream-api-pipe.js) + +Demonstrates error handling by listening to events emitted from the readdirp stream and how to pipe the data stream into +another destination stream. + +## grep + +[grep.js](https://github.com/thlorenz/readdirp/blob/master/examples/grep.js) + +Very naive implementation of grep, for demonstration purposes only. + +## using callback api + +[callback-api.js](https://github.com/thlorenz/readdirp/blob/master/examples/callback-api.js) + +Shows how to pass callbacks in order to handle errors and/or data. + diff --git a/node_modules/readdirp/examples/callback-api.js b/node_modules/readdirp/examples/callback-api.js new file mode 100644 index 000000000..39bd2d798 --- /dev/null +++ b/node_modules/readdirp/examples/callback-api.js @@ -0,0 +1,10 @@ +var readdirp = require('..'); + +readdirp({ root: '.', fileFilter: '*.js' }, function (errors, res) { + if (errors) { + errors.forEach(function (err) { + console.error('Error: ', err); + }); + } + console.log('all javascript files', res); +}); diff --git a/node_modules/readdirp/examples/grep.js b/node_modules/readdirp/examples/grep.js new file mode 100644 index 000000000..01d5f2954 --- /dev/null +++ b/node_modules/readdirp/examples/grep.js @@ -0,0 +1,71 @@ +'use strict'; +var readdirp = require('..') + , util = require('util') + , fs = require('fs') + , path = require('path') + , es = require('event-stream') + ; + +function findLinesMatching (searchTerm) { + + return es.through(function (entry) { + var lineno = 0 + , matchingLines = [] + , fileStream = this; + + function filter () { + return es.mapSync(function (line) { + lineno++; + return ~line.indexOf(searchTerm) ? lineno + ': ' + line : undefined; + }); + } + + function aggregate () { + return es.through( + function write (data) { + matchingLines.push(data); + } + , function end () { + + // drop files that had no matches + if (matchingLines.length) { + var result = { file: entry, lines: matchingLines }; + + // pass result on to file stream + fileStream.emit('data', result); + } + this.emit('end'); + } + ); + } + + fs.createReadStream(entry.fullPath, { encoding: 'utf-8' }) + + // handle file contents line by line + .pipe(es.split('\n')) + + // keep only the lines that matched the term + .pipe(filter()) + + // aggregate all matching lines and delegate control back to the file stream + .pipe(aggregate()) + ; + }); +} + +console.log('grepping for "arguments"'); + +// create a stream of all javascript files found in this and all sub directories +readdirp({ root: path.join(__dirname), fileFilter: '*.js' }) + + // find all lines matching the term for each file (if none found, that file is ignored) + .pipe(findLinesMatching('arguments')) + + // format the results and output + .pipe( + es.mapSync(function (res) { + return '\n\n' + res.file.path + '\n\t' + res.lines.join('\n\t'); + }) + ) + .pipe(process.stdout) + ; diff --git a/node_modules/readdirp/examples/package.json b/node_modules/readdirp/examples/package.json new file mode 100644 index 000000000..2d9b34119 --- /dev/null +++ b/node_modules/readdirp/examples/package.json @@ -0,0 +1,9 @@ +{ + "name": "readdirp-examples", + "version": "0.0.0", + "description": "Examples for readdirp.", + "dependencies": { + "tap-stream": "~0.1.0", + "event-stream": "~3.0.7" + } +} diff --git a/node_modules/readdirp/examples/stream-api-pipe.js b/node_modules/readdirp/examples/stream-api-pipe.js new file mode 100644 index 000000000..4003be8d3 --- /dev/null +++ b/node_modules/readdirp/examples/stream-api-pipe.js @@ -0,0 +1,19 @@ +var readdirp = require('..') + , path = require('path') + , through = require('through2') + +// print out all JavaScript files along with their size +readdirp({ root: path.join(__dirname), fileFilter: '*.js' }) + .on('warn', function (err) { console.error('non-fatal error', err); }) + .on('error', function (err) { console.error('fatal error', err); }) + .pipe(through.obj(function (entry, _, cb) { + this.push({ path: entry.path, size: entry.stat.size }); + cb(); + })) + .pipe(through.obj( + function (res, _, cb) { + this.push(JSON.stringify(res) + '\n'); + cb(); + }) + ) + .pipe(process.stdout); diff --git a/node_modules/readdirp/examples/stream-api.js b/node_modules/readdirp/examples/stream-api.js new file mode 100644 index 000000000..0f7b327eb --- /dev/null +++ b/node_modules/readdirp/examples/stream-api.js @@ -0,0 +1,15 @@ +var readdirp = require('..') + , path = require('path'); + +readdirp({ root: path.join(__dirname), fileFilter: '*.js' }) + .on('warn', function (err) { + console.error('something went wrong when processing an entry', err); + }) + .on('error', function (err) { + console.error('something went fatally wrong and the stream was aborted', err); + }) + .on('data', function (entry) { + console.log('%s is ready for processing', entry.path); + // process entry here + }); + diff --git a/node_modules/readdirp/package.json b/node_modules/readdirp/package.json new file mode 100644 index 000000000..3b7c8399c --- /dev/null +++ b/node_modules/readdirp/package.json @@ -0,0 +1,79 @@ +{ + "_from": "readdirp@^2.0.0", + "_id": "readdirp@2.1.0", + "_inBundle": false, + "_integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "_location": "/readdirp", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "readdirp@^2.0.0", + "name": "readdirp", + "escapedName": "readdirp", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/chokidar" + ], + "_resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "_shasum": "4ed0ad060df3073300c48440373f72d1cc642d78", + "_spec": "readdirp@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/chokidar", + "author": { + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": "thlorenz.com" + }, + "bugs": { + "url": "https://github.com/thlorenz/readdirp/issues" + }, + "bundleDependencies": false, + "dependencies": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + }, + "deprecated": false, + "description": "Recursive version of fs.readdir with streaming api.", + "devDependencies": { + "nave": "^0.5.1", + "proxyquire": "^1.7.9", + "tap": "1.3.2", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=0.6" + }, + "homepage": "https://github.com/thlorenz/readdirp", + "keywords": [ + "recursive", + "fs", + "stream", + "streams", + "readdir", + "filesystem", + "find", + "filter" + ], + "license": "MIT", + "main": "readdirp.js", + "name": "readdirp", + "repository": { + "type": "git", + "url": "git://github.com/thlorenz/readdirp.git" + }, + "scripts": { + "test": "if [ -e $TRAVIS ]; then npm run test-all; else npm run test-main; fi", + "test-0.10": "nave use 0.10 npm run test-main", + "test-0.12": "nave use 0.12 npm run test-main", + "test-4": "nave use 4.4 npm run test-main", + "test-6": "nave use 6.2 npm run test-main", + "test-all": "npm run test-main && npm run test-0.10 && npm run test-0.12 && npm run test-4 && npm run test-6", + "test-main": "(cd test && set -e; for t in ./*.js; do node $t; done)" + }, + "version": "2.1.0" +} diff --git a/node_modules/readdirp/readdirp.js b/node_modules/readdirp/readdirp.js new file mode 100644 index 000000000..b6b21e418 --- /dev/null +++ b/node_modules/readdirp/readdirp.js @@ -0,0 +1,300 @@ +'use strict'; + +var fs = require('graceful-fs') + , path = require('path') + , minimatch = require('minimatch') + , toString = Object.prototype.toString + , si = require('set-immediate-shim') + ; + + +// Standard helpers +function isFunction (obj) { + return toString.call(obj) === '[object Function]'; +} + +function isString (obj) { + return toString.call(obj) === '[object String]'; +} + +function isRegExp (obj) { + return toString.call(obj) === '[object RegExp]'; +} + +function isUndefined (obj) { + return obj === void 0; +} + +/** + * Main function which ends up calling readdirRec and reads all files and directories in given root recursively. + * @param { Object } opts Options to specify root (start directory), filters and recursion depth + * @param { function } callback1 When callback2 is given calls back for each processed file - function (fileInfo) { ... }, + * when callback2 is not given, it behaves like explained in callback2 + * @param { function } callback2 Calls back once all files have been processed with an array of errors and file infos + * function (err, fileInfos) { ... } + */ +function readdir(opts, callback1, callback2) { + var stream + , handleError + , handleFatalError + , pending = 0 + , errors = [] + , readdirResult = { + directories: [] + , files: [] + } + , fileProcessed + , allProcessed + , realRoot + , aborted = false + , paused = false + ; + + // If no callbacks were given we will use a streaming interface + if (isUndefined(callback1)) { + var api = require('./stream-api')(); + stream = api.stream; + callback1 = api.processEntry; + callback2 = api.done; + handleError = api.handleError; + handleFatalError = api.handleFatalError; + + stream.on('close', function () { aborted = true; }); + stream.on('pause', function () { paused = true; }); + stream.on('resume', function () { paused = false; }); + } else { + handleError = function (err) { errors.push(err); }; + handleFatalError = function (err) { + handleError(err); + allProcessed(errors, null); + }; + } + + if (isUndefined(opts)){ + handleFatalError(new Error ( + 'Need to pass at least one argument: opts! \n' + + 'https://github.com/thlorenz/readdirp#options' + ) + ); + return stream; + } + + opts.root = opts.root || '.'; + opts.fileFilter = opts.fileFilter || function() { return true; }; + opts.directoryFilter = opts.directoryFilter || function() { return true; }; + opts.depth = typeof opts.depth === 'undefined' ? 999999999 : opts.depth; + opts.entryType = opts.entryType || 'files'; + + var statfn = opts.lstat === true ? fs.lstat.bind(fs) : fs.stat.bind(fs); + + if (isUndefined(callback2)) { + fileProcessed = function() { }; + allProcessed = callback1; + } else { + fileProcessed = callback1; + allProcessed = callback2; + } + + function normalizeFilter (filter) { + + if (isUndefined(filter)) return undefined; + + function isNegated (filters) { + + function negated(f) { + return f.indexOf('!') === 0; + } + + var some = filters.some(negated); + if (!some) { + return false; + } else { + if (filters.every(negated)) { + return true; + } else { + // if we detect illegal filters, bail out immediately + throw new Error( + 'Cannot mix negated with non negated glob filters: ' + filters + '\n' + + 'https://github.com/thlorenz/readdirp#filters' + ); + } + } + } + + // Turn all filters into a function + if (isFunction(filter)) { + + return filter; + + } else if (isString(filter)) { + + return function (entryInfo) { + return minimatch(entryInfo.name, filter.trim()); + }; + + } else if (filter && Array.isArray(filter)) { + + if (filter) filter = filter.map(function (f) { + return f.trim(); + }); + + return isNegated(filter) ? + // use AND to concat multiple negated filters + function (entryInfo) { + return filter.every(function (f) { + return minimatch(entryInfo.name, f); + }); + } + : + // use OR to concat multiple inclusive filters + function (entryInfo) { + return filter.some(function (f) { + return minimatch(entryInfo.name, f); + }); + }; + } + } + + function processDir(currentDir, entries, callProcessed) { + if (aborted) return; + var total = entries.length + , processed = 0 + , entryInfos = [] + ; + + fs.realpath(currentDir, function(err, realCurrentDir) { + if (aborted) return; + if (err) { + handleError(err); + callProcessed(entryInfos); + return; + } + + var relDir = path.relative(realRoot, realCurrentDir); + + if (entries.length === 0) { + callProcessed([]); + } else { + entries.forEach(function (entry) { + + var fullPath = path.join(realCurrentDir, entry) + , relPath = path.join(relDir, entry); + + statfn(fullPath, function (err, stat) { + if (err) { + handleError(err); + } else { + entryInfos.push({ + name : entry + , path : relPath // relative to root + , fullPath : fullPath + + , parentDir : relDir // relative to root + , fullParentDir : realCurrentDir + + , stat : stat + }); + } + processed++; + if (processed === total) callProcessed(entryInfos); + }); + }); + } + }); + } + + function readdirRec(currentDir, depth, callCurrentDirProcessed) { + var args = arguments; + if (aborted) return; + if (paused) { + si(function () { + readdirRec.apply(null, args); + }) + return; + } + + fs.readdir(currentDir, function (err, entries) { + if (err) { + handleError(err); + callCurrentDirProcessed(); + return; + } + + processDir(currentDir, entries, function(entryInfos) { + + var subdirs = entryInfos + .filter(function (ei) { return ei.stat.isDirectory() && opts.directoryFilter(ei); }); + + subdirs.forEach(function (di) { + if(opts.entryType === 'directories' || opts.entryType === 'both' || opts.entryType === 'all') { + fileProcessed(di); + } + readdirResult.directories.push(di); + }); + + entryInfos + .filter(function(ei) { + var isCorrectType = opts.entryType === 'all' ? + !ei.stat.isDirectory() : ei.stat.isFile() || ei.stat.isSymbolicLink(); + return isCorrectType && opts.fileFilter(ei); + }) + .forEach(function (fi) { + if(opts.entryType === 'files' || opts.entryType === 'both' || opts.entryType === 'all') { + fileProcessed(fi); + } + readdirResult.files.push(fi); + }); + + var pendingSubdirs = subdirs.length; + + // Be done if no more subfolders exist or we reached the maximum desired depth + if(pendingSubdirs === 0 || depth === opts.depth) { + callCurrentDirProcessed(); + } else { + // recurse into subdirs, keeping track of which ones are done + // and call back once all are processed + subdirs.forEach(function (subdir) { + readdirRec(subdir.fullPath, depth + 1, function () { + pendingSubdirs = pendingSubdirs - 1; + if(pendingSubdirs === 0) { + callCurrentDirProcessed(); + } + }); + }); + } + }); + }); + } + + // Validate and normalize filters + try { + opts.fileFilter = normalizeFilter(opts.fileFilter); + opts.directoryFilter = normalizeFilter(opts.directoryFilter); + } catch (err) { + // if we detect illegal filters, bail out immediately + handleFatalError(err); + return stream; + } + + // If filters were valid get on with the show + fs.realpath(opts.root, function(err, res) { + if (err) { + handleFatalError(err); + return stream; + } + + realRoot = res; + readdirRec(opts.root, 0, function () { + // All errors are collected into the errors array + if (errors.length > 0) { + allProcessed(errors, readdirResult); + } else { + allProcessed(null, readdirResult); + } + }); + }); + + return stream; +} + +module.exports = readdir; diff --git a/node_modules/readdirp/stream-api.js b/node_modules/readdirp/stream-api.js new file mode 100644 index 000000000..91c680847 --- /dev/null +++ b/node_modules/readdirp/stream-api.js @@ -0,0 +1,99 @@ +'use strict'; + +var si = require('set-immediate-shim'); +var stream = require('readable-stream'); +var util = require('util'); + +var Readable = stream.Readable; + +module.exports = ReaddirpReadable; + +util.inherits(ReaddirpReadable, Readable); + +function ReaddirpReadable (opts) { + if (!(this instanceof ReaddirpReadable)) return new ReaddirpReadable(opts); + + opts = opts || {}; + + opts.objectMode = true; + Readable.call(this, opts); + + // backpressure not implemented at this point + this.highWaterMark = Infinity; + + this._destroyed = false; + this._paused = false; + this._warnings = []; + this._errors = []; + + this._pauseResumeErrors(); +} + +var proto = ReaddirpReadable.prototype; + +proto._pauseResumeErrors = function () { + var self = this; + self.on('pause', function () { self._paused = true }); + self.on('resume', function () { + if (self._destroyed) return; + self._paused = false; + + self._warnings.forEach(function (err) { self.emit('warn', err) }); + self._warnings.length = 0; + + self._errors.forEach(function (err) { self.emit('error', err) }); + self._errors.length = 0; + }) +} + +// called for each entry +proto._processEntry = function (entry) { + if (this._destroyed) return; + this.push(entry); +} + +proto._read = function () { } + +proto.destroy = function () { + // when stream is destroyed it will emit nothing further, not even errors or warnings + this.push(null); + this.readable = false; + this._destroyed = true; + this.emit('close'); +} + +proto._done = function () { + this.push(null); +} + +// we emit errors and warnings async since we may handle errors like invalid args +// within the initial event loop before any event listeners subscribed +proto._handleError = function (err) { + var self = this; + si(function () { + if (self._paused) return self._warnings.push(err); + if (!self._destroyed) self.emit('warn', err); + }); +} + +proto._handleFatalError = function (err) { + var self = this; + si(function () { + if (self._paused) return self._errors.push(err); + if (!self._destroyed) self.emit('error', err); + }); +} + +function createStreamAPI () { + var stream = new ReaddirpReadable(); + + return { + stream : stream + , processEntry : stream._processEntry.bind(stream) + , done : stream._done.bind(stream) + , handleError : stream._handleError.bind(stream) + , handleFatalError : stream._handleFatalError.bind(stream) + }; +} + +module.exports = createStreamAPI; diff --git a/node_modules/readdirp/test/bed/root_dir1/root_dir1_file1.ext1 b/node_modules/readdirp/test/bed/root_dir1/root_dir1_file1.ext1 new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/readdirp/test/bed/root_dir1/root_dir1_file2.ext2 b/node_modules/readdirp/test/bed/root_dir1/root_dir1_file2.ext2 new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/readdirp/test/bed/root_dir1/root_dir1_file3.ext3 b/node_modules/readdirp/test/bed/root_dir1/root_dir1_file3.ext3 new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/readdirp/test/bed/root_dir1/root_dir1_subdir1/root1_dir1_subdir1_file1.ext1 b/node_modules/readdirp/test/bed/root_dir1/root_dir1_subdir1/root1_dir1_subdir1_file1.ext1 new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/readdirp/test/bed/root_dir2/root_dir2_file1.ext1 b/node_modules/readdirp/test/bed/root_dir2/root_dir2_file1.ext1 new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/readdirp/test/bed/root_dir2/root_dir2_file2.ext2 b/node_modules/readdirp/test/bed/root_dir2/root_dir2_file2.ext2 new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/readdirp/test/bed/root_file1.ext1 b/node_modules/readdirp/test/bed/root_file1.ext1 new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/readdirp/test/bed/root_file2.ext2 b/node_modules/readdirp/test/bed/root_file2.ext2 new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/readdirp/test/bed/root_file3.ext3 b/node_modules/readdirp/test/bed/root_file3.ext3 new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/readdirp/test/readdirp-stream.js b/node_modules/readdirp/test/readdirp-stream.js new file mode 100644 index 000000000..c43d132d3 --- /dev/null +++ b/node_modules/readdirp/test/readdirp-stream.js @@ -0,0 +1,338 @@ +/*jshint asi:true */ + +var debug //= true; +var test = debug ? function () {} : require('tap').test +var test_ = !debug ? function () {} : require('tap').test + , path = require('path') + , fs = require('fs') + , util = require('util') + , TransformStream = require('readable-stream').Transform + , through = require('through2') + , proxyquire = require('proxyquire') + , streamapi = require('../stream-api') + , readdirp = require('..') + , root = path.join(__dirname, 'bed') + , totalDirs = 6 + , totalFiles = 12 + , ext1Files = 4 + , ext2Files = 3 + , ext3Files = 2 + ; + +// see test/readdirp.js for test bed layout + +function opts (extend) { + var o = { root: root }; + + if (extend) { + for (var prop in extend) { + o[prop] = extend[prop]; + } + } + return o; +} + +function capture () { + var result = { entries: [], errors: [], ended: false } + , dst = new TransformStream({ objectMode: true }); + + dst._transform = function (entry, _, cb) { + result.entries.push(entry); + cb(); + } + + dst._flush = function (cb) { + result.ended = true; + this.push(result); + cb(); + } + + return dst; +} + +test('\nintegrated', function (t) { + t.test('\n# reading root without filter', function (t) { + t.plan(2); + + readdirp(opts()) + .on('error', function (err) { + t.fail('should not throw error', err); + }) + .pipe(capture()) + .pipe(through.obj( + function (result, _ , cb) { + t.equals(result.entries.length, totalFiles, 'emits all files'); + t.ok(result.ended, 'ends stream'); + t.end(); + cb(); + } + )); + }) + + t.test('\n# normal: ["*.ext1", "*.ext3"]', function (t) { + t.plan(2); + + readdirp(opts( { fileFilter: [ '*.ext1', '*.ext3' ] } )) + .on('error', function (err) { + t.fail('should not throw error', err); + }) + .pipe(capture()) + .pipe(through.obj( + function (result, _ , cb) { + t.equals(result.entries.length, ext1Files + ext3Files, 'all ext1 and ext3 files'); + t.ok(result.ended, 'ends stream'); + t.end(); + cb(); + } + )) + }) + + t.test('\n# files only', function (t) { + t.plan(2); + + readdirp(opts( { entryType: 'files' } )) + .on('error', function (err) { + t.fail('should not throw error', err); + }) + .pipe(capture()) + .pipe(through.obj( + function (result, _ , cb) { + t.equals(result.entries.length, totalFiles, 'returned files'); + t.ok(result.ended, 'ends stream'); + t.end(); + cb(); + } + )) + }) + + t.test('\n# directories only', function (t) { + t.plan(2); + + readdirp(opts( { entryType: 'directories' } )) + .on('error', function (err) { + t.fail('should not throw error', err); + }) + .pipe(capture()) + .pipe(through.obj( + function (result, _ , cb) { + t.equals(result.entries.length, totalDirs, 'returned directories'); + t.ok(result.ended, 'ends stream'); + t.end(); + cb(); + } + )) + }) + + t.test('\n# both directories + files', function (t) { + t.plan(2); + + readdirp(opts( { entryType: 'both' } )) + .on('error', function (err) { + t.fail('should not throw error', err); + }) + .pipe(capture()) + .pipe(through.obj( + function (result, _ , cb) { + t.equals(result.entries.length, totalDirs + totalFiles, 'returned everything'); + t.ok(result.ended, 'ends stream'); + t.end(); + cb(); + } + )) + }) + + t.test('\n# directory filter with directories only', function (t) { + t.plan(2); + + readdirp(opts( { entryType: 'directories', directoryFilter: [ 'root_dir1', '*dir1_subdir1' ] } )) + .on('error', function (err) { + t.fail('should not throw error', err); + }) + .pipe(capture()) + .pipe(through.obj( + function (result, _ , cb) { + t.equals(result.entries.length, 2, 'two directories'); + t.ok(result.ended, 'ends stream'); + t.end(); + cb(); + } + )) + }) + + t.test('\n# directory and file filters with both entries', function (t) { + t.plan(2); + + readdirp(opts( { entryType: 'both', directoryFilter: [ 'root_dir1', '*dir1_subdir1' ], fileFilter: [ '!*.ext1' ] } )) + .on('error', function (err) { + t.fail('should not throw error', err); + }) + .pipe(capture()) + .pipe(through.obj( + function (result, _ , cb) { + t.equals(result.entries.length, 6, '2 directories and 4 files'); + t.ok(result.ended, 'ends stream'); + t.end(); + cb(); + } + )) + }) + + t.test('\n# negated: ["!*.ext1", "!*.ext3"]', function (t) { + t.plan(2); + + readdirp(opts( { fileFilter: [ '!*.ext1', '!*.ext3' ] } )) + .on('error', function (err) { + t.fail('should not throw error', err); + }) + .pipe(capture()) + .pipe(through.obj( + function (result, _ , cb) { + t.equals(result.entries.length, totalFiles - ext1Files - ext3Files, 'all but ext1 and ext3 files'); + t.ok(result.ended, 'ends stream'); + t.end(); + } + )) + }) + + t.test('\n# no options given', function (t) { + t.plan(1); + readdirp() + .on('error', function (err) { + t.similar(err.toString() , /Need to pass at least one argument/ , 'emits meaningful error'); + t.end(); + }) + }) + + t.test('\n# mixed: ["*.ext1", "!*.ext3"]', function (t) { + t.plan(1); + + readdirp(opts( { fileFilter: [ '*.ext1', '!*.ext3' ] } )) + .on('error', function (err) { + t.similar(err.toString() , /Cannot mix negated with non negated glob filters/ , 'emits meaningful error'); + t.end(); + }) + }) +}) + + +test('\napi separately', function (t) { + + t.test('\n# handleError', function (t) { + t.plan(1); + + var api = streamapi() + , warning = new Error('some file caused problems'); + + api.stream + .on('warn', function (err) { + t.equals(err, warning, 'warns with the handled error'); + }) + api.handleError(warning); + }) + + t.test('\n# when stream is paused and then resumed', function (t) { + t.plan(6); + var api = streamapi() + , resumed = false + , fatalError = new Error('fatal!') + , nonfatalError = new Error('nonfatal!') + , processedData = 'some data' + ; + + api.stream + .on('warn', function (err) { + t.equals(err, nonfatalError, 'emits the buffered warning'); + t.ok(resumed, 'emits warning only after it was resumed'); + }) + .on('error', function (err) { + t.equals(err, fatalError, 'emits the buffered fatal error'); + t.ok(resumed, 'emits errors only after it was resumed'); + }) + .on('data', function (data) { + t.equals(data, processedData, 'emits the buffered data'); + t.ok(resumed, 'emits data only after it was resumed'); + }) + .pause() + + api.processEntry(processedData); + api.handleError(nonfatalError); + api.handleFatalError(fatalError); + + setTimeout(function () { + resumed = true; + api.stream.resume(); + }, 1) + }) + + t.test('\n# when a stream is paused it stops walking the fs', function (t) { + var resumed = false, + mockedAPI = streamapi(); + + mockedAPI.processEntry = function (entry) { + if (!resumed) t.notOk(true, 'should not emit while paused') + t.ok(entry, 'emitted while resumed') + }.bind(mockedAPI.stream) + + function wrapper () { + return mockedAPI + } + + var readdirp = proxyquire('../readdirp', {'./stream-api': wrapper}) + , stream = readdirp(opts()) + .on('error', function (err) { + t.fail('should not throw error', err); + }) + .on('end', function () { + t.end() + }) + .pause(); + + setTimeout(function () { + resumed = true; + stream.resume(); + }, 5) + }) + + t.test('\n# when a stream is destroyed, it emits "closed", but no longer emits "data", "warn" and "error"', function (t) { + var api = streamapi() + , fatalError = new Error('fatal!') + , nonfatalError = new Error('nonfatal!') + , processedData = 'some data' + , plan = 0; + + t.plan(6) + var stream = api.stream + .on('warn', function (err) { + t.ok(!stream._destroyed, 'emits warning until destroyed'); + }) + .on('error', function (err) { + t.ok(!stream._destroyed, 'emits errors until destroyed'); + }) + .on('data', function (data) { + t.ok(!stream._destroyed, 'emits data until destroyed'); + }) + .on('close', function () { + t.ok(stream._destroyed, 'emits close when stream is destroyed'); + }) + + + api.processEntry(processedData); + api.handleError(nonfatalError); + api.handleFatalError(fatalError); + + setTimeout(function () { + stream.destroy() + + t.notOk(stream.readable, 'stream is no longer readable after it is destroyed') + + api.processEntry(processedData); + api.handleError(nonfatalError); + api.handleFatalError(fatalError); + + process.nextTick(function () { + t.pass('emits no more data, warn or error events after it was destroyed') + t.end(); + }) + }, 10) + }) +}) diff --git a/node_modules/readdirp/test/readdirp.js b/node_modules/readdirp/test/readdirp.js new file mode 100644 index 000000000..812afbbb9 --- /dev/null +++ b/node_modules/readdirp/test/readdirp.js @@ -0,0 +1,289 @@ +/*jshint asi:true */ + +var test = require('tap').test + , path = require('path') + , fs = require('fs') + , util = require('util') + , net = require('net') + , readdirp = require('../readdirp.js') + , root = path.join(__dirname, '../test/bed') + , totalDirs = 6 + , totalFiles = 12 + , ext1Files = 4 + , ext2Files = 3 + , ext3Files = 2 + , rootDir2Files = 2 + , nameHasLength9Dirs = 2 + , depth1Files = 8 + , depth0Files = 3 + ; + +/* +Structure of test bed: + . + ├── root_dir1 + │   ├── root_dir1_file1.ext1 + │   ├── root_dir1_file2.ext2 + │   ├── root_dir1_file3.ext3 + │   ├── root_dir1_subdir1 + │   │   └── root1_dir1_subdir1_file1.ext1 + │   └── root_dir1_subdir2 + │   └── .gitignore + ├── root_dir2 + │   ├── root_dir2_file1.ext1 + │   ├── root_dir2_file2.ext2 + │   ├── root_dir2_subdir1 + │   │   └── .gitignore + │   └── root_dir2_subdir2 + │   └── .gitignore + ├── root_file1.ext1 + ├── root_file2.ext2 + └── root_file3.ext3 + + 6 directories, 13 files +*/ + +// console.log('\033[2J'); // clear console + +function opts (extend) { + var o = { root: root }; + + if (extend) { + for (var prop in extend) { + o[prop] = extend[prop]; + } + } + return o; +} + +test('\nreading root without filter', function (t) { + t.plan(2); + readdirp(opts(), function (err, res) { + t.equals(res.directories.length, totalDirs, 'all directories'); + t.equals(res.files.length, totalFiles, 'all files'); + t.end(); + }) +}) + +test('\nreading root without filter using lstat', function (t) { + t.plan(2); + readdirp(opts({ lstat: true }), function (err, res) { + t.equals(res.directories.length, totalDirs, 'all directories'); + t.equals(res.files.length, totalFiles, 'all files'); + t.end(); + }) +}) + +test('\nreading root with symlinks using lstat', function (t) { + t.plan(2); + fs.symlinkSync(path.join(root, 'root_dir1'), path.join(root, 'dirlink')); + fs.symlinkSync(path.join(root, 'root_file1.ext1'), path.join(root, 'link.ext1')); + readdirp(opts({ lstat: true }), function (err, res) { + t.equals(res.directories.length, totalDirs, 'all directories'); + t.equals(res.files.length, totalFiles + 2, 'all files + symlinks'); + fs.unlinkSync(path.join(root, 'dirlink')); + fs.unlinkSync(path.join(root, 'link.ext1')); + t.end(); + }) +}) + +test('\nreading non-standard fds', function (t) { + t.plan(2); + var server = net.createServer().listen(path.join(root, 'test.sock'), function(){ + readdirp(opts({ entryType: 'all' }), function (err, res) { + t.equals(res.files.length, totalFiles + 1, 'all files + socket'); + readdirp(opts({ entryType: 'both' }), function (err, res) { + t.equals(res.files.length, totalFiles, 'all regular files only'); + server.close(); + t.end(); + }) + }) + }); +}) + +test('\nreading root using glob filter', function (t) { + // normal + t.test('\n# "*.ext1"', function (t) { + t.plan(1); + readdirp(opts( { fileFilter: '*.ext1' } ), function (err, res) { + t.equals(res.files.length, ext1Files, 'all ext1 files'); + t.end(); + }) + }) + t.test('\n# ["*.ext1", "*.ext3"]', function (t) { + t.plan(1); + readdirp(opts( { fileFilter: [ '*.ext1', '*.ext3' ] } ), function (err, res) { + t.equals(res.files.length, ext1Files + ext3Files, 'all ext1 and ext3 files'); + t.end(); + }) + }) + t.test('\n# "root_dir1"', function (t) { + t.plan(1); + readdirp(opts( { directoryFilter: 'root_dir1' }), function (err, res) { + t.equals(res.directories.length, 1, 'one directory'); + t.end(); + }) + }) + t.test('\n# ["root_dir1", "*dir1_subdir1"]', function (t) { + t.plan(1); + readdirp(opts( { directoryFilter: [ 'root_dir1', '*dir1_subdir1' ]}), function (err, res) { + t.equals(res.directories.length, 2, 'two directories'); + t.end(); + }) + }) + + t.test('\n# negated: "!*.ext1"', function (t) { + t.plan(1); + readdirp(opts( { fileFilter: '!*.ext1' } ), function (err, res) { + t.equals(res.files.length, totalFiles - ext1Files, 'all but ext1 files'); + t.end(); + }) + }) + t.test('\n# negated: ["!*.ext1", "!*.ext3"]', function (t) { + t.plan(1); + readdirp(opts( { fileFilter: [ '!*.ext1', '!*.ext3' ] } ), function (err, res) { + t.equals(res.files.length, totalFiles - ext1Files - ext3Files, 'all but ext1 and ext3 files'); + t.end(); + }) + }) + + t.test('\n# mixed: ["*.ext1", "!*.ext3"]', function (t) { + t.plan(1); + readdirp(opts( { fileFilter: [ '*.ext1', '!*.ext3' ] } ), function (err, res) { + t.similar(err[0].toString(), /Cannot mix negated with non negated glob filters/, 'returns meaningfull error'); + t.end(); + }) + }) + + t.test('\n# leading and trailing spaces: [" *.ext1", "*.ext3 "]', function (t) { + t.plan(1); + readdirp(opts( { fileFilter: [ ' *.ext1', '*.ext3 ' ] } ), function (err, res) { + t.equals(res.files.length, ext1Files + ext3Files, 'all ext1 and ext3 files'); + t.end(); + }) + }) + t.test('\n# leading and trailing spaces: [" !*.ext1", " !*.ext3 "]', function (t) { + t.plan(1); + readdirp(opts( { fileFilter: [ ' !*.ext1', ' !*.ext3' ] } ), function (err, res) { + t.equals(res.files.length, totalFiles - ext1Files - ext3Files, 'all but ext1 and ext3 files'); + t.end(); + }) + }) + + t.test('\n# ** glob pattern', function (t) { + t.plan(1); + readdirp(opts( { fileFilter: '**/*.ext1' } ), function (err, res) { + t.equals(res.files.length, ext1Files, 'ignores ** in **/*.ext1 -> only *.ext1 files'); + t.end(); + }) + }) +}) + +test('\n\nreading root using function filter', function (t) { + t.test('\n# file filter -> "contains root_dir2"', function (t) { + t.plan(1); + readdirp( + opts( { fileFilter: function (fi) { return fi.name.indexOf('root_dir2') >= 0; } }) + , function (err, res) { + t.equals(res.files.length, rootDir2Files, 'all rootDir2Files'); + t.end(); + } + ) + }) + + t.test('\n# directory filter -> "name has length 9"', function (t) { + t.plan(1); + readdirp( + opts( { directoryFilter: function (di) { return di.name.length === 9; } }) + , function (err, res) { + t.equals(res.directories.length, nameHasLength9Dirs, 'all all dirs with name length 9'); + t.end(); + } + ) + }) +}) + +test('\nreading root specifying maximum depth', function (t) { + t.test('\n# depth 1', function (t) { + t.plan(1); + readdirp(opts( { depth: 1 } ), function (err, res) { + t.equals(res.files.length, depth1Files, 'does not return files at depth 2'); + }) + }) +}) + +test('\nreading root with no recursion', function (t) { + t.test('\n# depth 0', function (t) { + t.plan(1); + readdirp(opts( { depth: 0 } ), function (err, res) { + t.equals(res.files.length, depth0Files, 'does not return files at depth 0'); + }) + }) +}) + +test('\nprogress callbacks', function (t) { + t.plan(2); + + var pluckName = function(fi) { return fi.name; } + , processedFiles = []; + + readdirp( + opts() + , function(fi) { + processedFiles.push(fi); + } + , function (err, res) { + t.equals(processedFiles.length, res.files.length, 'calls back for each file processed'); + t.deepEquals(processedFiles.map(pluckName).sort(),res.files.map(pluckName).sort(), 'same file names'); + t.end(); + } + ) +}) + +test('resolving of name, full and relative paths', function (t) { + var expected = { + name : 'root_dir1_file1.ext1' + , parentDirName : 'root_dir1' + , path : 'root_dir1/root_dir1_file1.ext1' + , fullPath : 'test/bed/root_dir1/root_dir1_file1.ext1' + } + , opts = [ + { root: './bed' , prefix: '' } + , { root: './bed/' , prefix: '' } + , { root: 'bed' , prefix: '' } + , { root: 'bed/' , prefix: '' } + , { root: '../test/bed/' , prefix: '' } + , { root: '.' , prefix: 'bed' } + ] + t.plan(opts.length); + + opts.forEach(function (op) { + op.fileFilter = 'root_dir1_file1.ext1'; + + t.test('\n' + util.inspect(op), function (t) { + t.plan(4); + + readdirp (op, function(err, res) { + t.equals(res.files[0].name, expected.name, 'correct name'); + t.equals(res.files[0].path, path.join(op.prefix, expected.path), 'correct path'); + }) + + fs.realpath(op.root, function(err, fullRoot) { + readdirp (op, function(err, res) { + t.equals( + res.files[0].fullParentDir + , path.join(fullRoot, op.prefix, expected.parentDirName) + , 'correct parentDir' + ); + t.equals( + res.files[0].fullPath + , path.join(fullRoot, op.prefix, expected.parentDirName, expected.name) + , 'correct fullPath' + ); + }) + }) + }) + }) +}) + + diff --git a/node_modules/regenerate/LICENSE-MIT.txt b/node_modules/regenerate/LICENSE-MIT.txt new file mode 100644 index 000000000..a41e0a7ef --- /dev/null +++ b/node_modules/regenerate/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/regenerate/README.md b/node_modules/regenerate/README.md new file mode 100644 index 000000000..c4d5e3e26 --- /dev/null +++ b/node_modules/regenerate/README.md @@ -0,0 +1,344 @@ +# Regenerate [![Build status](https://travis-ci.org/mathiasbynens/regenerate.svg?branch=master)](https://travis-ci.org/mathiasbynens/regenerate) [![Code coverage status](https://img.shields.io/codecov/c/github/mathiasbynens/regenerate.svg)](https://codecov.io/gh/mathiasbynens/regenerate) [![Dependency status](https://gemnasium.com/mathiasbynens/regenerate.svg)](https://gemnasium.com/mathiasbynens/regenerate) + +_Regenerate_ is a Unicode-aware regex generator for JavaScript. It allows you to easily generate ES5-compatible regular expressions based on a given set of Unicode symbols or code points. (This is trickier than you might think, because of [how JavaScript deals with astral symbols](https://mathiasbynens.be/notes/javascript-unicode).) + +## Installation + +Via [npm](https://npmjs.org/): + +```bash +npm install regenerate +``` + +Via [Bower](http://bower.io/): + +```bash +bower install regenerate +``` + +Via [Component](https://github.com/component/component): + +```bash +component install mathiasbynens/regenerate +``` + +In a browser: + +```html + +``` + +In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), and [RingoJS ≥ v0.8.0](http://ringojs.org/): + +```js +var regenerate = require('regenerate'); +``` + +In [Narwhal](http://narwhaljs.org/) and [RingoJS ≤ v0.7.0](http://ringojs.org/): + +```js +var regenerate = require('regenerate').regenerate; +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('regenerate.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'regenerate': 'path/to/regenerate' + } + }, + ['regenerate'], + function(regenerate) { + console.log(regenerate); + } +); +``` + +## API + +### `regenerate(value1, value2, value3, ...)` + +The main Regenerate function. Calling this function creates a new set that gets a chainable API. + +```js +var set = regenerate() + .addRange(0x60, 0x69) // add U+0060 to U+0069 + .remove(0x62, 0x64) // remove U+0062 and U+0064 + .add(0x1D306); // add U+1D306 +set.valueOf(); +// → [0x60, 0x61, 0x63, 0x65, 0x66, 0x67, 0x68, 0x69, 0x1D306] +set.toString(); +// → '[`ace-i]|\\uD834\\uDF06' +set.toRegExp(); +// → /[`ace-i]|\uD834\uDF06/ +``` + +Any arguments passed to `regenerate()` will be added to the set right away. Both code points (numbers) and symbols (strings consisting of a single Unicode symbol) are accepted, as well as arrays containing values of these types. + +```js +regenerate(0x1D306, 'A', '©', 0x2603).toString(); +// → '[A\\xA9\\u2603]|\\uD834\\uDF06' + +var items = [0x1D306, 'A', '©', 0x2603]; +regenerate(items).toString(); +// → '[A\\xA9\\u2603]|\\uD834\\uDF06' +``` + +### `regenerate.prototype.add(value1, value2, value3, ...)` + +Any arguments passed to `add()` are added to the set. Both code points (numbers) and symbols (strings consisting of a single Unicode symbol) are accepted, as well as arrays containing values of these types. + +```js +regenerate().add(0x1D306, 'A', '©', 0x2603).toString(); +// → '[A\\xA9\\u2603]|\\uD834\\uDF06' + +var items = [0x1D306, 'A', '©', 0x2603]; +regenerate().add(items).toString(); +// → '[A\\xA9\\u2603]|\\uD834\\uDF06' +``` + +It’s also possible to pass in a Regenerate instance. Doing so adds all code points in that instance to the current set. + +```js +var set = regenerate(0x1D306, 'A'); +regenerate().add('©', 0x2603).add(set).toString(); +// → '[A\\xA9\\u2603]|\\uD834\\uDF06' +``` + +Note that the initial call to `regenerate()` acts like `add()`. This allows you to create a new Regenerate instance and add some code points to it in one go: + +```js +regenerate(0x1D306, 'A', '©', 0x2603).toString(); +// → '[A\\xA9\\u2603]|\\uD834\\uDF06' +``` + +### `regenerate.prototype.remove(value1, value2, value3, ...)` + +Any arguments passed to `remove()` are removed to the set. Both code points (numbers) and symbols (strings consisting of a single Unicode symbol) are accepted, as well as arrays containing values of these types. + +```js +regenerate(0x1D306, 'A', '©', 0x2603).remove('☃').toString(); +// → '[A\\xA9]|\\uD834\\uDF06' +``` + +It’s also possible to pass in a Regenerate instance. Doing so removes all code points in that instance from the current set. + +```js +var set = regenerate('☃'); +regenerate(0x1D306, 'A', '©', 0x2603).remove(set).toString(); +// → '[A\\xA9]|\\uD834\\uDF06' +``` + +### `regenerate.prototype.addRange(start, end)` + +Adds a range of code points from `start` to `end` (inclusive) to the set. Both code points (numbers) and symbols (strings consisting of a single Unicode symbol) are accepted. + +```js +regenerate(0x1D306).addRange(0x00, 0xFF).toString(16); +// → '[\\0-\\xFF]|\\uD834\\uDF06' + +regenerate().addRange('A', 'z').toString(); +// → '[A-z]' +``` + +### `regenerate.prototype.removeRange(start, end)` + +Removes a range of code points from `start` to `end` (inclusive) from the set. Both code points (numbers) and symbols (strings consisting of a single Unicode symbol) are accepted. + +```js +regenerate() + .addRange(0x000000, 0x10FFFF) // add all Unicode code points + .removeRange('A', 'z') // remove all symbols from `A` to `z` + .toString(); +// → '[\\0-@\\{-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]' + +regenerate() + .addRange(0x000000, 0x10FFFF) // add all Unicode code points + .removeRange(0x0041, 0x007A) // remove all code points from U+0041 to U+007A + .toString(); +// → '[\\0-@\\{-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]' +``` + +### `regenerate.prototype.intersection(codePoints)` + +Removes any code points from the set that are not present in both the set and the given `codePoints` array. `codePoints` must be an array of numeric code point values, i.e. numbers. + +```js +regenerate() + .addRange(0x00, 0xFF) // add extended ASCII code points + .intersection([0x61, 0x69]) // remove all code points from the set except for these + .toString(); +// → '[ai]' +``` + +Instead of the `codePoints` array, it’s also possible to pass in a Regenerate instance. + +```js +var whitelist = regenerate(0x61, 0x69); + +regenerate() + .addRange(0x00, 0xFF) // add extended ASCII code points + .intersection(whitelist) // remove all code points from the set except for those in the `whitelist` set + .toString(); +// → '[ai]' +``` + +### `regenerate.prototype.contains(value)` + +Returns `true` if the given value is part of the set, and `false` otherwise. Both code points (numbers) and symbols (strings consisting of a single Unicode symbol) are accepted. + +```js +var set = regenerate().addRange(0x00, 0xFF); +set.contains('A'); +// → true +set.contains(0x1D306); +// → false +``` + +### `regenerate.prototype.clone()` + +Returns a clone of the current code point set. Any actions performed on the clone won’t mutate the original set. + +```js +var setA = regenerate(0x1D306); +var setB = setA.clone().add(0x1F4A9); +setA.toArray(); +// → [0x1D306] +setB.toArray(); +// → [0x1D306, 0x1F4A9] +``` + +### `regenerate.prototype.toString(options)` + +Returns a string representing (part of) a regular expression that matches all the symbols mapped to the code points within the set. + +```js +regenerate(0x1D306, 0x1F4A9).toString(); +// → '\\uD834\\uDF06|\\uD83D\\uDCA9' +``` + +If the `bmpOnly` property of the optional `options` object is set to `true`, the output matches surrogates individually, regardless of whether they’re lone surrogates or just part of a surrogate pair. This simplifies the output, but it can only be used in case you’re certain the strings it will be used on don’t contain any astral symbols. + +```js +var highSurrogates = regenerate().addRange(0xD800, 0xDBFF); +highSurrogates.toString(); +// → '[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])' +highSurrogates.toString({ 'bmpOnly': true }); +// → '[\\uD800-\\uDBFF]' + +var lowSurrogates = regenerate().addRange(0xDC00, 0xDFFF); +lowSurrogates.toString(); +// → '(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]' +lowSurrogates.toString({ 'bmpOnly': true }); +// → '[\\uDC00-\\uDFFF]' +``` + +Note that lone low surrogates cannot be matched accurately using regular expressions in JavaScript. Regenerate’s output makes a best-effort approach but [there can be false negatives in this regard](https://github.com/mathiasbynens/regenerate/issues/28#issuecomment-72224808). + +If the `hasUnicodeFlag` property of the optional `options` object is set to `true`, the output makes use of Unicode code point escapes (`\u{…}`) where applicable. This simplifies the output at the cost of compatibility and portability, since it means the output can only be used as a pattern in a regular expression with [the ES6 `u` flag](https://mathiasbynens.be/notes/es6-unicode-regex) enabled. + +```js +var set = regenerate().addRange(0x0, 0x10FFFF); + +set.toString(); +// → '[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]'' + +set.toString({ 'hasUnicodeFlag': true }); +// → '[\\0-\\u{10FFFF}]' +``` + +### `regenerate.prototype.toRegExp(flags = '')` + +Returns a regular expression that matches all the symbols mapped to the code points within the set. Optionally, you can pass [flags](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Parameters) to be added to the regular expression. + +```js +var regex = regenerate(0x1D306, 0x1F4A9).toRegExp(); +// → /\uD834\uDF06|\uD83D\uDCA9/ +regex.test('𝌆'); +// → true +regex.test('A'); +// → false + +// With flags: +var regex = regenerate(0x1D306, 0x1F4A9).toRegExp('g'); +// → /\uD834\uDF06|\uD83D\uDCA9/g +``` + +**Note:** This probably shouldn’t be used. Regenerate is intended as a tool that is used as part of a build process, not at runtime. + +### `regenerate.prototype.valueOf()` or `regenerate.prototype.toArray()` + +Returns a sorted array of unique code points in the set. + +```js +regenerate(0x1D306) + .addRange(0x60, 0x65) + .add(0x59, 0x60) // note: 0x59 is added after 0x65, and 0x60 is a duplicate + .valueOf(); +// → [0x59, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x1D306] +``` + +### `regenerate.version` + +A string representing the semantic version number. + +## Combine Regenerate with other libraries + +Regenerate gets even better when combined with other libraries such as [Punycode.js](https://mths.be/punycode). Here’s an example where [Punycode.js](https://mths.be/punycode) is used to convert a string into an array of code points, that is then passed on to Regenerate: + +```js +var regenerate = require('regenerate'); +var punycode = require('punycode'); + +var string = 'Lorem ipsum dolor sit amet.'; +// Get an array of all code points used in the string: +var codePoints = punycode.ucs2.decode(string); + +// Generate a regular expression that matches any of the symbols used in the string: +regenerate(codePoints).toString(); +// → '[ \\.Ladeilmopr-u]' +``` + +In ES6 you can do something similar with [`Array.from`](https://mths.be/array-from) which uses [the string’s iterator](https://mathiasbynens.be/notes/javascript-unicode#iterating-over-symbols) to split the given string into an array of strings that each contain a single symbol. [`regenerate()`](#regenerateprototypeaddvalue1-value2-value3-) accepts both strings and code points, remember? + +```js +var regenerate = require('regenerate'); + +var string = 'Lorem ipsum dolor sit amet.'; +// Get an array of all symbols used in the string: +var symbols = Array.from(string); + +// Generate a regular expression that matches any of the symbols used in the string: +regenerate(symbols).toString(); +// → '[ \\.Ladeilmopr-u]' +``` + +## Support + +Regenerate supports at least Chrome 27+, Firefox 3+, Safari 4+, Opera 10+, IE 6+, Node.js v0.10.0+, io.js v1.0.0+, Narwhal 0.3.2+, RingoJS 0.8+, PhantomJS 1.9.0+, and Rhino 1.7RC4+. + +## Unit tests & code coverage + +After cloning this repository, run `npm install` to install the dependencies needed for Regenerate development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +Regenerate is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/regenerate/package.json b/node_modules/regenerate/package.json new file mode 100644 index 000000000..0fd4c7bd0 --- /dev/null +++ b/node_modules/regenerate/package.json @@ -0,0 +1,65 @@ +{ + "_from": "regenerate@^1.2.1", + "_id": "regenerate@1.3.2", + "_inBundle": false, + "_integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "_location": "/regenerate", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "regenerate@^1.2.1", + "name": "regenerate", + "escapedName": "regenerate", + "rawSpec": "^1.2.1", + "saveSpec": null, + "fetchSpec": "^1.2.1" + }, + "_requiredBy": [ + "/regexpu-core" + ], + "_resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "_shasum": "d1941c67bad437e1be76433add5b385f95b19260", + "_spec": "regenerate@^1.2.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/regexpu-core", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bugs": { + "url": "https://github.com/mathiasbynens/regenerate/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Generate JavaScript-compatible regular expressions based on a given set of Unicode symbols or code points.", + "devDependencies": { + "codecov": "^1.0.1", + "grunt": "^0.4.5", + "grunt-shell": "^1.1.1", + "istanbul": "^0.4.3", + "qunit-extras": "^1.1.0", + "qunitjs": "~1.11.0", + "requirejs": "^2.1.15" + }, + "homepage": "https://mths.be/regenerate", + "keywords": [ + "regex", + "regexp", + "javascript", + "unicode", + "generator", + "tool" + ], + "license": "MIT", + "main": "regenerate.js", + "name": "regenerate", + "repository": { + "type": "git", + "url": "git+https://github.com/mathiasbynens/regenerate.git" + }, + "scripts": { + "cover": "istanbul cover --report html --verbose --dir coverage tests/tests.js", + "test": "node tests/tests.js" + }, + "version": "1.3.2" +} diff --git a/node_modules/regenerate/regenerate.js b/node_modules/regenerate/regenerate.js new file mode 100644 index 000000000..2393988ec --- /dev/null +++ b/node_modules/regenerate/regenerate.js @@ -0,0 +1,1199 @@ +/*! https://mths.be/regenerate v1.3.2 by @mathias | MIT license */ +;(function(root) { + + // Detect free variables `exports`. + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module`. + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js/io.js or Browserified code, + // and use it as `root`. + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + var ERRORS = { + 'rangeOrder': 'A range\u2019s `stop` value must be greater than or equal ' + + 'to the `start` value.', + 'codePointRange': 'Invalid code point value. Code points range from ' + + 'U+000000 to U+10FFFF.' + }; + + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-pairs + var HIGH_SURROGATE_MIN = 0xD800; + var HIGH_SURROGATE_MAX = 0xDBFF; + var LOW_SURROGATE_MIN = 0xDC00; + var LOW_SURROGATE_MAX = 0xDFFF; + + // In Regenerate output, `\0` is never preceded by `\` because we sort by + // code point value, so let’s keep this regular expression simple. + var regexNull = /\\x00([^0123456789]|$)/g; + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var extend = function(destination, source) { + var key; + for (key in source) { + if (hasOwnProperty.call(source, key)) { + destination[key] = source[key]; + } + } + return destination; + }; + + var forEach = function(array, callback) { + var index = -1; + var length = array.length; + while (++index < length) { + callback(array[index], index); + } + }; + + var toString = object.toString; + var isArray = function(value) { + return toString.call(value) == '[object Array]'; + }; + var isNumber = function(value) { + return typeof value == 'number' || + toString.call(value) == '[object Number]'; + }; + + // This assumes that `number` is a positive integer that `toString()`s nicely + // (which is the case for all code point values). + var zeroes = '0000'; + var pad = function(number, totalCharacters) { + var string = String(number); + return string.length < totalCharacters + ? (zeroes + string).slice(-totalCharacters) + : string; + }; + + var hex = function(number) { + return Number(number).toString(16).toUpperCase(); + }; + + var slice = [].slice; + + /*--------------------------------------------------------------------------*/ + + var dataFromCodePoints = function(codePoints) { + var index = -1; + var length = codePoints.length; + var max = length - 1; + var result = []; + var isStart = true; + var tmp; + var previous = 0; + while (++index < length) { + tmp = codePoints[index]; + if (isStart) { + result.push(tmp); + previous = tmp; + isStart = false; + } else { + if (tmp == previous + 1) { + if (index != max) { + previous = tmp; + continue; + } else { + isStart = true; + result.push(tmp + 1); + } + } else { + // End the previous range and start a new one. + result.push(previous + 1, tmp); + previous = tmp; + } + } + } + if (!isStart) { + result.push(tmp + 1); + } + return result; + }; + + var dataRemove = function(data, codePoint) { + // Iterate over the data per `(start, end)` pair. + var index = 0; + var start; + var end; + var length = data.length; + while (index < length) { + start = data[index]; + end = data[index + 1]; + if (codePoint >= start && codePoint < end) { + // Modify this pair. + if (codePoint == start) { + if (end == start + 1) { + // Just remove `start` and `end`. + data.splice(index, 2); + return data; + } else { + // Just replace `start` with a new value. + data[index] = codePoint + 1; + return data; + } + } else if (codePoint == end - 1) { + // Just replace `end` with a new value. + data[index + 1] = codePoint; + return data; + } else { + // Replace `[start, end]` with `[startA, endA, startB, endB]`. + data.splice(index, 2, start, codePoint, codePoint + 1, end); + return data; + } + } + index += 2; + } + return data; + }; + + var dataRemoveRange = function(data, rangeStart, rangeEnd) { + if (rangeEnd < rangeStart) { + throw Error(ERRORS.rangeOrder); + } + // Iterate over the data per `(start, end)` pair. + var index = 0; + var start; + var end; + while (index < data.length) { + start = data[index]; + end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive. + + // Exit as soon as no more matching pairs can be found. + if (start > rangeEnd) { + return data; + } + + // Check if this range pair is equal to, or forms a subset of, the range + // to be removed. + // E.g. we have `[0, 11, 40, 51]` and want to remove 0-10 → `[40, 51]`. + // E.g. we have `[40, 51]` and want to remove 0-100 → `[]`. + if (rangeStart <= start && rangeEnd >= end) { + // Remove this pair. + data.splice(index, 2); + continue; + } + + // Check if both `rangeStart` and `rangeEnd` are within the bounds of + // this pair. + // E.g. we have `[0, 11]` and want to remove 4-6 → `[0, 4, 7, 11]`. + if (rangeStart >= start && rangeEnd < end) { + if (rangeStart == start) { + // Replace `[start, end]` with `[startB, endB]`. + data[index] = rangeEnd + 1; + data[index + 1] = end + 1; + return data; + } + // Replace `[start, end]` with `[startA, endA, startB, endB]`. + data.splice(index, 2, start, rangeStart, rangeEnd + 1, end + 1); + return data; + } + + // Check if only `rangeStart` is within the bounds of this pair. + // E.g. we have `[0, 11]` and want to remove 4-20 → `[0, 4]`. + if (rangeStart >= start && rangeStart <= end) { + // Replace `end` with `rangeStart`. + data[index + 1] = rangeStart; + // Note: we cannot `return` just yet, in case any following pairs still + // contain matching code points. + // E.g. we have `[0, 11, 14, 31]` and want to remove 4-20 + // → `[0, 4, 21, 31]`. + } + + // Check if only `rangeEnd` is within the bounds of this pair. + // E.g. we have `[14, 31]` and want to remove 4-20 → `[21, 31]`. + else if (rangeEnd >= start && rangeEnd <= end) { + // Just replace `start`. + data[index] = rangeEnd + 1; + return data; + } + + index += 2; + } + return data; + }; + + var dataAdd = function(data, codePoint) { + // Iterate over the data per `(start, end)` pair. + var index = 0; + var start; + var end; + var lastIndex = null; + var length = data.length; + if (codePoint < 0x0 || codePoint > 0x10FFFF) { + throw RangeError(ERRORS.codePointRange); + } + while (index < length) { + start = data[index]; + end = data[index + 1]; + + // Check if the code point is already in the set. + if (codePoint >= start && codePoint < end) { + return data; + } + + if (codePoint == start - 1) { + // Just replace `start` with a new value. + data[index] = codePoint; + return data; + } + + // At this point, if `start` is `greater` than `codePoint`, insert a new + // `[start, end]` pair before the current pair, or after the current pair + // if there is a known `lastIndex`. + if (start > codePoint) { + data.splice( + lastIndex != null ? lastIndex + 2 : 0, + 0, + codePoint, + codePoint + 1 + ); + return data; + } + + if (codePoint == end) { + // Check if adding this code point causes two separate ranges to become + // a single range, e.g. `dataAdd([0, 4, 5, 10], 4)` → `[0, 10]`. + if (codePoint + 1 == data[index + 2]) { + data.splice(index, 4, start, data[index + 3]); + return data; + } + // Else, just replace `end` with a new value. + data[index + 1] = codePoint + 1; + return data; + } + lastIndex = index; + index += 2; + } + // The loop has finished; add the new pair to the end of the data set. + data.push(codePoint, codePoint + 1); + return data; + }; + + var dataAddData = function(dataA, dataB) { + // Iterate over the data per `(start, end)` pair. + var index = 0; + var start; + var end; + var data = dataA.slice(); + var length = dataB.length; + while (index < length) { + start = dataB[index]; + end = dataB[index + 1] - 1; + if (start == end) { + data = dataAdd(data, start); + } else { + data = dataAddRange(data, start, end); + } + index += 2; + } + return data; + }; + + var dataRemoveData = function(dataA, dataB) { + // Iterate over the data per `(start, end)` pair. + var index = 0; + var start; + var end; + var data = dataA.slice(); + var length = dataB.length; + while (index < length) { + start = dataB[index]; + end = dataB[index + 1] - 1; + if (start == end) { + data = dataRemove(data, start); + } else { + data = dataRemoveRange(data, start, end); + } + index += 2; + } + return data; + }; + + var dataAddRange = function(data, rangeStart, rangeEnd) { + if (rangeEnd < rangeStart) { + throw Error(ERRORS.rangeOrder); + } + if ( + rangeStart < 0x0 || rangeStart > 0x10FFFF || + rangeEnd < 0x0 || rangeEnd > 0x10FFFF + ) { + throw RangeError(ERRORS.codePointRange); + } + // Iterate over the data per `(start, end)` pair. + var index = 0; + var start; + var end; + var added = false; + var length = data.length; + while (index < length) { + start = data[index]; + end = data[index + 1]; + + if (added) { + // The range has already been added to the set; at this point, we just + // need to get rid of the following ranges in case they overlap. + + // Check if this range can be combined with the previous range. + if (start == rangeEnd + 1) { + data.splice(index - 1, 2); + return data; + } + + // Exit as soon as no more possibly overlapping pairs can be found. + if (start > rangeEnd) { + return data; + } + + // E.g. `[0, 11, 12, 16]` and we’ve added 5-15, so we now have + // `[0, 16, 12, 16]`. Remove the `12,16` part, as it lies within the + // `0,16` range that was previously added. + if (start >= rangeStart && start <= rangeEnd) { + // `start` lies within the range that was previously added. + + if (end > rangeStart && end - 1 <= rangeEnd) { + // `end` lies within the range that was previously added as well, + // so remove this pair. + data.splice(index, 2); + index -= 2; + // Note: we cannot `return` just yet, as there may still be other + // overlapping pairs. + } else { + // `start` lies within the range that was previously added, but + // `end` doesn’t. E.g. `[0, 11, 12, 31]` and we’ve added 5-15, so + // now we have `[0, 16, 12, 31]`. This must be written as `[0, 31]`. + // Remove the previously added `end` and the current `start`. + data.splice(index - 1, 2); + index -= 2; + } + + // Note: we cannot return yet. + } + + } + + else if (start == rangeEnd + 1) { + data[index] = rangeStart; + return data; + } + + // Check if a new pair must be inserted *before* the current one. + else if (start > rangeEnd) { + data.splice(index, 0, rangeStart, rangeEnd + 1); + return data; + } + + else if (rangeStart >= start && rangeStart < end && rangeEnd + 1 <= end) { + // The new range lies entirely within an existing range pair. No action + // needed. + return data; + } + + else if ( + // E.g. `[0, 11]` and you add 5-15 → `[0, 16]`. + (rangeStart >= start && rangeStart < end) || + // E.g. `[0, 3]` and you add 3-6 → `[0, 7]`. + end == rangeStart + ) { + // Replace `end` with the new value. + data[index + 1] = rangeEnd + 1; + // Make sure the next range pair doesn’t overlap, e.g. `[0, 11, 12, 14]` + // and you add 5-15 → `[0, 16]`, i.e. remove the `12,14` part. + added = true; + // Note: we cannot `return` just yet. + } + + else if (rangeStart <= start && rangeEnd + 1 >= end) { + // The new range is a superset of the old range. + data[index] = rangeStart; + data[index + 1] = rangeEnd + 1; + added = true; + } + + index += 2; + } + // The loop has finished without doing anything; add the new pair to the end + // of the data set. + if (!added) { + data.push(rangeStart, rangeEnd + 1); + } + return data; + }; + + var dataContains = function(data, codePoint) { + var index = 0; + var length = data.length; + // Exit early if `codePoint` is not within `data`’s overall range. + var start = data[index]; + var end = data[length - 1]; + if (length >= 2) { + if (codePoint < start || codePoint > end) { + return false; + } + } + // Iterate over the data per `(start, end)` pair. + while (index < length) { + start = data[index]; + end = data[index + 1]; + if (codePoint >= start && codePoint < end) { + return true; + } + index += 2; + } + return false; + }; + + var dataIntersection = function(data, codePoints) { + var index = 0; + var length = codePoints.length; + var codePoint; + var result = []; + while (index < length) { + codePoint = codePoints[index]; + if (dataContains(data, codePoint)) { + result.push(codePoint); + } + ++index; + } + return dataFromCodePoints(result); + }; + + var dataIsEmpty = function(data) { + return !data.length; + }; + + var dataIsSingleton = function(data) { + // Check if the set only represents a single code point. + return data.length == 2 && data[0] + 1 == data[1]; + }; + + var dataToArray = function(data) { + // Iterate over the data per `(start, end)` pair. + var index = 0; + var start; + var end; + var result = []; + var length = data.length; + while (index < length) { + start = data[index]; + end = data[index + 1]; + while (start < end) { + result.push(start); + ++start; + } + index += 2; + } + return result; + }; + + /*--------------------------------------------------------------------------*/ + + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var floor = Math.floor; + var highSurrogate = function(codePoint) { + return parseInt( + floor((codePoint - 0x10000) / 0x400) + HIGH_SURROGATE_MIN, + 10 + ); + }; + + var lowSurrogate = function(codePoint) { + return parseInt( + (codePoint - 0x10000) % 0x400 + LOW_SURROGATE_MIN, + 10 + ); + }; + + var stringFromCharCode = String.fromCharCode; + var codePointToString = function(codePoint) { + var string; + // https://mathiasbynens.be/notes/javascript-escapes#single + // Note: the `\b` escape sequence for U+0008 BACKSPACE in strings has a + // different meaning in regular expressions (word boundary), so it cannot + // be used here. + if (codePoint == 0x09) { + string = '\\t'; + } + // Note: IE < 9 treats `'\v'` as `'v'`, so avoid using it. + // else if (codePoint == 0x0B) { + // string = '\\v'; + // } + else if (codePoint == 0x0A) { + string = '\\n'; + } + else if (codePoint == 0x0C) { + string = '\\f'; + } + else if (codePoint == 0x0D) { + string = '\\r'; + } + else if (codePoint == 0x5C) { + string = '\\\\'; + } + else if ( + codePoint == 0x24 || + (codePoint >= 0x28 && codePoint <= 0x2B) || + codePoint == 0x2D || codePoint == 0x2E || codePoint == 0x3F || + (codePoint >= 0x5B && codePoint <= 0x5E) || + (codePoint >= 0x7B && codePoint <= 0x7D) + ) { + // The code point maps to an unsafe printable ASCII character; + // backslash-escape it. Here’s the list of those symbols: + // + // $()*+-.?[\]^{|} + // + // See #7 for more info. + string = '\\' + stringFromCharCode(codePoint); + } + else if (codePoint >= 0x20 && codePoint <= 0x7E) { + // The code point maps to one of these printable ASCII symbols + // (including the space character): + // + // !"#%&',/0123456789:;<=>@ABCDEFGHIJKLMNO + // PQRSTUVWXYZ_`abcdefghijklmnopqrstuvwxyz~ + // + // These can safely be used directly. + string = stringFromCharCode(codePoint); + } + else if (codePoint <= 0xFF) { + // https://mathiasbynens.be/notes/javascript-escapes#hexadecimal + string = '\\x' + pad(hex(codePoint), 2); + } + else { // `codePoint <= 0xFFFF` holds true. + // https://mathiasbynens.be/notes/javascript-escapes#unicode + string = '\\u' + pad(hex(codePoint), 4); + } + + // There’s no need to account for astral symbols / surrogate pairs here, + // since `codePointToString` is private and only used for BMP code points. + // But if that’s what you need, just add an `else` block with this code: + // + // string = '\\u' + pad(hex(highSurrogate(codePoint)), 4) + // + '\\u' + pad(hex(lowSurrogate(codePoint)), 4); + + return string; + }; + + var codePointToStringUnicode = function(codePoint) { + if (codePoint <= 0xFFFF) { + return codePointToString(codePoint); + } + return '\\u{' + codePoint.toString(16).toUpperCase() + '}'; + }; + + var symbolToCodePoint = function(symbol) { + var length = symbol.length; + var first = symbol.charCodeAt(0); + var second; + if ( + first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && + length > 1 // There is a next code unit. + ) { + // `first` is a high surrogate, and there is a next character. Assume + // it’s a low surrogate (else it’s invalid usage of Regenerate anyway). + second = symbol.charCodeAt(1); + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - HIGH_SURROGATE_MIN) * 0x400 + + second - LOW_SURROGATE_MIN + 0x10000; + } + return first; + }; + + var createBMPCharacterClasses = function(data) { + // Iterate over the data per `(start, end)` pair. + var result = ''; + var index = 0; + var start; + var end; + var length = data.length; + if (dataIsSingleton(data)) { + return codePointToString(data[0]); + } + while (index < length) { + start = data[index]; + end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive. + if (start == end) { + result += codePointToString(start); + } else if (start + 1 == end) { + result += codePointToString(start) + codePointToString(end); + } else { + result += codePointToString(start) + '-' + codePointToString(end); + } + index += 2; + } + return '[' + result + ']'; + }; + + var createUnicodeCharacterClasses = function(data) { + // Iterate over the data per `(start, end)` pair. + var result = ''; + var index = 0; + var start; + var end; + var length = data.length; + if (dataIsSingleton(data)) { + return codePointToStringUnicode(data[0]); + } + while (index < length) { + start = data[index]; + end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive. + if (start == end) { + result += codePointToStringUnicode(start); + } else if (start + 1 == end) { + result += codePointToStringUnicode(start) + codePointToStringUnicode(end); + } else { + result += codePointToStringUnicode(start) + '-' + codePointToStringUnicode(end); + } + index += 2; + } + return '[' + result + ']'; + }; + + var splitAtBMP = function(data) { + // Iterate over the data per `(start, end)` pair. + var loneHighSurrogates = []; + var loneLowSurrogates = []; + var bmp = []; + var astral = []; + var index = 0; + var start; + var end; + var length = data.length; + while (index < length) { + start = data[index]; + end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive. + + if (start < HIGH_SURROGATE_MIN) { + + // The range starts and ends before the high surrogate range. + // E.g. (0, 0x10). + if (end < HIGH_SURROGATE_MIN) { + bmp.push(start, end + 1); + } + + // The range starts before the high surrogate range and ends within it. + // E.g. (0, 0xD855). + if (end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX) { + bmp.push(start, HIGH_SURROGATE_MIN); + loneHighSurrogates.push(HIGH_SURROGATE_MIN, end + 1); + } + + // The range starts before the high surrogate range and ends in the low + // surrogate range. E.g. (0, 0xDCFF). + if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) { + bmp.push(start, HIGH_SURROGATE_MIN); + loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1); + loneLowSurrogates.push(LOW_SURROGATE_MIN, end + 1); + } + + // The range starts before the high surrogate range and ends after the + // low surrogate range. E.g. (0, 0x10FFFF). + if (end > LOW_SURROGATE_MAX) { + bmp.push(start, HIGH_SURROGATE_MIN); + loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1); + loneLowSurrogates.push(LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1); + if (end <= 0xFFFF) { + bmp.push(LOW_SURROGATE_MAX + 1, end + 1); + } else { + bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1); + astral.push(0xFFFF + 1, end + 1); + } + } + + } else if (start >= HIGH_SURROGATE_MIN && start <= HIGH_SURROGATE_MAX) { + + // The range starts and ends in the high surrogate range. + // E.g. (0xD855, 0xD866). + if (end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX) { + loneHighSurrogates.push(start, end + 1); + } + + // The range starts in the high surrogate range and ends in the low + // surrogate range. E.g. (0xD855, 0xDCFF). + if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) { + loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1); + loneLowSurrogates.push(LOW_SURROGATE_MIN, end + 1); + } + + // The range starts in the high surrogate range and ends after the low + // surrogate range. E.g. (0xD855, 0x10FFFF). + if (end > LOW_SURROGATE_MAX) { + loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1); + loneLowSurrogates.push(LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1); + if (end <= 0xFFFF) { + bmp.push(LOW_SURROGATE_MAX + 1, end + 1); + } else { + bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1); + astral.push(0xFFFF + 1, end + 1); + } + } + + } else if (start >= LOW_SURROGATE_MIN && start <= LOW_SURROGATE_MAX) { + + // The range starts and ends in the low surrogate range. + // E.g. (0xDCFF, 0xDDFF). + if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) { + loneLowSurrogates.push(start, end + 1); + } + + // The range starts in the low surrogate range and ends after the low + // surrogate range. E.g. (0xDCFF, 0x10FFFF). + if (end > LOW_SURROGATE_MAX) { + loneLowSurrogates.push(start, LOW_SURROGATE_MAX + 1); + if (end <= 0xFFFF) { + bmp.push(LOW_SURROGATE_MAX + 1, end + 1); + } else { + bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1); + astral.push(0xFFFF + 1, end + 1); + } + } + + } else if (start > LOW_SURROGATE_MAX && start <= 0xFFFF) { + + // The range starts and ends after the low surrogate range. + // E.g. (0xFFAA, 0x10FFFF). + if (end <= 0xFFFF) { + bmp.push(start, end + 1); + } else { + bmp.push(start, 0xFFFF + 1); + astral.push(0xFFFF + 1, end + 1); + } + + } else { + + // The range starts and ends in the astral range. + astral.push(start, end + 1); + + } + + index += 2; + } + return { + 'loneHighSurrogates': loneHighSurrogates, + 'loneLowSurrogates': loneLowSurrogates, + 'bmp': bmp, + 'astral': astral + }; + }; + + var optimizeSurrogateMappings = function(surrogateMappings) { + var result = []; + var tmpLow = []; + var addLow = false; + var mapping; + var nextMapping; + var highSurrogates; + var lowSurrogates; + var nextHighSurrogates; + var nextLowSurrogates; + var index = -1; + var length = surrogateMappings.length; + while (++index < length) { + mapping = surrogateMappings[index]; + nextMapping = surrogateMappings[index + 1]; + if (!nextMapping) { + result.push(mapping); + continue; + } + highSurrogates = mapping[0]; + lowSurrogates = mapping[1]; + nextHighSurrogates = nextMapping[0]; + nextLowSurrogates = nextMapping[1]; + + // Check for identical high surrogate ranges. + tmpLow = lowSurrogates; + while ( + nextHighSurrogates && + highSurrogates[0] == nextHighSurrogates[0] && + highSurrogates[1] == nextHighSurrogates[1] + ) { + // Merge with the next item. + if (dataIsSingleton(nextLowSurrogates)) { + tmpLow = dataAdd(tmpLow, nextLowSurrogates[0]); + } else { + tmpLow = dataAddRange( + tmpLow, + nextLowSurrogates[0], + nextLowSurrogates[1] - 1 + ); + } + ++index; + mapping = surrogateMappings[index]; + highSurrogates = mapping[0]; + lowSurrogates = mapping[1]; + nextMapping = surrogateMappings[index + 1]; + nextHighSurrogates = nextMapping && nextMapping[0]; + nextLowSurrogates = nextMapping && nextMapping[1]; + addLow = true; + } + result.push([ + highSurrogates, + addLow ? tmpLow : lowSurrogates + ]); + addLow = false; + } + return optimizeByLowSurrogates(result); + }; + + var optimizeByLowSurrogates = function(surrogateMappings) { + if (surrogateMappings.length == 1) { + return surrogateMappings; + } + var index = -1; + var innerIndex = -1; + while (++index < surrogateMappings.length) { + var mapping = surrogateMappings[index]; + var lowSurrogates = mapping[1]; + var lowSurrogateStart = lowSurrogates[0]; + var lowSurrogateEnd = lowSurrogates[1]; + innerIndex = index; // Note: the loop starts at the next index. + while (++innerIndex < surrogateMappings.length) { + var otherMapping = surrogateMappings[innerIndex]; + var otherLowSurrogates = otherMapping[1]; + var otherLowSurrogateStart = otherLowSurrogates[0]; + var otherLowSurrogateEnd = otherLowSurrogates[1]; + if ( + lowSurrogateStart == otherLowSurrogateStart && + lowSurrogateEnd == otherLowSurrogateEnd + ) { + // Add the code points in the other item to this one. + if (dataIsSingleton(otherMapping[0])) { + mapping[0] = dataAdd(mapping[0], otherMapping[0][0]); + } else { + mapping[0] = dataAddRange( + mapping[0], + otherMapping[0][0], + otherMapping[0][1] - 1 + ); + } + // Remove the other, now redundant, item. + surrogateMappings.splice(innerIndex, 1); + --innerIndex; + } + } + } + return surrogateMappings; + }; + + var surrogateSet = function(data) { + // Exit early if `data` is an empty set. + if (!data.length) { + return []; + } + + // Iterate over the data per `(start, end)` pair. + var index = 0; + var start; + var end; + var startHigh; + var startLow; + var endHigh; + var endLow; + var surrogateMappings = []; + var length = data.length; + while (index < length) { + start = data[index]; + end = data[index + 1] - 1; + + startHigh = highSurrogate(start); + startLow = lowSurrogate(start); + endHigh = highSurrogate(end); + endLow = lowSurrogate(end); + + var startsWithLowestLowSurrogate = startLow == LOW_SURROGATE_MIN; + var endsWithHighestLowSurrogate = endLow == LOW_SURROGATE_MAX; + var complete = false; + + // Append the previous high-surrogate-to-low-surrogate mappings. + // Step 1: `(startHigh, startLow)` to `(startHigh, LOW_SURROGATE_MAX)`. + if ( + startHigh == endHigh || + startsWithLowestLowSurrogate && endsWithHighestLowSurrogate + ) { + surrogateMappings.push([ + [startHigh, endHigh + 1], + [startLow, endLow + 1] + ]); + complete = true; + } else { + surrogateMappings.push([ + [startHigh, startHigh + 1], + [startLow, LOW_SURROGATE_MAX + 1] + ]); + } + + // Step 2: `(startHigh + 1, LOW_SURROGATE_MIN)` to + // `(endHigh - 1, LOW_SURROGATE_MAX)`. + if (!complete && startHigh + 1 < endHigh) { + if (endsWithHighestLowSurrogate) { + // Combine step 2 and step 3. + surrogateMappings.push([ + [startHigh + 1, endHigh + 1], + [LOW_SURROGATE_MIN, endLow + 1] + ]); + complete = true; + } else { + surrogateMappings.push([ + [startHigh + 1, endHigh], + [LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1] + ]); + } + } + + // Step 3. `(endHigh, LOW_SURROGATE_MIN)` to `(endHigh, endLow)`. + if (!complete) { + surrogateMappings.push([ + [endHigh, endHigh + 1], + [LOW_SURROGATE_MIN, endLow + 1] + ]); + } + + index += 2; + } + + // The format of `surrogateMappings` is as follows: + // + // [ surrogateMapping1, surrogateMapping2 ] + // + // i.e.: + // + // [ + // [ highSurrogates1, lowSurrogates1 ], + // [ highSurrogates2, lowSurrogates2 ] + // ] + return optimizeSurrogateMappings(surrogateMappings); + }; + + var createSurrogateCharacterClasses = function(surrogateMappings) { + var result = []; + forEach(surrogateMappings, function(surrogateMapping) { + var highSurrogates = surrogateMapping[0]; + var lowSurrogates = surrogateMapping[1]; + result.push( + createBMPCharacterClasses(highSurrogates) + + createBMPCharacterClasses(lowSurrogates) + ); + }); + return result.join('|'); + }; + + var createCharacterClassesFromData = function(data, bmpOnly, hasUnicodeFlag) { + if (hasUnicodeFlag) { + return createUnicodeCharacterClasses(data); + } + var result = []; + + var parts = splitAtBMP(data); + var loneHighSurrogates = parts.loneHighSurrogates; + var loneLowSurrogates = parts.loneLowSurrogates; + var bmp = parts.bmp; + var astral = parts.astral; + var hasLoneHighSurrogates = !dataIsEmpty(loneHighSurrogates); + var hasLoneLowSurrogates = !dataIsEmpty(loneLowSurrogates); + + var surrogateMappings = surrogateSet(astral); + + if (bmpOnly) { + bmp = dataAddData(bmp, loneHighSurrogates); + hasLoneHighSurrogates = false; + bmp = dataAddData(bmp, loneLowSurrogates); + hasLoneLowSurrogates = false; + } + + if (!dataIsEmpty(bmp)) { + // The data set contains BMP code points that are not high surrogates + // needed for astral code points in the set. + result.push(createBMPCharacterClasses(bmp)); + } + if (surrogateMappings.length) { + // The data set contains astral code points; append character classes + // based on their surrogate pairs. + result.push(createSurrogateCharacterClasses(surrogateMappings)); + } + // https://gist.github.com/mathiasbynens/bbe7f870208abcfec860 + if (hasLoneHighSurrogates) { + result.push( + createBMPCharacterClasses(loneHighSurrogates) + + // Make sure the high surrogates aren’t part of a surrogate pair. + '(?![\\uDC00-\\uDFFF])' + ); + } + if (hasLoneLowSurrogates) { + result.push( + // It is not possible to accurately assert the low surrogates aren’t + // part of a surrogate pair, since JavaScript regular expressions do + // not support lookbehind. + '(?:[^\\uD800-\\uDBFF]|^)' + + createBMPCharacterClasses(loneLowSurrogates) + ); + } + return result.join('|'); + }; + + /*--------------------------------------------------------------------------*/ + + // `regenerate` can be used as a constructor (and new methods can be added to + // its prototype) but also as a regular function, the latter of which is the + // documented and most common usage. For that reason, it’s not capitalized. + var regenerate = function(value) { + if (arguments.length > 1) { + value = slice.call(arguments); + } + if (this instanceof regenerate) { + this.data = []; + return value ? this.add(value) : this; + } + return (new regenerate).add(value); + }; + + regenerate.version = '1.3.2'; + + var proto = regenerate.prototype; + extend(proto, { + 'add': function(value) { + var $this = this; + if (value == null) { + return $this; + } + if (value instanceof regenerate) { + // Allow passing other Regenerate instances. + $this.data = dataAddData($this.data, value.data); + return $this; + } + if (arguments.length > 1) { + value = slice.call(arguments); + } + if (isArray(value)) { + forEach(value, function(item) { + $this.add(item); + }); + return $this; + } + $this.data = dataAdd( + $this.data, + isNumber(value) ? value : symbolToCodePoint(value) + ); + return $this; + }, + 'remove': function(value) { + var $this = this; + if (value == null) { + return $this; + } + if (value instanceof regenerate) { + // Allow passing other Regenerate instances. + $this.data = dataRemoveData($this.data, value.data); + return $this; + } + if (arguments.length > 1) { + value = slice.call(arguments); + } + if (isArray(value)) { + forEach(value, function(item) { + $this.remove(item); + }); + return $this; + } + $this.data = dataRemove( + $this.data, + isNumber(value) ? value : symbolToCodePoint(value) + ); + return $this; + }, + 'addRange': function(start, end) { + var $this = this; + $this.data = dataAddRange($this.data, + isNumber(start) ? start : symbolToCodePoint(start), + isNumber(end) ? end : symbolToCodePoint(end) + ); + return $this; + }, + 'removeRange': function(start, end) { + var $this = this; + var startCodePoint = isNumber(start) ? start : symbolToCodePoint(start); + var endCodePoint = isNumber(end) ? end : symbolToCodePoint(end); + $this.data = dataRemoveRange( + $this.data, + startCodePoint, + endCodePoint + ); + return $this; + }, + 'intersection': function(argument) { + var $this = this; + // Allow passing other Regenerate instances. + // TODO: Optimize this by writing and using `dataIntersectionData()`. + var array = argument instanceof regenerate ? + dataToArray(argument.data) : + argument; + $this.data = dataIntersection($this.data, array); + return $this; + }, + 'contains': function(codePoint) { + return dataContains( + this.data, + isNumber(codePoint) ? codePoint : symbolToCodePoint(codePoint) + ); + }, + 'clone': function() { + var set = new regenerate; + set.data = this.data.slice(0); + return set; + }, + 'toString': function(options) { + var result = createCharacterClassesFromData( + this.data, + options ? options.bmpOnly : false, + options ? options.hasUnicodeFlag : false + ); + if (!result) { + // For an empty set, return something that can be inserted `/here/` to + // form a valid regular expression. Avoid `(?:)` since that matches the + // empty string. + return '[]'; + } + // Use `\0` instead of `\x00` where possible. + return result.replace(regexNull, '\\0$1'); + }, + 'toRegExp': function(flags) { + var pattern = this.toString( + flags && flags.indexOf('u') != -1 ? + { 'hasUnicodeFlag': true } : + null + ); + return RegExp(pattern, flags || ''); + }, + 'valueOf': function() { // Note: `valueOf` is aliased as `toArray`. + return dataToArray(this.data); + } + }); + + proto.toArray = proto.valueOf; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return regenerate; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = regenerate; + } else { // in Narwhal or RingoJS v0.7.0- + freeExports.regenerate = regenerate; + } + } else { // in Rhino or a web browser + root.regenerate = regenerate; + } + +}(this)); diff --git a/node_modules/regenerator-runtime/.npmignore b/node_modules/regenerator-runtime/.npmignore new file mode 100644 index 000000000..e216ae5e1 --- /dev/null +++ b/node_modules/regenerator-runtime/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/test diff --git a/node_modules/regenerator-runtime/README.md b/node_modules/regenerator-runtime/README.md new file mode 100644 index 000000000..d93386a30 --- /dev/null +++ b/node_modules/regenerator-runtime/README.md @@ -0,0 +1,31 @@ +# regenerator-runtime + +Standalone runtime for +[Regenerator](https://github.com/facebook/regenerator)-compiled generator +and `async` functions. + +To import the runtime as a module (recommended), either of the following +import styles will work: +```js +// CommonJS +const regeneratorRuntime = require("regenerator-runtime"); + +// ECMAScript 2015 +import regeneratorRuntime from "regenerator-runtime"; +``` + +To ensure that `regeneratorRuntime` is defined globally, either of the +following styles will work: +```js +// CommonJS +require("regenerator-runtime/runtime"); + +// ECMAScript 2015 +import "regenerator-runtime/runtime"; +``` + +To get the absolute file system path of `runtime.js`, evaluate the +following expression: +```js +require("regenerator-runtime/path").path +``` diff --git a/node_modules/regenerator-runtime/package.json b/node_modules/regenerator-runtime/package.json new file mode 100644 index 000000000..f8cafac75 --- /dev/null +++ b/node_modules/regenerator-runtime/package.json @@ -0,0 +1,46 @@ +{ + "_from": "regenerator-runtime@^0.11.0", + "_id": "regenerator-runtime@0.11.0", + "_inBundle": false, + "_integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "_location": "/regenerator-runtime", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "regenerator-runtime@^0.11.0", + "name": "regenerator-runtime", + "escapedName": "regenerator-runtime", + "rawSpec": "^0.11.0", + "saveSpec": null, + "fetchSpec": "^0.11.0" + }, + "_requiredBy": [ + "/babel-runtime" + ], + "_resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "_shasum": "7e54fe5b5ccd5d6624ea6255c3473be090b802e1", + "_spec": "regenerator-runtime@^0.11.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-runtime", + "author": { + "name": "Ben Newman", + "email": "bn@cs.stanford.edu" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Runtime for Regenerator-compiled generator and async functions.", + "keywords": [ + "regenerator", + "runtime", + "generator", + "async" + ], + "license": "MIT", + "main": "runtime-module.js", + "name": "regenerator-runtime", + "repository": { + "type": "git", + "url": "https://github.com/facebook/regenerator/tree/master/packages/regenerator-runtime" + }, + "version": "0.11.0" +} diff --git a/node_modules/regenerator-runtime/path.js b/node_modules/regenerator-runtime/path.js new file mode 100644 index 000000000..a450a7533 --- /dev/null +++ b/node_modules/regenerator-runtime/path.js @@ -0,0 +1,4 @@ +exports.path = require("path").join( + __dirname, + "runtime.js" +); diff --git a/node_modules/regenerator-runtime/runtime-module.js b/node_modules/regenerator-runtime/runtime-module.js new file mode 100644 index 000000000..57b655799 --- /dev/null +++ b/node_modules/regenerator-runtime/runtime-module.js @@ -0,0 +1,28 @@ +// This method of obtaining a reference to the global object needs to be +// kept identical to the way it is obtained in runtime.js +var g = (function() { return this })() || Function("return this")(); + +// Use `getOwnPropertyNames` because not all browsers support calling +// `hasOwnProperty` on the global `self` object in a worker. See #183. +var hadRuntime = g.regeneratorRuntime && + Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0; + +// Save the old regeneratorRuntime in case it needs to be restored later. +var oldRuntime = hadRuntime && g.regeneratorRuntime; + +// Force reevalutation of runtime.js. +g.regeneratorRuntime = undefined; + +module.exports = require("./runtime"); + +if (hadRuntime) { + // Restore the original runtime. + g.regeneratorRuntime = oldRuntime; +} else { + // Remove the global property added by runtime.js. + try { + delete g.regeneratorRuntime; + } catch(e) { + g.regeneratorRuntime = undefined; + } +} diff --git a/node_modules/regenerator-runtime/runtime.js b/node_modules/regenerator-runtime/runtime.js new file mode 100644 index 000000000..fb2ab5571 --- /dev/null +++ b/node_modules/regenerator-runtime/runtime.js @@ -0,0 +1,730 @@ +/** + * 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. + */ + +!(function(global) { + "use strict"; + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + var inModule = typeof module === "object"; + var runtime = global.regeneratorRuntime; + if (runtime) { + if (inModule) { + // If regeneratorRuntime is defined globally and we're in a module, + // make the exports object identical to regeneratorRuntime. + module.exports = runtime; + } + // Don't bother evaluating the rest of this file if the runtime was + // already defined globally. + return; + } + + // Define the runtime globally (as expected by generated code) as either + // module.exports (if we're in a module) or a new, empty object. + runtime = global.regeneratorRuntime = inModule ? module.exports : {}; + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + generator._invoke = makeInvokeMethod(innerFn, self, context); + + return generator; + } + runtime.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; + + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + + runtime.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + + runtime.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + runtime.awrap = function(arg) { + return { __await: arg }; + }; + + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return Promise.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. If the Promise is rejected, however, the + // result for this iteration will be rejected with the same + // reason. Note that rejections of yielded Promises are not + // thrown back into the generator function, as is the case + // when an awaited Promise is rejected. This difference in + // behavior between yield and await is important, because it + // allows the consumer to decide what to do with the yielded + // rejection (swallow it and continue, manually .throw it back + // into the generator, abandon iteration, whatever). With + // await, by contrast, there is no opportunity to examine the + // rejection reason outside the generator function, so the + // only option is to throw it from the await expression, and + // let the generator function handle the exception. + result.value = unwrapped; + resolve(result); + }, reject); + } + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + runtime.AsyncIterator = AsyncIterator; + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + runtime.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + + return runtime.isGeneratorFunction(outerFn) + ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined) { + // A .throw or .return when the delegate iterator has no .throw + // method always terminates the yield* loop. + context.delegate = null; + + if (context.method === "throw") { + if (delegate.iterator.return) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + return ContinueSentinel; + } + } + + context.method = "throw"; + context.arg = new TypeError( + "The iterator does not provide a 'throw' method"); + } + + return ContinueSentinel; + } + + var record = tryCatch(method, delegate.iterator, context.arg); + + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; + + // Resume execution at the desired location (see delegateYield). + context.next = delegate.nextLoc; + + // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + + } else { + // Re-yield the result returned by the delegate method. + return info; + } + + // The delegate iterator is finished, so forget it and continue with + // the outer generator. + context.delegate = null; + return ContinueSentinel; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + + Gp[toStringTagSymbol] = "Generator"; + + // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + Gp[iteratorSymbol] = function() { + return this; + }; + + Gp.toString = function() { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + runtime.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined; + next.done = true; + + return next; + }; + + return next.next = next; + } + } + + // Return an iterator with no values. + return { next: doneResult }; + } + runtime.values = values; + + function doneResult() { + return { value: undefined, done: true }; + } + + Context.prototype = { + constructor: Context, + + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + + this.method = "next"; + this.arg = undefined; + + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + + stop: function() { + this.done = true; + + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined; + } + + return !! caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined; + } + + return ContinueSentinel; + } + }; +})( + // In sloppy mode, unbound `this` refers to the global object, fallback to + // Function constructor if we're in global strict mode. That is sadly a form + // of indirect eval which violates Content Security Policy. + (function() { return this })() || Function("return this")() +); diff --git a/node_modules/regenerator-transform/.npmignore b/node_modules/regenerator-transform/.npmignore new file mode 100644 index 000000000..07e6e472c --- /dev/null +++ b/node_modules/regenerator-transform/.npmignore @@ -0,0 +1 @@ +/node_modules diff --git a/node_modules/regenerator-transform/README.md b/node_modules/regenerator-transform/README.md new file mode 100644 index 000000000..1b097923e --- /dev/null +++ b/node_modules/regenerator-transform/README.md @@ -0,0 +1,46 @@ +# regenerator-transform + +Transform async/generator functions with [regenerator](https://github.com/facebook/regenerator) + +## Installation + +```sh +$ npm install regenerator-transform +``` + +## Usage + +### Via `.babelrc` (Recommended) + +**.babelrc** + +```js +// without options +{ + "plugins": ["regenerator-transform"] +} +// with options +{ + "plugins": [ + ["regenerator-transform", { + asyncGenerators: false, // true by default + generators: false, // true by default + async: false // true by default + }] + ] +} +``` + +### Via CLI + +```sh +$ babel --plugins regenerator-transform script.js +``` + +### Via Node API + +```javascript +require("babel-core").transform("code", { + plugins: ["regenerator-transform"] +}); +``` diff --git a/node_modules/regenerator-transform/lib/emit.js b/node_modules/regenerator-transform/lib/emit.js new file mode 100644 index 000000000..6d3c4ec0b --- /dev/null +++ b/node_modules/regenerator-transform/lib/emit.js @@ -0,0 +1,996 @@ +"use strict"; + +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; /** + * 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. + */ + +function Emitter(contextId) { + _assert2.default.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); +} + +var 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); + var 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. + _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); +}; + +// 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); + + var 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); + + var negatedTest = void 0; + 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 () { + var self = this; + var cases = []; + var current = void 0; + + // 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. + 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; + } + }); + + // 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; + } + + 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, + // 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) { + 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); + + // 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 " + (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; + } + + // 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": + 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) { + // 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(); + + 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": + // Always save the discriminant into a temporary variable in case the + // test expressions overwrite values like context.sent. + var disc = self.emitAssign(self.makeTempVar(), self.explodeExpression(path.get("discriminant"))); + + after = loc(); + var defaultLoc = loc(); + var condition = defaultLoc; + var caseLocs = []; + + // If there are no cases, .cases might be undefined. + 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"); + util.replaceWithOrRemove(discriminant, 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) { + 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)); + + 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)); + } +}; + +var catchParamVisitor = { + Identifier: function Identifier(path, state) { + if (path.node.name === state.catchParamName && util.isReference(path)) { + util.replaceWithOrRemove(path, state.safeParam); + } + }, + + Scope: function Scope(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)) { + _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; +} + +// 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. + _assert2.default.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) { + var expr = path.node; + if (expr) { + t.assertExpression(expr); + } else { + return expr; + } + + var self = this; + var result = void 0; // Used optionally by several cases below. + var after = void 0; + + 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). + var 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) { + _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) { + // 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": + 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) { + // 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. + + var 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")); + + 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 = explodeViaTempVar(null, 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": + 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 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 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 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(); + 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 _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 " + (0, _stringify2.default)(expr.type)); + } +}; \ No newline at end of file diff --git a/node_modules/regenerator-transform/lib/hoist.js b/node_modules/regenerator-transform/lib/hoist.js new file mode 100644 index 000000000..8aff3f439 --- /dev/null +++ b/node_modules/regenerator-transform/lib/hoist.js @@ -0,0 +1,151 @@ +"use strict"; + +var _keys = require("babel-runtime/core-js/object/keys"); + +var _keys2 = _interopRequireDefault(_keys); + +var _babelTypes = require("babel-types"); + +var t = _interopRequireWildcard(_babelTypes); + +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 }; } + +/** + * 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 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); + + var vars = {}; + + function varDeclToExpr(vdec, includeIdentifiers) { + t.assertVariableDeclaration(vdec); + // TODO assert.equal(vdec.kind, "var"); + var 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 exit(path) { + var 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. + util.replaceWithOrRemove(path, t.expressionStatement(expr)); + } + + // Since the original node has been either removed or replaced, + // avoid traversing it any further. + path.skip(); + } + }, + + ForStatement: function ForStatement(path) { + var init = path.node.init; + if (t.isVariableDeclaration(init)) { + util.replaceWithOrRemove(path.get("init"), varDeclToExpr(init, false)); + } + }, + + ForXStatement: function ForXStatement(path) { + var left = path.get("left"); + if (left.isVariableDeclaration()) { + util.replaceWithOrRemove(left, 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()) { + // 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. + util.replaceWithOrRemove(path, assignment); + } + + // Don't hoist variables out of inner functions. + path.skip(); + }, + + FunctionExpression: function FunctionExpression(path) { + // Don't descend into nested function expressions. + path.skip(); + } + }); + + var paramNames = {}; + funPath.get("params").forEach(function (paramPath) { + var param = paramPath.node; + if (t.isIdentifier(param)) { + paramNames[param.name] = param; + } else { + // Variables declared by destructuring parameter patterns will be + // harmlessly re-declared. + } + }); + + 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; // Be sure to handle this case! + } + + return t.variableDeclaration("var", declarations); +}; \ No newline at end of file diff --git a/node_modules/regenerator-transform/lib/index.js b/node_modules/regenerator-transform/lib/index.js new file mode 100644 index 000000000..713417a05 --- /dev/null +++ b/node_modules/regenerator-transform/lib/index.js @@ -0,0 +1,22 @@ +"use strict"; + +exports.__esModule = true; + +exports.default = function (context) { + var plugin = { + visitor: require("./visit").visitor + }; + + // Some presets manually call child presets, but fail to pass along the + // context object. Out of an abundance of caution, we verify that it + // exists first to avoid causing unnecessary breaking changes. + var version = context && context.version; + + // The "name" property is not allowed in older versions of Babel (6.x) + // and will cause the plugin validator to throw an exception. + if (version && parseInt(version, 10) >= 7) { + plugin.name = "regenerator-transform"; + } + + return plugin; +}; \ No newline at end of file diff --git a/node_modules/regenerator-transform/lib/leap.js b/node_modules/regenerator-transform/lib/leap.js new file mode 100644 index 000000000..3f295c21c --- /dev/null +++ b/node_modules/regenerator-transform/lib/leap.js @@ -0,0 +1,183 @@ +"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); +} /** + * 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. + */ + +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; + } + + // Have to have one or the other (or both). + _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) { + // 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); +}; \ No newline at end of file diff --git a/node_modules/regenerator-transform/lib/meta.js b/node_modules/regenerator-transform/lib/meta.js new file mode 100644 index 000000000..20049f6dc --- /dev/null +++ b/node_modules/regenerator-transform/lib/meta.js @@ -0,0 +1,112 @@ +"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(); /** + * 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 hasOwn = Object.prototype.hasOwnProperty; + +function makePredicate(propertyName, knownTypes) { + function onlyChildren(node) { + t.assertNode(node); + + // Assume no side effects until we find out otherwise. + var result = false; + + function check(child) { + if (result) { + // Do nothing. + } 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]; + + // 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; +} + +var opaqueTypes = { + FunctionExpression: true, + ArrowFunctionExpression: true +}; + +// These types potentially have side effects regardless of what side +// effects their subexpressions have. +var 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. +var leapTypes = { + YieldExpression: true, + BreakStatement: true, + ContinueStatement: true, + ReturnStatement: true, + ThrowStatement: true +}; + +// All leap types are also side effect types. +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/node_modules/regenerator-transform/lib/replaceShorthandObjectMethod.js b/node_modules/regenerator-transform/lib/replaceShorthandObjectMethod.js new file mode 100644 index 000000000..82d905e74 --- /dev/null +++ b/node_modules/regenerator-transform/lib/replaceShorthandObjectMethod.js @@ -0,0 +1,80 @@ +"use strict"; + +exports.__esModule = true; +exports.default = replaceShorthandObjectMethod; + +var _babelTypes = require("babel-types"); + +var t = _interopRequireWildcard(_babelTypes); + +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; } } + +// this function converts a shorthand object generator method into a normal +// (non-shorthand) object property which is a generator function expression. for +// example, this: +// +// var foo = { +// *bar(baz) { return 5; } +// } +// +// should be replaced with: +// +// var foo = { +// bar: function*(baz) { return 5; } +// } +// +// to do this, it clones the parameter array and the body of the object generator +// method into a new FunctionExpression. +// +// this method can be passed any Function AST node path, and it will return +// either: +// a) the path that was passed in (iff the path did not need to be replaced) or +// b) the path of the new FunctionExpression that was created as a replacement +// (iff the path did need to be replaced) +// +// In either case, though, the caller can count on the fact that the return value +// is a Function AST node path. +// +// If this function is called with an AST node path that is not a Function (or with an +// argument that isn't an AST node path), it will throw an error. +function replaceShorthandObjectMethod(path) { + if (!path.node || !t.isFunction(path.node)) { + throw new Error("replaceShorthandObjectMethod can only be called on Function AST node paths."); + } + + // this function only replaces shorthand object methods (called ObjectMethod + // in Babel-speak). + if (!t.isObjectMethod(path.node)) { + return path; + } + + // this function only replaces generators. + if (!path.node.generator) { + return path; + } + + var parameters = path.node.params.map(function (param) { + return t.cloneDeep(param); + }); + + var functionExpression = t.functionExpression(null, // id + parameters, // params + t.cloneDeep(path.node.body), // body + path.node.generator, path.node.async); + + util.replaceWithOrRemove(path, t.objectProperty(t.cloneDeep(path.node.key), // key + functionExpression, //value + path.node.computed, // computed + false // shorthand + )); + + // path now refers to the ObjectProperty AST node path, but we want to return a + // Function AST node path for the function expression we created. we know that + // the FunctionExpression we just created is the value of the ObjectProperty, + // so return the "value" path off of this path. + return path.get("value"); +} \ No newline at end of file diff --git a/node_modules/regenerator-transform/lib/util.js b/node_modules/regenerator-transform/lib/util.js new file mode 100644 index 000000000..bc42ed126 --- /dev/null +++ b/node_modules/regenerator-transform/lib/util.js @@ -0,0 +1,36 @@ +"use strict"; + +exports.__esModule = true; +exports.runtimeProperty = runtimeProperty; +exports.isReference = isReference; +exports.replaceWithOrRemove = replaceWithOrRemove; + +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); +} /** + * 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. + */ + +function isReference(path) { + return path.isReferenced() || path.parentPath.isAssignmentExpression({ left: path.node }); +} + +function replaceWithOrRemove(path, replacement) { + if (replacement) { + path.replaceWith(replacement); + } else { + path.remove(); + } +} \ No newline at end of file diff --git a/node_modules/regenerator-transform/lib/visit.js b/node_modules/regenerator-transform/lib/visit.js new file mode 100644 index 000000000..df0c33239 --- /dev/null +++ b/node_modules/regenerator-transform/lib/visit.js @@ -0,0 +1,290 @@ +/** + * 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. + */ + +"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 _replaceShorthandObjectMethod = require("./replaceShorthandObjectMethod"); + +var _replaceShorthandObjectMethod2 = _interopRequireDefault(_replaceShorthandObjectMethod); + +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 }; } + +exports.visitor = { + Function: { + exit: function exit(path, state) { + var 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; + } + + // if this is an ObjectMethod, we need to convert it to an ObjectProperty + path = (0, _replaceShorthandObjectMethod2.default)(path); + node = path.node; + + 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 (t.isExpressionStatement(node) && t.isStringLiteral(node.expression)) { + // Babylon represents directives like "use strict" as elements + // of a bodyBlockPath.node.directives array, but they could just + // as easily be represented (by other parsers) as traditional + // string-literal-valued expression statements, so we need to + // handle that here. (#248) + outerBody.push(node); + } else 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; + } + + var 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); + var innerFnId = t.identifier(node.id.name + "$"); + + // Turn all declarations into vars, and replace the original + // declarations with equivalent assignment expressions. + var vars = (0, _hoist.hoist)(path); + + var didRenameArguments = renameArguments(path, argsId); + if (didRenameArguments) { + vars = vars || t.variableDeclaration("var", []); + var argumentIdentifier = t.identifier("arguments"); + // we need to do this as otherwise arguments in arrow functions gets hoisted + argumentIdentifier._shadowedFunctionLiteral = path; + vars.declarations.push(t.variableDeclarator(argsId, argumentIdentifier)); + } + + 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), + // 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()]; + + 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 oldDirectives = bodyBlockPath.node.directives; + if (oldDirectives) { + // Babylon represents directives like "use strict" as elements of + // a bodyBlockPath.node.directives array. (#248) + node.body.directives = oldDirectives; + } + + var wasGeneratorFunction = node.generator; + if (wasGeneratorFunction) { + node.generator = false; + } + + if (node.async) { + node.async = false; + } + + if (wasGeneratorFunction && t.isExpression(node)) { + util.replaceWithOrRemove(path, t.callExpression(util.runtimeProperty("mark"), [node])); + path.addComment("leading", "#__PURE__"); + } + + // 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) { + var 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)) { + // Return the identifier returned by runtime.mark(). + return getMarkedFunctionId(funPath); + } + + return node.id; +} + +var getMarkInfo = require("private").makeAccessor(); + +function getMarkedFunctionId(funPath) { + var node = funPath.node; + t.assertIdentifier(node.id); + + var blockPath = funPath.findParent(function (path) { + return path.isProgram() || path.isBlockStatement(); + }); + + if (!blockPath) { + return node.id; + } + + var block = blockPath.node; + _assert2.default.ok(Array.isArray(block.body)); + + var info = getMarkInfo(block); + if (!info.decl) { + info.decl = t.variableDeclaration("var", []); + blockPath.unshiftContainer("body", info.decl); + info.declPath = blockPath.get("body.0"); + } + + _assert2.default.strictEqual(info.declPath.node, info.decl); + + // Get a new unique identifier for our marked variable. + var markedId = blockPath.scope.generateUidIdentifier("marked"); + var markCallExp = t.callExpression(util.runtimeProperty("mark"), [node.id]); + + var index = info.decl.declarations.push(t.variableDeclarator(markedId, markCallExp)) - 1; + + var markCallExpPath = info.declPath.get("declarations." + index + ".init"); + + _assert2.default.strictEqual(markCallExpPath.node, markCallExp); + + markCallExpPath.addComment("leading", "#__PURE__"); + + return markedId; +} + +function renameArguments(funcPath, argsId) { + var 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; +} + +var argumentsVisitor = { + "FunctionExpression|FunctionDeclaration": function FunctionExpressionFunctionDeclaration(path) { + path.skip(); + }, + + Identifier: function Identifier(path, state) { + if (path.node.name === "arguments" && util.isReference(path)) { + util.replaceWithOrRemove(path, state.argsId); + state.didRenameArguments = true; + } + } +}; + +var functionSentVisitor = { + MetaProperty: function MetaProperty(path) { + var node = path.node; + + + if (node.meta.name === "function" && node.property.name === "sent") { + util.replaceWithOrRemove(path, t.memberExpression(this.context, t.identifier("_sent"))); + } + } +}; + +var awaitVisitor = { + Function: function Function(path) { + path.skip(); // Don't descend into nested function scopes. + }, + + AwaitExpression: function AwaitExpression(path) { + // Convert await expressions to yield expressions. + var 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. + util.replaceWithOrRemove(path, t.yieldExpression(t.callExpression(util.runtimeProperty("awrap"), [argument]), false)); + } +}; \ No newline at end of file diff --git a/node_modules/regenerator-transform/package.json b/node_modules/regenerator-transform/package.json new file mode 100644 index 000000000..3282747ff --- /dev/null +++ b/node_modules/regenerator-transform/package.json @@ -0,0 +1,72 @@ +{ + "_from": "regenerator-transform@^0.10.0", + "_id": "regenerator-transform@0.10.1", + "_inBundle": false, + "_integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "_location": "/regenerator-transform", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "regenerator-transform@^0.10.0", + "name": "regenerator-transform", + "escapedName": "regenerator-transform", + "rawSpec": "^0.10.0", + "saveSpec": null, + "fetchSpec": "^0.10.0" + }, + "_requiredBy": [ + "/babel-plugin-transform-regenerator" + ], + "_resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "_shasum": "1e4996837231da8b7f3cf4114d71b5691a0680dd", + "_spec": "regenerator-transform@^0.10.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-plugin-transform-regenerator", + "author": { + "name": "Ben Newman", + "email": "bn@cs.stanford.edu" + }, + "babel": { + "presets": [ + [ + "env", + { + "loose": true + } + ] + ], + "plugins": [ + "transform-runtime" + ] + }, + "bundleDependencies": false, + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + }, + "deprecated": false, + "description": "Explode async and generator functions into a state machine.", + "devDependencies": { + "babel-cli": "^6.9.0", + "babel-plugin-transform-runtime": "^6.9.0", + "babel-preset-env": "^1.2.2" + }, + "keywords": [ + "regenerator", + "runtime", + "generator", + "async" + ], + "license": "BSD", + "main": "lib/index.js", + "name": "regenerator-transform", + "repository": { + "type": "git", + "url": "https://github.com/facebook/regenerator/tree/master/packages/regenerator-transform" + }, + "scripts": { + "prepublish": "babel src/ --out-dir lib/" + }, + "version": "0.10.1" +} diff --git a/node_modules/regenerator-transform/src/emit.js b/node_modules/regenerator-transform/src/emit.js new file mode 100644 index 000000000..9a3aa73a1 --- /dev/null +++ b/node_modules/regenerator-transform/src/emit.js @@ -0,0 +1,1184 @@ +/** + * 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"); + util.replaceWithOrRemove(discriminant, 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)) { + util.replaceWithOrRemove(path, 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 = explodeViaTempVar(null, 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/node_modules/regenerator-transform/src/hoist.js b/node_modules/regenerator-transform/src/hoist.js new file mode 100644 index 000000000..9181bdf74 --- /dev/null +++ b/node_modules/regenerator-transform/src/hoist.js @@ -0,0 +1,151 @@ +/** + * 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"; +import * as util from "./util"; +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. + util.replaceWithOrRemove(path, 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)) { + util.replaceWithOrRemove(path.get("init"), varDeclToExpr(init, false)); + } + }, + + ForXStatement: function(path) { + let left = path.get("left"); + if (left.isVariableDeclaration()) { + util.replaceWithOrRemove(left, 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. + util.replaceWithOrRemove(path, 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/node_modules/regenerator-transform/src/index.js b/node_modules/regenerator-transform/src/index.js new file mode 100644 index 000000000..356f33483 --- /dev/null +++ b/node_modules/regenerator-transform/src/index.js @@ -0,0 +1,28 @@ +/** + * 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 (context) { + const plugin = { + visitor: require("./visit").visitor, + }; + + // Some presets manually call child presets, but fail to pass along the + // context object. Out of an abundance of caution, we verify that it + // exists first to avoid causing unnecessary breaking changes. + const version = context && context.version; + + // The "name" property is not allowed in older versions of Babel (6.x) + // and will cause the plugin validator to throw an exception. + if (version && parseInt(version, 10) >= 7) { + plugin.name = "regenerator-transform"; + } + + return plugin; +} diff --git a/node_modules/regenerator-transform/src/leap.js b/node_modules/regenerator-transform/src/leap.js new file mode 100644 index 000000000..047a2bf26 --- /dev/null +++ b/node_modules/regenerator-transform/src/leap.js @@ -0,0 +1,174 @@ +/** + * 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/node_modules/regenerator-transform/src/meta.js b/node_modules/regenerator-transform/src/meta.js new file mode 100644 index 000000000..59568eab9 --- /dev/null +++ b/node_modules/regenerator-transform/src/meta.js @@ -0,0 +1,104 @@ +/** + * 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, + ArrowFunctionExpression: 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/node_modules/regenerator-transform/src/replaceShorthandObjectMethod.js b/node_modules/regenerator-transform/src/replaceShorthandObjectMethod.js new file mode 100644 index 000000000..72aaf8f31 --- /dev/null +++ b/node_modules/regenerator-transform/src/replaceShorthandObjectMethod.js @@ -0,0 +1,74 @@ +import * as t from "babel-types"; +import * as util from "./util"; + +// this function converts a shorthand object generator method into a normal +// (non-shorthand) object property which is a generator function expression. for +// example, this: +// +// var foo = { +// *bar(baz) { return 5; } +// } +// +// should be replaced with: +// +// var foo = { +// bar: function*(baz) { return 5; } +// } +// +// to do this, it clones the parameter array and the body of the object generator +// method into a new FunctionExpression. +// +// this method can be passed any Function AST node path, and it will return +// either: +// a) the path that was passed in (iff the path did not need to be replaced) or +// b) the path of the new FunctionExpression that was created as a replacement +// (iff the path did need to be replaced) +// +// In either case, though, the caller can count on the fact that the return value +// is a Function AST node path. +// +// If this function is called with an AST node path that is not a Function (or with an +// argument that isn't an AST node path), it will throw an error. +export default function replaceShorthandObjectMethod(path) { + if (!path.node || !t.isFunction(path.node)) { + throw new Error("replaceShorthandObjectMethod can only be called on Function AST node paths."); + } + + // this function only replaces shorthand object methods (called ObjectMethod + // in Babel-speak). + if (!t.isObjectMethod(path.node)) { + return path; + } + + // this function only replaces generators. + if (!path.node.generator) { + return path; + } + + const parameters = path.node.params.map(function (param) { + return t.cloneDeep(param); + }) + + const functionExpression = t.functionExpression( + null, // id + parameters, // params + t.cloneDeep(path.node.body), // body + path.node.generator, + path.node.async + ); + + util.replaceWithOrRemove(path, + t.objectProperty( + t.cloneDeep(path.node.key), // key + functionExpression, //value + path.node.computed, // computed + false // shorthand + ) + ); + + // path now refers to the ObjectProperty AST node path, but we want to return a + // Function AST node path for the function expression we created. we know that + // the FunctionExpression we just created is the value of the ObjectProperty, + // so return the "value" path off of this path. + return path.get("value"); +} diff --git a/node_modules/regenerator-transform/src/util.js b/node_modules/regenerator-transform/src/util.js new file mode 100644 index 000000000..420f955f7 --- /dev/null +++ b/node_modules/regenerator-transform/src/util.js @@ -0,0 +1,31 @@ +/** + * 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 }); +} + +export function replaceWithOrRemove(path, replacement) { + if (replacement) { + path.replaceWith(replacement) + } else { + path.remove(); + } +} diff --git a/node_modules/regenerator-transform/src/visit.js b/node_modules/regenerator-transform/src/visit.js new file mode 100644 index 000000000..f8089a61f --- /dev/null +++ b/node_modules/regenerator-transform/src/visit.js @@ -0,0 +1,293 @@ +/** + * 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. + */ + +"use strict"; + +import assert from "assert"; +import * as t from "babel-types"; +import { hoist } from "./hoist"; +import { Emitter } from "./emit"; +import replaceShorthandObjectMethod from "./replaceShorthandObjectMethod"; +import * as util from "./util"; + +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; + } + + // if this is an ObjectMethod, we need to convert it to an ObjectProperty + path = replaceShorthandObjectMethod(path); + node = path.node; + + 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 (t.isExpressionStatement(node) && + t.isStringLiteral(node.expression)) { + // Babylon represents directives like "use strict" as elements + // of a bodyBlockPath.node.directives array, but they could just + // as easily be represented (by other parsers) as traditional + // string-literal-valued expression statements, so we need to + // handle that here. (#248) + outerBody.push(node); + } else 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", []); + const argumentIdentifier = t.identifier("arguments"); + // we need to do this as otherwise arguments in arrow functions gets hoisted + argumentIdentifier._shadowedFunctionLiteral = path; + vars.declarations.push(t.variableDeclarator( + argsId, argumentIdentifier + )); + } + + 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); + + const oldDirectives = bodyBlockPath.node.directives; + if (oldDirectives) { + // Babylon represents directives like "use strict" as elements of + // a bodyBlockPath.node.directives array. (#248) + node.body.directives = oldDirectives; + } + + let wasGeneratorFunction = node.generator; + if (wasGeneratorFunction) { + node.generator = false; + } + + if (node.async) { + node.async = false; + } + + if (wasGeneratorFunction && t.isExpression(node)) { + util.replaceWithOrRemove(path, t.callExpression(util.runtimeProperty("mark"), [node])) + path.addComment("leading", "#__PURE__"); + } + + // 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)) { + // Return the identifier returned by runtime.mark(). + return getMarkedFunctionId(funPath); + } + + return node.id; +} + +const getMarkInfo = require("private").makeAccessor(); + +function getMarkedFunctionId(funPath) { + const node = funPath.node; + t.assertIdentifier(node.id); + + const blockPath = funPath.findParent(function (path) { + return path.isProgram() || path.isBlockStatement(); + }); + + if (!blockPath) { + return node.id; + } + + const block = blockPath.node; + assert.ok(Array.isArray(block.body)); + + const info = getMarkInfo(block); + if (!info.decl) { + info.decl = t.variableDeclaration("var", []); + blockPath.unshiftContainer("body", info.decl); + info.declPath = blockPath.get("body.0"); + } + + assert.strictEqual(info.declPath.node, info.decl); + + // Get a new unique identifier for our marked variable. + const markedId = blockPath.scope.generateUidIdentifier("marked"); + const markCallExp = t.callExpression( + util.runtimeProperty("mark"), + [node.id] + ); + + const index = info.decl.declarations.push( + t.variableDeclarator(markedId, markCallExp) + ) - 1; + + const markCallExpPath = + info.declPath.get("declarations." + index + ".init"); + + assert.strictEqual(markCallExpPath.node, markCallExp); + + markCallExpPath.addComment("leading", "#__PURE__"); + + return markedId; +} + +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)) { + util.replaceWithOrRemove(path, state.argsId); + state.didRenameArguments = true; + } + } +}; + +let functionSentVisitor = { + MetaProperty(path) { + let { node } = path; + + if (node.meta.name === "function" && node.property.name === "sent") { + util.replaceWithOrRemove(path, 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. + util.replaceWithOrRemove(path, t.yieldExpression( + t.callExpression( + util.runtimeProperty("awrap"), + [argument] + ), + false + )); + } +}; diff --git a/node_modules/regex-cache/LICENSE b/node_modules/regex-cache/LICENSE new file mode 100644 index 000000000..c0d7f1362 --- /dev/null +++ b/node_modules/regex-cache/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2017, 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. \ No newline at end of file diff --git a/node_modules/regex-cache/README.md b/node_modules/regex-cache/README.md new file mode 100644 index 000000000..8c6601478 --- /dev/null +++ b/node_modules/regex-cache/README.md @@ -0,0 +1,166 @@ +# regex-cache [![NPM version](https://img.shields.io/npm/v/regex-cache.svg?style=flat)](https://www.npmjs.com/package/regex-cache) [![NPM monthly downloads](https://img.shields.io/npm/dm/regex-cache.svg?style=flat)](https://npmjs.org/package/regex-cache) [![NPM total downloads](https://img.shields.io/npm/dt/regex-cache.svg?style=flat)](https://npmjs.org/package/regex-cache) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/regex-cache.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/regex-cache) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/regex-cache.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/regex-cache) + +> Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of the same string and options, resulting in surprising performance improvements. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save regex-cache +``` + +* Read [what this does](#what-this-does). +* See [the benchmarks](#benchmarks) + +## Usage + +Wrap a function like this: + +```js +var cache = require('regex-cache'); +var someRegex = cache(require('some-regex-lib')); +``` + +**Caching a regex** + +If you want to cache a regex after calling `new RegExp()`, or you're requiring a module that returns a regex, wrap it with a function first: + +```js +var cache = require('regex-cache'); + +function yourRegex(str, opts) { + // do stuff to str and opts + return new RegExp(str, opts.flags); +} + +var regex = cache(yourRegex); +``` + +## Recommendations + +### Use this when... + +* **No options are passed** to the function that creates the regex. Regardless of how big or small the regex is, when zero options are passed, caching will be faster than not. +* **A few options are passed**, and the values are primitives. The limited benchmarks I did show that caching is beneficial when up to 8 or 9 options are passed. + +### Do not use this when... + +* **The values of options are not primitives**. When non-primitives must be compared for equality, the time to compare the options is most likely as long or longer than the time to just create a new regex. + +### Example benchmarks + +Performance results, with and without regex-cache: + +```bash +# no args passed (defaults) + with-cache x 8,699,231 ops/sec ±0.86% (93 runs sampled) + without-cache x 2,777,551 ops/sec ±0.63% (95 runs sampled) + +# string and six options passed + with-cache x 1,885,934 ops/sec ±0.80% (93 runs sampled) + without-cache x 1,256,893 ops/sec ±0.65% (97 runs sampled) + +# string only + with-cache x 7,723,256 ops/sec ±0.87% (92 runs sampled) + without-cache x 2,303,060 ops/sec ±0.47% (99 runs sampled) + +# one option passed + with-cache x 4,179,877 ops/sec ±0.53% (100 runs sampled) + without-cache x 2,198,422 ops/sec ±0.47% (95 runs sampled) + +# two options passed + with-cache x 3,256,222 ops/sec ±0.51% (99 runs sampled) + without-cache x 2,121,401 ops/sec ±0.79% (97 runs sampled) + +# six options passed + with-cache x 1,816,018 ops/sec ±1.08% (96 runs sampled) + without-cache x 1,157,176 ops/sec ±0.53% (100 runs sampled) + +# +# diminishing returns happen about here +# + +# ten options passed + with-cache x 1,210,598 ops/sec ±0.56% (92 runs sampled) + without-cache x 1,665,588 ops/sec ±1.07% (100 runs sampled) + +# twelve options passed + with-cache x 1,042,096 ops/sec ±0.68% (92 runs sampled) + without-cache x 1,389,414 ops/sec ±0.68% (97 runs sampled) + +# twenty options passed + with-cache x 661,125 ops/sec ±0.80% (93 runs sampled) + without-cache x 1,208,757 ops/sec ±0.65% (97 runs sampled) + +# +# when non-primitive values are compared +# + +# single value on the options is an object + with-cache x 1,398,313 ops/sec ±1.05% (95 runs sampled) + without-cache x 2,228,281 ops/sec ±0.56% (99 runs sampled) +``` + +## Run benchmarks + +Install dev dependencies: + +```bash +npm i -d && npm run benchmarks +``` + +## What this does + +If you're using `new RegExp('foo')` instead of a regex literal, it's probably because you need to dyamically generate a regex based on user options or some other potentially changing factors. + +When your function creates a string based on user inputs and passes it to the `RegExp` constructor, regex-cache caches the results. The next time the function is called if the key of a cached regex matches the user input (or no input was given), the cached regex is returned, avoiding unnecessary runtime compilation. + +Using the RegExp constructor offers a lot of flexibility, but the runtime compilation comes at a price - it's slow. Not specifically because of the call to the RegExp constructor, but **because you have to build up the string before `new RegExp()` is even called**. + +## About + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 31 | [jonschlinkert](https://github.com/jonschlinkert) | +| 1 | [MartinKolarik](https://github.com/MartinKolarik) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on September 01, 2017._ \ No newline at end of file diff --git a/node_modules/regex-cache/index.js b/node_modules/regex-cache/index.js new file mode 100644 index 000000000..df8c42312 --- /dev/null +++ b/node_modules/regex-cache/index.js @@ -0,0 +1,68 @@ +/*! + * regex-cache + * + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +var equal = require('is-equal-shallow'); +var basic = {}; +var cache = {}; + +/** + * Expose `regexCache` + */ + +module.exports = regexCache; + +/** + * Memoize the results of a call to the new RegExp constructor. + * + * @param {Function} fn [description] + * @param {String} str [description] + * @param {Options} options [description] + * @param {Boolean} nocompare [description] + * @return {RegExp} + */ + +function regexCache(fn, str, opts) { + var key = '_default_', regex, cached; + + if (!str && !opts) { + if (typeof fn !== 'function') { + return fn; + } + return basic[key] || (basic[key] = fn(str)); + } + + var isString = typeof str === 'string'; + if (isString) { + if (!opts) { + return basic[str] || (basic[str] = fn(str)); + } + key = str; + } else { + opts = str; + } + + cached = cache[key]; + if (cached && equal(cached.opts, opts)) { + return cached.regex; + } + + memo(key, opts, (regex = fn(str, opts))); + return regex; +} + +function memo(key, opts, regex) { + cache[key] = {regex: regex, opts: opts}; +} + +/** + * Expose `cache` + */ + +module.exports.cache = cache; +module.exports.basic = basic; diff --git a/node_modules/regex-cache/package.json b/node_modules/regex-cache/package.json new file mode 100644 index 000000000..4c953a2b8 --- /dev/null +++ b/node_modules/regex-cache/package.json @@ -0,0 +1,101 @@ +{ + "_from": "regex-cache@^0.4.2", + "_id": "regex-cache@0.4.4", + "_inBundle": false, + "_integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "_location": "/regex-cache", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "regex-cache@^0.4.2", + "name": "regex-cache", + "escapedName": "regex-cache", + "rawSpec": "^0.4.2", + "saveSpec": null, + "fetchSpec": "^0.4.2" + }, + "_requiredBy": [ + "/micromatch" + ], + "_resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "_shasum": "75bdc58a2a1496cec48a12835bc54c8d562336dd", + "_spec": "regex-cache@^0.4.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/micromatch", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/regex-cache/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Martin Kolárik", + "url": "https://kolarik.sk" + } + ], + "dependencies": { + "is-equal-shallow": "^0.1.3" + }, + "deprecated": false, + "description": "Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of the same string and options, resulting in surprising performance improvements.", + "devDependencies": { + "ansi-bold": "^0.1.1", + "benchmarked": "^0.1.5", + "gulp-format-md": "^0.1.7", + "micromatch": "^2.3.7", + "should": "^8.3.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/regex-cache", + "keywords": [ + "cache", + "expression", + "regex", + "regexp", + "regular", + "regular expression", + "store", + "to-regex" + ], + "license": "MIT", + "main": "index.js", + "name": "regex-cache", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/regex-cache.git" + }, + "scripts": { + "benchmarks": "node benchmark", + "test": "mocha" + }, + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + }, + "version": "0.4.4" +} diff --git a/node_modules/regexpu-core/LICENSE-MIT.txt b/node_modules/regexpu-core/LICENSE-MIT.txt new file mode 100644 index 000000000..a41e0a7ef --- /dev/null +++ b/node_modules/regexpu-core/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/regexpu-core/README.md b/node_modules/regexpu-core/README.md new file mode 100644 index 000000000..1f80cd89d --- /dev/null +++ b/node_modules/regexpu-core/README.md @@ -0,0 +1,62 @@ +# regexpu-core [![Build status](https://travis-ci.org/mathiasbynens/regexpu-core.svg?branch=master)](https://travis-ci.org/mathiasbynens/regexpu-core) [![Code coverage status](http://img.shields.io/coveralls/mathiasbynens/regexpu-core/master.svg)](https://coveralls.io/r/mathiasbynens/regexpu-core) [![Dependency status](https://gemnasium.com/mathiasbynens/regexpu-core.svg)](https://gemnasium.com/mathiasbynens/regexpu-core) + +_regexpu_ is a source code transpiler that enables the use of ES6 Unicode regular expressions in JavaScript-of-today (ES5). + +_regexpu-core_ contains _regexpu_’s core functionality, i.e. `rewritePattern(pattern, flag)`, which enables rewriting regular expressions that make use of [the ES6 `u` flag](https://mathiasbynens.be/notes/es6-unicode-regex) into equivalent ES5-compatible regular expression patterns. + +## Installation + +To use _regexpu-core_ programmatically, install it as a dependency via [npm](https://www.npmjs.com/): + +```bash +npm install regexpu-core --save-dev +``` + +Then, `require` it: + +```js +const rewritePattern = require('regexpu-core'); +``` + +## API + +This module exports a single function named `rewritePattern`. + +### `rewritePattern(pattern, flags)` + +This function takes a string that represents a regular expression pattern as well as a string representing its flags, and returns an ES5-compatible version of the pattern. + +```js +rewritePattern('foo.bar', 'u'); +// → 'foo(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uDC00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF])bar' + +rewritePattern('[\\u{1D306}-\\u{1D308}a-z]', 'u'); +// → '(?:[a-z]|\\uD834[\\uDF06-\\uDF08])' + +rewritePattern('[\\u{1D306}-\\u{1D308}a-z]', 'ui'); +// → '(?:[a-z\\u017F\\u212A]|\\uD834[\\uDF06-\\uDF08])' +``` + +_regexpu-core_ can rewrite non-ES6 regular expressions too, which is useful to demonstrate how their behavior changes once the `u` and `i` flags are added: + +```js +// In ES5, the dot operator only matches BMP symbols: +rewritePattern('foo.bar'); +// → 'foo(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uFFFF])bar' + +// But with the ES6 `u` flag, it matches astral symbols too: +rewritePattern('foo.bar', 'u'); +// → 'foo(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uDC00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF])bar' +``` + +`rewritePattern` uses [regjsgen](https://github.com/d10/regjsgen), [regjsparser](https://github.com/jviereck/regjsparser), and [regenerate](https://github.com/mathiasbynens/regenerate) as internal dependencies. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_regexpu-core_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/regexpu-core/data/character-class-escape-sets.js b/node_modules/regexpu-core/data/character-class-escape-sets.js new file mode 100644 index 000000000..fcc482e7b --- /dev/null +++ b/node_modules/regexpu-core/data/character-class-escape-sets.js @@ -0,0 +1,101 @@ +// Generated by `/scripts/character-class-escape-sets.js`. Do not edit. +var regenerate = require('regenerate'); + +exports.REGULAR = { + 'd': regenerate() + .addRange(0x30, 0x39), + 'D': regenerate() + .addRange(0x0, 0x2F) + .addRange(0x3A, 0xFFFF), + 's': regenerate(0x20, 0xA0, 0x1680, 0x202F, 0x205F, 0x3000, 0xFEFF) + .addRange(0x9, 0xD) + .addRange(0x2000, 0x200A) + .addRange(0x2028, 0x2029), + 'S': regenerate() + .addRange(0x0, 0x8) + .addRange(0xE, 0x1F) + .addRange(0x21, 0x9F) + .addRange(0xA1, 0x167F) + .addRange(0x1681, 0x1FFF) + .addRange(0x200B, 0x2027) + .addRange(0x202A, 0x202E) + .addRange(0x2030, 0x205E) + .addRange(0x2060, 0x2FFF) + .addRange(0x3001, 0xFEFE) + .addRange(0xFF00, 0xFFFF), + 'w': regenerate(0x5F) + .addRange(0x30, 0x39) + .addRange(0x41, 0x5A) + .addRange(0x61, 0x7A), + 'W': regenerate(0x60) + .addRange(0x0, 0x2F) + .addRange(0x3A, 0x40) + .addRange(0x5B, 0x5E) + .addRange(0x7B, 0xFFFF) +}; + +exports.UNICODE = { + 'd': regenerate() + .addRange(0x30, 0x39), + 'D': regenerate() + .addRange(0x0, 0x2F) + .addRange(0x3A, 0x10FFFF), + 's': regenerate(0x20, 0xA0, 0x1680, 0x202F, 0x205F, 0x3000, 0xFEFF) + .addRange(0x9, 0xD) + .addRange(0x2000, 0x200A) + .addRange(0x2028, 0x2029), + 'S': regenerate() + .addRange(0x0, 0x8) + .addRange(0xE, 0x1F) + .addRange(0x21, 0x9F) + .addRange(0xA1, 0x167F) + .addRange(0x1681, 0x1FFF) + .addRange(0x200B, 0x2027) + .addRange(0x202A, 0x202E) + .addRange(0x2030, 0x205E) + .addRange(0x2060, 0x2FFF) + .addRange(0x3001, 0xFEFE) + .addRange(0xFF00, 0x10FFFF), + 'w': regenerate(0x5F) + .addRange(0x30, 0x39) + .addRange(0x41, 0x5A) + .addRange(0x61, 0x7A), + 'W': regenerate(0x60) + .addRange(0x0, 0x2F) + .addRange(0x3A, 0x40) + .addRange(0x5B, 0x5E) + .addRange(0x7B, 0x10FFFF) +}; + +exports.UNICODE_IGNORE_CASE = { + 'd': regenerate() + .addRange(0x30, 0x39), + 'D': regenerate() + .addRange(0x0, 0x2F) + .addRange(0x3A, 0x10FFFF), + 's': regenerate(0x20, 0xA0, 0x1680, 0x202F, 0x205F, 0x3000, 0xFEFF) + .addRange(0x9, 0xD) + .addRange(0x2000, 0x200A) + .addRange(0x2028, 0x2029), + 'S': regenerate() + .addRange(0x0, 0x8) + .addRange(0xE, 0x1F) + .addRange(0x21, 0x9F) + .addRange(0xA1, 0x167F) + .addRange(0x1681, 0x1FFF) + .addRange(0x200B, 0x2027) + .addRange(0x202A, 0x202E) + .addRange(0x2030, 0x205E) + .addRange(0x2060, 0x2FFF) + .addRange(0x3001, 0xFEFE) + .addRange(0xFF00, 0x10FFFF), + 'w': regenerate(0x5F, 0x17F, 0x212A) + .addRange(0x30, 0x39) + .addRange(0x41, 0x5A) + .addRange(0x61, 0x7A), + 'W': regenerate(0x4B, 0x53, 0x60) + .addRange(0x0, 0x2F) + .addRange(0x3A, 0x40) + .addRange(0x5B, 0x5E) + .addRange(0x7B, 0x10FFFF) +}; diff --git a/node_modules/regexpu-core/data/iu-mappings.json b/node_modules/regexpu-core/data/iu-mappings.json new file mode 100644 index 000000000..dbf36a2f1 --- /dev/null +++ b/node_modules/regexpu-core/data/iu-mappings.json @@ -0,0 +1,296 @@ +{ + "75": 8490, + "83": 383, + "107": 8490, + "115": 383, + "181": 924, + "197": 8491, + "383": 83, + "452": 453, + "453": 452, + "455": 456, + "456": 455, + "458": 459, + "459": 458, + "497": 498, + "498": 497, + "837": 8126, + "914": 976, + "917": 1013, + "920": 1012, + "921": 8126, + "922": 1008, + "924": 181, + "928": 982, + "929": 1009, + "931": 962, + "934": 981, + "937": 8486, + "962": 931, + "976": 914, + "977": 1012, + "981": 934, + "982": 928, + "1008": 922, + "1009": 929, + "1012": [ + 920, + 977 + ], + "1013": 917, + "7776": 7835, + "7835": 7776, + "8126": [ + 837, + 921 + ], + "8486": 937, + "8490": 75, + "8491": 197, + "66560": 66600, + "66561": 66601, + "66562": 66602, + "66563": 66603, + "66564": 66604, + "66565": 66605, + "66566": 66606, + "66567": 66607, + "66568": 66608, + "66569": 66609, + "66570": 66610, + "66571": 66611, + "66572": 66612, + "66573": 66613, + "66574": 66614, + "66575": 66615, + "66576": 66616, + "66577": 66617, + "66578": 66618, + "66579": 66619, + "66580": 66620, + "66581": 66621, + "66582": 66622, + "66583": 66623, + "66584": 66624, + "66585": 66625, + "66586": 66626, + "66587": 66627, + "66588": 66628, + "66589": 66629, + "66590": 66630, + "66591": 66631, + "66592": 66632, + "66593": 66633, + "66594": 66634, + "66595": 66635, + "66596": 66636, + "66597": 66637, + "66598": 66638, + "66599": 66639, + "66600": 66560, + "66601": 66561, + "66602": 66562, + "66603": 66563, + "66604": 66564, + "66605": 66565, + "66606": 66566, + "66607": 66567, + "66608": 66568, + "66609": 66569, + "66610": 66570, + "66611": 66571, + "66612": 66572, + "66613": 66573, + "66614": 66574, + "66615": 66575, + "66616": 66576, + "66617": 66577, + "66618": 66578, + "66619": 66579, + "66620": 66580, + "66621": 66581, + "66622": 66582, + "66623": 66583, + "66624": 66584, + "66625": 66585, + "66626": 66586, + "66627": 66587, + "66628": 66588, + "66629": 66589, + "66630": 66590, + "66631": 66591, + "66632": 66592, + "66633": 66593, + "66634": 66594, + "66635": 66595, + "66636": 66596, + "66637": 66597, + "66638": 66598, + "66639": 66599, + "68736": 68800, + "68737": 68801, + "68738": 68802, + "68739": 68803, + "68740": 68804, + "68741": 68805, + "68742": 68806, + "68743": 68807, + "68744": 68808, + "68745": 68809, + "68746": 68810, + "68747": 68811, + "68748": 68812, + "68749": 68813, + "68750": 68814, + "68751": 68815, + "68752": 68816, + "68753": 68817, + "68754": 68818, + "68755": 68819, + "68756": 68820, + "68757": 68821, + "68758": 68822, + "68759": 68823, + "68760": 68824, + "68761": 68825, + "68762": 68826, + "68763": 68827, + "68764": 68828, + "68765": 68829, + "68766": 68830, + "68767": 68831, + "68768": 68832, + "68769": 68833, + "68770": 68834, + "68771": 68835, + "68772": 68836, + "68773": 68837, + "68774": 68838, + "68775": 68839, + "68776": 68840, + "68777": 68841, + "68778": 68842, + "68779": 68843, + "68780": 68844, + "68781": 68845, + "68782": 68846, + "68783": 68847, + "68784": 68848, + "68785": 68849, + "68786": 68850, + "68800": 68736, + "68801": 68737, + "68802": 68738, + "68803": 68739, + "68804": 68740, + "68805": 68741, + "68806": 68742, + "68807": 68743, + "68808": 68744, + "68809": 68745, + "68810": 68746, + "68811": 68747, + "68812": 68748, + "68813": 68749, + "68814": 68750, + "68815": 68751, + "68816": 68752, + "68817": 68753, + "68818": 68754, + "68819": 68755, + "68820": 68756, + "68821": 68757, + "68822": 68758, + "68823": 68759, + "68824": 68760, + "68825": 68761, + "68826": 68762, + "68827": 68763, + "68828": 68764, + "68829": 68765, + "68830": 68766, + "68831": 68767, + "68832": 68768, + "68833": 68769, + "68834": 68770, + "68835": 68771, + "68836": 68772, + "68837": 68773, + "68838": 68774, + "68839": 68775, + "68840": 68776, + "68841": 68777, + "68842": 68778, + "68843": 68779, + "68844": 68780, + "68845": 68781, + "68846": 68782, + "68847": 68783, + "68848": 68784, + "68849": 68785, + "68850": 68786, + "71840": 71872, + "71841": 71873, + "71842": 71874, + "71843": 71875, + "71844": 71876, + "71845": 71877, + "71846": 71878, + "71847": 71879, + "71848": 71880, + "71849": 71881, + "71850": 71882, + "71851": 71883, + "71852": 71884, + "71853": 71885, + "71854": 71886, + "71855": 71887, + "71856": 71888, + "71857": 71889, + "71858": 71890, + "71859": 71891, + "71860": 71892, + "71861": 71893, + "71862": 71894, + "71863": 71895, + "71864": 71896, + "71865": 71897, + "71866": 71898, + "71867": 71899, + "71868": 71900, + "71869": 71901, + "71870": 71902, + "71871": 71903, + "71872": 71840, + "71873": 71841, + "71874": 71842, + "71875": 71843, + "71876": 71844, + "71877": 71845, + "71878": 71846, + "71879": 71847, + "71880": 71848, + "71881": 71849, + "71882": 71850, + "71883": 71851, + "71884": 71852, + "71885": 71853, + "71886": 71854, + "71887": 71855, + "71888": 71856, + "71889": 71857, + "71890": 71858, + "71891": 71859, + "71892": 71860, + "71893": 71861, + "71894": 71862, + "71895": 71863, + "71896": 71864, + "71897": 71865, + "71898": 71866, + "71899": 71867, + "71900": 71868, + "71901": 71869, + "71902": 71870, + "71903": 71871 +} diff --git a/node_modules/regexpu-core/package.json b/node_modules/regexpu-core/package.json new file mode 100644 index 000000000..a468f7a11 --- /dev/null +++ b/node_modules/regexpu-core/package.json @@ -0,0 +1,88 @@ +{ + "_from": "regexpu-core@^2.0.0", + "_id": "regexpu-core@2.0.0", + "_inBundle": false, + "_integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "_location": "/regexpu-core", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "regexpu-core@^2.0.0", + "name": "regexpu-core", + "escapedName": "regexpu-core", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/babel-plugin-transform-es2015-unicode-regex" + ], + "_resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "_shasum": "49d038837b8dcf8bfa5b9a42139938e6ea2ae240", + "_spec": "regexpu-core@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-plugin-transform-es2015-unicode-regex", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bugs": { + "url": "https://github.com/mathiasbynens/regexpu-core/issues" + }, + "bundleDependencies": false, + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + }, + "deprecated": false, + "description": "regexpu’s core functionality (i.e. `rewritePattern(pattern, flag)`), capable of translating ES6 Unicode regular expressions to ES5.", + "devDependencies": { + "coveralls": "^2.11.2", + "istanbul": "^0.4.0", + "jsesc": "^0.5.0", + "lodash": "^3.6.0", + "mocha": "^2.2.1", + "regexpu-fixtures": "^2.0.0", + "unicode-8.0.0": "^0.1.5" + }, + "files": [ + "LICENSE-MIT.txt", + "rewrite-pattern.js", + "data/character-class-escape-sets.js", + "data/iu-mappings.json" + ], + "homepage": "https://mths.be/regexpu", + "keywords": [ + "codegen", + "desugaring", + "ecmascript", + "es5", + "es6", + "harmony", + "javascript", + "refactoring", + "regex", + "regexp", + "regular expressions", + "rewriting", + "syntax", + "transformation", + "transpile", + "transpiler", + "unicode" + ], + "license": "MIT", + "main": "rewrite-pattern.js", + "name": "regexpu-core", + "repository": { + "type": "git", + "url": "git+https://github.com/mathiasbynens/regexpu-core.git" + }, + "scripts": { + "build": "node scripts/iu-mappings.js && node scripts/character-class-escape-sets.js", + "coverage": "istanbul cover --report html node_modules/.bin/_mocha tests/tests.js -- -u exports -R spec", + "test": "mocha tests" + }, + "version": "2.0.0" +} diff --git a/node_modules/regexpu-core/rewrite-pattern.js b/node_modules/regexpu-core/rewrite-pattern.js new file mode 100644 index 000000000..47a785433 --- /dev/null +++ b/node_modules/regexpu-core/rewrite-pattern.js @@ -0,0 +1,193 @@ +var generate = require('regjsgen').generate; +var parse = require('regjsparser').parse; +var regenerate = require('regenerate'); +var iuMappings = require('./data/iu-mappings.json'); +var ESCAPE_SETS = require('./data/character-class-escape-sets.js'); + +function getCharacterClassEscapeSet(character) { + if (unicode) { + if (ignoreCase) { + return ESCAPE_SETS.UNICODE_IGNORE_CASE[character]; + } + return ESCAPE_SETS.UNICODE[character]; + } + return ESCAPE_SETS.REGULAR[character]; +} + +var object = {}; +var hasOwnProperty = object.hasOwnProperty; +function has(object, property) { + return hasOwnProperty.call(object, property); +} + +// Prepare a Regenerate set containing all code points, used for negative +// character classes (if any). +var UNICODE_SET = regenerate().addRange(0x0, 0x10FFFF); +// Without the `u` flag, the range stops at 0xFFFF. +// https://mths.be/es6#sec-pattern-semantics +var BMP_SET = regenerate().addRange(0x0, 0xFFFF); + +// Prepare a Regenerate set containing all code points that are supposed to be +// matched by `/./u`. https://mths.be/es6#sec-atom +var DOT_SET_UNICODE = UNICODE_SET.clone() // all Unicode code points + .remove( + // minus `LineTerminator`s (https://mths.be/es6#sec-line-terminators): + 0x000A, // Line Feed + 0x000D, // Carriage Return + 0x2028, // Line Separator + 0x2029 // Paragraph Separator + ); +// Prepare a Regenerate set containing all code points that are supposed to be +// matched by `/./` (only BMP code points). +var DOT_SET = DOT_SET_UNICODE.clone() + .intersection(BMP_SET); + +// Add a range of code points + any case-folded code points in that range to a +// set. +regenerate.prototype.iuAddRange = function(min, max) { + var $this = this; + do { + var folded = caseFold(min); + if (folded) { + $this.add(folded); + } + } while (++min <= max); + return $this; +}; + +function assign(target, source) { + for (var key in source) { + // Note: `hasOwnProperty` is not needed here. + target[key] = source[key]; + } +} + +function update(item, pattern) { + // TODO: Test if memoizing `pattern` here is worth the effort. + if (!pattern) { + return; + } + var tree = parse(pattern, ''); + switch (tree.type) { + case 'characterClass': + case 'group': + case 'value': + // No wrapping needed. + break; + default: + // Wrap the pattern in a non-capturing group. + tree = wrap(tree, pattern); + } + assign(item, tree); +} + +function wrap(tree, pattern) { + // Wrap the pattern in a non-capturing group. + return { + 'type': 'group', + 'behavior': 'ignore', + 'body': [tree], + 'raw': '(?:' + pattern + ')' + }; +} + +function caseFold(codePoint) { + return has(iuMappings, codePoint) ? iuMappings[codePoint] : false; +} + +var ignoreCase = false; +var unicode = false; +function processCharacterClass(characterClassItem) { + var set = regenerate(); + var body = characterClassItem.body.forEach(function(item) { + switch (item.type) { + case 'value': + set.add(item.codePoint); + if (ignoreCase && unicode) { + var folded = caseFold(item.codePoint); + if (folded) { + set.add(folded); + } + } + break; + case 'characterClassRange': + var min = item.min.codePoint; + var max = item.max.codePoint; + set.addRange(min, max); + if (ignoreCase && unicode) { + set.iuAddRange(min, max); + } + break; + case 'characterClassEscape': + set.add(getCharacterClassEscapeSet(item.value)); + break; + // The `default` clause is only here as a safeguard; it should never be + // reached. Code coverage tools should ignore it. + /* istanbul ignore next */ + default: + throw Error('Unknown term type: ' + item.type); + } + }); + if (characterClassItem.negative) { + set = (unicode ? UNICODE_SET : BMP_SET).clone().remove(set); + } + update(characterClassItem, set.toString()); + return characterClassItem; +} + +function processTerm(item) { + switch (item.type) { + case 'dot': + update( + item, + (unicode ? DOT_SET_UNICODE : DOT_SET).toString() + ); + break; + case 'characterClass': + item = processCharacterClass(item); + break; + case 'characterClassEscape': + update( + item, + getCharacterClassEscapeSet(item.value).toString() + ); + break; + case 'alternative': + case 'disjunction': + case 'group': + case 'quantifier': + item.body = item.body.map(processTerm); + break; + case 'value': + var codePoint = item.codePoint; + var set = regenerate(codePoint); + if (ignoreCase && unicode) { + var folded = caseFold(codePoint); + if (folded) { + set.add(folded); + } + } + update(item, set.toString()); + break; + case 'anchor': + case 'empty': + case 'group': + case 'reference': + // Nothing to do here. + break; + // The `default` clause is only here as a safeguard; it should never be + // reached. Code coverage tools should ignore it. + /* istanbul ignore next */ + default: + throw Error('Unknown term type: ' + item.type); + } + return item; +}; + +module.exports = function(pattern, flags) { + var tree = parse(pattern, flags); + ignoreCase = flags ? flags.indexOf('i') > -1 : false; + unicode = flags ? flags.indexOf('u') > -1 : false; + assign(tree, processTerm(tree)); + return generate(tree); +}; diff --git a/node_modules/regjsgen/LICENSE.txt b/node_modules/regjsgen/LICENSE.txt new file mode 100644 index 000000000..aa20928b7 --- /dev/null +++ b/node_modules/regjsgen/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright 2014 Benjamin Tan (https://d10.github.io/) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/regjsgen/README.md b/node_modules/regjsgen/README.md new file mode 100644 index 000000000..0a4dcd0c8 --- /dev/null +++ b/node_modules/regjsgen/README.md @@ -0,0 +1,60 @@ +# RegJSGen + +Generate `RegExp`s from [RegJSParser](https://github.com/jviereck/regjsparser)’s AST. + +## Installation + +```bash +npm install --save regjsgen +``` + +## Usage + +```js +var regjsgen = require('regjsgen'); +// With `regjsparser` +var regjsparser = require('regjsparser'); +var regex = '^a$'; +var ast = regjsparser.parse(regex); +// Modify AST +// ... +// Regenerate `RegExp` +regex = regjsgen.generate(ast); +``` + +## See Also + + * [RegJSParser](https://github.com/jviereck/regjsparser) + * [RegExp.js](https://github.com/jviereck/regexp.js) + +## Testing + +Run the command + +```bash +npm test +``` + +To create a new reference file, execute + +```bash +node test/update-fixture.js +``` + +from the repo top directory. + +## Support + +Tested in Node.js 0.8.26~0.10.30. + +## Author + +| [![twitter/demoneaux](http://gravatar.com/avatar/029b19dba521584d83398ada3ecf6131?s=70)](https://twitter.com/demoneaux "Follow @demoneaux on Twitter") | +|---| +| [Benjamin Tan](http://d10.github.io/) | + +## Contributors + +| [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/node_modules/regjsgen/package.json b/node_modules/regjsgen/package.json new file mode 100644 index 000000000..06d29febe --- /dev/null +++ b/node_modules/regjsgen/package.json @@ -0,0 +1,76 @@ +{ + "_from": "regjsgen@^0.2.0", + "_id": "regjsgen@0.2.0", + "_inBundle": false, + "_integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "_location": "/regjsgen", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "regjsgen@^0.2.0", + "name": "regjsgen", + "escapedName": "regjsgen", + "rawSpec": "^0.2.0", + "saveSpec": null, + "fetchSpec": "^0.2.0" + }, + "_requiredBy": [ + "/regexpu-core" + ], + "_resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "_shasum": "6c016adeac554f75823fe37ac05b92d5a4edb1f7", + "_spec": "regjsgen@^0.2.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/regexpu-core", + "author": { + "name": "Benjamin Tan", + "email": "demoneaux@gmail.com", + "url": "https://d10.github.io/" + }, + "bugs": { + "url": "https://github.com/d10/regjsgen/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Benjamin Tan", + "email": "demoneaux@gmail.com", + "url": "https://d10.github.io/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "https://mathiasbynens.be/" + } + ], + "deprecated": false, + "description": "Generate `RegExp`s from RegJSParser’s AST", + "devDependencies": { + "got": "~1.2.0", + "jsesc": "~0.5.0" + }, + "files": [ + "LICENSE.txt", + "regjsgen.js", + "README.md" + ], + "homepage": "https://github.com/d10/regjsgen", + "keywords": [ + "ast", + "generate", + "regex", + "regexp", + "regular expressions" + ], + "license": "MIT", + "main": "regjsgen.js", + "name": "regjsgen", + "repository": { + "type": "git", + "url": "git+https://github.com/d10/regjsgen.git" + }, + "scripts": { + "test": "node test/test.js" + }, + "version": "0.2.0" +} diff --git a/node_modules/regjsgen/regjsgen.js b/node_modules/regjsgen/regjsgen.js new file mode 100644 index 000000000..58ff15166 --- /dev/null +++ b/node_modules/regjsgen/regjsgen.js @@ -0,0 +1,408 @@ +/*! + * RegJSGen + * Copyright 2014 Benjamin Tan + * Available under MIT license + */ +;(function() { + 'use strict'; + + /** Used to determine if values are of the language type `Object` */ + var objectTypes = { + 'function': true, + 'object': true + }; + + /** Used as a reference to the global object */ + var root = (objectTypes[typeof window] && window) || this; + + /** Backup possible global object */ + var oldRoot = root; + + /** Detect free variable `exports` */ + var freeExports = objectTypes[typeof exports] && exports; + + /** Detect free variable `module` */ + var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; + + /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ + var freeGlobal = freeExports && freeModule && typeof global == 'object' && global; + if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + /*! Based on https://mths.be/fromcodepoint v0.2.0 by @mathias */ + + var stringFromCharCode = String.fromCharCode; + var floor = Math.floor; + function fromCodePoint() { + var MAX_SIZE = 0x4000; + var codeUnits = []; + var highSurrogate; + var lowSurrogate; + var index = -1; + var length = arguments.length; + if (!length) { + return ''; + } + var result = ''; + while (++index < length) { + var codePoint = Number(arguments[index]); + if ( + !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity` + codePoint < 0 || // not a valid Unicode code point + codePoint > 0x10FFFF || // not a valid Unicode code point + floor(codePoint) != codePoint // not an integer + ) { + throw RangeError('Invalid code point: ' + codePoint); + } + if (codePoint <= 0xFFFF) { + // BMP code point + codeUnits.push(codePoint); + } else { + // Astral code point; split in surrogate halves + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + codePoint -= 0x10000; + highSurrogate = (codePoint >> 10) + 0xD800; + lowSurrogate = (codePoint % 0x400) + 0xDC00; + codeUnits.push(highSurrogate, lowSurrogate); + } + if (index + 1 == length || codeUnits.length > MAX_SIZE) { + result += stringFromCharCode.apply(null, codeUnits); + codeUnits.length = 0; + } + } + return result; + } + + function assertType(type, expected) { + if (expected.indexOf('|') == -1) { + if (type == expected) { + return; + } + + throw Error('Invalid node type: ' + type); + } + + expected = assertType.hasOwnProperty(expected) + ? assertType[expected] + : (assertType[expected] = RegExp('^(?:' + expected + ')$')); + + if (expected.test(type)) { + return; + } + + throw Error('Invalid node type: ' + type); + } + + /*--------------------------------------------------------------------------*/ + + function generate(node) { + var type = node.type; + + if (generate.hasOwnProperty(type) && typeof generate[type] == 'function') { + return generate[type](node); + } + + throw Error('Invalid node type: ' + type); + } + + /*--------------------------------------------------------------------------*/ + + function generateAlternative(node) { + assertType(node.type, 'alternative'); + + var terms = node.body, + length = terms ? terms.length : 0; + + if (length == 1) { + return generateTerm(terms[0]); + } else { + var i = -1, + result = ''; + + while (++i < length) { + result += generateTerm(terms[i]); + } + + return result; + } + } + + function generateAnchor(node) { + assertType(node.type, 'anchor'); + + switch (node.kind) { + case 'start': + return '^'; + case 'end': + return '$'; + case 'boundary': + return '\\b'; + case 'not-boundary': + return '\\B'; + default: + throw Error('Invalid assertion'); + } + } + + function generateAtom(node) { + assertType(node.type, 'anchor|characterClass|characterClassEscape|dot|group|reference|value'); + + return generate(node); + } + + function generateCharacterClass(node) { + assertType(node.type, 'characterClass'); + + var classRanges = node.body, + length = classRanges ? classRanges.length : 0; + + var i = -1, + result = '['; + + if (node.negative) { + result += '^'; + } + + while (++i < length) { + result += generateClassAtom(classRanges[i]); + } + + result += ']'; + + return result; + } + + function generateCharacterClassEscape(node) { + assertType(node.type, 'characterClassEscape'); + + return '\\' + node.value; + } + + function generateCharacterClassRange(node) { + assertType(node.type, 'characterClassRange'); + + var min = node.min, + max = node.max; + + if (min.type == 'characterClassRange' || max.type == 'characterClassRange') { + throw Error('Invalid character class range'); + } + + return generateClassAtom(min) + '-' + generateClassAtom(max); + } + + function generateClassAtom(node) { + assertType(node.type, 'anchor|characterClassEscape|characterClassRange|dot|value'); + + return generate(node); + } + + function generateDisjunction(node) { + assertType(node.type, 'disjunction'); + + var body = node.body, + length = body ? body.length : 0; + + if (length == 0) { + throw Error('No body'); + } else if (length == 1) { + return generate(body[0]); + } else { + var i = -1, + result = ''; + + while (++i < length) { + if (i != 0) { + result += '|'; + } + result += generate(body[i]); + } + + return result; + } + } + + function generateDot(node) { + assertType(node.type, 'dot'); + + return '.'; + } + + function generateGroup(node) { + assertType(node.type, 'group'); + + var result = '('; + + switch (node.behavior) { + case 'normal': + break; + case 'ignore': + result += '?:'; + break; + case 'lookahead': + result += '?='; + break; + case 'negativeLookahead': + result += '?!'; + break; + default: + throw Error('Invalid behaviour: ' + node.behaviour); + } + + var body = node.body, + length = body ? body.length : 0; + + if (length == 1) { + result += generate(body[0]); + } else { + var i = -1; + + while (++i < length) { + result += generate(body[i]); + } + } + + result += ')'; + + return result; + } + + function generateQuantifier(node) { + assertType(node.type, 'quantifier'); + + var quantifier = '', + min = node.min, + max = node.max; + + switch (max) { + case undefined: + case null: + switch (min) { + case 0: + quantifier = '*' + break; + case 1: + quantifier = '+'; + break; + default: + quantifier = '{' + min + ',}'; + break; + } + break; + default: + if (min == max) { + quantifier = '{' + min + '}'; + } + else if (min == 0 && max == 1) { + quantifier = '?'; + } else { + quantifier = '{' + min + ',' + max + '}'; + } + break; + } + + if (!node.greedy) { + quantifier += '?'; + } + + return generateAtom(node.body[0]) + quantifier; + } + + function generateReference(node) { + assertType(node.type, 'reference'); + + return '\\' + node.matchIndex; + } + + function generateTerm(node) { + assertType(node.type, 'anchor|characterClass|characterClassEscape|empty|group|quantifier|reference|value'); + + return generate(node); + } + + function generateValue(node) { + assertType(node.type, 'value'); + + var kind = node.kind, + codePoint = node.codePoint; + + switch (kind) { + case 'controlLetter': + return '\\c' + fromCodePoint(codePoint + 64); + case 'hexadecimalEscape': + return '\\x' + ('00' + codePoint.toString(16).toUpperCase()).slice(-2); + case 'identifier': + return '\\' + fromCodePoint(codePoint); + case 'null': + return '\\' + codePoint; + case 'octal': + return '\\' + codePoint.toString(8); + case 'singleEscape': + switch (codePoint) { + case 0x0008: + return '\\b'; + case 0x009: + return '\\t'; + case 0x00A: + return '\\n'; + case 0x00B: + return '\\v'; + case 0x00C: + return '\\f'; + case 0x00D: + return '\\r'; + default: + throw Error('Invalid codepoint: ' + codePoint); + } + case 'symbol': + return fromCodePoint(codePoint); + case 'unicodeEscape': + return '\\u' + ('0000' + codePoint.toString(16).toUpperCase()).slice(-4); + case 'unicodeCodePointEscape': + return '\\u{' + codePoint.toString(16).toUpperCase() + '}'; + default: + throw Error('Unsupported node kind: ' + kind); + } + } + + /*--------------------------------------------------------------------------*/ + + generate.alternative = generateAlternative; + generate.anchor = generateAnchor; + generate.characterClass = generateCharacterClass; + generate.characterClassEscape = generateCharacterClassEscape; + generate.characterClassRange = generateCharacterClassRange; + generate.disjunction = generateDisjunction; + generate.dot = generateDot; + generate.group = generateGroup; + generate.quantifier = generateQuantifier; + generate.reference = generateReference; + generate.value = generateValue; + + /*--------------------------------------------------------------------------*/ + + // export regjsgen + // some AMD build optimizers, like r.js, check for condition patterns like the following: + if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + // define as an anonymous module so, through path mapping, it can be aliased + define(function() { + return { + 'generate': generate + }; + }); + } + // check for `exports` after `define` in case a build optimizer adds an `exports` object + else if (freeExports && freeModule) { + // in Narwhal, Node.js, Rhino -require, or RingoJS + freeExports.generate = generate; + } + // in a browser or Rhino + else { + root.regjsgen = { + 'generate': generate + }; + } +}.call(this)); diff --git a/node_modules/regjsparser/CHANGELOG b/node_modules/regjsparser/CHANGELOG new file mode 100644 index 000000000..d2fe483e1 --- /dev/null +++ b/node_modules/regjsparser/CHANGELOG @@ -0,0 +1,12 @@ +2014-08-31: Version 0.1.2 + * Change the field ref to matchIndex on the type=refernce node (issue #67) + +2014-08-30: Version 0.1.1 + * Only handled unicode code point escapes if 'u' flag is set (issue #56) + * Removed `matchIdx` from the AST + * References like /\1/ were broken (issue #57) + * Renamed type `ref` to `reference` in the AST + * Update regex to match identifier and include script to generate regex + +2014-06-29: Version 0.1.0 + * first tagged release diff --git a/node_modules/regjsparser/LICENSE.BSD b/node_modules/regjsparser/LICENSE.BSD new file mode 100644 index 000000000..3e580c355 --- /dev/null +++ b/node_modules/regjsparser/LICENSE.BSD @@ -0,0 +1,19 @@ +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/node_modules/regjsparser/README.md b/node_modules/regjsparser/README.md new file mode 100644 index 000000000..83f67e90a --- /dev/null +++ b/node_modules/regjsparser/README.md @@ -0,0 +1,34 @@ +# RegJSParser + +Parsing the JavaScript's RegExp in JavaScript. + +## Installation + +```bash +npm install regjsparser +``` + +## Usage + +```js +var parse = require('regjsparser').parse; + +var parseTree = parse('^a'); // /^a/ +console.log(parseTree); +``` + +## Testing + +To run the tests, run the following command: + +```bash +npm test +``` + +To create a new reference file, execute… + +```bash +node test/update-fixtures.js +``` + +…from the repo top directory. diff --git a/node_modules/regjsparser/bin/parser b/node_modules/regjsparser/bin/parser new file mode 100755 index 000000000..09a603698 --- /dev/null +++ b/node_modules/regjsparser/bin/parser @@ -0,0 +1,50 @@ +#!/usr/bin/env node +(function() { + + var fs = require('fs'); + var parse = require('../parser').parse; + var jsesc = require('jsesc'); + var regexes = process.argv.splice(2); + var first = regexes[0]; + var data; + var log = console.log; + var main = function() { + if (/^(?:-h|--help|undefined)$/.test(first)) { + log([ + '\nUsage:\n', + '\tregjsparser [regex ...]', + '\tregjsparser [-h | --help]', + '\nExamples:\n', + '\tregjsparser \'^foo.bar$\'', + '\tregjsparser \'[a-zA-Z0-9]\'' + ].join('\n')); + return process.exit(1); + } + + regexes.forEach(function(snippet) { + var result; + try { + result = parse(snippet); + log(jsesc(result, { + 'json': true, + 'compact': false, + 'indent': '\t' + })); + } catch(error) { + log(error.message + '\n'); + log('Error: failed to parse. Make sure the regular expression is valid.'); + log('If you think this is a bug in regjsparser, please report it:'); + log('\thttps://github.com/jviereck/regjsparser/issues/new'); + log('\nStack trace:\n'); + log(error.stack); + return process.exit(1); + } + }); + // Return with exit status 0 outside of the `forEach` loop, in case + // multiple regular expressions were passed in. + return process.exit(0); + }; + + main(); + +}()); diff --git a/node_modules/regjsparser/node_modules/.bin/jsesc b/node_modules/regjsparser/node_modules/.bin/jsesc new file mode 120000 index 000000000..7237604c3 --- /dev/null +++ b/node_modules/regjsparser/node_modules/.bin/jsesc @@ -0,0 +1 @@ +../jsesc/bin/jsesc \ No newline at end of file diff --git a/node_modules/regjsparser/node_modules/jsesc/LICENSE-MIT.txt b/node_modules/regjsparser/node_modules/jsesc/LICENSE-MIT.txt new file mode 100644 index 000000000..97067e546 --- /dev/null +++ b/node_modules/regjsparser/node_modules/jsesc/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/regjsparser/node_modules/jsesc/README.md b/node_modules/regjsparser/node_modules/jsesc/README.md new file mode 100644 index 000000000..7a083c759 --- /dev/null +++ b/node_modules/regjsparser/node_modules/jsesc/README.md @@ -0,0 +1,375 @@ +# jsesc [![Build status](https://travis-ci.org/mathiasbynens/jsesc.svg?branch=master)](https://travis-ci.org/mathiasbynens/jsesc) [![Code coverage status](http://img.shields.io/coveralls/mathiasbynens/jsesc/master.svg)](https://coveralls.io/r/mathiasbynens/jsesc) [![Dependency status](https://gemnasium.com/mathiasbynens/jsesc.svg)](https://gemnasium.com/mathiasbynens/jsesc) + +This is a JavaScript library for [escaping JavaScript strings](http://mathiasbynens.be/notes/javascript-escapes) while generating the shortest possible valid ASCII-only output. [Here’s an online demo.](http://mothereff.in/js-escapes) + +This can be used to avoid [mojibake](http://en.wikipedia.org/wiki/Mojibake) and other encoding issues, or even to [avoid errors](https://twitter.com/annevk/status/380000829643571200) when passing JSON-formatted data (which may contain U+2028 LINE SEPARATOR, U+2029 PARAGRAPH SEPARATOR, or [lone surrogates](http://esdiscuss.org/topic/code-points-vs-unicode-scalar-values#content-14)) to a JavaScript parser or an UTF-8 encoder, respectively. + +Feel free to fork if you see possible improvements! + +## Installation + +Via [Bower](http://bower.io/): + +```bash +bower install jsesc +``` + +Via [Component](https://github.com/component/component): + +```bash +component install mathiasbynens/jsesc +``` + +Via [npm](http://npmjs.org/): + +```bash +npm install jsesc +``` + +In a browser: + +```html + +``` + +In [Node.js](http://nodejs.org/) and [RingoJS](http://ringojs.org/): + +```js +var jsesc = require('jsesc'); +``` + +In [Narwhal](http://narwhaljs.org/): + +```js +var jsesc = require('jsesc').jsesc; +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('jsesc.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'jsesc': 'path/to/jsesc' + } + }, + ['jsesc'], + function(jsesc) { + console.log(jsesc); + } +); +``` + +## API + +### `jsesc(value, options)` + +This function takes a value and returns an escaped version of the value where any characters that are not printable ASCII symbols are escaped using the shortest possible (but valid) [escape sequences for use in JavaScript strings](http://mathiasbynens.be/notes/javascript-escapes). The first supported value type is strings: + +```js +jsesc('Ich ♥ Bücher'); +// → 'Ich \\u2665 B\\xFCcher' + +jsesc('foo 𝌆 bar'); +// → 'foo \\uD834\\uDF06 bar' +``` + +Instead of a string, the `value` can also be an array, or an object. In such cases, `jsesc` will return a stringified version of the value where any characters that are not printable ASCII symbols are escaped in the same way. + +```js +// Escaping an array +jsesc([ + 'Ich ♥ Bücher', 'foo 𝌆 bar' +]); +// → '[\'Ich \\u2665 B\\xFCcher\',\'foo \\uD834\\uDF06 bar\']' + +// Escaping an object +jsesc({ + 'Ich ♥ Bücher': 'foo 𝌆 bar' +}); +// → '{\'Ich \\u2665 B\\xFCcher\':\'foo \\uD834\\uDF06 bar\'}' +``` + +The optional `options` argument accepts an object with the following options: + +#### `quotes` + +The default value for the `quotes` option is `'single'`. This means that any occurences of `'` in the input string will be escaped as `\'`, so that the output can be used in a string literal wrapped in single quotes. + +```js +jsesc('Lorem ipsum "dolor" sit \'amet\' etc.'); +// → 'Lorem ipsum "dolor" sit \\\'amet\\\' etc.' + +jsesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'single' +}); +// → 'Lorem ipsum "dolor" sit \\\'amet\\\' etc.' +// → "Lorem ipsum \"dolor\" sit \\'amet\\' etc." +``` + +If you want to use the output as part of a string literal wrapped in double quotes, set the `quotes` option to `'double'`. + +```js +jsesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'double' +}); +// → 'Lorem ipsum \\"dolor\\" sit \'amet\' etc.' +// → "Lorem ipsum \\\"dolor\\\" sit 'amet' etc." +``` + +This setting also affects the output for arrays and objects: + +```js +jsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, { + 'quotes': 'double' +}); +// → '{"Ich \\u2665 B\\xFCcher":"foo \\uD834\\uDF06 bar"}' + +jsesc([ 'Ich ♥ Bücher', 'foo 𝌆 bar' ], { + 'quotes': 'double' +}); +// → '["Ich \\u2665 B\\xFCcher","foo \\uD834\\uDF06 bar"]' +``` + +#### `wrap` + +The `wrap` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, the output will be a valid JavaScript string literal wrapped in quotes. The type of quotes can be specified through the `quotes` setting. + +```js +jsesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'single', + 'wrap': true +}); +// → '\'Lorem ipsum "dolor" sit \\\'amet\\\' etc.\'' +// → "\'Lorem ipsum \"dolor\" sit \\\'amet\\\' etc.\'" + +jsesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'double', + 'wrap': true +}); +// → '"Lorem ipsum \\"dolor\\" sit \'amet\' etc."' +// → "\"Lorem ipsum \\\"dolor\\\" sit \'amet\' etc.\"" +``` + +#### `es6` + +The `es6` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, any astral Unicode symbols in the input will be escaped using [ECMAScript 6 Unicode code point escape sequences](http://mathiasbynens.be/notes/javascript-escapes#unicode-code-point) instead of using separate escape sequences for each surrogate half. If backwards compatibility with ES5 environments is a concern, don’t enable this setting. If the `json` setting is enabled, the value for the `es6` setting is ignored (as if it was `false`). + +```js +// By default, the `es6` option is disabled: +jsesc('foo 𝌆 bar 💩 baz'); +// → 'foo \\uD834\\uDF06 bar \\uD83D\\uDCA9 baz' + +// To explicitly disable it: +jsesc('foo 𝌆 bar 💩 baz', { + 'es6': false +}); +// → 'foo \\uD834\\uDF06 bar \\uD83D\\uDCA9 baz' + +// To enable it: +jsesc('foo 𝌆 bar 💩 baz', { + 'es6': true +}); +// → 'foo \\u{1D306} bar \\u{1F4A9} baz' +``` + +#### `escapeEverything` + +The `escapeEverything` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, all the symbols in the output will be escaped, even printable ASCII symbols. + +```js +jsesc('lolwat"foo\'bar', { + 'escapeEverything': true +}); +// → '\\x6C\\x6F\\x6C\\x77\\x61\\x74\\"\\x66\\x6F\\x6F\\\'\\x62\\x61\\x72' +// → "\\x6C\\x6F\\x6C\\x77\\x61\\x74\\\"\\x66\\x6F\\x6F\\'\\x62\\x61\\x72" +``` + +This setting also affects the output for arrays and objects: + +```js +jsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, { + 'escapeEverything': true +}); +// → '{\'\x49\x63\x68\x20\u2665\x20\x42\xFC\x63\x68\x65\x72\':\'\x66\x6F\x6F\x20\uD834\uDF06\x20\x62\x61\x72\'}' +// → "{'\x49\x63\x68\x20\u2665\x20\x42\xFC\x63\x68\x65\x72':'\x66\x6F\x6F\x20\uD834\uDF06\x20\x62\x61\x72'}" + +jsesc([ 'Ich ♥ Bücher': 'foo 𝌆 bar' ], { + 'escapeEverything': true +}); +// → '[\'\x49\x63\x68\x20\u2665\x20\x42\xFC\x63\x68\x65\x72\',\'\x66\x6F\x6F\x20\uD834\uDF06\x20\x62\x61\x72\']' +``` + +#### `compact` + +The `compact` option takes a boolean value (`true` or `false`), and defaults to `true` (enabled). When enabled, the output for arrays and objects will be as compact as possible; it won’t be formatted nicely. + +```js +jsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, { + 'compact': true // this is the default +}); +// → '{\'Ich \u2665 B\xFCcher\':\'foo \uD834\uDF06 bar\'}' + +jsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, { + 'compact': false +}); +// → '{\n\t\'Ich \u2665 B\xFCcher\': \'foo \uD834\uDF06 bar\'\n}' + +jsesc([ 'Ich ♥ Bücher', 'foo 𝌆 bar' ], { + 'compact': false +}); +// → '[\n\t\'Ich \u2665 B\xFCcher\',\n\t\'foo \uD834\uDF06 bar\'\n]' +``` + +This setting has no effect on the output for strings. + +#### `indent` + +The `indent` option takes a string value, and defaults to `'\t'`. When the `compact` setting is enabled (`true`), the value of the `indent` option is used to format the output for arrays and objects. + +```js +jsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, { + 'compact': false, + 'indent': '\t' // this is the default +}); +// → '{\n\t\'Ich \u2665 B\xFCcher\': \'foo \uD834\uDF06 bar\'\n}' + +jsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, { + 'compact': false, + 'indent': ' ' +}); +// → '{\n \'Ich \u2665 B\xFCcher\': \'foo \uD834\uDF06 bar\'\n}' + +jsesc([ 'Ich ♥ Bücher', 'foo 𝌆 bar' ], { + 'compact': false, + 'indent': ' ' +}); +// → '[\n \'Ich \u2665 B\xFCcher\',\n\ t\'foo \uD834\uDF06 bar\'\n]' +``` + +This setting has no effect on the output for strings. + +#### `json` + +The `json` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, the output is valid JSON. [Hexadecimal character escape sequences](http://mathiasbynens.be/notes/javascript-escapes#hexadecimal) and [the `\v` or `\0` escape sequences](http://mathiasbynens.be/notes/javascript-escapes#single) will not be used. Setting `json: true` implies `quotes: 'double', wrap: true, es6: false`, although these values can still be overridden if needed — but in such cases, the output won’t be valid JSON anymore. + +```js +jsesc('foo\x00bar\xFF\uFFFDbaz', { + 'json': true +}); +// → '"foo\\u0000bar\\u00FF\\uFFFDbaz"' + +jsesc({ 'foo\x00bar\xFF\uFFFDbaz': 'foo\x00bar\xFF\uFFFDbaz' }, { + 'json': true +}); +// → '{"foo\\u0000bar\\u00FF\\uFFFDbaz":"foo\\u0000bar\\u00FF\\uFFFDbaz"}' + +jsesc([ 'foo\x00bar\xFF\uFFFDbaz', 'foo\x00bar\xFF\uFFFDbaz' ], { + 'json': true +}); +// → '["foo\\u0000bar\\u00FF\\uFFFDbaz","foo\\u0000bar\\u00FF\\uFFFDbaz"]' + +// Values that are acceptable in JSON but aren’t strings, arrays, or object +// literals can’t be escaped, so they’ll just be preserved: +jsesc([ 'foo\x00bar', [1, '©', { 'foo': true, 'qux': null }], 42 ], { + 'json': true +}); +// → '["foo\\u0000bar",[1,"\\u00A9",{"foo":true,"qux":null}],42]' +// Values that aren’t allowed in JSON are run through `JSON.stringify()`: +jsesc([ undefined, -Infinity ], { + 'json': true +}); +// → '[null,null]' +``` + +**Note:** Using this option on objects or arrays that contain non-string values relies on `JSON.stringify()`. For legacy environments like IE ≤ 7, use [a `JSON` polyfill](http://bestiejs.github.io/json3/). + +### `jsesc.version` + +A string representing the semantic version number. + +### Using the `jsesc` binary + +To use the `jsesc` binary in your shell, simply install jsesc globally using npm: + +```bash +npm install -g jsesc +``` + +After that you will be able to escape strings from the command line: + +```bash +$ jsesc 'föo ♥ bår 𝌆 baz' +f\xF6o \u2665 b\xE5r \uD834\uDF06 baz +``` + +To escape arrays or objects containing string values, use the `-o`/`--object` option: + +```bash +$ jsesc --object '{ "föo": "♥", "bår": "𝌆 baz" }' +{'f\xF6o':'\u2665','b\xE5r':'\uD834\uDF06 baz'} +``` + +To prettify the output in such cases, use the `-p`/`--pretty` option: + +```bash +$ jsesc --pretty '{ "föo": "♥", "bår": "𝌆 baz" }' +{ + 'f\xF6o': '\u2665', + 'b\xE5r': '\uD834\uDF06 baz' +} +``` + +For valid JSON output, use the `-j`/`--json` option: + +```bash +$ jsesc --json --pretty '{ "föo": "♥", "bår": "𝌆 baz" }' +{ + "f\u00F6o": "\u2665", + "b\u00E5r": "\uD834\uDF06 baz" +} +``` + +Read a local JSON file, escape any non-ASCII symbols, and save the result to a new file: + +```bash +$ jsesc --json --object < data-raw.json > data-escaped.json +``` + +Or do the same with an online JSON file: + +```bash +$ curl -sL "http://git.io/aorKgQ" | jsesc --json --object > data-escaped.json +``` + +See `jsesc --help` for the full list of options. + +## Support + +This library has been tested in at least Chrome 27-29, Firefox 3-22, Safari 4-6, Opera 10-12, IE 6-10, Node.js v0.10.0, Narwhal 0.3.2, RingoJS 0.8-0.9, PhantomJS 1.9.0, and Rhino 1.7RC4. + +**Note:** Using the `json` option on objects or arrays that contain non-string values relies on `JSON.parse()`. For legacy environments like IE ≤ 7, use [a `JSON` polyfill](http://bestiejs.github.io/json3/). + +## Unit tests & code coverage + +After cloning this repository, run `npm install` to install the dependencies needed for development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](http://mathiasbynens.be/) | + +## License + +This library is available under the [MIT](http://mths.be/mit) license. diff --git a/node_modules/regjsparser/node_modules/jsesc/bin/jsesc b/node_modules/regjsparser/node_modules/jsesc/bin/jsesc new file mode 100755 index 000000000..5900dd4af --- /dev/null +++ b/node_modules/regjsparser/node_modules/jsesc/bin/jsesc @@ -0,0 +1,138 @@ +#!/usr/bin/env node +(function() { + + var fs = require('fs'); + var stringEscape = require('../jsesc.js'); + var strings = process.argv.splice(2); + var stdin = process.stdin; + var data; + var timeout; + var isObject = false; + var options = {}; + var log = console.log; + + var main = function() { + var option = strings[0]; + + if (/^(?:-h|--help|undefined)$/.test(option)) { + log( + 'jsesc v%s - http://mths.be/jsesc', + stringEscape.version + ); + log([ + '\nUsage:\n', + '\tjsesc [string]', + '\tjsesc [-s | --single-quotes] [string]', + '\tjsesc [-d | --double-quotes] [string]', + '\tjsesc [-w | --wrap] [string]', + '\tjsesc [-e | --escape-everything] [string]', + '\tjsesc [-6 | --es6] [string]', + '\tjsesc [-j | --json] [string]', + '\tjsesc [-o | --object] [stringified_object]', // `JSON.parse()` the argument + '\tjsesc [-p | --pretty] [string]', // `compact: false` + '\tjsesc [-v | --version]', + '\tjsesc [-h | --help]', + '\nExamples:\n', + '\tjsesc \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\tjsesc --json \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\tjsesc --json --escape-everything \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\tjsesc --double-quotes --wrap \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\techo \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\' | jsesc' + ].join('\n')); + return process.exit(1); + } + + if (/^(?:-v|--version)$/.test(option)) { + log('v%s', stringEscape.version); + return process.exit(1); + } + + strings.forEach(function(string) { + // Process options + if (/^(?:-s|--single-quotes)$/.test(string)) { + options.quotes = 'single'; + return; + } + if (/^(?:-d|--double-quotes)$/.test(string)) { + options.quotes = 'double'; + return; + } + if (/^(?:-w|--wrap)$/.test(string)) { + options.wrap = true; + return; + } + if (/^(?:-6|--es6)$/.test(string)) { + options.es6 = true; + return; + } + if (/^(?:-e|--escape-everything)$/.test(string)) { + options.escapeEverything = true; + return; + } + if (/^(?:-j|--json)$/.test(string)) { + options.json = true; + return; + } + if (/^(?:-o|--object)$/.test(string)) { + isObject = true; + return; + } + if (/^(?:-p|--pretty)$/.test(string)) { + isObject = true; + options.compact = false; + return; + } + + // Process string(s) + var result; + try { + if (isObject) { + string = JSON.parse(string); + } + result = stringEscape(string, options); + log(result); + } catch(error) { + log(error.message + '\n'); + log('Error: failed to escape.'); + log('If you think this is a bug in jsesc, please report it:'); + log('https://github.com/mathiasbynens/jsesc/issues/new'); + log( + '\nStack trace using jsesc@%s:\n', + stringEscape.version + ); + log(error.stack); + return process.exit(1); + } + }); + // Return with exit status 0 outside of the `forEach` loop, in case + // multiple strings were passed in. + return process.exit(0); + + }; + + if (stdin.isTTY) { + // handle shell arguments + main(); + } else { + // Either the script is called from within a non-TTY context, + // or `stdin` content is being piped in. + if (!process.stdout.isTTY) { // called from a non-TTY context + timeout = setTimeout(function() { + // if no piped data arrived after a while, handle shell arguments + main(); + }, 250); + } + + data = ''; + stdin.on('data', function(chunk) { + clearTimeout(timeout); + data += chunk; + }); + stdin.on('end', function() { + strings.push(data.trim()); + main(); + }); + stdin.resume(); + } + +}()); diff --git a/node_modules/regjsparser/node_modules/jsesc/jsesc.js b/node_modules/regjsparser/node_modules/jsesc/jsesc.js new file mode 100644 index 000000000..03bbd683b --- /dev/null +++ b/node_modules/regjsparser/node_modules/jsesc/jsesc.js @@ -0,0 +1,265 @@ +/*! http://mths.be/jsesc v0.5.0 by @mathias */ +;(function(root) { + + // Detect free variables `exports` + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module` + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root` + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var forOwn = function(object, callback) { + var key; + for (key in object) { + if (hasOwnProperty.call(object, key)) { + callback(key, object[key]); + } + } + }; + + var extend = function(destination, source) { + if (!source) { + return destination; + } + forOwn(source, function(key, value) { + destination[key] = value; + }); + return destination; + }; + + var forEach = function(array, callback) { + var length = array.length; + var index = -1; + while (++index < length) { + callback(array[index]); + } + }; + + var toString = object.toString; + var isArray = function(value) { + return toString.call(value) == '[object Array]'; + }; + var isObject = function(value) { + // This is a very simple check, but it’s good enough for what we need. + return toString.call(value) == '[object Object]'; + }; + var isString = function(value) { + return typeof value == 'string' || + toString.call(value) == '[object String]'; + }; + var isFunction = function(value) { + // In a perfect world, the `typeof` check would be sufficient. However, + // in Chrome 1–12, `typeof /x/ == 'object'`, and in IE 6–8 + // `typeof alert == 'object'` and similar for other host objects. + return typeof value == 'function' || + toString.call(value) == '[object Function]'; + }; + + /*--------------------------------------------------------------------------*/ + + // http://mathiasbynens.be/notes/javascript-escapes#single + var singleEscapes = { + '"': '\\"', + '\'': '\\\'', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t' + // `\v` is omitted intentionally, because in IE < 9, '\v' == 'v'. + // '\v': '\\x0B' + }; + var regexSingleEscape = /["'\\\b\f\n\r\t]/; + + var regexDigit = /[0-9]/; + var regexWhitelist = /[ !#-&\(-\[\]-~]/; + + var jsesc = function(argument, options) { + // Handle options + var defaults = { + 'escapeEverything': false, + 'quotes': 'single', + 'wrap': false, + 'es6': false, + 'json': false, + 'compact': true, + 'indent': '\t', + '__indent__': '' + }; + var json = options && options.json; + if (json) { + defaults.quotes = 'double'; + defaults.wrap = true; + } + options = extend(defaults, options); + if (options.quotes != 'single' && options.quotes != 'double') { + options.quotes = 'single'; + } + var quote = options.quotes == 'double' ? '"' : '\''; + var compact = options.compact; + var indent = options.indent; + var oldIndent; + var newLine = compact ? '' : '\n'; + var result; + var isEmpty = true; + + if (json && argument && isFunction(argument.toJSON)) { + argument = argument.toJSON(); + } + + if (!isString(argument)) { + if (isArray(argument)) { + result = []; + options.wrap = true; + oldIndent = options.__indent__; + indent += oldIndent; + options.__indent__ = indent; + forEach(argument, function(value) { + isEmpty = false; + result.push( + (compact ? '' : indent) + + jsesc(value, options) + ); + }); + if (isEmpty) { + return '[]'; + } + return '[' + newLine + result.join(',' + newLine) + newLine + + (compact ? '' : oldIndent) + ']'; + } else if (!isObject(argument)) { + if (json) { + // For some values (e.g. `undefined`, `function` objects), + // `JSON.stringify(value)` returns `undefined` (which isn’t valid + // JSON) instead of `'null'`. + return JSON.stringify(argument) || 'null'; + } + return String(argument); + } else { // it’s an object + result = []; + options.wrap = true; + oldIndent = options.__indent__; + indent += oldIndent; + options.__indent__ = indent; + forOwn(argument, function(key, value) { + isEmpty = false; + result.push( + (compact ? '' : indent) + + jsesc(key, options) + ':' + + (compact ? '' : ' ') + + jsesc(value, options) + ); + }); + if (isEmpty) { + return '{}'; + } + return '{' + newLine + result.join(',' + newLine) + newLine + + (compact ? '' : oldIndent) + '}'; + } + } + + var string = argument; + // Loop over each code unit in the string and escape it + var index = -1; + var length = string.length; + var first; + var second; + var codePoint; + result = ''; + while (++index < length) { + var character = string.charAt(index); + if (options.es6) { + first = string.charCodeAt(index); + if ( // check if it’s the start of a surrogate pair + first >= 0xD800 && first <= 0xDBFF && // high surrogate + length > index + 1 // there is a next code unit + ) { + second = string.charCodeAt(index + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + result += '\\u{' + codePoint.toString(16).toUpperCase() + '}'; + index++; + continue; + } + } + } + if (!options.escapeEverything) { + if (regexWhitelist.test(character)) { + // It’s a printable ASCII character that is not `"`, `'` or `\`, + // so don’t escape it. + result += character; + continue; + } + if (character == '"') { + result += quote == character ? '\\"' : character; + continue; + } + if (character == '\'') { + result += quote == character ? '\\\'' : character; + continue; + } + } + if ( + character == '\0' && + !json && + !regexDigit.test(string.charAt(index + 1)) + ) { + result += '\\0'; + continue; + } + if (regexSingleEscape.test(character)) { + // no need for a `hasOwnProperty` check here + result += singleEscapes[character]; + continue; + } + var charCode = character.charCodeAt(0); + var hexadecimal = charCode.toString(16).toUpperCase(); + var longhand = hexadecimal.length > 2 || json; + var escaped = '\\' + (longhand ? 'u' : 'x') + + ('0000' + hexadecimal).slice(longhand ? -4 : -2); + result += escaped; + continue; + } + if (options.wrap) { + result = quote + result + quote; + } + return result; + }; + + jsesc.version = '0.5.0'; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return jsesc; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = jsesc; + } else { // in Narwhal or RingoJS v0.7.0- + freeExports.jsesc = jsesc; + } + } else { // in Rhino or a web browser + root.jsesc = jsesc; + } + +}(this)); diff --git a/node_modules/regjsparser/node_modules/jsesc/man/jsesc.1 b/node_modules/regjsparser/node_modules/jsesc/man/jsesc.1 new file mode 100644 index 000000000..5257768f2 --- /dev/null +++ b/node_modules/regjsparser/node_modules/jsesc/man/jsesc.1 @@ -0,0 +1,90 @@ +.Dd October 25, 2013 +.Dt jsesc 1 +.Sh NAME +.Nm jsesc +.Nd escape strings for use in JavaScript string literals +.Sh SYNOPSIS +.Nm +.Op Fl s | -single-quotes Ar string +.br +.Op Fl d | -double-quotes Ar string +.br +.Op Fl w | -wrap Ar string +.br +.Op Fl 6 | -es6 Ar string +.br +.Op Fl e | -escape-everything Ar string +.br +.Op Fl j | -json Ar string +.br +.Op Fl p | -object Ar string +.br +.Op Fl p | -pretty Ar string +.br +.Op Fl v | -version +.br +.Op Fl h | -help +.Sh DESCRIPTION +.Nm +escapes strings for use in JavaScript string literals while generating the shortest possible valid ASCII-only output. +.Sh OPTIONS +.Bl -ohang -offset +.It Sy "-s, --single-quotes" +Escape any occurences of ' in the input string as \\', so that the output can be used in a JavaScript string literal wrapped in single quotes. +.It Sy "-d, --double-quotes" +Escape any occurences of " in the input string as \\", so that the output can be used in a JavaScript string literal wrapped in double quotes. +.It Sy "-w, --wrap" +Make sure the output is a valid JavaScript string literal wrapped in quotes. The type of quotes can be specified using the +.Ar -s | --single-quotes +or +.Ar -d | --double-quotes +settings. +.It Sy "-6, --es6" +Escape any astral Unicode symbols using ECMAScript 6 Unicode code point escape sequences. +.It Sy "-e, --escape-everything" +Escape all the symbols in the output, even printable ASCII symbols. +.It Sy "-j, --json" +Make sure the output is valid JSON. Hexadecimal character escape sequences and the \\v or \\0 escape sequences will not be used. Setting this flag enables the +.Ar -d | --double-quotes +and +.Ar -w | --wrap +settings. +.It Sy "-o, --object" +Treat the input as a JavaScript object rather than a string. Accepted values are flat arrays containing only string values, and flat objects containing only string values. +.It Sy "-p, --pretty" +Pretty-print the output for objects, using whitespace to make it more readable. Setting this flag enables the +.Ar -o | --object +setting. +.It Sy "-v, --version" +Print jsesc's version. +.It Sy "-h, --help" +Show the help screen. +.El +.Sh EXIT STATUS +The +.Nm jsesc +utility exits with one of the following values: +.Pp +.Bl -tag -width flag -compact +.It Li 0 +.Nm +successfully escaped the given string and printed the result. +.It Li 1 +.Nm +wasn't instructed to escape anything (for example, the +.Ar --help +flag was set); or, an error occurred. +.El +.Sh EXAMPLES +.Bl -ohang -offset +.It Sy "jsesc 'foo bar baz'" +Print an escaped version of the given string. +.It Sy echo\ 'foo bar baz'\ |\ jsesc +Print an escaped version of the string that gets piped in. +.El +.Sh BUGS +jsesc's bug tracker is located at . +.Sh AUTHOR +Mathias Bynens +.Sh WWW + diff --git a/node_modules/regjsparser/node_modules/jsesc/package.json b/node_modules/regjsparser/node_modules/jsesc/package.json new file mode 100644 index 000000000..b85a274c3 --- /dev/null +++ b/node_modules/regjsparser/node_modules/jsesc/package.json @@ -0,0 +1,84 @@ +{ + "_from": "jsesc@~0.5.0", + "_id": "jsesc@0.5.0", + "_inBundle": false, + "_integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "_location": "/regjsparser/jsesc", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "jsesc@~0.5.0", + "name": "jsesc", + "escapedName": "jsesc", + "rawSpec": "~0.5.0", + "saveSpec": null, + "fetchSpec": "~0.5.0" + }, + "_requiredBy": [ + "/regjsparser" + ], + "_resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "_shasum": "e7dee66e35d6fc16f710fe91d5cf69f70f08911d", + "_spec": "jsesc@~0.5.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/regjsparser", + "author": { + "name": "Mathias Bynens", + "url": "http://mathiasbynens.be/" + }, + "bin": { + "jsesc": "bin/jsesc" + }, + "bugs": { + "url": "https://github.com/mathiasbynens/jsesc/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A JavaScript library for escaping JavaScript strings while generating the shortest possible valid output.", + "devDependencies": { + "coveralls": "^2.10.0", + "grunt": "^0.4.5", + "grunt-shell": "^0.7.0", + "grunt-template": "^0.2.3", + "istanbul": "^0.3.0", + "qunit-extras": "^1.2.0", + "qunitjs": "~1.11.0", + "regenerate": "^0.6.2", + "requirejs": "^2.1.14" + }, + "directories": { + "test": "tests" + }, + "files": [ + "LICENSE-MIT.txt", + "jsesc.js", + "bin/", + "man/" + ], + "homepage": "http://mths.be/jsesc", + "keywords": [ + "string", + "escape", + "javascript", + "tool" + ], + "licenses": [ + { + "type": "MIT", + "url": "http://mths.be/mit" + } + ], + "main": "jsesc.js", + "man": [ + "man/jsesc.1" + ], + "name": "jsesc", + "repository": { + "type": "git", + "url": "git+https://github.com/mathiasbynens/jsesc.git" + }, + "scripts": { + "test": "node tests/tests.js" + }, + "version": "0.5.0" +} diff --git a/node_modules/regjsparser/package.json b/node_modules/regjsparser/package.json new file mode 100644 index 000000000..83b1b2e84 --- /dev/null +++ b/node_modules/regjsparser/package.json @@ -0,0 +1,63 @@ +{ + "_from": "regjsparser@^0.1.4", + "_id": "regjsparser@0.1.5", + "_inBundle": false, + "_integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "_location": "/regjsparser", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "regjsparser@^0.1.4", + "name": "regjsparser", + "escapedName": "regjsparser", + "rawSpec": "^0.1.4", + "saveSpec": null, + "fetchSpec": "^0.1.4" + }, + "_requiredBy": [ + "/regexpu-core" + ], + "_resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "_shasum": "7ee8f84dc6fa792d3fd0ae228d24bd949ead205c", + "_spec": "regjsparser@^0.1.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/regexpu-core", + "author": { + "name": "'Julian Viereck'", + "email": "julian.viereck@gmail.com" + }, + "bin": { + "regjsparser": "bin/parser" + }, + "bugs": { + "url": "https://github.com/jviereck/regjsparser/issues" + }, + "bundleDependencies": false, + "dependencies": { + "jsesc": "~0.5.0" + }, + "deprecated": false, + "description": "Parsing the JavaScript's RegExp in JavaScript.", + "devDependencies": { + "regenerate": "~1.0.1", + "unicode-7.0.0": "~0.1.5" + }, + "files": [ + "bin/", + "LICENSE.BSD", + "parser.js", + "README.md" + ], + "homepage": "https://github.com/jviereck/regjsparser", + "license": "BSD", + "main": "./parser", + "name": "regjsparser", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/jviereck/regjsparser.git" + }, + "scripts": { + "test": "node test/index.js" + }, + "version": "0.1.5" +} diff --git a/node_modules/regjsparser/parser.js b/node_modules/regjsparser/parser.js new file mode 100644 index 000000000..ae414a3d5 --- /dev/null +++ b/node_modules/regjsparser/parser.js @@ -0,0 +1,962 @@ +// regjsparser +// +// ================================================================== +// +// See ECMA-262 Standard: 15.10.1 +// +// NOTE: The ECMA-262 standard uses the term "Assertion" for /^/. Here the +// term "Anchor" is used. +// +// Pattern :: +// Disjunction +// +// Disjunction :: +// Alternative +// Alternative | Disjunction +// +// Alternative :: +// [empty] +// Alternative Term +// +// Term :: +// Anchor +// Atom +// Atom Quantifier +// +// Anchor :: +// ^ +// $ +// \ b +// \ B +// ( ? = Disjunction ) +// ( ? ! Disjunction ) +// +// Quantifier :: +// QuantifierPrefix +// QuantifierPrefix ? +// +// QuantifierPrefix :: +// * +// + +// ? +// { DecimalDigits } +// { DecimalDigits , } +// { DecimalDigits , DecimalDigits } +// +// Atom :: +// PatternCharacter +// . +// \ AtomEscape +// CharacterClass +// ( Disjunction ) +// ( ? : Disjunction ) +// +// PatternCharacter :: +// SourceCharacter but not any of: ^ $ \ . * + ? ( ) [ ] { } | +// +// AtomEscape :: +// DecimalEscape +// CharacterEscape +// CharacterClassEscape +// +// CharacterEscape[U] :: +// ControlEscape +// c ControlLetter +// HexEscapeSequence +// RegExpUnicodeEscapeSequence[?U] (ES6) +// IdentityEscape[?U] +// +// ControlEscape :: +// one of f n r t v +// ControlLetter :: +// one of +// a b c d e f g h i j k l m n o p q r s t u v w x y z +// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +// +// IdentityEscape :: +// SourceCharacter but not IdentifierPart +// +// +// +// DecimalEscape :: +// DecimalIntegerLiteral [lookahead ∉ DecimalDigit] +// +// CharacterClassEscape :: +// one of d D s S w W +// +// CharacterClass :: +// [ [lookahead ∉ {^}] ClassRanges ] +// [ ^ ClassRanges ] +// +// ClassRanges :: +// [empty] +// NonemptyClassRanges +// +// NonemptyClassRanges :: +// ClassAtom +// ClassAtom NonemptyClassRangesNoDash +// ClassAtom - ClassAtom ClassRanges +// +// NonemptyClassRangesNoDash :: +// ClassAtom +// ClassAtomNoDash NonemptyClassRangesNoDash +// ClassAtomNoDash - ClassAtom ClassRanges +// +// ClassAtom :: +// - +// ClassAtomNoDash +// +// ClassAtomNoDash :: +// SourceCharacter but not one of \ or ] or - +// \ ClassEscape +// +// ClassEscape :: +// DecimalEscape +// b +// CharacterEscape +// CharacterClassEscape + +(function() { + + function parse(str, flags) { + function addRaw(node) { + node.raw = str.substring(node.range[0], node.range[1]); + return node; + } + + function updateRawStart(node, start) { + node.range[0] = start; + return addRaw(node); + } + + function createAnchor(kind, rawLength) { + return addRaw({ + type: 'anchor', + kind: kind, + range: [ + pos - rawLength, + pos + ] + }); + } + + function createValue(kind, codePoint, from, to) { + return addRaw({ + type: 'value', + kind: kind, + codePoint: codePoint, + range: [from, to] + }); + } + + function createEscaped(kind, codePoint, value, fromOffset) { + fromOffset = fromOffset || 0; + return createValue(kind, codePoint, pos - (value.length + fromOffset), pos); + } + + function createCharacter(matches) { + var _char = matches[0]; + var first = _char.charCodeAt(0); + if (hasUnicodeFlag) { + var second; + if (_char.length === 1 && first >= 0xD800 && first <= 0xDBFF) { + second = lookahead().charCodeAt(0); + if (second >= 0xDC00 && second <= 0xDFFF) { + // Unicode surrogate pair + pos++; + return createValue( + 'symbol', + (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000, + pos - 2, pos); + } + } + } + return createValue('symbol', first, pos - 1, pos); + } + + function createDisjunction(alternatives, from, to) { + return addRaw({ + type: 'disjunction', + body: alternatives, + range: [ + from, + to + ] + }); + } + + function createDot() { + return addRaw({ + type: 'dot', + range: [ + pos - 1, + pos + ] + }); + } + + function createCharacterClassEscape(value) { + return addRaw({ + type: 'characterClassEscape', + value: value, + range: [ + pos - 2, + pos + ] + }); + } + + function createReference(matchIndex) { + return addRaw({ + type: 'reference', + matchIndex: parseInt(matchIndex, 10), + range: [ + pos - 1 - matchIndex.length, + pos + ] + }); + } + + function createGroup(behavior, disjunction, from, to) { + return addRaw({ + type: 'group', + behavior: behavior, + body: disjunction, + range: [ + from, + to + ] + }); + } + + function createQuantifier(min, max, from, to) { + if (to == null) { + from = pos - 1; + to = pos; + } + + return addRaw({ + type: 'quantifier', + min: min, + max: max, + greedy: true, + body: null, // set later on + range: [ + from, + to + ] + }); + } + + function createAlternative(terms, from, to) { + return addRaw({ + type: 'alternative', + body: terms, + range: [ + from, + to + ] + }); + } + + function createCharacterClass(classRanges, negative, from, to) { + return addRaw({ + type: 'characterClass', + body: classRanges, + negative: negative, + range: [ + from, + to + ] + }); + } + + function createClassRange(min, max, from, to) { + // See 15.10.2.15: + if (min.codePoint > max.codePoint) { + bail('invalid range in character class', min.raw + '-' + max.raw, from, to); + } + + return addRaw({ + type: 'characterClassRange', + min: min, + max: max, + range: [ + from, + to + ] + }); + } + + function flattenBody(body) { + if (body.type === 'alternative') { + return body.body; + } else { + return [body]; + } + } + + function isEmpty(obj) { + return obj.type === 'empty'; + } + + function incr(amount) { + amount = (amount || 1); + var res = str.substring(pos, pos + amount); + pos += (amount || 1); + return res; + } + + function skip(value) { + if (!match(value)) { + bail('character', value); + } + } + + function match(value) { + if (str.indexOf(value, pos) === pos) { + return incr(value.length); + } + } + + function lookahead() { + return str[pos]; + } + + function current(value) { + return str.indexOf(value, pos) === pos; + } + + function next(value) { + return str[pos + 1] === value; + } + + function matchReg(regExp) { + var subStr = str.substring(pos); + var res = subStr.match(regExp); + if (res) { + res.range = []; + res.range[0] = pos; + incr(res[0].length); + res.range[1] = pos; + } + return res; + } + + function parseDisjunction() { + // Disjunction :: + // Alternative + // Alternative | Disjunction + var res = [], from = pos; + res.push(parseAlternative()); + + while (match('|')) { + res.push(parseAlternative()); + } + + if (res.length === 1) { + return res[0]; + } + + return createDisjunction(res, from, pos); + } + + function parseAlternative() { + var res = [], from = pos; + var term; + + // Alternative :: + // [empty] + // Alternative Term + while (term = parseTerm()) { + res.push(term); + } + + if (res.length === 1) { + return res[0]; + } + + return createAlternative(res, from, pos); + } + + function parseTerm() { + // Term :: + // Anchor + // Atom + // Atom Quantifier + + if (pos >= str.length || current('|') || current(')')) { + return null; /* Means: The term is empty */ + } + + var anchor = parseAnchor(); + + if (anchor) { + return anchor; + } + + var atom = parseAtom(); + if (!atom) { + bail('Expected atom'); + } + var quantifier = parseQuantifier() || false; + if (quantifier) { + quantifier.body = flattenBody(atom); + // The quantifier contains the atom. Therefore, the beginning of the + // quantifier range is given by the beginning of the atom. + updateRawStart(quantifier, atom.range[0]); + return quantifier; + } + return atom; + } + + function parseGroup(matchA, typeA, matchB, typeB) { + var type = null, from = pos; + + if (match(matchA)) { + type = typeA; + } else if (match(matchB)) { + type = typeB; + } else { + return false; + } + + var body = parseDisjunction(); + if (!body) { + bail('Expected disjunction'); + } + skip(')'); + var group = createGroup(type, flattenBody(body), from, pos); + + if (type == 'normal') { + // Keep track of the number of closed groups. This is required for + // parseDecimalEscape(). In case the string is parsed a second time the + // value already holds the total count and no incrementation is required. + if (firstIteration) { + closedCaptureCounter++; + } + } + return group; + } + + function parseAnchor() { + // Anchor :: + // ^ + // $ + // \ b + // \ B + // ( ? = Disjunction ) + // ( ? ! Disjunction ) + var res, from = pos; + + if (match('^')) { + return createAnchor('start', 1 /* rawLength */); + } else if (match('$')) { + return createAnchor('end', 1 /* rawLength */); + } else if (match('\\b')) { + return createAnchor('boundary', 2 /* rawLength */); + } else if (match('\\B')) { + return createAnchor('not-boundary', 2 /* rawLength */); + } else { + return parseGroup('(?=', 'lookahead', '(?!', 'negativeLookahead'); + } + } + + function parseQuantifier() { + // Quantifier :: + // QuantifierPrefix + // QuantifierPrefix ? + // + // QuantifierPrefix :: + // * + // + + // ? + // { DecimalDigits } + // { DecimalDigits , } + // { DecimalDigits , DecimalDigits } + + var res, from = pos; + var quantifier; + var min, max; + + if (match('*')) { + quantifier = createQuantifier(0); + } + else if (match('+')) { + quantifier = createQuantifier(1); + } + else if (match('?')) { + quantifier = createQuantifier(0, 1); + } + else if (res = matchReg(/^\{([0-9]+)\}/)) { + min = parseInt(res[1], 10); + quantifier = createQuantifier(min, min, res.range[0], res.range[1]); + } + else if (res = matchReg(/^\{([0-9]+),\}/)) { + min = parseInt(res[1], 10); + quantifier = createQuantifier(min, undefined, res.range[0], res.range[1]); + } + else if (res = matchReg(/^\{([0-9]+),([0-9]+)\}/)) { + min = parseInt(res[1], 10); + max = parseInt(res[2], 10); + if (min > max) { + bail('numbers out of order in {} quantifier', '', from, pos); + } + quantifier = createQuantifier(min, max, res.range[0], res.range[1]); + } + + if (quantifier) { + if (match('?')) { + quantifier.greedy = false; + quantifier.range[1] += 1; + } + } + + return quantifier; + } + + function parseAtom() { + // Atom :: + // PatternCharacter + // . + // \ AtomEscape + // CharacterClass + // ( Disjunction ) + // ( ? : Disjunction ) + + var res; + + // jviereck: allow ']', '}' here as well to be compatible with browser's + // implementations: ']'.match(/]/); + // if (res = matchReg(/^[^^$\\.*+?()[\]{}|]/)) { + if (res = matchReg(/^[^^$\\.*+?(){[|]/)) { + // PatternCharacter + return createCharacter(res); + } + else if (match('.')) { + // . + return createDot(); + } + else if (match('\\')) { + // \ AtomEscape + res = parseAtomEscape(); + if (!res) { + bail('atomEscape'); + } + return res; + } + else if (res = parseCharacterClass()) { + return res; + } + else { + // ( Disjunction ) + // ( ? : Disjunction ) + return parseGroup('(?:', 'ignore', '(', 'normal'); + } + } + + function parseUnicodeSurrogatePairEscape(firstEscape) { + if (hasUnicodeFlag) { + var first, second; + if (firstEscape.kind == 'unicodeEscape' && + (first = firstEscape.codePoint) >= 0xD800 && first <= 0xDBFF && + current('\\') && next('u') ) { + var prevPos = pos; + pos++; + var secondEscape = parseClassEscape(); + if (secondEscape.kind == 'unicodeEscape' && + (second = secondEscape.codePoint) >= 0xDC00 && second <= 0xDFFF) { + // Unicode surrogate pair + firstEscape.range[1] = secondEscape.range[1]; + firstEscape.codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + firstEscape.type = 'value'; + firstEscape.kind = 'unicodeCodePointEscape'; + addRaw(firstEscape); + } + else { + pos = prevPos; + } + } + } + return firstEscape; + } + + function parseClassEscape() { + return parseAtomEscape(true); + } + + function parseAtomEscape(insideCharacterClass) { + // AtomEscape :: + // DecimalEscape + // CharacterEscape + // CharacterClassEscape + + var res, from = pos; + + res = parseDecimalEscape(); + if (res) { + return res; + } + + // For ClassEscape + if (insideCharacterClass) { + if (match('b')) { + // 15.10.2.19 + // The production ClassEscape :: b evaluates by returning the + // CharSet containing the one character (Unicode value 0008). + return createEscaped('singleEscape', 0x0008, '\\b'); + } else if (match('B')) { + bail('\\B not possible inside of CharacterClass', '', from); + } + } + + res = parseCharacterEscape(); + + return res; + } + + + function parseDecimalEscape() { + // DecimalEscape :: + // DecimalIntegerLiteral [lookahead ∉ DecimalDigit] + // CharacterClassEscape :: one of d D s S w W + + var res, match; + + if (res = matchReg(/^(?!0)\d+/)) { + match = res[0]; + var refIdx = parseInt(res[0], 10); + if (refIdx <= closedCaptureCounter) { + // If the number is smaller than the normal-groups found so + // far, then it is a reference... + return createReference(res[0]); + } else { + // ... otherwise it needs to be interpreted as a octal (if the + // number is in an octal format). If it is NOT octal format, + // then the slash is ignored and the number is matched later + // as normal characters. + + // Recall the negative decision to decide if the input must be parsed + // a second time with the total normal-groups. + backrefDenied.push(refIdx); + + // Reset the position again, as maybe only parts of the previous + // matched numbers are actual octal numbers. E.g. in '019' only + // the '01' should be matched. + incr(-res[0].length); + if (res = matchReg(/^[0-7]{1,3}/)) { + return createEscaped('octal', parseInt(res[0], 8), res[0], 1); + } else { + // If we end up here, we have a case like /\91/. Then the + // first slash is to be ignored and the 9 & 1 to be treated + // like ordinary characters. Create a character for the + // first number only here - other number-characters + // (if available) will be matched later. + res = createCharacter(matchReg(/^[89]/)); + return updateRawStart(res, res.range[0] - 1); + } + } + } + // Only allow octal numbers in the following. All matched numbers start + // with a zero (if the do not, the previous if-branch is executed). + // If the number is not octal format and starts with zero (e.g. `091`) + // then only the zeros `0` is treated here and the `91` are ordinary + // characters. + // Example: + // /\091/.exec('\091')[0].length === 3 + else if (res = matchReg(/^[0-7]{1,3}/)) { + match = res[0]; + if (/^0{1,3}$/.test(match)) { + // If they are all zeros, then only take the first one. + return createEscaped('null', 0x0000, '0', match.length + 1); + } else { + return createEscaped('octal', parseInt(match, 8), match, 1); + } + } else if (res = matchReg(/^[dDsSwW]/)) { + return createCharacterClassEscape(res[0]); + } + return false; + } + + function parseCharacterEscape() { + // CharacterEscape :: + // ControlEscape + // c ControlLetter + // HexEscapeSequence + // UnicodeEscapeSequence + // IdentityEscape + + var res; + if (res = matchReg(/^[fnrtv]/)) { + // ControlEscape + var codePoint = 0; + switch (res[0]) { + case 't': codePoint = 0x009; break; + case 'n': codePoint = 0x00A; break; + case 'v': codePoint = 0x00B; break; + case 'f': codePoint = 0x00C; break; + case 'r': codePoint = 0x00D; break; + } + return createEscaped('singleEscape', codePoint, '\\' + res[0]); + } else if (res = matchReg(/^c([a-zA-Z])/)) { + // c ControlLetter + return createEscaped('controlLetter', res[1].charCodeAt(0) % 32, res[1], 2); + } else if (res = matchReg(/^x([0-9a-fA-F]{2})/)) { + // HexEscapeSequence + return createEscaped('hexadecimalEscape', parseInt(res[1], 16), res[1], 2); + } else if (res = matchReg(/^u([0-9a-fA-F]{4})/)) { + // UnicodeEscapeSequence + return parseUnicodeSurrogatePairEscape( + createEscaped('unicodeEscape', parseInt(res[1], 16), res[1], 2) + ); + } else if (hasUnicodeFlag && (res = matchReg(/^u\{([0-9a-fA-F]+)\}/))) { + // RegExpUnicodeEscapeSequence (ES6 Unicode code point escape) + return createEscaped('unicodeCodePointEscape', parseInt(res[1], 16), res[1], 4); + } else { + // IdentityEscape + return parseIdentityEscape(); + } + } + + // Taken from the Esprima parser. + function isIdentifierPart(ch) { + // Generated by `tools/generate-identifier-regex.js`. + var NonAsciiIdentifierPart = new RegExp('[\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]'); + + return (ch === 36) || (ch === 95) || // $ (dollar) and _ (underscore) + (ch >= 65 && ch <= 90) || // A..Z + (ch >= 97 && ch <= 122) || // a..z + (ch >= 48 && ch <= 57) || // 0..9 + (ch === 92) || // \ (backslash) + ((ch >= 0x80) && NonAsciiIdentifierPart.test(String.fromCharCode(ch))); + } + + function parseIdentityEscape() { + // IdentityEscape :: + // SourceCharacter but not IdentifierPart + // + // + + var ZWJ = '\u200C'; + var ZWNJ = '\u200D'; + + var tmp; + + if (!isIdentifierPart(lookahead())) { + tmp = incr(); + return createEscaped('identifier', tmp.charCodeAt(0), tmp, 1); + } + + if (match(ZWJ)) { + // + return createEscaped('identifier', 0x200C, ZWJ); + } else if (match(ZWNJ)) { + // + return createEscaped('identifier', 0x200D, ZWNJ); + } + + return null; + } + + function parseCharacterClass() { + // CharacterClass :: + // [ [lookahead ∉ {^}] ClassRanges ] + // [ ^ ClassRanges ] + + var res, from = pos; + if (res = matchReg(/^\[\^/)) { + res = parseClassRanges(); + skip(']'); + return createCharacterClass(res, true, from, pos); + } else if (match('[')) { + res = parseClassRanges(); + skip(']'); + return createCharacterClass(res, false, from, pos); + } + + return null; + } + + function parseClassRanges() { + // ClassRanges :: + // [empty] + // NonemptyClassRanges + + var res; + if (current(']')) { + // Empty array means nothing insinde of the ClassRange. + return []; + } else { + res = parseNonemptyClassRanges(); + if (!res) { + bail('nonEmptyClassRanges'); + } + return res; + } + } + + function parseHelperClassRanges(atom) { + var from, to, res; + if (current('-') && !next(']')) { + // ClassAtom - ClassAtom ClassRanges + skip('-'); + + res = parseClassAtom(); + if (!res) { + bail('classAtom'); + } + to = pos; + var classRanges = parseClassRanges(); + if (!classRanges) { + bail('classRanges'); + } + from = atom.range[0]; + if (classRanges.type === 'empty') { + return [createClassRange(atom, res, from, to)]; + } + return [createClassRange(atom, res, from, to)].concat(classRanges); + } + + res = parseNonemptyClassRangesNoDash(); + if (!res) { + bail('nonEmptyClassRangesNoDash'); + } + + return [atom].concat(res); + } + + function parseNonemptyClassRanges() { + // NonemptyClassRanges :: + // ClassAtom + // ClassAtom NonemptyClassRangesNoDash + // ClassAtom - ClassAtom ClassRanges + + var atom = parseClassAtom(); + if (!atom) { + bail('classAtom'); + } + + if (current(']')) { + // ClassAtom + return [atom]; + } + + // ClassAtom NonemptyClassRangesNoDash + // ClassAtom - ClassAtom ClassRanges + return parseHelperClassRanges(atom); + } + + function parseNonemptyClassRangesNoDash() { + // NonemptyClassRangesNoDash :: + // ClassAtom + // ClassAtomNoDash NonemptyClassRangesNoDash + // ClassAtomNoDash - ClassAtom ClassRanges + + var res = parseClassAtom(); + if (!res) { + bail('classAtom'); + } + if (current(']')) { + // ClassAtom + return res; + } + + // ClassAtomNoDash NonemptyClassRangesNoDash + // ClassAtomNoDash - ClassAtom ClassRanges + return parseHelperClassRanges(res); + } + + function parseClassAtom() { + // ClassAtom :: + // - + // ClassAtomNoDash + if (match('-')) { + return createCharacter('-'); + } else { + return parseClassAtomNoDash(); + } + } + + function parseClassAtomNoDash() { + // ClassAtomNoDash :: + // SourceCharacter but not one of \ or ] or - + // \ ClassEscape + + var res; + if (res = matchReg(/^[^\\\]-]/)) { + return createCharacter(res[0]); + } else if (match('\\')) { + res = parseClassEscape(); + if (!res) { + bail('classEscape'); + } + + return parseUnicodeSurrogatePairEscape(res); + } + } + + function bail(message, details, from, to) { + from = from == null ? pos : from; + to = to == null ? from : to; + + var contextStart = Math.max(0, from - 10); + var contextEnd = Math.min(to + 10, str.length); + + // Output a bit of context and a line pointing to where our error is. + // + // We are assuming that there are no actual newlines in the content as this is a regular expression. + var context = ' ' + str.substring(contextStart, contextEnd); + var pointer = ' ' + new Array(from - contextStart + 1).join(' ') + '^'; + + throw SyntaxError(message + ' at position ' + from + (details ? ': ' + details : '') + '\n' + context + '\n' + pointer); + } + + var backrefDenied = []; + var closedCaptureCounter = 0; + var firstIteration = true; + var hasUnicodeFlag = (flags || "").indexOf("u") !== -1; + var pos = 0; + + // Convert the input to a string and treat the empty string special. + str = String(str); + if (str === '') { + str = '(?:)'; + } + + var result = parseDisjunction(); + + if (result.range[1] !== str.length) { + bail('Could not parse entire input - got stuck', '', result.range[1]); + } + + // The spec requires to interpret the `\2` in `/\2()()/` as backreference. + // As the parser collects the number of capture groups as the string is + // parsed it is impossible to make these decisions at the point when the + // `\2` is handled. In case the local decision turns out to be wrong after + // the parsing has finished, the input string is parsed a second time with + // the total number of capture groups set. + // + // SEE: https://github.com/jviereck/regjsparser/issues/70 + for (var i = 0; i < backrefDenied.length; i++) { + if (backrefDenied[i] <= closedCaptureCounter) { + // Parse the input a second time. + pos = 0; + firstIteration = false; + return parseDisjunction(); + } + } + + return result; + } + + var regjsparser = { + parse: parse + }; + + if (typeof module !== 'undefined' && module.exports) { + module.exports = regjsparser; + } else { + window.regjsparser = regjsparser; + } + +}()); diff --git a/node_modules/remove-trailing-separator/history.md b/node_modules/remove-trailing-separator/history.md new file mode 100644 index 000000000..e15e8a462 --- /dev/null +++ b/node_modules/remove-trailing-separator/history.md @@ -0,0 +1,17 @@ +## History + +### 1.1.0 - 16th Aug 2017 + +- [f4576e3](https://github.com/darsain/remove-trailing-separator/commit/f4576e3638c39b794998b533fffb27854dcbee01) Implement faster slash slicing + +### 1.0.2 - 07th Jun 2017 + +- [8e13ecb](https://github.com/darsain/remove-trailing-separator/commit/8e13ecbfd7b9f5fdf97c5d5ff923e4718b874e31) ES5 compatibility + +### 1.0.1 - 25th Sep 2016 + +- [b78606d](https://github.com/darsain/remove-trailing-separator/commit/af90b4e153a4527894741af6c7005acaeb78606d) Remove backslash only on win32 systems + +### 1.0.0 - 24th Sep 2016 + +Initial release. diff --git a/node_modules/remove-trailing-separator/index.js b/node_modules/remove-trailing-separator/index.js new file mode 100644 index 000000000..512306b88 --- /dev/null +++ b/node_modules/remove-trailing-separator/index.js @@ -0,0 +1,17 @@ +var isWin = process.platform === 'win32'; + +module.exports = function (str) { + var i = str.length - 1; + if (i < 2) { + return str; + } + while (isSeparator(str, i)) { + i--; + } + return str.substr(0, i + 1); +}; + +function isSeparator(str, i) { + var char = str[i]; + return i > 0 && (char === '/' || (isWin && char === '\\')); +} diff --git a/node_modules/remove-trailing-separator/license b/node_modules/remove-trailing-separator/license new file mode 100644 index 000000000..a169aff77 --- /dev/null +++ b/node_modules/remove-trailing-separator/license @@ -0,0 +1,3 @@ +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/node_modules/remove-trailing-separator/package.json b/node_modules/remove-trailing-separator/package.json new file mode 100644 index 000000000..16fb3c90e --- /dev/null +++ b/node_modules/remove-trailing-separator/package.json @@ -0,0 +1,64 @@ +{ + "_from": "remove-trailing-separator@^1.0.1", + "_id": "remove-trailing-separator@1.1.0", + "_inBundle": false, + "_integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "_location": "/remove-trailing-separator", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "remove-trailing-separator@^1.0.1", + "name": "remove-trailing-separator", + "escapedName": "remove-trailing-separator", + "rawSpec": "^1.0.1", + "saveSpec": null, + "fetchSpec": "^1.0.1" + }, + "_requiredBy": [ + "/normalize-path" + ], + "_resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "_shasum": "c24bce2a283adad5bc3f58e0d48249b92379d8ef", + "_spec": "remove-trailing-separator@^1.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/normalize-path", + "author": { + "name": "darsain" + }, + "bugs": { + "url": "https://github.com/darsain/remove-trailing-separator/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Removes separators from the end of the string.", + "devDependencies": { + "ava": "^0.16.0", + "coveralls": "^2.11.14", + "nyc": "^8.3.0", + "xo": "^0.16.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/darsain/remove-trailing-separator#readme", + "keywords": [ + "remove", + "strip", + "trailing", + "separator" + ], + "license": "ISC", + "main": "index.js", + "name": "remove-trailing-separator", + "repository": { + "type": "git", + "url": "git+https://github.com/darsain/remove-trailing-separator.git" + }, + "scripts": { + "lint": "xo", + "pretest": "npm run lint", + "report": "nyc report --reporter=html", + "test": "nyc ava" + }, + "version": "1.1.0" +} diff --git a/node_modules/remove-trailing-separator/readme.md b/node_modules/remove-trailing-separator/readme.md new file mode 100644 index 000000000..747086af8 --- /dev/null +++ b/node_modules/remove-trailing-separator/readme.md @@ -0,0 +1,51 @@ +# remove-trailing-separator + +[![NPM version][npm-img]][npm-url] [![Build Status: Linux][travis-img]][travis-url] [![Build Status: Windows][appveyor-img]][appveyor-url] [![Coverage Status][coveralls-img]][coveralls-url] + +Removes all separators from the end of a string. + +## Install + +``` +npm install remove-trailing-separator +``` + +## Examples + +```js +const removeTrailingSeparator = require('remove-trailing-separator'); + +removeTrailingSeparator('/foo/bar/') // '/foo/bar' +removeTrailingSeparator('/foo/bar///') // '/foo/bar' + +// leaves only/last separator +removeTrailingSeparator('/') // '/' +removeTrailingSeparator('///') // '/' + +// returns empty string +removeTrailingSeparator('') // '' +``` + +## Notable backslash, or win32 separator behavior + +`\` is considered a separator only on WIN32 systems. All POSIX compliant systems +see backslash as a valid file name character, so it would break POSIX compliance +to remove it there. + +In practice, this means that this code will return different things depending on +what system it runs on: + +```js +removeTrailingSeparator('\\foo\\') +// UNIX => '\\foo\\' +// WIN32 => '\\foo' +``` + +[npm-url]: https://npmjs.org/package/remove-trailing-separator +[npm-img]: https://badge.fury.io/js/remove-trailing-separator.svg +[travis-url]: https://travis-ci.org/darsain/remove-trailing-separator +[travis-img]: https://travis-ci.org/darsain/remove-trailing-separator.svg?branch=master +[appveyor-url]: https://ci.appveyor.com/project/darsain/remove-trailing-separator/branch/master +[appveyor-img]: https://ci.appveyor.com/api/projects/status/wvg9a93rrq95n2xl/branch/master?svg=true +[coveralls-url]: https://coveralls.io/github/darsain/remove-trailing-separator?branch=master +[coveralls-img]: https://coveralls.io/repos/github/darsain/remove-trailing-separator/badge.svg?branch=master diff --git a/node_modules/repeat-element/LICENSE b/node_modules/repeat-element/LICENSE new file mode 100644 index 000000000..33754daec --- /dev/null +++ b/node_modules/repeat-element/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/repeat-element/README.md b/node_modules/repeat-element/README.md new file mode 100644 index 000000000..008e20ead --- /dev/null +++ b/node_modules/repeat-element/README.md @@ -0,0 +1,71 @@ +# repeat-element [![NPM version](https://badge.fury.io/js/repeat-element.svg)](http://badge.fury.io/js/repeat-element) + +> Create an array by repeating the given value n times. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```bash +npm i repeat-element --save +``` + +## Usage + +```js +var repeat = require('repeat-element'); + +repeat('a', 5); +//=> ['a', 'a', 'a', 'a', 'a'] + +repeat('a', 1); +//=> ['a'] + +repeat('a', 0); +//=> [] + +repeat(null, 5) +//» [ null, null, null, null, null ] + +repeat({some: 'object'}, 5) +//» [ { some: 'object' }, +// { some: 'object' }, +// { some: 'object' }, +// { some: 'object' }, +// { some: 'object' } ] + +repeat(5, 5) +//» [ 5, 5, 5, 5, 5 ] +``` + +## Related projects + +[repeat-string](https://github.com/jonschlinkert/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. + +## Running tests + +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/repeat-element/issues) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 06, 2015._ diff --git a/node_modules/repeat-element/index.js b/node_modules/repeat-element/index.js new file mode 100644 index 000000000..0ad45ab46 --- /dev/null +++ b/node_modules/repeat-element/index.js @@ -0,0 +1,18 @@ +/*! + * repeat-element + * + * Copyright (c) 2015 Jon Schlinkert. + * Licensed under the MIT license. + */ + +'use strict'; + +module.exports = function repeat(ele, num) { + var arr = new Array(num); + + for (var i = 0; i < num; i++) { + arr[i] = ele; + } + + return arr; +}; diff --git a/node_modules/repeat-element/package.json b/node_modules/repeat-element/package.json new file mode 100644 index 000000000..b2b66d6bf --- /dev/null +++ b/node_modules/repeat-element/package.json @@ -0,0 +1,70 @@ +{ + "_from": "repeat-element@^1.1.2", + "_id": "repeat-element@1.1.2", + "_inBundle": false, + "_integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "_location": "/repeat-element", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "repeat-element@^1.1.2", + "name": "repeat-element", + "escapedName": "repeat-element", + "rawSpec": "^1.1.2", + "saveSpec": null, + "fetchSpec": "^1.1.2" + }, + "_requiredBy": [ + "/braces", + "/fill-range" + ], + "_resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "_shasum": "ef089a178d1483baae4d93eb98b4f9e4e11d990a", + "_spec": "repeat-element@^1.1.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/braces", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/repeat-element/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Create an array by repeating the given value n times.", + "devDependencies": { + "benchmarked": "^0.1.4", + "chalk": "^1.0.0", + "glob": "^5.0.5", + "minimist": "^1.1.1", + "mocha": "^2.2.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/repeat-element", + "keywords": [ + "array", + "element", + "repeat", + "string" + ], + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/repeat-element/blob/master/LICENSE" + }, + "main": "index.js", + "name": "repeat-element", + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/repeat-element.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "1.1.2" +} diff --git a/node_modules/repeat-string/LICENSE b/node_modules/repeat-string/LICENSE new file mode 100644 index 000000000..39245ac1c --- /dev/null +++ b/node_modules/repeat-string/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/repeat-string/README.md b/node_modules/repeat-string/README.md new file mode 100644 index 000000000..aaa5e91c7 --- /dev/null +++ b/node_modules/repeat-string/README.md @@ -0,0 +1,136 @@ +# repeat-string [![NPM version](https://img.shields.io/npm/v/repeat-string.svg?style=flat)](https://www.npmjs.com/package/repeat-string) [![NPM monthly downloads](https://img.shields.io/npm/dm/repeat-string.svg?style=flat)](https://npmjs.org/package/repeat-string) [![NPM total downloads](https://img.shields.io/npm/dt/repeat-string.svg?style=flat)](https://npmjs.org/package/repeat-string) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/repeat-string.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/repeat-string) + +> Repeat the given string n times. Fastest implementation for repeating a string. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save repeat-string +``` + +## Usage + +### [repeat](index.js#L41) + +Repeat the given `string` the specified `number` of times. + +**Example:** + +**Example** + +```js +var repeat = require('repeat-string'); +repeat('A', 5); +//=> AAAAA +``` + +**Params** + +* `string` **{String}**: The string to repeat +* `number` **{Number}**: The number of times to repeat the string +* `returns` **{String}**: Repeated string + +## Benchmarks + +Repeat string is significantly faster than the native method (which is itself faster than [repeating](https://github.com/sindresorhus/repeating)): + +```sh +# 2x +repeat-string █████████████████████████ (26,953,977 ops/sec) +repeating █████████ (9,855,695 ops/sec) +native ██████████████████ (19,453,895 ops/sec) + +# 3x +repeat-string █████████████████████████ (19,445,252 ops/sec) +repeating ███████████ (8,661,565 ops/sec) +native ████████████████████ (16,020,598 ops/sec) + +# 10x +repeat-string █████████████████████████ (23,792,521 ops/sec) +repeating █████████ (8,571,332 ops/sec) +native ███████████████ (14,582,955 ops/sec) + +# 50x +repeat-string █████████████████████████ (23,640,179 ops/sec) +repeating █████ (5,505,509 ops/sec) +native ██████████ (10,085,557 ops/sec) + +# 250x +repeat-string █████████████████████████ (23,489,618 ops/sec) +repeating ████ (3,962,937 ops/sec) +native ████████ (7,724,892 ops/sec) + +# 2000x +repeat-string █████████████████████████ (20,315,172 ops/sec) +repeating ████ (3,297,079 ops/sec) +native ███████ (6,203,331 ops/sec) + +# 20000x +repeat-string █████████████████████████ (23,382,915 ops/sec) +repeating ███ (2,980,058 ops/sec) +native █████ (5,578,808 ops/sec) +``` + +**Run the benchmarks** + +Install dev dependencies: + +```sh +npm i -d && node benchmark +``` + +## About + +### Related projects + +[repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor**
| +| --- | --- | +| 51 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [LinusU](https://github.com/LinusU) | +| 2 | [tbusser](https://github.com/tbusser) | +| 1 | [doowb](https://github.com/doowb) | +| 1 | [wooorm](https://github.com/wooorm) | + +### Building docs + +_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ + +To generate the readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install -g verb verb-generate-readme && verb +``` + +### Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +### License + +Copyright © 2016, [Jon Schlinkert](http://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/repeat-string/blob/master/LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 23, 2016._ \ No newline at end of file diff --git a/node_modules/repeat-string/index.js b/node_modules/repeat-string/index.js new file mode 100644 index 000000000..4459afd80 --- /dev/null +++ b/node_modules/repeat-string/index.js @@ -0,0 +1,70 @@ +/*! + * repeat-string + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +/** + * Results cache + */ + +var res = ''; +var cache; + +/** + * Expose `repeat` + */ + +module.exports = repeat; + +/** + * Repeat the given `string` the specified `number` + * of times. + * + * **Example:** + * + * ```js + * var repeat = require('repeat-string'); + * repeat('A', 5); + * //=> AAAAA + * ``` + * + * @param {String} `string` The string to repeat + * @param {Number} `number` The number of times to repeat the string + * @return {String} Repeated string + * @api public + */ + +function repeat(str, num) { + if (typeof str !== 'string') { + throw new TypeError('expected a string'); + } + + // cover common, quick use cases + if (num === 1) return str; + if (num === 2) return str + str; + + var max = str.length * num; + if (cache !== str || typeof cache === 'undefined') { + cache = str; + res = ''; + } else if (res.length >= max) { + return res.substr(0, max); + } + + while (max > res.length && num > 1) { + if (num & 1) { + res += str; + } + + num >>= 1; + str += str; + } + + res += str; + res = res.substr(0, max); + return res; +} diff --git a/node_modules/repeat-string/package.json b/node_modules/repeat-string/package.json new file mode 100644 index 000000000..67940e4ba --- /dev/null +++ b/node_modules/repeat-string/package.json @@ -0,0 +1,128 @@ +{ + "_from": "repeat-string@^1.5.2", + "_id": "repeat-string@1.6.1", + "_inBundle": false, + "_integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "_location": "/repeat-string", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "repeat-string@^1.5.2", + "name": "repeat-string", + "escapedName": "repeat-string", + "rawSpec": "^1.5.2", + "saveSpec": null, + "fetchSpec": "^1.5.2" + }, + "_requiredBy": [ + "/fill-range" + ], + "_resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "_shasum": "8dcae470e1c88abc2d600fff4a776286da75e637", + "_spec": "repeat-string@^1.5.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/fill-range", + "author": { + "name": "Jon Schlinkert", + "url": "http://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/repeat-string/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Brian Woodward", + "email": "brian.woodward@gmail.com", + "url": "https://github.com/doowb" + }, + { + "name": "Jon Schlinkert", + "email": "jon.schlinkert@sellside.com", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Linus Unnebäck", + "email": "linus@folkdatorn.se", + "url": "http://linus.unnebäck.se" + }, + { + "name": "Thijs Busser", + "email": "tbusser@gmail.com", + "url": "http://tbusser.net" + }, + { + "name": "Titus", + "email": "tituswormer@gmail.com", + "url": "wooorm.com" + } + ], + "deprecated": false, + "description": "Repeat the given string n times. Fastest implementation for repeating a string.", + "devDependencies": { + "ansi-cyan": "^0.1.1", + "benchmarked": "^0.2.5", + "gulp-format-md": "^0.1.11", + "isobject": "^2.1.0", + "mocha": "^3.1.2", + "repeating": "^3.0.0", + "text-table": "^0.2.0", + "yargs-parser": "^4.0.2" + }, + "engines": { + "node": ">=0.10" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/repeat-string", + "keywords": [ + "fast", + "fastest", + "fill", + "left", + "left-pad", + "multiple", + "pad", + "padding", + "repeat", + "repeating", + "repetition", + "right", + "right-pad", + "string", + "times" + ], + "license": "MIT", + "main": "index.js", + "name": "repeat-string", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/repeat-string.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "repeat-element" + ] + }, + "helpers": [ + "./benchmark/helper.js" + ], + "reflinks": [ + "verb" + ] + }, + "version": "1.6.1" +} diff --git a/node_modules/repeating/index.js b/node_modules/repeating/index.js new file mode 100644 index 000000000..ccae0d7c3 --- /dev/null +++ b/node_modules/repeating/index.js @@ -0,0 +1,24 @@ +'use strict'; +var isFinite = require('is-finite'); + +module.exports = function (str, n) { + if (typeof str !== 'string') { + throw new TypeError('Expected `input` to be a string'); + } + + if (n < 0 || !isFinite(n)) { + throw new TypeError('Expected `count` to be a positive finite number'); + } + + var ret = ''; + + do { + if (n & 1) { + ret += str; + } + + str += str; + } while ((n >>= 1)); + + return ret; +}; diff --git a/node_modules/repeating/license b/node_modules/repeating/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/repeating/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/repeating/package.json b/node_modules/repeating/package.json new file mode 100644 index 000000000..0cf7447e7 --- /dev/null +++ b/node_modules/repeating/package.json @@ -0,0 +1,69 @@ +{ + "_from": "repeating@^2.0.0", + "_id": "repeating@2.0.1", + "_inBundle": false, + "_integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "_location": "/repeating", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "repeating@^2.0.0", + "name": "repeating", + "escapedName": "repeating", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/detect-indent" + ], + "_resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "_shasum": "5214c53a926d3552707527fbab415dbc08d06dda", + "_spec": "repeating@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/detect-indent", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/repeating/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-finite": "^1.0.0" + }, + "deprecated": false, + "description": "Repeat a string - fast", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/repeating#readme", + "keywords": [ + "repeat", + "string", + "repeating", + "str", + "text", + "fill", + "pad" + ], + "license": "MIT", + "name": "repeating", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/repeating.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.1" +} diff --git a/node_modules/repeating/readme.md b/node_modules/repeating/readme.md new file mode 100644 index 000000000..06f0b69f7 --- /dev/null +++ b/node_modules/repeating/readme.md @@ -0,0 +1,30 @@ +# repeating [![Build Status](https://travis-ci.org/sindresorhus/repeating.svg?branch=master)](https://travis-ci.org/sindresorhus/repeating) + +> Repeat a string - fast + + +## Install + +``` +$ npm install --save repeating +``` + + +## Usage + +```js +const repeating = require('repeating'); + +repeating('unicorn ', 100); +//=> 'unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn ' +``` + + +## Related + +- [repeating-cli](https://github.com/sindresorhus/repeating-cli) - CLI for this module + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/require-directory/.jshintrc b/node_modules/require-directory/.jshintrc new file mode 100644 index 000000000..e14e4dcbd --- /dev/null +++ b/node_modules/require-directory/.jshintrc @@ -0,0 +1,67 @@ +{ + "maxerr" : 50, + "bitwise" : true, + "camelcase" : true, + "curly" : true, + "eqeqeq" : true, + "forin" : true, + "immed" : true, + "indent" : 2, + "latedef" : true, + "newcap" : true, + "noarg" : true, + "noempty" : true, + "nonew" : true, + "plusplus" : true, + "quotmark" : true, + "undef" : true, + "unused" : true, + "strict" : true, + "trailing" : true, + "maxparams" : false, + "maxdepth" : false, + "maxstatements" : false, + "maxcomplexity" : false, + "maxlen" : false, + "asi" : false, + "boss" : false, + "debug" : false, + "eqnull" : true, + "es5" : false, + "esnext" : false, + "moz" : false, + "evil" : false, + "expr" : true, + "funcscope" : true, + "globalstrict" : true, + "iterator" : true, + "lastsemic" : false, + "laxbreak" : false, + "laxcomma" : false, + "loopfunc" : false, + "multistr" : false, + "proto" : false, + "scripturl" : false, + "smarttabs" : false, + "shadow" : false, + "sub" : false, + "supernew" : false, + "validthis" : false, + "browser" : true, + "couch" : false, + "devel" : true, + "dojo" : false, + "jquery" : false, + "mootools" : false, + "node" : true, + "nonstandard" : false, + "prototypejs" : false, + "rhino" : false, + "worker" : false, + "wsh" : false, + "yui" : false, + "nomen" : true, + "onevar" : true, + "passfail" : false, + "white" : true +} diff --git a/node_modules/require-directory/.npmignore b/node_modules/require-directory/.npmignore new file mode 100644 index 000000000..47cf365a0 --- /dev/null +++ b/node_modules/require-directory/.npmignore @@ -0,0 +1 @@ +test/** diff --git a/node_modules/require-directory/.travis.yml b/node_modules/require-directory/.travis.yml new file mode 100644 index 000000000..20fd86b6a --- /dev/null +++ b/node_modules/require-directory/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - 0.10 diff --git a/node_modules/require-directory/LICENSE b/node_modules/require-directory/LICENSE new file mode 100644 index 000000000..a70f253aa --- /dev/null +++ b/node_modules/require-directory/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2011 Troy Goode + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/require-directory/README.markdown b/node_modules/require-directory/README.markdown new file mode 100644 index 000000000..926a063ed --- /dev/null +++ b/node_modules/require-directory/README.markdown @@ -0,0 +1,184 @@ +# require-directory + +Recursively iterates over specified directory, `require()`'ing each file, and returning a nested hash structure containing those modules. + +**[Follow me (@troygoode) on Twitter!](https://twitter.com/intent/user?screen_name=troygoode)** + +[![NPM](https://nodei.co/npm/require-directory.png?downloads=true&stars=true)](https://nodei.co/npm/require-directory/) + +[![build status](https://secure.travis-ci.org/troygoode/node-require-directory.png)](http://travis-ci.org/troygoode/node-require-directory) + +## How To Use + +### Installation (via [npm](https://npmjs.org/package/require-directory)) + +```bash +$ npm install require-directory +``` + +### Usage + +A common pattern in node.js is to include an index file which creates a hash of the files in its current directory. Given a directory structure like so: + +* app.js +* routes/ + * index.js + * home.js + * auth/ + * login.js + * logout.js + * register.js + +`routes/index.js` uses `require-directory` to build the hash (rather than doing so manually) like so: + +```javascript +var requireDirectory = require('require-directory'); +module.exports = requireDirectory(module); +``` + +`app.js` references `routes/index.js` like any other module, but it now has a hash/tree of the exports from the `./routes/` directory: + +```javascript +var routes = require('./routes'); + +// snip + +app.get('/', routes.home); +app.get('/register', routes.auth.register); +app.get('/login', routes.auth.login); +app.get('/logout', routes.auth.logout); +``` + +The `routes` variable above is the equivalent of this: + +```javascript +var routes = { + home: require('routes/home.js'), + auth: { + login: require('routes/auth/login.js'), + logout: require('routes/auth/logout.js'), + register: require('routes/auth/register.js') + } +}; +``` + +*Note that `routes.index` will be `undefined` as you would hope.* + +### Specifying Another Directory + +You can specify which directory you want to build a tree of (if it isn't the current directory for whatever reason) by passing it as the second parameter. Not specifying the path (`requireDirectory(module)`) is the equivelant of `requireDirectory(module, __dirname)`: + +```javascript +var requireDirectory = require('require-directory'); +module.exports = requireDirectory(module, './some/subdirectory'); +``` + +For example, in the [example in the Usage section](#usage) we could have avoided creating `routes/index.js` and instead changed the first lines of `app.js` to: + +```javascript +var requireDirectory = require('require-directory'); +var routes = requireDirectory(module, './routes'); +``` + +## Options + +You can pass an options hash to `require-directory` as the 2nd parameter (or 3rd if you're passing the path to another directory as the 2nd parameter already). Here are the available options: + +### Whitelisting + +Whitelisting (either via RegExp or function) allows you to specify that only certain files be loaded. + +```javascript +var requireDirectory = require('require-directory'), + whitelist = /onlyinclude.js$/, + hash = requireDirectory(module, {include: whitelist}); +``` + +```javascript +var requireDirectory = require('require-directory'), + check = function(path){ + if(/onlyinclude.js$/.test(path)){ + return true; // don't include + }else{ + return false; // go ahead and include + } + }, + hash = requireDirectory(module, {include: check}); +``` + +### Blacklisting + +Blacklisting (either via RegExp or function) allows you to specify that all but certain files should be loaded. + +```javascript +var requireDirectory = require('require-directory'), + blacklist = /dontinclude\.js$/, + hash = requireDirectory(module, {exclude: blacklist}); +``` + +```javascript +var requireDirectory = require('require-directory'), + check = function(path){ + if(/dontinclude\.js$/.test(path)){ + return false; // don't include + }else{ + return true; // go ahead and include + } + }, + hash = requireDirectory(module, {exclude: check}); +``` + +### Visiting Objects As They're Loaded + +`require-directory` takes a function as the `visit` option that will be called for each module that is added to module.exports. + +```javascript +var requireDirectory = require('require-directory'), + visitor = function(obj) { + console.log(obj); // will be called for every module that is loaded + }, + hash = requireDirectory(module, {visit: visitor}); +``` + +The visitor can also transform the objects by returning a value: + +```javascript +var requireDirectory = require('require-directory'), + visitor = function(obj) { + return obj(new Date()); + }, + hash = requireDirectory(module, {visit: visitor}); +``` + +### Renaming Keys + +```javascript +var requireDirectory = require('require-directory'), + renamer = function(name) { + return name.toUpperCase(); + }, + hash = requireDirectory(module, {rename: renamer}); +``` + +### No Recursion + +```javascript +var requireDirectory = require('require-directory'), + hash = requireDirectory(module, {recurse: false}); +``` + +## Run Unit Tests + +```bash +$ npm run lint +$ npm test +``` + +## License + +[MIT License](http://www.opensource.org/licenses/mit-license.php) + +## Author + +[Troy Goode](https://github.com/TroyGoode) ([troygoode@gmail.com](mailto:troygoode@gmail.com)) + diff --git a/node_modules/require-directory/index.js b/node_modules/require-directory/index.js new file mode 100644 index 000000000..cd37da7ea --- /dev/null +++ b/node_modules/require-directory/index.js @@ -0,0 +1,86 @@ +'use strict'; + +var fs = require('fs'), + join = require('path').join, + resolve = require('path').resolve, + dirname = require('path').dirname, + defaultOptions = { + extensions: ['js', 'json', 'coffee'], + recurse: true, + rename: function (name) { + return name; + }, + visit: function (obj) { + return obj; + } + }; + +function checkFileInclusion(path, filename, options) { + return ( + // verify file has valid extension + (new RegExp('\\.(' + options.extensions.join('|') + ')$', 'i').test(filename)) && + + // if options.include is a RegExp, evaluate it and make sure the path passes + !(options.include && options.include instanceof RegExp && !options.include.test(path)) && + + // if options.include is a function, evaluate it and make sure the path passes + !(options.include && typeof options.include === 'function' && !options.include(path, filename)) && + + // if options.exclude is a RegExp, evaluate it and make sure the path doesn't pass + !(options.exclude && options.exclude instanceof RegExp && options.exclude.test(path)) && + + // if options.exclude is a function, evaluate it and make sure the path doesn't pass + !(options.exclude && typeof options.exclude === 'function' && options.exclude(path, filename)) + ); +} + +function requireDirectory(m, path, options) { + var retval = {}; + + // path is optional + if (path && !options && typeof path !== 'string') { + options = path; + path = null; + } + + // default options + options = options || {}; + for (var prop in defaultOptions) { + if (typeof options[prop] === 'undefined') { + options[prop] = defaultOptions[prop]; + } + } + + // if no path was passed in, assume the equivelant of __dirname from caller + // otherwise, resolve path relative to the equivalent of __dirname + path = !path ? dirname(m.filename) : resolve(dirname(m.filename), path); + + // get the path of each file in specified directory, append to current tree node, recurse + fs.readdirSync(path).forEach(function (filename) { + var joined = join(path, filename), + files, + key, + obj; + + if (fs.statSync(joined).isDirectory() && options.recurse) { + // this node is a directory; recurse + files = requireDirectory(m, joined, options); + // exclude empty directories + if (Object.keys(files).length) { + retval[options.rename(filename, joined, filename)] = files; + } + } else { + if (joined !== m.filename && checkFileInclusion(joined, filename, options)) { + // hash node key shouldn't include file extension + key = filename.substring(0, filename.lastIndexOf('.')); + obj = m.require(joined); + retval[options.rename(key, joined, filename)] = options.visit(obj, joined, filename) || obj; + } + } + }); + + return retval; +} + +module.exports = requireDirectory; +module.exports.defaults = defaultOptions; diff --git a/node_modules/require-directory/package.json b/node_modules/require-directory/package.json new file mode 100644 index 000000000..63e002dcd --- /dev/null +++ b/node_modules/require-directory/package.json @@ -0,0 +1,69 @@ +{ + "_from": "require-directory@^2.1.1", + "_id": "require-directory@2.1.1", + "_inBundle": false, + "_integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "_location": "/require-directory", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "require-directory@^2.1.1", + "name": "require-directory", + "escapedName": "require-directory", + "rawSpec": "^2.1.1", + "saveSpec": null, + "fetchSpec": "^2.1.1" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "_shasum": "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", + "_spec": "require-directory@^2.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/yargs", + "author": { + "name": "Troy Goode", + "email": "troygoode@gmail.com", + "url": "http://github.com/troygoode/" + }, + "bugs": { + "url": "http://github.com/troygoode/node-require-directory/issues/" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Troy Goode", + "email": "troygoode@gmail.com", + "url": "http://github.com/troygoode/" + } + ], + "deprecated": false, + "description": "Recursively iterates over specified directory, require()'ing each file, and returning a nested hash structure containing those modules.", + "devDependencies": { + "jshint": "^2.6.0", + "mocha": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "homepage": "https://github.com/troygoode/node-require-directory/", + "keywords": [ + "require", + "directory", + "library", + "recursive" + ], + "license": "MIT", + "main": "index.js", + "name": "require-directory", + "repository": { + "type": "git", + "url": "git://github.com/troygoode/node-require-directory.git" + }, + "scripts": { + "lint": "jshint index.js test/test.js", + "test": "mocha" + }, + "version": "2.1.1" +} diff --git a/node_modules/require-main-filename/.npmignore b/node_modules/require-main-filename/.npmignore new file mode 100644 index 000000000..6f9fe6bad --- /dev/null +++ b/node_modules/require-main-filename/.npmignore @@ -0,0 +1,3 @@ +node_modules +.DS_Store +.nyc_output diff --git a/node_modules/require-main-filename/.travis.yml b/node_modules/require-main-filename/.travis.yml new file mode 100644 index 000000000..ab61ce77e --- /dev/null +++ b/node_modules/require-main-filename/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +os: + - linux +node_js: + - "0.10" + - "0.12" + - "4.1" + - "node" diff --git a/node_modules/require-main-filename/LICENSE.txt b/node_modules/require-main-filename/LICENSE.txt new file mode 100644 index 000000000..836440bef --- /dev/null +++ b/node_modules/require-main-filename/LICENSE.txt @@ -0,0 +1,14 @@ +Copyright (c) 2016, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/require-main-filename/README.md b/node_modules/require-main-filename/README.md new file mode 100644 index 000000000..820d9f589 --- /dev/null +++ b/node_modules/require-main-filename/README.md @@ -0,0 +1,26 @@ +# require-main-filename + +[![Build Status](https://travis-ci.org/yargs/require-main-filename.png)](https://travis-ci.org/yargs/require-main-filename) +[![Coverage Status](https://coveralls.io/repos/yargs/require-main-filename/badge.svg?branch=master)](https://coveralls.io/r/yargs/require-main-filename?branch=master) +[![NPM version](https://img.shields.io/npm/v/require-main-filename.svg)](https://www.npmjs.com/package/require-main-filename) + +`require.main.filename` is great for figuring out the entry +point for the current application. This can be combined with a module like +[pkg-conf](https://www.npmjs.com/package/pkg-conf) to, _as if by magic_, load +top-level configuration. + +Unfortunately, `require.main.filename` sometimes fails when an application is +executed with an alternative process manager, e.g., [iisnode](https://github.com/tjanczuk/iisnode). + +`require-main-filename` is a shim that addresses this problem. + +## Usage + +```js +var main = require('require-main-filename')() +// use main as an alternative to require.main.filename. +``` + +## License + +ISC diff --git a/node_modules/require-main-filename/index.js b/node_modules/require-main-filename/index.js new file mode 100644 index 000000000..dca7f0cc1 --- /dev/null +++ b/node_modules/require-main-filename/index.js @@ -0,0 +1,18 @@ +module.exports = function (_require) { + _require = _require || require + var main = _require.main + if (main && isIISNode(main)) return handleIISNode(main) + else return main ? main.filename : process.cwd() +} + +function isIISNode (main) { + return /\\iisnode\\/.test(main.filename) +} + +function handleIISNode (main) { + if (!main.children.length) { + return main.filename + } else { + return main.children[0].filename + } +} diff --git a/node_modules/require-main-filename/package.json b/node_modules/require-main-filename/package.json new file mode 100644 index 000000000..6dfbefeae --- /dev/null +++ b/node_modules/require-main-filename/package.json @@ -0,0 +1,58 @@ +{ + "_from": "require-main-filename@^1.0.1", + "_id": "require-main-filename@1.0.1", + "_inBundle": false, + "_integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "_location": "/require-main-filename", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "require-main-filename@^1.0.1", + "name": "require-main-filename", + "escapedName": "require-main-filename", + "rawSpec": "^1.0.1", + "saveSpec": null, + "fetchSpec": "^1.0.1" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "_shasum": "97f717b69d48784f5f526a6c5aa8ffdda055a4d1", + "_spec": "require-main-filename@^1.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/yargs", + "author": { + "name": "Ben Coe", + "email": "ben@npmjs.com" + }, + "bugs": { + "url": "https://github.com/yargs/require-main-filename/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "shim for require.main.filename() that works in as many environments as possible", + "devDependencies": { + "chai": "^3.5.0", + "standard": "^6.0.5", + "tap": "^5.2.0" + }, + "homepage": "https://github.com/yargs/require-main-filename#readme", + "keywords": [ + "require", + "shim", + "iisnode" + ], + "license": "ISC", + "main": "index.js", + "name": "require-main-filename", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/yargs/require-main-filename.git" + }, + "scripts": { + "pretest": "standard", + "test": "tap --coverage test.js" + }, + "version": "1.0.1" +} diff --git a/node_modules/require-main-filename/test.js b/node_modules/require-main-filename/test.js new file mode 100644 index 000000000..d89e7dcba --- /dev/null +++ b/node_modules/require-main-filename/test.js @@ -0,0 +1,36 @@ +/* global describe, it */ + +var requireMainFilename = require('./') + +require('tap').mochaGlobals() +require('chai').should() + +describe('require-main-filename', function () { + it('returns require.main.filename in normal circumstances', function () { + requireMainFilename().should.match(/test\.js/) + }) + + it('should use children[0].filename when running on iisnode', function () { + var main = { + filename: 'D:\\Program Files (x86)\\iisnode\\interceptor.js', + children: [ {filename: 'D:\\home\\site\\wwwroot\\server.js'} ] + } + requireMainFilename({ + main: main + }).should.match(/server\.js/) + }) + + it('should not use children[0] if no children exist', function () { + var main = { + filename: 'D:\\Program Files (x86)\\iisnode\\interceptor.js', + children: [] + } + requireMainFilename({ + main: main + }).should.match(/interceptor\.js/) + }) + + it('should default to process.cwd() if require.main is undefined', function () { + requireMainFilename({}).should.match(/require-main-filename/) + }) +}) diff --git a/node_modules/requires-port/.npmignore b/node_modules/requires-port/.npmignore new file mode 100644 index 000000000..ba2a97b57 --- /dev/null +++ b/node_modules/requires-port/.npmignore @@ -0,0 +1,2 @@ +node_modules +coverage diff --git a/node_modules/requires-port/.travis.yml b/node_modules/requires-port/.travis.yml new file mode 100644 index 000000000..0765106ab --- /dev/null +++ b/node_modules/requires-port/.travis.yml @@ -0,0 +1,19 @@ +sudo: false +language: node_js +node_js: + - "4" + - "iojs" + - "0.12" + - "0.10" +script: + - "npm run test-travis" +after_script: + - "npm install coveralls@2 && cat coverage/lcov.info | coveralls" +matrix: + fast_finish: true +notifications: + irc: + channels: + - "irc.freenode.org#unshift" + on_success: change + on_failure: change diff --git a/node_modules/requires-port/LICENSE b/node_modules/requires-port/LICENSE new file mode 100644 index 000000000..6dc9316a6 --- /dev/null +++ b/node_modules/requires-port/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Unshift.io, Arnout Kazemier, the 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/node_modules/requires-port/README.md b/node_modules/requires-port/README.md new file mode 100644 index 000000000..3effe7597 --- /dev/null +++ b/node_modules/requires-port/README.md @@ -0,0 +1,47 @@ +# requires-port + +[![Made by unshift](https://img.shields.io/badge/made%20by-unshift-00ffcc.svg?style=flat-square)](http://unshift.io)[![Version npm](http://img.shields.io/npm/v/requires-port.svg?style=flat-square)](http://browsenpm.org/package/requires-port)[![Build Status](http://img.shields.io/travis/unshiftio/requires-port/master.svg?style=flat-square)](https://travis-ci.org/unshiftio/requires-port)[![Dependencies](https://img.shields.io/david/unshiftio/requires-port.svg?style=flat-square)](https://david-dm.org/unshiftio/requires-port)[![Coverage Status](http://img.shields.io/coveralls/unshiftio/requires-port/master.svg?style=flat-square)](https://coveralls.io/r/unshiftio/requires-port?branch=master)[![IRC channel](http://img.shields.io/badge/IRC-irc.freenode.net%23unshift-00a8ff.svg?style=flat-square)](http://webchat.freenode.net/?channels=unshift) + +The module name says it all, check if a protocol requires a given port. + +## Installation + +This module is intended to be used with browserify or Node.js and is distributed +in the public npm registry. To install it simply run the following command from +your CLI: + +```j +npm install --save requires-port +``` + +## Usage + +The module exports it self as function and requires 2 arguments: + +1. The port number, can be a string or number. +2. Protocol, can be `http`, `http:` or even `https://yomoma.com`. We just split + it at `:` and use the first result. We currently accept the following + protocols: + - `http` + - `https` + - `ws` + - `wss` + - `ftp` + - `gopher` + - `file` + +It returns a boolean that indicates if protocol requires this port to be added +to your URL. + +```js +'use strict'; + +var required = require('requires-port'); + +console.log(required('8080', 'http')) // true +console.log(required('80', 'http')) // false +``` + +# License + +MIT diff --git a/node_modules/requires-port/index.js b/node_modules/requires-port/index.js new file mode 100644 index 000000000..4f267b26c --- /dev/null +++ b/node_modules/requires-port/index.js @@ -0,0 +1,38 @@ +'use strict'; + +/** + * Check if we're required to add a port number. + * + * @see https://url.spec.whatwg.org/#default-port + * @param {Number|String} port Port number we need to check + * @param {String} protocol Protocol we need to check against. + * @returns {Boolean} Is it a default port for the given protocol + * @api private + */ +module.exports = function required(port, protocol) { + protocol = protocol.split(':')[0]; + port = +port; + + if (!port) return false; + + switch (protocol) { + case 'http': + case 'ws': + return port !== 80; + + case 'https': + case 'wss': + return port !== 443; + + case 'ftp': + return port !== 21; + + case 'gopher': + return port !== 70; + + case 'file': + return false; + } + + return port !== 0; +}; diff --git a/node_modules/requires-port/package.json b/node_modules/requires-port/package.json new file mode 100644 index 000000000..cec9da6d8 --- /dev/null +++ b/node_modules/requires-port/package.json @@ -0,0 +1,74 @@ +{ + "_from": "requires-port@1.x.x", + "_id": "requires-port@1.0.0", + "_inBundle": false, + "_integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "_location": "/requires-port", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "requires-port@1.x.x", + "name": "requires-port", + "escapedName": "requires-port", + "rawSpec": "1.x.x", + "saveSpec": null, + "fetchSpec": "1.x.x" + }, + "_requiredBy": [ + "/http-proxy" + ], + "_resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "_shasum": "925d2601d39ac485e091cf0da5c6e694dc3dcaff", + "_spec": "requires-port@1.x.x", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/http-proxy", + "author": { + "name": "Arnout Kazemier" + }, + "bugs": { + "url": "https://github.com/unshiftio/requires-port/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if a protocol requires a certain port number to be added to an URL.", + "devDependencies": { + "assume": "1.3.x", + "istanbul": "0.4.x", + "mocha": "2.3.x", + "pre-commit": "1.1.x" + }, + "homepage": "https://github.com/unshiftio/requires-port", + "keywords": [ + "port", + "require", + "http", + "https", + "ws", + "wss", + "gopher", + "file", + "ftp", + "requires", + "requried", + "portnumber", + "url", + "parsing", + "validation", + "cows" + ], + "license": "MIT", + "main": "index.js", + "name": "requires-port", + "repository": { + "type": "git", + "url": "git+https://github.com/unshiftio/requires-port.git" + }, + "scripts": { + "100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100", + "coverage": "istanbul cover _mocha -- test.js", + "test": "mocha test.js", + "test-travis": "istanbul cover _mocha --report lcovonly -- test.js", + "watch": "mocha --watch test.js" + }, + "version": "1.0.0" +} diff --git a/node_modules/requires-port/test.js b/node_modules/requires-port/test.js new file mode 100644 index 000000000..93a0c7498 --- /dev/null +++ b/node_modules/requires-port/test.js @@ -0,0 +1,98 @@ +describe('requires-port', function () { + 'use strict'; + + var assume = require('assume') + , required = require('./'); + + it('is exported as a function', function () { + assume(required).is.a('function'); + }); + + it('does not require empty ports', function () { + assume(required('', 'http')).false(); + assume(required('', 'wss')).false(); + assume(required('', 'ws')).false(); + assume(required('', 'cowsack')).false(); + }); + + it('assumes true for unknown protocols',function () { + assume(required('808', 'foo')).true(); + assume(required('80', 'bar')).true(); + }); + + it('never requires port numbers for file', function () { + assume(required(8080, 'file')).false(); + }); + + it('does not require port 80 for http', function () { + assume(required('80', 'http')).false(); + assume(required(80, 'http')).false(); + assume(required(80, 'http://')).false(); + assume(required(80, 'http://www.google.com')).false(); + + assume(required('8080', 'http')).true(); + assume(required(8080, 'http')).true(); + assume(required(8080, 'http://')).true(); + assume(required(8080, 'http://www.google.com')).true(); + }); + + it('does not require port 80 for ws', function () { + assume(required('80', 'ws')).false(); + assume(required(80, 'ws')).false(); + assume(required(80, 'ws://')).false(); + assume(required(80, 'ws://www.google.com')).false(); + + assume(required('8080', 'ws')).true(); + assume(required(8080, 'ws')).true(); + assume(required(8080, 'ws://')).true(); + assume(required(8080, 'ws://www.google.com')).true(); + }); + + it('does not require port 443 for https', function () { + assume(required('443', 'https')).false(); + assume(required(443, 'https')).false(); + assume(required(443, 'https://')).false(); + assume(required(443, 'https://www.google.com')).false(); + + assume(required('8080', 'https')).true(); + assume(required(8080, 'https')).true(); + assume(required(8080, 'https://')).true(); + assume(required(8080, 'https://www.google.com')).true(); + }); + + it('does not require port 443 for wss', function () { + assume(required('443', 'wss')).false(); + assume(required(443, 'wss')).false(); + assume(required(443, 'wss://')).false(); + assume(required(443, 'wss://www.google.com')).false(); + + assume(required('8080', 'wss')).true(); + assume(required(8080, 'wss')).true(); + assume(required(8080, 'wss://')).true(); + assume(required(8080, 'wss://www.google.com')).true(); + }); + + it('does not require port 21 for ftp', function () { + assume(required('21', 'ftp')).false(); + assume(required(21, 'ftp')).false(); + assume(required(21, 'ftp://')).false(); + assume(required(21, 'ftp://www.google.com')).false(); + + assume(required('8080', 'ftp')).true(); + assume(required(8080, 'ftp')).true(); + assume(required(8080, 'ftp://')).true(); + assume(required(8080, 'ftp://www.google.com')).true(); + }); + + it('does not require port 70 for gopher', function () { + assume(required('70', 'gopher')).false(); + assume(required(70, 'gopher')).false(); + assume(required(70, 'gopher://')).false(); + assume(required(70, 'gopher://www.google.com')).false(); + + assume(required('8080', 'gopher')).true(); + assume(required(8080, 'gopher')).true(); + assume(required(8080, 'gopher://')).true(); + assume(required(8080, 'gopher://www.google.com')).true(); + }); +}); diff --git a/node_modules/right-align/LICENSE b/node_modules/right-align/LICENSE new file mode 100644 index 000000000..65f90aca8 --- /dev/null +++ b/node_modules/right-align/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/right-align/README.md b/node_modules/right-align/README.md new file mode 100644 index 000000000..3abdfb3a7 --- /dev/null +++ b/node_modules/right-align/README.md @@ -0,0 +1,77 @@ +# right-align [![NPM version](https://badge.fury.io/js/right-align.svg)](http://badge.fury.io/js/right-align) + +> Right-align the text in a string. + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i right-align --save +``` + +## Usage + +```js +var rightAlign = require('right-align'); +rightAlign(string); +``` + +**Example** + +If used on the following: + +``` +Lorem ipsum dolor sit amet, +consectetur adipiscing +elit, sed do eiusmod tempor incididunt +ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis +``` + +The result would be: + +``` + Lorem ipsum dolor sit amet, + consectetur adipiscing +elit, sed do eiusmod tempor incididunt + ut labore et dolore + magna aliqua. Ut enim ad minim + veniam, quis +``` + +## Related projects + +* [align-text](https://github.com/jonschlinkert/align-text): Align the text in a string. +* [center-align](https://github.com/jonschlinkert/center-align): Center-align the text in a string. +* [justify](https://github.com/bahamas10/node-justify): Left or right (or both) justify text using a custom width and character +* [repeat-string](https://github.com/jonschlinkert/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. +* [repeat-element](https://github.com/jonschlinkert/repeat-element): Create an array by repeating the given value n times. +* [word-wrap](https://github.com/jonschlinkert/word-wrap): Wrap words to a specified length. + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/right-align/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 09, 2015._ diff --git a/node_modules/right-align/index.js b/node_modules/right-align/index.js new file mode 100644 index 000000000..ad54f5f1c --- /dev/null +++ b/node_modules/right-align/index.js @@ -0,0 +1,16 @@ +/*! + * right-align + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var align = require('align-text'); + +module.exports = function rightAlign(val) { + return align(val, function (len, longest) { + return longest - len; + }); +}; diff --git a/node_modules/right-align/package.json b/node_modules/right-align/package.json new file mode 100644 index 000000000..f7ad19298 --- /dev/null +++ b/node_modules/right-align/package.json @@ -0,0 +1,70 @@ +{ + "_from": "right-align@^0.1.1", + "_id": "right-align@0.1.3", + "_inBundle": false, + "_integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "_location": "/right-align", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "right-align@^0.1.1", + "name": "right-align", + "escapedName": "right-align", + "rawSpec": "^0.1.1", + "saveSpec": null, + "fetchSpec": "^0.1.1" + }, + "_requiredBy": [ + "/cliui" + ], + "_resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "_shasum": "61339b722fe6a3515689210d24e14c96148613ef", + "_spec": "right-align@^0.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/cliui", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/right-align/issues" + }, + "bundleDependencies": false, + "dependencies": { + "align-text": "^0.1.1" + }, + "deprecated": false, + "description": "Right-align the text in a string.", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/right-align", + "keywords": [ + "align", + "align-center", + "center", + "center-align", + "right", + "right-align", + "text", + "typography" + ], + "license": "MIT", + "main": "index.js", + "name": "right-align", + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/right-align.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "0.1.3" +} diff --git a/node_modules/ripemd160/CHANGELOG.md b/node_modules/ripemd160/CHANGELOG.md new file mode 100644 index 000000000..91ba9128f --- /dev/null +++ b/node_modules/ripemd160/CHANGELOG.md @@ -0,0 +1,72 @@ +2.0.1 / 2016-06-22 +------------------ +- added LICENSE file. + +2.0.0 / 2016-04-11 +------------------ +- rewritten, license change BSD-3 to MIT. [#13][#13] +- stream support [#13][#13] + +1.0.1 / 2015-05-05 +------------------ +- standard formatting + +1.0.0 / 2015-01-14 +------------------ +- updated dev deps +- added more test fixtures +- updated readme with usage, testing, etc +- moved from https://github.com/cryptocoinjs/ripemd160 to https://github.com/crypto-browserify/ripemd160 + +0.2.1 / 2014-12-31 +------------------ +- made license clear in `package.json` +- deleted `Makefile`, moved targets to `package.json` +- removed `terst` for `assert` + +0.2.0 / 2014-03-09 +------------------ +* removed bower.json and component.json +* changed 4 spacing to 2 +* returns `Buffer` type now, input must be Array, Uint8Array, Buffer, or string +* remove deps: `convert-hex` and `convert-string` + +0.1.0 / 2013-11-20 +------------------ +* changed package name +* removed AMD support + +0.0.2 / 2013-11-06 +------------------ +* fixed component.json file + +0.0.1 / 2013-11-03 +------------------ +* initial release + + +[#13]: https://github.com/crypto-browserify/ripemd160/pull/13 + +[#12]: https://github.com/crypto-browserify/ripemd160/pull/12 + +[#11]: https://github.com/crypto-browserify/ripemd160/pull/11 + +[#10]: https://github.com/crypto-browserify/ripemd160/pull/10 + +[#9]: https://github.com/crypto-browserify/ripemd160/pull/9 + +[#8]: https://github.com/crypto-browserify/ripemd160/issues/8 + +[#7]: https://github.com/crypto-browserify/ripemd160/pull/7 + +[#6]: https://github.com/crypto-browserify/ripemd160/pull/6 + +[#5]: https://github.com/crypto-browserify/ripemd160/issues/5 + +[#4]: https://github.com/crypto-browserify/ripemd160/pull/4 + +[#3]: https://github.com/crypto-browserify/ripemd160/pull/3 + +[#2]: https://github.com/crypto-browserify/ripemd160/pull/2 + +[#1]: https://github.com/crypto-browserify/ripemd160/pull/1 diff --git a/node_modules/ripemd160/LICENSE.md b/node_modules/ripemd160/LICENSE.md new file mode 100644 index 000000000..cbe3544bc --- /dev/null +++ b/node_modules/ripemd160/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 crypto-browserify + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/ripemd160/README.md b/node_modules/ripemd160/README.md new file mode 100644 index 000000000..056c6a212 --- /dev/null +++ b/node_modules/ripemd160/README.md @@ -0,0 +1,27 @@ +# ripemd160 + +[![NPM Package](https://img.shields.io/npm/v/ripemd160.svg?style=flat-square)](https://www.npmjs.org/package/ripemd160) +[![Build Status](https://img.shields.io/travis/crypto-browserify/ripemd160.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/ripemd160) +[![Dependency status](https://img.shields.io/david/crypto-browserify/ripemd160.svg?style=flat-square)](https://david-dm.org/crypto-browserify/ripemd160#info=dependencies) + +[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) + +Node style `ripemd160` on pure JavaScript. + +## Example + +```js +var RIPEMD160 = require('ripemd160') + +console.log(new RIPEMD160().update('42').digest('hex')) +// => 0df020ba32aa9b8b904471ff582ce6b579bf8bc8 + +var ripemd160stream = new RIPEMD160() +ripemd160stream.end('42') +console.log(ripemd160stream.read().toString('hex')) +// => 0df020ba32aa9b8b904471ff582ce6b579bf8bc8 +``` + +## LICENSE + +MIT diff --git a/node_modules/ripemd160/index.js b/node_modules/ripemd160/index.js new file mode 100644 index 000000000..fba4f2b6a --- /dev/null +++ b/node_modules/ripemd160/index.js @@ -0,0 +1,291 @@ +'use strict' +var inherits = require('inherits') +var HashBase = require('hash-base') + +function RIPEMD160 () { + HashBase.call(this, 64) + + // state + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 +} + +inherits(RIPEMD160, HashBase) + +RIPEMD160.prototype._update = function () { + var m = new Array(16) + for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4) + + var al = this._a + var bl = this._b + var cl = this._c + var dl = this._d + var el = this._e + + // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + // K = 0x00000000 + // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 + al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10) + el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10) + dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10) + cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10) + bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10) + al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10) + el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10) + dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10) + cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10) + bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10) + al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10) + el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10) + dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10) + cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10) + bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10) + al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10) + + // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 + // K = 0x5a827999 + // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 + el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10) + dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10) + cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10) + bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10) + al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10) + el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10) + dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10) + cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10) + bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10) + al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10) + el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10) + dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10) + cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10) + bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10) + al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10) + el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10) + + // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 + // K = 0x6ed9eba1 + // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 + dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10) + cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10) + bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10) + al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10) + el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10) + dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10) + cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10) + bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10) + al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10) + el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10) + dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10) + cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10) + bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10) + al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10) + el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10) + dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10) + + // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 + // K = 0x8f1bbcdc + // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 + cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10) + bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10) + al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10) + el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10) + dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10) + cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10) + bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10) + al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10) + el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10) + dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10) + cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10) + bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10) + al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10) + el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10) + dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10) + cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10) + + // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 + // K = 0xa953fd4e + // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 + bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10) + al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10) + el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10) + dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10) + cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10) + bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10) + al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10) + el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10) + dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10) + cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10) + bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10) + al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10) + el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10) + dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10) + cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10) + bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10) + + var ar = this._a + var br = this._b + var cr = this._c + var dr = this._d + var er = this._e + + // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 + // K' = 0x50a28be6 + // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 + ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10) + er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10) + dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10) + cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10) + br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10) + ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10) + er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10) + dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10) + cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10) + br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10) + ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10) + er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10) + dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10) + cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10) + br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10) + ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10) + + // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 + // K' = 0x5c4dd124 + // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 + er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10) + dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10) + cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10) + br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10) + ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10) + er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10) + dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10) + cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10) + br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10) + ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10) + er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10) + dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10) + cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10) + br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10) + ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10) + er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10) + + // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 + // K' = 0x6d703ef3 + // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 + dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10) + cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10) + br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10) + ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10) + er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10) + dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10) + cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10) + br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10) + ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10) + er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10) + dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10) + cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10) + br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10) + ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10) + er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10) + dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10) + + // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 + // K' = 0x7a6d76e9 + // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 + cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10) + br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10) + ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10) + er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10) + dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10) + cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10) + br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10) + ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10) + er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10) + dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10) + cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10) + br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10) + ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10) + er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10) + dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10) + cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10) + + // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 + // K' = 0x00000000 + // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 + br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10) + ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10) + er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10) + dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10) + cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10) + br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10) + ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10) + er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10) + dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10) + cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10) + br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10) + ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10) + er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10) + dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10) + cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10) + br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10) + + // change state + var t = (this._b + cl + dr) | 0 + this._b = (this._c + dl + er) | 0 + this._c = (this._d + el + ar) | 0 + this._d = (this._e + al + br) | 0 + this._e = (this._a + bl + cr) | 0 + this._a = t +} + +RIPEMD160.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80 + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64) + this._update() + this._blockOffset = 0 + } + + this._block.fill(0, this._blockOffset, 56) + this._block.writeUInt32LE(this._length[0], 56) + this._block.writeUInt32LE(this._length[1], 60) + this._update() + + // produce result + var buffer = new Buffer(20) + buffer.writeInt32LE(this._a, 0) + buffer.writeInt32LE(this._b, 4) + buffer.writeInt32LE(this._c, 8) + buffer.writeInt32LE(this._d, 12) + buffer.writeInt32LE(this._e, 16) + return buffer +} + +function rotl (x, n) { + return (x << n) | (x >>> (32 - n)) +} + +function fn1 (a, b, c, d, e, m, k, s) { + return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0 +} + +function fn2 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0 +} + +function fn3 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0 +} + +function fn4 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0 +} + +function fn5 (a, b, c, d, e, m, k, s) { + return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0 +} + +module.exports = RIPEMD160 diff --git a/node_modules/ripemd160/package.json b/node_modules/ripemd160/package.json new file mode 100644 index 000000000..5afdf7ff1 --- /dev/null +++ b/node_modules/ripemd160/package.json @@ -0,0 +1,68 @@ +{ + "_from": "ripemd160@^2.0.0", + "_id": "ripemd160@2.0.1", + "_inBundle": false, + "_integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "_location": "/ripemd160", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ripemd160@^2.0.0", + "name": "ripemd160", + "escapedName": "ripemd160", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/create-hash", + "/create-hmac", + "/pbkdf2" + ], + "_resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "_shasum": "0f4584295c53a3628af7e6d79aca21ce57d1c6e7", + "_spec": "ripemd160@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/create-hash", + "bugs": { + "url": "https://github.com/crypto-browserify/ripemd160/issues" + }, + "bundleDependencies": false, + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + }, + "deprecated": false, + "description": "Compute ripemd160 of bytes or strings.", + "devDependencies": { + "hash-test-vectors": "^1.3.2", + "standard": "^6.0.7", + "tape": "^4.5.1" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/crypto-browserify/ripemd160#readme", + "keywords": [ + "string", + "strings", + "ripemd160", + "ripe160", + "bitcoin", + "bytes", + "cryptography" + ], + "license": "MIT", + "main": "./index", + "name": "ripemd160", + "repository": { + "url": "git+https://github.com/crypto-browserify/ripemd160.git", + "type": "git" + }, + "scripts": { + "lint": "standard", + "test": "npm run lint && npm run unit", + "unit": "node test/*.js" + }, + "version": "2.0.1" +} diff --git a/node_modules/safe-buffer/.travis.yml b/node_modules/safe-buffer/.travis.yml new file mode 100644 index 000000000..7b20f28cb --- /dev/null +++ b/node_modules/safe-buffer/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - 'node' + - '5' + - '4' + - '0.12' + - '0.10' diff --git a/node_modules/safe-buffer/LICENSE b/node_modules/safe-buffer/LICENSE new file mode 100644 index 000000000..0c068ceec --- /dev/null +++ b/node_modules/safe-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/safe-buffer/README.md b/node_modules/safe-buffer/README.md new file mode 100644 index 000000000..e9a81afd0 --- /dev/null +++ b/node_modules/safe-buffer/README.md @@ -0,0 +1,584 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg +[downloads-url]: https://npmjs.org/package/safe-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Safer Node.js Buffer API + +**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** + +**Uses the built-in implementation when available.** + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_modules/safe-buffer/index.js b/node_modules/safe-buffer/index.js new file mode 100644 index 000000000..22438dabb --- /dev/null +++ b/node_modules/safe-buffer/index.js @@ -0,0 +1,62 @@ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} diff --git a/node_modules/safe-buffer/package.json b/node_modules/safe-buffer/package.json new file mode 100644 index 000000000..d3d4b62dd --- /dev/null +++ b/node_modules/safe-buffer/package.json @@ -0,0 +1,63 @@ +{ + "_from": "safe-buffer@~5.1.1", + "_id": "safe-buffer@5.1.1", + "_inBundle": false, + "_integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "_location": "/safe-buffer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "safe-buffer@~5.1.1", + "name": "safe-buffer", + "escapedName": "safe-buffer", + "rawSpec": "~5.1.1", + "saveSpec": null, + "fetchSpec": "~5.1.1" + }, + "_requiredBy": [ + "/readable-stream", + "/string_decoder" + ], + "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "_shasum": "893312af69b2123def71f57889001671eeb2c853", + "_spec": "safe-buffer@~5.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/readable-stream", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/safe-buffer/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Safer Node.js Buffer API", + "devDependencies": { + "standard": "*", + "tape": "^4.0.0", + "zuul": "^3.0.0" + }, + "homepage": "https://github.com/feross/safe-buffer", + "keywords": [ + "buffer", + "buffer allocate", + "node security", + "safe", + "safe-buffer", + "security", + "uninitialized" + ], + "license": "MIT", + "main": "index.js", + "name": "safe-buffer", + "repository": { + "type": "git", + "url": "git://github.com/feross/safe-buffer.git" + }, + "scripts": { + "test": "standard && tape test.js" + }, + "version": "5.1.1" +} diff --git a/node_modules/safe-buffer/test.js b/node_modules/safe-buffer/test.js new file mode 100644 index 000000000..4925059c5 --- /dev/null +++ b/node_modules/safe-buffer/test.js @@ -0,0 +1,101 @@ +/* eslint-disable node/no-deprecated-api */ + +var test = require('tape') +var SafeBuffer = require('./').Buffer + +test('new SafeBuffer(value) works just like Buffer', function (t) { + t.deepEqual(new SafeBuffer('hey'), new Buffer('hey')) + t.deepEqual(new SafeBuffer('hey', 'utf8'), new Buffer('hey', 'utf8')) + t.deepEqual(new SafeBuffer('686579', 'hex'), new Buffer('686579', 'hex')) + t.deepEqual(new SafeBuffer([1, 2, 3]), new Buffer([1, 2, 3])) + t.deepEqual(new SafeBuffer(new Uint8Array([1, 2, 3])), new Buffer(new Uint8Array([1, 2, 3]))) + + t.equal(typeof SafeBuffer.isBuffer, 'function') + t.equal(SafeBuffer.isBuffer(new SafeBuffer('hey')), true) + t.equal(Buffer.isBuffer(new SafeBuffer('hey')), true) + t.notOk(SafeBuffer.isBuffer({})) + + t.end() +}) + +test('SafeBuffer.from(value) converts to a Buffer', function (t) { + t.deepEqual(SafeBuffer.from('hey'), new Buffer('hey')) + t.deepEqual(SafeBuffer.from('hey', 'utf8'), new Buffer('hey', 'utf8')) + t.deepEqual(SafeBuffer.from('686579', 'hex'), new Buffer('686579', 'hex')) + t.deepEqual(SafeBuffer.from([1, 2, 3]), new Buffer([1, 2, 3])) + t.deepEqual(SafeBuffer.from(new Uint8Array([1, 2, 3])), new Buffer(new Uint8Array([1, 2, 3]))) + + t.end() +}) + +test('SafeBuffer.alloc(number) returns zeroed-out memory', function (t) { + for (var i = 0; i < 10; i++) { + var expected1 = new Buffer(1000) + expected1.fill(0) + t.deepEqual(SafeBuffer.alloc(1000), expected1) + + var expected2 = new Buffer(1000 * 1000) + expected2.fill(0) + t.deepEqual(SafeBuffer.alloc(1000 * 1000), expected2) + } + t.end() +}) + +test('SafeBuffer.allocUnsafe(number)', function (t) { + var buf = SafeBuffer.allocUnsafe(100) // unitialized memory + t.equal(buf.length, 100) + t.equal(SafeBuffer.isBuffer(buf), true) + t.equal(Buffer.isBuffer(buf), true) + t.end() +}) + +test('SafeBuffer.from() throws with number types', function (t) { + t.plan(5) + t.throws(function () { + SafeBuffer.from(0) + }) + t.throws(function () { + SafeBuffer.from(-1) + }) + t.throws(function () { + SafeBuffer.from(NaN) + }) + t.throws(function () { + SafeBuffer.from(Infinity) + }) + t.throws(function () { + SafeBuffer.from(99) + }) +}) + +test('SafeBuffer.allocUnsafe() throws with non-number types', function (t) { + t.plan(4) + t.throws(function () { + SafeBuffer.allocUnsafe('hey') + }) + t.throws(function () { + SafeBuffer.allocUnsafe('hey', 'utf8') + }) + t.throws(function () { + SafeBuffer.allocUnsafe([1, 2, 3]) + }) + t.throws(function () { + SafeBuffer.allocUnsafe({}) + }) +}) + +test('SafeBuffer.alloc() throws with non-number types', function (t) { + t.plan(4) + t.throws(function () { + SafeBuffer.alloc('hey') + }) + t.throws(function () { + SafeBuffer.alloc('hey', 'utf8') + }) + t.throws(function () { + SafeBuffer.alloc([1, 2, 3]) + }) + t.throws(function () { + SafeBuffer.alloc({}) + }) +}) diff --git a/node_modules/semver/LICENSE b/node_modules/semver/LICENSE new file mode 100644 index 000000000..19129e315 --- /dev/null +++ b/node_modules/semver/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md new file mode 100644 index 000000000..fd5151ab3 --- /dev/null +++ b/node_modules/semver/README.md @@ -0,0 +1,366 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Install + +```bash +npm install --save semver +```` + +## Usage + +As a node module: + +```js +const semver = require('semver') + +semver.valid('1.2.3') // '1.2.3' +semver.valid('a.b.c') // null +semver.clean(' =v1.2.3 ') // '1.2.3' +semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true +semver.gt('1.2.3', '9.8.7') // false +semver.lt('1.2.3', '9.8.7') // true +``` + +As a command-line utility: + +``` +$ semver -h + +SemVer 5.3.0 + +A JavaScript implementation of the http://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them. +``` + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta') +// '1.2.4-beta.0' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```bash +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero digit in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0` +* `^0.2.3` := `>=0.2.3 <0.3.0` +* `^0.0.3` := `>=0.0.3 <0.0.4` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0` +* `^0.0.x` := `>=0.0.0 <0.1.0` +* `^0.0` := `>=0.0.0 <0.1.0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0` +* `^0.x` := `>=0.0.0 <1.0.0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `loose` boolean argument that, if +true, will be more forgiving about not-quite-valid semver strings. +The resulting output will always be 100% strict, of course. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. +* `intersects(r1, r2, loose)`: Return true if the two supplied ranges + or comparators intersect. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + +### Comparators + +* `intersects(comparator)`: Return true if the comparators intersect + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) +* `intersects(range)`: Return true if any of the ranges comparators intersect + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. diff --git a/node_modules/semver/bin/semver b/node_modules/semver/bin/semver new file mode 100755 index 000000000..c5f2e857e --- /dev/null +++ b/node_modules/semver/bin/semver @@ -0,0 +1,133 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +var argv = process.argv.slice(2) + , versions = [] + , range = [] + , gt = [] + , lt = [] + , eq = [] + , inc = null + , version = require("../package.json").version + , loose = false + , identifier = undefined + , semver = require("../semver") + , reverse = false + +main() + +function main () { + if (!argv.length) return help() + while (argv.length) { + var a = argv.shift() + var i = a.indexOf('=') + if (i !== -1) { + a = a.slice(0, i) + argv.unshift(a.slice(i + 1)) + } + switch (a) { + case "-rv": case "-rev": case "--rev": case "--reverse": + reverse = true + break + case "-l": case "--loose": + loose = true + break + case "-v": case "--version": + versions.push(argv.shift()) + break + case "-i": case "--inc": case "--increment": + switch (argv[0]) { + case "major": case "minor": case "patch": case "prerelease": + case "premajor": case "preminor": case "prepatch": + inc = argv.shift() + break + default: + inc = "patch" + break + } + break + case "--preid": + identifier = argv.shift() + break + case "-r": case "--range": + range.push(argv.shift()) + break + case "-h": case "--help": case "-?": + return help() + default: + versions.push(a) + break + } + } + + versions = versions.filter(function (v) { + return semver.valid(v, loose) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) + return failInc() + + for (var i = 0, l = range.length; i < l ; i ++) { + versions = versions.filter(function (v) { + return semver.satisfies(v, range[i], loose) + }) + if (!versions.length) return fail() + } + return success(versions) +} + +function failInc () { + console.error("--inc can only be used on a single version with no range") + fail() +} + +function fail () { process.exit(1) } + +function success () { + var compare = reverse ? "rcompare" : "compare" + versions.sort(function (a, b) { + return semver[compare](a, b, loose) + }).map(function (v) { + return semver.clean(v, loose) + }).map(function (v) { + return inc ? semver.inc(v, inc, loose, identifier) : v + }).forEach(function (v,i,_) { console.log(v) }) +} + +function help () { + console.log(["SemVer " + version + ,"" + ,"A JavaScript implementation of the http://semver.org/ specification" + ,"Copyright Isaac Z. Schlueter" + ,"" + ,"Usage: semver [options] [ [...]]" + ,"Prints valid versions sorted by SemVer precedence" + ,"" + ,"Options:" + ,"-r --range " + ," Print versions that match the specified range." + ,"" + ,"-i --increment []" + ," Increment a version by the specified level. Level can" + ," be one of: major, minor, patch, premajor, preminor," + ," prepatch, or prerelease. Default level is 'patch'." + ," Only one version may be specified." + ,"" + ,"--preid " + ," Identifier to be used to prefix premajor, preminor," + ," prepatch or prerelease version increments." + ,"" + ,"-l --loose" + ," Interpret versions and ranges loosely" + ,"" + ,"Program exits successfully if any valid version satisfies" + ,"all supplied ranges, and prints all satisfying versions." + ,"" + ,"If no satisfying versions are found, then exits failure." + ,"" + ,"Versions are printed in ascending order, so supplying" + ,"multiple versions to the utility will just sort them." + ].join("\n")) +} diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json new file mode 100644 index 000000000..e9babd1bc --- /dev/null +++ b/node_modules/semver/package.json @@ -0,0 +1,54 @@ +{ + "_from": "semver@2 || 3 || 4 || 5", + "_id": "semver@5.4.1", + "_inBundle": false, + "_integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "_location": "/semver", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "semver@2 || 3 || 4 || 5", + "name": "semver", + "escapedName": "semver", + "rawSpec": "2 || 3 || 4 || 5", + "saveSpec": null, + "fetchSpec": "2 || 3 || 4 || 5" + }, + "_requiredBy": [ + "/normalize-package-data" + ], + "_resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "_shasum": "e059c09d8571f0540823733433505d3a2f00b18e", + "_spec": "semver@2 || 3 || 4 || 5", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/normalize-package-data", + "bin": { + "semver": "./bin/semver" + }, + "bugs": { + "url": "https://github.com/npm/node-semver/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "The semantic version parser used by npm.", + "devDependencies": { + "tap": "^10.7.0" + }, + "files": [ + "bin", + "range.bnf", + "semver.js" + ], + "homepage": "https://github.com/npm/node-semver#readme", + "license": "ISC", + "main": "semver.js", + "name": "semver", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "scripts": { + "test": "tap test/*.js --cov -J" + }, + "version": "5.4.1" +} diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf new file mode 100644 index 000000000..25ebd5c83 --- /dev/null +++ b/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js new file mode 100644 index 000000000..389cb4467 --- /dev/null +++ b/node_modules/semver/semver.js @@ -0,0 +1,1296 @@ +exports = module.exports = SemVer; + +// The debug function is excluded entirely from the minified version. +/* nomin */ var debug; +/* nomin */ if (typeof process === 'object' && + /* nomin */ process.env && + /* nomin */ process.env.NODE_DEBUG && + /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG)) + /* nomin */ debug = function() { + /* nomin */ var args = Array.prototype.slice.call(arguments, 0); + /* nomin */ args.unshift('SEMVER'); + /* nomin */ console.log.apply(console, args); + /* nomin */ }; +/* nomin */ else + /* nomin */ debug = function() {}; + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0'; + +var MAX_LENGTH = 256; +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; + +// The actual regexps go on exports.re +var re = exports.re = []; +var src = exports.src = []; +var R = 0; + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++; +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'; +var NUMERICIDENTIFIERLOOSE = R++; +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'; + + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++; +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'; + + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++; +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')'; + +var MAINVERSIONLOOSE = R++; +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')'; + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++; +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + +var PRERELEASEIDENTIFIERLOOSE = R++; +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++; +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'; + +var PRERELEASELOOSE = R++; +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'; + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++; +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'; + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++; +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'; + + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++; +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?'; + +src[FULL] = '^' + FULLPLAIN + '$'; + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?'; + +var LOOSE = R++; +src[LOOSE] = '^' + LOOSEPLAIN + '$'; + +var GTLT = R++; +src[GTLT] = '((?:<|>)?=?)'; + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++; +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'; +var XRANGEIDENTIFIER = R++; +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'; + +var XRANGEPLAIN = R++; +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?'; + +var XRANGEPLAINLOOSE = R++; +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?'; + +var XRANGE = R++; +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'; +var XRANGELOOSE = R++; +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'; + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++; +src[LONETILDE] = '(?:~>?)'; + +var TILDETRIM = R++; +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'; +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g'); +var tildeTrimReplace = '$1~'; + +var TILDE = R++; +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'; +var TILDELOOSE = R++; +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'; + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++; +src[LONECARET] = '(?:\\^)'; + +var CARETTRIM = R++; +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'; +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g'); +var caretTrimReplace = '$1^'; + +var CARET = R++; +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'; +var CARETLOOSE = R++; +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'; + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++; +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'; +var COMPARATOR = R++; +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'; + + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++; +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'; + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g'); +var comparatorTrimReplace = '$1$2$3'; + + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++; +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$'; + +var HYPHENRANGELOOSE = R++; +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$'; + +// Star ranges basically just allow anything at all. +var STAR = R++; +src[STAR] = '(<|>)?=?\\s*\\*'; + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]); + if (!re[i]) + re[i] = new RegExp(src[i]); +} + +exports.parse = parse; +function parse(version, loose) { + if (version instanceof SemVer) + return version; + + if (typeof version !== 'string') + return null; + + if (version.length > MAX_LENGTH) + return null; + + var r = loose ? re[LOOSE] : re[FULL]; + if (!r.test(version)) + return null; + + try { + return new SemVer(version, loose); + } catch (er) { + return null; + } +} + +exports.valid = valid; +function valid(version, loose) { + var v = parse(version, loose); + return v ? v.version : null; +} + + +exports.clean = clean; +function clean(version, loose) { + var s = parse(version.trim().replace(/^[=v]+/, ''), loose); + return s ? s.version : null; +} + +exports.SemVer = SemVer; + +function SemVer(version, loose) { + if (version instanceof SemVer) { + if (version.loose === loose) + return version; + else + version = version.version; + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version); + } + + if (version.length > MAX_LENGTH) + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + + if (!(this instanceof SemVer)) + return new SemVer(version, loose); + + debug('SemVer', version, loose); + this.loose = loose; + var m = version.trim().match(loose ? re[LOOSE] : re[FULL]); + + if (!m) + throw new TypeError('Invalid Version: ' + version); + + this.raw = version; + + // these are actually numbers + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) + throw new TypeError('Invalid major version') + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) + throw new TypeError('Invalid minor version') + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) + throw new TypeError('Invalid patch version') + + // numberify any prerelease numeric ids + if (!m[4]) + this.prerelease = []; + else + this.prerelease = m[4].split('.').map(function(id) { + if (/^[0-9]+$/.test(id)) { + var num = +id; + if (num >= 0 && num < MAX_SAFE_INTEGER) + return num; + } + return id; + }); + + this.build = m[5] ? m[5].split('.') : []; + this.format(); +} + +SemVer.prototype.format = function() { + this.version = this.major + '.' + this.minor + '.' + this.patch; + if (this.prerelease.length) + this.version += '-' + this.prerelease.join('.'); + return this.version; +}; + +SemVer.prototype.toString = function() { + return this.version; +}; + +SemVer.prototype.compare = function(other) { + debug('SemVer.compare', this.version, this.loose, other); + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + return this.compareMain(other) || this.comparePre(other); +}; + +SemVer.prototype.compareMain = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch); +}; + +SemVer.prototype.comparePre = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) + return -1; + else if (!this.prerelease.length && other.prerelease.length) + return 1; + else if (!this.prerelease.length && !other.prerelease.length) + return 0; + + var i = 0; + do { + var a = this.prerelease[i]; + var b = other.prerelease[i]; + debug('prerelease compare', i, a, b); + if (a === undefined && b === undefined) + return 0; + else if (b === undefined) + return 1; + else if (a === undefined) + return -1; + else if (a === b) + continue; + else + return compareIdentifiers(a, b); + } while (++i); +}; + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function(release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0; + this.patch = 0; + this.minor = 0; + this.major++; + this.inc('pre', identifier); + break; + case 'preminor': + this.prerelease.length = 0; + this.patch = 0; + this.minor++; + this.inc('pre', identifier); + break; + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0; + this.inc('patch', identifier); + this.inc('pre', identifier); + break; + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) + this.inc('patch', identifier); + this.inc('pre', identifier); + break; + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) + this.major++; + this.minor = 0; + this.patch = 0; + this.prerelease = []; + break; + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) + this.minor++; + this.patch = 0; + this.prerelease = []; + break; + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) + this.patch++; + this.prerelease = []; + break; + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) + this.prerelease = [0]; + else { + var i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) // didn't increment anything + this.prerelease.push(0); + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) + this.prerelease = [identifier, 0]; + } else + this.prerelease = [identifier, 0]; + } + break; + + default: + throw new Error('invalid increment argument: ' + release); + } + this.format(); + this.raw = this.version; + return this; +}; + +exports.inc = inc; +function inc(version, release, loose, identifier) { + if (typeof(loose) === 'string') { + identifier = loose; + loose = undefined; + } + + try { + return new SemVer(version, loose).inc(release, identifier).version; + } catch (er) { + return null; + } +} + +exports.diff = diff; +function diff(version1, version2) { + if (eq(version1, version2)) { + return null; + } else { + var v1 = parse(version1); + var v2 = parse(version2); + if (v1.prerelease.length || v2.prerelease.length) { + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return 'pre'+key; + } + } + } + return 'prerelease'; + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return key; + } + } + } + } +} + +exports.compareIdentifiers = compareIdentifiers; + +var numeric = /^[0-9]+$/; +function compareIdentifiers(a, b) { + var anum = numeric.test(a); + var bnum = numeric.test(b); + + if (anum && bnum) { + a = +a; + b = +b; + } + + return (anum && !bnum) ? -1 : + (bnum && !anum) ? 1 : + a < b ? -1 : + a > b ? 1 : + 0; +} + +exports.rcompareIdentifiers = rcompareIdentifiers; +function rcompareIdentifiers(a, b) { + return compareIdentifiers(b, a); +} + +exports.major = major; +function major(a, loose) { + return new SemVer(a, loose).major; +} + +exports.minor = minor; +function minor(a, loose) { + return new SemVer(a, loose).minor; +} + +exports.patch = patch; +function patch(a, loose) { + return new SemVer(a, loose).patch; +} + +exports.compare = compare; +function compare(a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)); +} + +exports.compareLoose = compareLoose; +function compareLoose(a, b) { + return compare(a, b, true); +} + +exports.rcompare = rcompare; +function rcompare(a, b, loose) { + return compare(b, a, loose); +} + +exports.sort = sort; +function sort(list, loose) { + return list.sort(function(a, b) { + return exports.compare(a, b, loose); + }); +} + +exports.rsort = rsort; +function rsort(list, loose) { + return list.sort(function(a, b) { + return exports.rcompare(a, b, loose); + }); +} + +exports.gt = gt; +function gt(a, b, loose) { + return compare(a, b, loose) > 0; +} + +exports.lt = lt; +function lt(a, b, loose) { + return compare(a, b, loose) < 0; +} + +exports.eq = eq; +function eq(a, b, loose) { + return compare(a, b, loose) === 0; +} + +exports.neq = neq; +function neq(a, b, loose) { + return compare(a, b, loose) !== 0; +} + +exports.gte = gte; +function gte(a, b, loose) { + return compare(a, b, loose) >= 0; +} + +exports.lte = lte; +function lte(a, b, loose) { + return compare(a, b, loose) <= 0; +} + +exports.cmp = cmp; +function cmp(a, op, b, loose) { + var ret; + switch (op) { + case '===': + if (typeof a === 'object') a = a.version; + if (typeof b === 'object') b = b.version; + ret = a === b; + break; + case '!==': + if (typeof a === 'object') a = a.version; + if (typeof b === 'object') b = b.version; + ret = a !== b; + break; + case '': case '=': case '==': ret = eq(a, b, loose); break; + case '!=': ret = neq(a, b, loose); break; + case '>': ret = gt(a, b, loose); break; + case '>=': ret = gte(a, b, loose); break; + case '<': ret = lt(a, b, loose); break; + case '<=': ret = lte(a, b, loose); break; + default: throw new TypeError('Invalid operator: ' + op); + } + return ret; +} + +exports.Comparator = Comparator; +function Comparator(comp, loose) { + if (comp instanceof Comparator) { + if (comp.loose === loose) + return comp; + else + comp = comp.value; + } + + if (!(this instanceof Comparator)) + return new Comparator(comp, loose); + + debug('comparator', comp, loose); + this.loose = loose; + this.parse(comp); + + if (this.semver === ANY) + this.value = ''; + else + this.value = this.operator + this.semver.version; + + debug('comp', this); +} + +var ANY = {}; +Comparator.prototype.parse = function(comp) { + var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var m = comp.match(r); + + if (!m) + throw new TypeError('Invalid comparator: ' + comp); + + this.operator = m[1]; + if (this.operator === '=') + this.operator = ''; + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) + this.semver = ANY; + else + this.semver = new SemVer(m[2], this.loose); +}; + +Comparator.prototype.toString = function() { + return this.value; +}; + +Comparator.prototype.test = function(version) { + debug('Comparator.test', version, this.loose); + + if (this.semver === ANY) + return true; + + if (typeof version === 'string') + version = new SemVer(version, this.loose); + + return cmp(version, this.operator, this.semver, this.loose); +}; + +Comparator.prototype.intersects = function(comp, loose) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required'); + } + + var rangeTmp; + + if (this.operator === '') { + rangeTmp = new Range(comp.value, loose); + return satisfies(this.value, rangeTmp, loose); + } else if (comp.operator === '') { + rangeTmp = new Range(this.value, loose); + return satisfies(comp.semver, rangeTmp, loose); + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>'); + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<'); + var sameSemVer = this.semver.version === comp.semver.version; + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<='); + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, loose) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')); + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, loose) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')); + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan; +}; + + +exports.Range = Range; +function Range(range, loose) { + if (range instanceof Range) { + if (range.loose === loose) { + return range; + } else { + return new Range(range.raw, loose); + } + } + + if (range instanceof Comparator) { + return new Range(range.value, loose); + } + + if (!(this instanceof Range)) + return new Range(range, loose); + + this.loose = loose; + + // First, split based on boolean or || + this.raw = range; + this.set = range.split(/\s*\|\|\s*/).map(function(range) { + return this.parseRange(range.trim()); + }, this).filter(function(c) { + // throw out any that are not relevant for whatever reason + return c.length; + }); + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range); + } + + this.format(); +} + +Range.prototype.format = function() { + this.range = this.set.map(function(comps) { + return comps.join(' ').trim(); + }).join('||').trim(); + return this.range; +}; + +Range.prototype.toString = function() { + return this.range; +}; + +Range.prototype.parseRange = function(range) { + var loose = this.loose; + range = range.trim(); + debug('range', range, loose); + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; + range = range.replace(hr, hyphenReplace); + debug('hyphen replace', range); + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace); + debug('comparator trim', range, re[COMPARATORTRIM]); + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace); + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace); + + // normalize spaces + range = range.split(/\s+/).join(' '); + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var set = range.split(' ').map(function(comp) { + return parseComparator(comp, loose); + }).join(' ').split(/\s+/); + if (this.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function(comp) { + return !!comp.match(compRe); + }); + } + set = set.map(function(comp) { + return new Comparator(comp, loose); + }); + + return set; +}; + +Range.prototype.intersects = function(range, loose) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required'); + } + + return this.set.some(function(thisComparators) { + return thisComparators.every(function(thisComparator) { + return range.set.some(function(rangeComparators) { + return rangeComparators.every(function(rangeComparator) { + return thisComparator.intersects(rangeComparator, loose); + }); + }); + }); + }); +}; + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators; +function toComparators(range, loose) { + return new Range(range, loose).set.map(function(comp) { + return comp.map(function(c) { + return c.value; + }).join(' ').trim().split(' '); + }); +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator(comp, loose) { + debug('comp', comp); + comp = replaceCarets(comp, loose); + debug('caret', comp); + comp = replaceTildes(comp, loose); + debug('tildes', comp); + comp = replaceXRanges(comp, loose); + debug('xrange', comp); + comp = replaceStars(comp, loose); + debug('stars', comp); + return comp; +} + +function isX(id) { + return !id || id.toLowerCase() === 'x' || id === '*'; +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes(comp, loose) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceTilde(comp, loose); + }).join(' '); +} + +function replaceTilde(comp, loose) { + var r = loose ? re[TILDELOOSE] : re[TILDE]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + else if (isX(p)) + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + else if (pr) { + debug('replaceTilde pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0'; + + debug('tilde return', ret); + return ret; + }); +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets(comp, loose) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceCaret(comp, loose); + }).join(' '); +} + +function replaceCaret(comp, loose) { + debug('caret', comp, loose); + var r = loose ? re[CARETLOOSE] : re[CARET]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + else if (isX(p)) { + if (M === '0') + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + else + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'; + } else if (pr) { + debug('replaceCaret pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + if (M === '0') { + if (m === '0') + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + m + '.' + (+p + 1); + else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + (+M + 1) + '.0.0'; + } else { + debug('no pr'); + if (M === '0') { + if (m === '0') + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1); + else + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0'; + } + + debug('caret return', ret); + return ret; + }); +} + +function replaceXRanges(comp, loose) { + debug('replaceXRanges', comp, loose); + return comp.split(/\s+/).map(function(comp) { + return replaceXRange(comp, loose); + }).join(' '); +} + +function replaceXRange(comp, loose) { + comp = comp.trim(); + var r = loose ? re[XRANGELOOSE] : re[XRANGE]; + return comp.replace(r, function(ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr); + var xM = isX(M); + var xm = xM || isX(m); + var xp = xm || isX(p); + var anyX = xp; + + if (gtlt === '=' && anyX) + gtlt = ''; + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0'; + } else { + // nothing is forbidden + ret = '*'; + } + } else if (gtlt && anyX) { + // replace X with 0 + if (xm) + m = 0; + if (xp) + p = 0; + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>='; + if (xm) { + M = +M + 1; + m = 0; + p = 0; + } else if (xp) { + m = +m + 1; + p = 0; + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<'; + if (xm) + M = +M + 1; + else + m = +m + 1; + } + + ret = gtlt + M + '.' + m + '.' + p; + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + } + + debug('xRange return', ret); + + return ret; + }); +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars(comp, loose) { + debug('replaceStars', comp, loose); + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], ''); +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + + if (isX(fM)) + from = ''; + else if (isX(fm)) + from = '>=' + fM + '.0.0'; + else if (isX(fp)) + from = '>=' + fM + '.' + fm + '.0'; + else + from = '>=' + from; + + if (isX(tM)) + to = ''; + else if (isX(tm)) + to = '<' + (+tM + 1) + '.0.0'; + else if (isX(tp)) + to = '<' + tM + '.' + (+tm + 1) + '.0'; + else if (tpr) + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; + else + to = '<=' + to; + + return (from + ' ' + to).trim(); +} + + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function(version) { + if (!version) + return false; + + if (typeof version === 'string') + version = new SemVer(version, this.loose); + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version)) + return true; + } + return false; +}; + +function testSet(set, version) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) + return false; + } + + if (version.prerelease.length) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (var i = 0; i < set.length; i++) { + debug(set[i].semver); + if (set[i].semver === ANY) + continue; + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver; + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) + return true; + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false; + } + + return true; +} + +exports.satisfies = satisfies; +function satisfies(version, range, loose) { + try { + range = new Range(range, loose); + } catch (er) { + return false; + } + return range.test(version); +} + +exports.maxSatisfying = maxSatisfying; +function maxSatisfying(versions, range, loose) { + var max = null; + var maxSV = null; + try { + var rangeObj = new Range(range, loose); + } catch (er) { + return null; + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { // satisfies(v, range, loose) + if (!max || maxSV.compare(v) === -1) { // compare(max, v, true) + max = v; + maxSV = new SemVer(max, loose); + } + } + }) + return max; +} + +exports.minSatisfying = minSatisfying; +function minSatisfying(versions, range, loose) { + var min = null; + var minSV = null; + try { + var rangeObj = new Range(range, loose); + } catch (er) { + return null; + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { // satisfies(v, range, loose) + if (!min || minSV.compare(v) === 1) { // compare(min, v, true) + min = v; + minSV = new SemVer(min, loose); + } + } + }) + return min; +} + +exports.validRange = validRange; +function validRange(range, loose) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, loose).range || '*'; + } catch (er) { + return null; + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr; +function ltr(version, range, loose) { + return outside(version, range, '<', loose); +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr; +function gtr(version, range, loose) { + return outside(version, range, '>', loose); +} + +exports.outside = outside; +function outside(version, range, hilo, loose) { + version = new SemVer(version, loose); + range = new Range(range, loose); + + var gtfn, ltefn, ltfn, comp, ecomp; + switch (hilo) { + case '>': + gtfn = gt; + ltefn = lte; + ltfn = lt; + comp = '>'; + ecomp = '>='; + break; + case '<': + gtfn = lt; + ltefn = gte; + ltfn = gt; + comp = '<'; + ecomp = '<='; + break; + default: + throw new TypeError('Must provide a hilo val of "<" or ">"'); + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, loose)) { + return false; + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i]; + + var high = null; + var low = null; + + comparators.forEach(function(comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator; + low = low || comparator; + if (gtfn(comparator.semver, high.semver, loose)) { + high = comparator; + } else if (ltfn(comparator.semver, low.semver, loose)) { + low = comparator; + } + }); + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false; + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false; + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false; + } + } + return true; +} + +exports.prerelease = prerelease; +function prerelease(version, loose) { + var parsed = parse(version, loose); + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null; +} + +exports.intersects = intersects; +function intersects(r1, r2, loose) { + r1 = new Range(r1, loose) + r2 = new Range(r2, loose) + return r1.intersects(r2) +} diff --git a/node_modules/set-blocking/CHANGELOG.md b/node_modules/set-blocking/CHANGELOG.md new file mode 100644 index 000000000..03bf59192 --- /dev/null +++ b/node_modules/set-blocking/CHANGELOG.md @@ -0,0 +1,26 @@ +# 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.0](https://github.com/yargs/set-blocking/compare/v1.0.0...v2.0.0) (2016-05-17) + + +### Features + +* add an isTTY check ([#3](https://github.com/yargs/set-blocking/issues/3)) ([66ce277](https://github.com/yargs/set-blocking/commit/66ce277)) + + +### BREAKING CHANGES + +* stdio/stderr will not be set to blocking if isTTY === false + + + + +# 1.0.0 (2016-05-14) + + +### Features + +* implemented shim for stream._handle.setBlocking ([6bde0c0](https://github.com/yargs/set-blocking/commit/6bde0c0)) diff --git a/node_modules/set-blocking/LICENSE.txt b/node_modules/set-blocking/LICENSE.txt new file mode 100644 index 000000000..836440bef --- /dev/null +++ b/node_modules/set-blocking/LICENSE.txt @@ -0,0 +1,14 @@ +Copyright (c) 2016, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/set-blocking/README.md b/node_modules/set-blocking/README.md new file mode 100644 index 000000000..e93b4202b --- /dev/null +++ b/node_modules/set-blocking/README.md @@ -0,0 +1,31 @@ +# set-blocking + +[![Build Status](https://travis-ci.org/yargs/set-blocking.svg)](https://travis-ci.org/yargs/set-blocking) +[![NPM version](https://img.shields.io/npm/v/set-blocking.svg)](https://www.npmjs.com/package/set-blocking) +[![Coverage Status](https://coveralls.io/repos/yargs/set-blocking/badge.svg?branch=)](https://coveralls.io/r/yargs/set-blocking?branch=master) +[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) + +set blocking `stdio` and `stderr` ensuring that terminal output does not truncate. + +```js +const setBlocking = require('set-blocking') +setBlocking(true) +console.log(someLargeStringToOutput) +``` + +## Historical Context/Word of Warning + +This was created as a shim to address the bug discussed in [node #6456](https://github.com/nodejs/node/issues/6456). This bug crops up on +newer versions of Node.js (`0.12+`), truncating terminal output. + +You should be mindful of the side-effects caused by using `set-blocking`: + +* if your module sets blocking to `true`, it will effect other modules + consuming your library. In [yargs](https://github.com/yargs/yargs/blob/master/yargs.js#L653) we only call + `setBlocking(true)` once we already know we are about to call `process.exit(code)`. +* this patch will not apply to subprocesses spawned with `isTTY = true`, this is + the [default `spawn()` behavior](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options). + +## License + +ISC diff --git a/node_modules/set-blocking/index.js b/node_modules/set-blocking/index.js new file mode 100644 index 000000000..6f78774bb --- /dev/null +++ b/node_modules/set-blocking/index.js @@ -0,0 +1,7 @@ +module.exports = function (blocking) { + [process.stdout, process.stderr].forEach(function (stream) { + if (stream._handle && stream.isTTY && typeof stream._handle.setBlocking === 'function') { + stream._handle.setBlocking(blocking) + } + }) +} diff --git a/node_modules/set-blocking/package.json b/node_modules/set-blocking/package.json new file mode 100644 index 000000000..bcd7aa1dc --- /dev/null +++ b/node_modules/set-blocking/package.json @@ -0,0 +1,70 @@ +{ + "_from": "set-blocking@^2.0.0", + "_id": "set-blocking@2.0.0", + "_inBundle": false, + "_integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "_location": "/set-blocking", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "set-blocking@^2.0.0", + "name": "set-blocking", + "escapedName": "set-blocking", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "_shasum": "045f9782d011ae9a6803ddd382b24392b3d890f7", + "_spec": "set-blocking@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/yargs", + "author": { + "name": "Ben Coe", + "email": "ben@npmjs.com" + }, + "bugs": { + "url": "https://github.com/yargs/set-blocking/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "set blocking stdio and stderr ensuring that terminal output does not truncate", + "devDependencies": { + "chai": "^3.5.0", + "coveralls": "^2.11.9", + "mocha": "^2.4.5", + "nyc": "^6.4.4", + "standard": "^7.0.1", + "standard-version": "^2.2.1" + }, + "files": [ + "index.js", + "LICENSE.txt" + ], + "homepage": "https://github.com/yargs/set-blocking#readme", + "keywords": [ + "flush", + "terminal", + "blocking", + "shim", + "stdio", + "stderr" + ], + "license": "ISC", + "main": "index.js", + "name": "set-blocking", + "repository": { + "type": "git", + "url": "git+https://github.com/yargs/set-blocking.git" + }, + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "pretest": "standard", + "test": "nyc mocha ./test/*.js", + "version": "standard-version" + }, + "version": "2.0.0" +} diff --git a/node_modules/set-immediate-shim/index.js b/node_modules/set-immediate-shim/index.js new file mode 100644 index 000000000..e690485ca --- /dev/null +++ b/node_modules/set-immediate-shim/index.js @@ -0,0 +1,7 @@ +'use strict'; +module.exports = typeof setImmediate === 'function' ? setImmediate : + function setImmediate() { + var args = [].slice.apply(arguments); + args.splice(1, 0, 0); + setTimeout.apply(null, args); + }; diff --git a/node_modules/set-immediate-shim/package.json b/node_modules/set-immediate-shim/package.json new file mode 100644 index 000000000..b627e9850 --- /dev/null +++ b/node_modules/set-immediate-shim/package.json @@ -0,0 +1,66 @@ +{ + "_from": "set-immediate-shim@^1.0.1", + "_id": "set-immediate-shim@1.0.1", + "_inBundle": false, + "_integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "_location": "/set-immediate-shim", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "set-immediate-shim@^1.0.1", + "name": "set-immediate-shim", + "escapedName": "set-immediate-shim", + "rawSpec": "^1.0.1", + "saveSpec": null, + "fetchSpec": "^1.0.1" + }, + "_requiredBy": [ + "/readdirp" + ], + "_resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "_shasum": "4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61", + "_spec": "set-immediate-shim@^1.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/readdirp", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/set-immediate-shim/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Simple setImmediate shim", + "devDependencies": { + "ava": "0.0.4", + "require-uncached": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/set-immediate-shim#readme", + "keywords": [ + "setImmediate", + "immediate", + "setTimeout", + "timeout", + "shim", + "polyfill", + "ponyfill" + ], + "license": "MIT", + "name": "set-immediate-shim", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/set-immediate-shim.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.0.1" +} diff --git a/node_modules/set-immediate-shim/readme.md b/node_modules/set-immediate-shim/readme.md new file mode 100644 index 000000000..4ec864fa2 --- /dev/null +++ b/node_modules/set-immediate-shim/readme.md @@ -0,0 +1,31 @@ +# set-immediate-shim [![Build Status](https://travis-ci.org/sindresorhus/set-immediate-shim.svg?branch=master)](https://travis-ci.org/sindresorhus/set-immediate-shim) + +> Simple [`setImmediate`](https://developer.mozilla.org/en-US/docs/Web/API/Window.setImmediate) shim + + +## Install + +``` +$ npm install --save set-immediate-shim +``` + + +## Usage + +```js +var setImmediateShim = require('set-immediate-shim'); + +setImmediateShim(function () { + console.log('2'); +}); + +console.log('1'); + +//=> 1 +//=> 2 +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/setimmediate/LICENSE.txt b/node_modules/setimmediate/LICENSE.txt new file mode 100644 index 000000000..32b20de6a --- /dev/null +++ b/node_modules/setimmediate/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, and Domenic Denicola + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/setimmediate/package.json b/node_modules/setimmediate/package.json new file mode 100644 index 000000000..ef02f645f --- /dev/null +++ b/node_modules/setimmediate/package.json @@ -0,0 +1,74 @@ +{ + "_from": "setimmediate@^1.0.4", + "_id": "setimmediate@1.0.5", + "_inBundle": false, + "_integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "_location": "/setimmediate", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "setimmediate@^1.0.4", + "name": "setimmediate", + "escapedName": "setimmediate", + "rawSpec": "^1.0.4", + "saveSpec": null, + "fetchSpec": "^1.0.4" + }, + "_requiredBy": [ + "/timers-browserify" + ], + "_resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "_shasum": "290cbb232e306942d7d7ea9b83732ab7856f8285", + "_spec": "setimmediate@^1.0.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/timers-browserify", + "author": { + "name": "YuzuJS" + }, + "bugs": { + "url": "https://github.com/YuzuJS/setImmediate/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Domenic Denicola", + "email": "d@domenic.me", + "url": "https://domenic.me" + }, + { + "name": "Donavon West", + "email": "github@donavon.com", + "url": "http://donavon.com" + }, + { + "name": "Yaffle" + } + ], + "deprecated": false, + "description": "A shim for the setImmediate efficient script yielding API", + "devDependencies": { + "http-server": "~0.6.1", + "jshint": "^2.5.0", + "mocha": "~1.18.2", + "opener": "^1.3", + "zuul": "^1.6.4" + }, + "files": [ + "setImmediate.js" + ], + "homepage": "https://github.com/YuzuJS/setImmediate#readme", + "license": "MIT", + "main": "setImmediate.js", + "name": "setimmediate", + "repository": { + "type": "git", + "url": "git+https://github.com/YuzuJS/setImmediate.git" + }, + "scripts": { + "lint": "jshint setImmediate.js", + "test": "mocha test/tests.js", + "test-browser": "opener http://localhost:9008/__zuul && zuul test/tests.js --ui mocha-bdd --local 9008", + "test-browser-only": "opener http://localhost:9007/test/browserOnly/index.html && http-server . -p 9007" + }, + "version": "1.0.5" +} diff --git a/node_modules/setimmediate/setImmediate.js b/node_modules/setimmediate/setImmediate.js new file mode 100644 index 000000000..3c1b06e6e --- /dev/null +++ b/node_modules/setimmediate/setImmediate.js @@ -0,0 +1,186 @@ +(function (global, undefined) { + "use strict"; + + if (global.setImmediate) { + return; + } + + var nextHandle = 1; // Spec says greater than zero + var tasksByHandle = {}; + var currentlyRunningATask = false; + var doc = global.document; + var registerImmediate; + + function setImmediate(callback) { + // Callback can either be a function or a string + if (typeof callback !== "function") { + callback = new Function("" + callback); + } + // Copy function arguments + var args = new Array(arguments.length - 1); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i + 1]; + } + // Store and register the task + var task = { callback: callback, args: args }; + tasksByHandle[nextHandle] = task; + registerImmediate(nextHandle); + return nextHandle++; + } + + function clearImmediate(handle) { + delete tasksByHandle[handle]; + } + + function run(task) { + var callback = task.callback; + var args = task.args; + switch (args.length) { + case 0: + callback(); + break; + case 1: + callback(args[0]); + break; + case 2: + callback(args[0], args[1]); + break; + case 3: + callback(args[0], args[1], args[2]); + break; + default: + callback.apply(undefined, args); + break; + } + } + + function runIfPresent(handle) { + // From the spec: "Wait until any invocations of this algorithm started before this one have completed." + // So if we're currently running a task, we'll need to delay this invocation. + if (currentlyRunningATask) { + // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a + // "too much recursion" error. + setTimeout(runIfPresent, 0, handle); + } else { + var task = tasksByHandle[handle]; + if (task) { + currentlyRunningATask = true; + try { + run(task); + } finally { + clearImmediate(handle); + currentlyRunningATask = false; + } + } + } + } + + function installNextTickImplementation() { + registerImmediate = function(handle) { + process.nextTick(function () { runIfPresent(handle); }); + }; + } + + function canUsePostMessage() { + // The test against `importScripts` prevents this implementation from being installed inside a web worker, + // where `global.postMessage` means something completely different and can't be used for this purpose. + if (global.postMessage && !global.importScripts) { + var postMessageIsAsynchronous = true; + var oldOnMessage = global.onmessage; + global.onmessage = function() { + postMessageIsAsynchronous = false; + }; + global.postMessage("", "*"); + global.onmessage = oldOnMessage; + return postMessageIsAsynchronous; + } + } + + function installPostMessageImplementation() { + // Installs an event handler on `global` for the `message` event: see + // * https://developer.mozilla.org/en/DOM/window.postMessage + // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages + + var messagePrefix = "setImmediate$" + Math.random() + "$"; + var onGlobalMessage = function(event) { + if (event.source === global && + typeof event.data === "string" && + event.data.indexOf(messagePrefix) === 0) { + runIfPresent(+event.data.slice(messagePrefix.length)); + } + }; + + if (global.addEventListener) { + global.addEventListener("message", onGlobalMessage, false); + } else { + global.attachEvent("onmessage", onGlobalMessage); + } + + registerImmediate = function(handle) { + global.postMessage(messagePrefix + handle, "*"); + }; + } + + function installMessageChannelImplementation() { + var channel = new MessageChannel(); + channel.port1.onmessage = function(event) { + var handle = event.data; + runIfPresent(handle); + }; + + registerImmediate = function(handle) { + channel.port2.postMessage(handle); + }; + } + + function installReadyStateChangeImplementation() { + var html = doc.documentElement; + registerImmediate = function(handle) { + // Create a + +``` + +This library also works if you use AMD (Asynchronous Module Definition), which is used in tools like [RequireJS](http://requirejs.org/). Just list `browser-source-map-support` as a dependency: + +```html + +``` + +## Options + +This module installs two things: a change to the `stack` property on `Error` objects and a handler for uncaught exceptions that mimics node's default exception handler (the handler can be seen in the demos below). You may want to disable the handler if you have your own uncaught exception handler. This can be done by passing an argument to the installer: + +```js +require('source-map-support').install({ + handleUncaughtExceptions: false +}); +``` + +This module loads source maps from the filesystem by default. You can provide alternate loading behavior through a callback as shown below. For example, [Meteor](https://github.com/meteor) keeps all source maps cached in memory to avoid disk access. + +```js +require('source-map-support').install({ + retrieveSourceMap: function(source) { + if (source === 'compiled.js') { + return { + url: 'original.js', + map: fs.readFileSync('compiled.js.map', 'utf8') + }; + } + return null; + } +}); +``` + +The module will by default assume a browser environment if XMLHttpRequest and window are defined. If either of these do not exist it will instead assume a node environment. +In some rare cases, e.g. when running a browser emulation and where both variables are also set, you can explictly specify the environment to be either 'browser' or 'node'. + +```js +require('source-map-support').install({ + environment: 'node' +}); +``` + +To support files with inline source maps, the `hookRequire` options can be specified, which will monitor all source files for inline source maps. + + +```js +require('source-map-support').install({ + hookRequire: true +}); +``` + +This monkey patches the `require` module loading chain, so is not enabled by default and is not recommended for any sort of production usage. + +## Demos + +#### Basic Demo + +original.js: + +```js +throw new Error('test'); // This is the original code +``` + +compiled.js: + +```js +require('source-map-support').install(); + +throw new Error('test'); // This is the compiled code +// The next line defines the sourceMapping. +//# sourceMappingURL=compiled.js.map +``` + +compiled.js.map: + +```json +{ + "version": 3, + "file": "compiled.js", + "sources": ["original.js"], + "names": [], + "mappings": ";;AAAA,MAAM,IAAI" +} +``` + +Run compiled.js using node (notice how the stack trace uses original.js instead of compiled.js): + +``` +$ node compiled.js + +original.js:1 +throw new Error('test'); // This is the original code + ^ +Error: test + at Object. (original.js:1:7) + at Module._compile (module.js:456:26) + at Object.Module._extensions..js (module.js:474:10) + at Module.load (module.js:356:32) + at Function.Module._load (module.js:312:12) + at Function.Module.runMain (module.js:497:10) + at startup (node.js:119:16) + at node.js:901:3 +``` + +#### TypeScript Demo + +demo.ts: + +```typescript +declare function require(name: string); +require('source-map-support').install(); +class Foo { + constructor() { this.bar(); } + bar() { throw new Error('this is a demo'); } +} +new Foo(); +``` + +Compile and run the file using the TypeScript compiler from the terminal: + +``` +$ npm install source-map-support typescript +$ node_modules/typescript/bin/tsc -sourcemap demo.ts +$ node demo.js + +demo.ts:5 + bar() { throw new Error('this is a demo'); } + ^ +Error: this is a demo + at Foo.bar (demo.ts:5:17) + at new Foo (demo.ts:4:24) + at Object. (demo.ts:7:1) + at Module._compile (module.js:456:26) + at Object.Module._extensions..js (module.js:474:10) + at Module.load (module.js:356:32) + at Function.Module._load (module.js:312:12) + at Function.Module.runMain (module.js:497:10) + at startup (node.js:119:16) + at node.js:901:3 +``` + +#### CoffeeScript Demo + +demo.coffee: + +```coffee +require('source-map-support').install() +foo = -> + bar = -> throw new Error 'this is a demo' + bar() +foo() +``` + +Compile and run the file using the CoffeeScript compiler from the terminal: + +```sh +$ npm install source-map-support coffee-script +$ node_modules/coffee-script/bin/coffee --map --compile demo.coffee +$ node demo.js + +demo.coffee:3 + bar = -> throw new Error 'this is a demo' + ^ +Error: this is a demo + at bar (demo.coffee:3:22) + at foo (demo.coffee:4:3) + at Object. (demo.coffee:5:1) + at Object. (demo.coffee:1:1) + at Module._compile (module.js:456:26) + at Object.Module._extensions..js (module.js:474:10) + at Module.load (module.js:356:32) + at Function.Module._load (module.js:312:12) + at Function.Module.runMain (module.js:497:10) + at startup (node.js:119:16) +``` + +## Tests + +This repo contains both automated tests for node and manual tests for the browser. The automated tests can be run using mocha (type `mocha` in the root directory). To run the manual tests: + +* Build the tests using `build.js` +* Launch the HTTP server (`npm run serve-tests`) and visit + * http://127.0.0.1:1336/amd-test + * http://127.0.0.1:1336/browser-test + * http://127.0.0.1:1336/browserify-test - **Currently not working** due to a bug with browserify (see [pull request #66](https://github.com/evanw/node-source-map-support/pull/66) for details). +* For `header-test`, run `server.js` inside that directory and visit http://127.0.0.1:1337/ + +## License + +This code is available under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/node_modules/source-map-support/browser-source-map-support.js b/node_modules/source-map-support/browser-source-map-support.js new file mode 100644 index 000000000..e7a3990d6 --- /dev/null +++ b/node_modules/source-map-support/browser-source-map-support.js @@ -0,0 +1,110 @@ +/* + * Support for source maps in V8 stack traces + * https://github.com/evanw/node-source-map-support + */ +/* + The buffer module from node.js, for the browser. + + @author Feross Aboukhadijeh + license MIT +*/ +(this.define||function(N,O){this.sourceMapSupport=O()})("browser-source-map-support",function(N){(function n(v,m,c){function d(e,a){if(!m[e]){if(!v[e]){var h="function"==typeof require&&require;if(!a&&h)return h(e,!0);if(k)return k(e,!0);throw Error("Cannot find module '"+e+"'");}h=m[e]={exports:{}};v[e][0].call(h.exports,function(a){var c=v[e][1][a];return d(c?c:a)},h,h.exports,n,v,m,c)}return m[e].exports}for(var k="function"==typeof require&&require,q=0;qc)return-1;if(58>c)return c-48+52;if(91>c)return c-65;if(123>c)return c-97+26}var k="undefined"!==typeof Uint8Array?Uint8Array:Array;c.toByteArray=function(c){function e(a){u[b++]=a}if(0>16);e((f&65280)>>8);e(f&255)}2===h?(f=d(c.charAt(a))<<2|d(c.charAt(a+1))>>4,e(f&255)):1===h&&(f=d(c.charAt(a))<<10|d(c.charAt(a+1))<<4|d(c.charAt(a+2))>>2,e(f>>8&255),e(f&255));return u};c.fromByteArray=function(c){var e=c.length%3,a="",h;var d=0;for(h=c.length-e;d>18&63)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>12&63)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>6&63)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r&63);a+=r}switch(e){case 1:r=c[c.length-1];a+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>2);a+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r<< +4&63);a+="==";break;case 2:r=(c[c.length-2]<<8)+c[c.length-1],a+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>10),a+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>4&63),a+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r<<2&63),a+="="}return a}})("undefined"===typeof m?this.base64js={}:m)},{}],3:[function(n,v,m){},{}],4:[function(n,v,m){function c(g,l,b){if(!(this instanceof c))return new c(g,l,b);var x=typeof g; +if("base64"===l&&"string"===x)for(g=g.trim?g.trim():g.replace(/^\s+|\s+$/g,"");0!==g.length%4;)g+="=";if("number"===x)var a=B(g);else if("string"===x)a=c.byteLength(g,l);else if("object"===x)a=B(g.length);else throw Error("First argument needs to be a number, array or string.");if(c._useTypedArrays)var f=c._augment(new Uint8Array(a));else f=this,f.length=a,f._isBuffer=!0;if(c._useTypedArrays&&"number"===typeof g.byteLength)f._set(g);else{var e=g;if(L(e)||c.isBuffer(e)||e&&"object"===typeof e&&"number"=== +typeof e.length)for(l=0;l=a))return b?(b=g[l],l+ +1=a)){var x;b?(l+2>>0)):(l+1>>0);return x}}function e(g,l,b,a){a||(p("boolean"===typeof b,"missing or invalid endian"), +p(void 0!==l&&null!==l,"missing offset"),p(l+1=g.length))return g=k(g,l,b,!0),g&32768?-1*(65535-g+1):g}function a(g,l,b,a){a||(p("boolean"===typeof b,"missing or invalid endian"),p(void 0!==l&&null!==l,"missing offset"),p(l+3=g.length))return g=q(g,l,b,!0),g&2147483648?-1*(4294967295-g+1):g}function h(g,l,b,a){a||(p("boolean"===typeof b,"missing or invalid endian"),p(l+3=x))for(c=0,x=Math.min(x-b,2);c>>8* +(a?c:1-c)}function b(g,l,b,a,c){c||(p(void 0!==l&&null!==l,"missing value"),p("boolean"===typeof a,"missing or invalid endian"),p(void 0!==b&&null!==b,"missing offset"),p(b+3=x))for(c=0,x=Math.min(x-b,4);c>>8*(a?c:3-c)&255}function f(g,l,b,a,c){c||(p(void 0!==l&&null!==l,"missing value"),p("boolean"===typeof a,"missing or invalid endian"),p(void 0!==b&&null!==b,"missing offset"),p(b+1=g.length||(0<=l?r(g,l,b,a,c):r(g,65535+l+1,b,a,c))}function G(g,l,a,c,f){f||(p(void 0!==l&&null!==l,"missing value"),p("boolean"===typeof c,"missing or invalid endian"),p(void 0!==a&&null!==a,"missing offset"),p(a+3=g.length||(0<=l?b(g,l,a,c,f):b(g,4294967295+l+1,a,c,f))}function t(g,b,a,c,f){f||(p(void 0!==b&&null!==b,"missing value"),p("boolean"===typeof c, +"missing or invalid endian"),p(void 0!==a&&null!==a,"missing offset"),p(a+3=g.length||J.write(g,b,a,c,23,4)}function M(g,b,a,c,f){f||(p(void 0!==b&&null!==b,"missing value"),p("boolean"===typeof c,"missing or invalid endian"),p(void 0!==a&&null!==a,"missing offset"),p(a+7=g.length||J.write(g, +b,a,c,52,8)}function I(g,b,a){if("number"!==typeof g)return a;g=~~g;if(g>=b)return b;if(0<=g)return g;g+=b;return 0<=g?g:0}function B(g){g=~~Math.ceil(+g);return 0>g?0:g}function L(g){return(Array.isArray||function(g){return"[object Array]"===Object.prototype.toString.call(g)})(g)}function C(g){return 16>g?"0"+g.toString(16):g.toString(16)}function y(g){for(var b=[],a=0;a=c)b.push(g.charCodeAt(a));else{var f=a;55296<=c&&57343>=c&&a++;c=encodeURIComponent(g.slice(f, +a+1)).substr(1).split("%");for(f=0;f=b.length||l>=g.length);l++)b[l+a]=g[l];return l}function F(g){try{return decodeURIComponent(g)}catch(l){return String.fromCharCode(65533)}}function H(g,b){p("number"===typeof g,"cannot write a non-number as a number");p(0<=g,"specified a negative value for writing an unsigned value");p(g<= +b,"value is larger than maximum value for type");p(Math.floor(g)===g,"value has a fractional component")}function z(g,b,a){p("number"===typeof g,"cannot write a non-number as a number");p(g<=b,"value larger than maximum allowed value");p(g>=a,"value smaller than minimum allowed value");p(Math.floor(g)===g,"value has a fractional component")}function E(g,b,a){p("number"===typeof g,"cannot write a non-number as a number");p(g<=b,"value larger than maximum allowed value");p(g>=a,"value smaller than minimum allowed value")} +function p(g,b){if(!g)throw Error(b||"Failed assertion");}var D=n("base64-js"),J=n("ieee754");m.Buffer=c;m.SlowBuffer=c;m.INSPECT_MAX_BYTES=50;c.poolSize=8192;c._useTypedArrays=function(){try{var g=new ArrayBuffer(0),b=new Uint8Array(g);b.foo=function(){return 42};return 42===b.foo()&&"function"===typeof b.subarray}catch(x){return!1}}();c.isEncoding=function(g){switch(String(g).toLowerCase()){case "hex":case "utf8":case "utf-8":case "ascii":case "binary":case "base64":case "raw":case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":return!0; +default:return!1}};c.isBuffer=function(g){return!(null===g||void 0===g||!g._isBuffer)};c.byteLength=function(g,b){g+="";switch(b||"utf8"){case "hex":var a=g.length/2;break;case "utf8":case "utf-8":a=y(g).length;break;case "ascii":case "binary":case "raw":a=g.length;break;case "base64":a=D.toByteArray(g).length;break;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":a=2*g.length;break;default:throw Error("Unknown encoding");}return a};c.concat=function(g,b){p(L(g),"Usage: Buffer.concat(list, [totalLength])\nlist should be an Array."); +if(0===g.length)return new c(0);if(1===g.length)return g[0];var a;if("number"!==typeof b)for(a=b=0;al&&(a=l)):a=l;f=String(f||"utf8").toLowerCase();switch(f){case "hex":b=Number(b)||0;f=this.length-b;a?(a=Number(a),a>f&&(a=f)):a=f;f= +g.length;p(0===f%2,"Invalid hex string");a>f/2&&(a=f/2);for(f=0;f>8;h%=256;l.push(h);l.push(f)}g=c._charsWritten=A(l,this,b,a);break;default:throw Error("Unknown encoding");}return g};c.prototype.toString=function(g,b,a){g=String(g||"utf8").toLowerCase();b=Number(b)||0;a=void 0!==a?Number(a):a=this.length;if(a===b)return"";switch(g){case "hex":g=this.length;if(!b||0>b)b=0;if(!a||0>a||a>g)a=g;for(g="";b=this[b]?(g+=F(c)+String.fromCharCode(this[b]), +c=""):c+="%"+this[b].toString(16);a=g+F(c);break;case "ascii":a=d(this,b,a);break;case "binary":a=d(this,b,a);break;case "base64":a=0===b&&a===this.length?D.fromByteArray(this):D.fromByteArray(this.slice(b,a));break;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":a=this.slice(b,a);b="";for(g=0;g=a,"sourceEnd < sourceStart"),p(0<=b&&bthis.length&&(f=this.length),g.length-bf||!c._useTypedArrays)for(var l=0;l=this.length))return this[b]};c.prototype.readUInt16LE=function(b,a){return k(this,b,!0,a)};c.prototype.readUInt16BE=function(b,a){return k(this,b,!1,a)};c.prototype.readUInt32LE=function(b,a){return q(this,b,!0,a)};c.prototype.readUInt32BE=function(b,a){return q(this,b,!1,a)};c.prototype.readInt8=function(b,a){a||(p(void 0!==b&&null!==b,"missing offset"),p(b= +this.length))return this[b]&128?-1*(255-this[b]+1):this[b]};c.prototype.readInt16LE=function(b,a){return e(this,b,!0,a)};c.prototype.readInt16BE=function(b,a){return e(this,b,!1,a)};c.prototype.readInt32LE=function(b,f){return a(this,b,!0,f)};c.prototype.readInt32BE=function(b,f){return a(this,b,!1,f)};c.prototype.readFloatLE=function(b,a){return h(this,b,!0,a)};c.prototype.readFloatBE=function(b,a){return h(this,b,!1,a)};c.prototype.readDoubleLE=function(b,a){return u(this,b,!0,a)};c.prototype.readDoubleBE= +function(b,a){return u(this,b,!1,a)};c.prototype.writeUInt8=function(b,a,f){f||(p(void 0!==b&&null!==b,"missing value"),p(void 0!==a&&null!==a,"missing offset"),p(a=this.length||(this[a]=b)};c.prototype.writeUInt16LE=function(b,a,f){r(this,b,a,!0,f)};c.prototype.writeUInt16BE=function(b,a,f){r(this,b,a,!1,f)};c.prototype.writeUInt32LE=function(a,f,c){b(this,a,f,!0,c)};c.prototype.writeUInt32BE=function(a,f,c){b(this,a,f,!1,c)};c.prototype.writeInt8= +function(b,a,f){f||(p(void 0!==b&&null!==b,"missing value"),p(void 0!==a&&null!==a,"missing offset"),p(a=this.length||(0<=b?this.writeUInt8(b,a,f):this.writeUInt8(255+b+1,a,f))};c.prototype.writeInt16LE=function(b,a,c){f(this,b,a,!0,c)};c.prototype.writeInt16BE=function(b,a,c){f(this,b,a,!1,c)};c.prototype.writeInt32LE=function(b,a,f){G(this,b,a,!0,f)};c.prototype.writeInt32BE=function(b,a,f){G(this,b,a,!1,f)};c.prototype.writeFloatLE= +function(b,a,f){t(this,b,a,!0,f)};c.prototype.writeFloatBE=function(b,a,f){t(this,b,a,!1,f)};c.prototype.writeDoubleLE=function(b,a,f){M(this,b,a,!0,f)};c.prototype.writeDoubleBE=function(b,a,f){M(this,b,a,!1,f)};c.prototype.fill=function(b,a,f){b||(b=0);a||(a=0);f||(f=this.length);"string"===typeof b&&(b=b.charCodeAt(0));p("number"===typeof b&&!isNaN(b),"value is not a number");p(f>=a,"end < start");if(f!==a&&0!==this.length)for(p(0<=a&&a"};c.prototype.toArrayBuffer=function(){if("undefined"!==typeof Uint8Array){if(c._useTypedArrays)return(new c(this)).buffer;for(var b=new Uint8Array(this.length),a=0,f=b.length;a>1,r=-7;e=k?e-1:0;var b=k?-1:1,f=c[d+e];e+=b;k=f&(1<<-r)-1;f>>=-r;for(r+=a;0>=-r;for(r+=q;0>1,f=23===e?Math.pow(2,-24)-Math.pow(2,-77):0;a=q?0:a-1;var G=q?1:-1,t=0>d||0===d&&0>1/d?1:0;d=Math.abs(d);isNaN(d)||Infinity===d?(d=isNaN(d)?1:0,q=r):(q=Math.floor(Math.log(d)/Math.LN2),1>d*(h=Math.pow(2,-q))&&(q--,h*=2),d=1<=q+b?d+f/h:d+f*Math.pow(2,1-b),2<=d*h&&(q++,h/=2),q+b>=r?(d=0,q=r):1<=q+b?(d=(d*h-1)*Math.pow(2,e),q+=b):(d=d*Math.pow(2,b-1)*Math.pow(2,e),q=0));for(;8<=e;c[k+a]=d&255,a+=G,d/=256,e-=8);q=q<f?[]:b.slice(a,f-a+1)}a=m.resolve(a).substr(1);c=m.resolve(c).substr(1);for(var h=e(a.split("/")),b=e(c.split("/")),f=Math.min(h.length,b.length),G=f,t=0;tc&&(c=a.length+c);return a.substr(c,e)}}).call(this,n("node_modules/process/browser.js"))}, +{"node_modules/process/browser.js":7}],7:[function(n,v,m){function c(){}n=v.exports={};n.nextTick=function(){if("undefined"!==typeof window&&window.setImmediate)return function(c){return window.setImmediate(c)};if("undefined"!==typeof window&&window.postMessage&&window.addEventListener){var c=[];window.addEventListener("message",function(d){var k=d.source;k!==window&&null!==k||"process-tick"!==d.data||(d.stopPropagation(),0d?(-d<<1)+1:(d<<1)+0;do d=q&31,q>>>=5,0=e)throw Error("Expected more digits in base 64 VLQ value.");var u=c.decode(d.charCodeAt(k++));if(-1===u)throw Error("Invalid base64 digit: "+d.charAt(k-1)); +var r=!!(u&32);u&=31;a+=u<>1;q.value=1===(a&1)?-d:d;q.rest=k}},{"./base64":10}],10:[function(n,v,m){var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");m.encode=function(d){if(0<=d&&d=c?c-65:97<=c&&122>=c?c-97+26:48<=c&&57>=c?c-48+52:43==c?62:47==c?63:-1}},{}],11:[function(n,v,m){function c(d,k,q,e,a,h){var u=Math.floor((k-d)/2)+d,r= +a(q,e[u],!0);return 0===r?u:0d?-1:d}m.GREATEST_LOWER_BOUND=1;m.LEAST_UPPER_BOUND=2;m.search=function(d,k,q,e){if(0===k.length)return-1;d=c(-1,k.length,d,k,q,e||m.GREATEST_LOWER_BOUND);if(0>d)return-1;for(;0<=d-1&&0===q(k[d],k[d-1],!0);)--d;return d}},{}],12:[function(n,v,m){function c(){this._array=[];this._sorted=!0;this._last={generatedLine:-1,generatedColumn:0}}var d=n("./util");c.prototype.unsortedForEach= +function(c,d){this._array.forEach(c,d)};c.prototype.add=function(c){var k=this._last,e=k.generatedLine,a=c.generatedLine,h=k.generatedColumn,u=c.generatedColumn;a>e||a==e&&u>=h||0>=d.compareByGeneratedPositionsInflated(k,c)?this._last=c:this._sorted=!1;this._array.push(c)};c.prototype.toArray=function(){this._sorted||(this._array.sort(d.compareByGeneratedPositionsInflated),this._sorted=!0);return this._array};m.MappingList=c},{"./util":17}],13:[function(n,v,m){function c(c,d,e){var a=c[d];c[d]=c[e]; +c[e]=a}function d(k,m,e,a){if(e=m(k[r],u)&&(h+=1,c(k,h,r));c(k,h+1,r);h+=1;d(k,m,e,h-1);d(k,m,h+1,a)}}m.quickSort=function(c,m){d(c,m,0,c.length-1)}},{}],14:[function(n,v,m){function c(b){var a=b;"string"===typeof b&&(a=JSON.parse(b.replace(/^\)\]\}'/,"")));return null!=a.sections?new q(a):new d(a)}function d(b){var a=b;"string"===typeof b&&(a=JSON.parse(b.replace(/^\)\]\}'/,"")));b=e.getArg(a,"version");var c=e.getArg(a, +"sources"),t=e.getArg(a,"names",[]),d=e.getArg(a,"sourceRoot",null),r=e.getArg(a,"sourcesContent",null),k=e.getArg(a,"mappings");a=e.getArg(a,"file",null);if(b!=this._version)throw Error("Unsupported version: "+b);c=c.map(String).map(e.normalize).map(function(b){return d&&e.isAbsolute(d)&&e.isAbsolute(b)?e.relative(d,b):b});this._names=h.fromArray(t.map(String),!0);this._sources=h.fromArray(c,!0);this.sourceRoot=d;this.sourcesContent=r;this._mappings=k;this.file=a}function k(){this.generatedColumn= +this.generatedLine=0;this.name=this.originalColumn=this.originalLine=this.source=null}function q(b){var a=b;"string"===typeof b&&(a=JSON.parse(b.replace(/^\)\]\}'/,"")));b=e.getArg(a,"version");a=e.getArg(a,"sections");if(b!=this._version)throw Error("Unsupported version: "+b);this._sources=new h;this._names=new h;var d={line:-1,column:0};this._sections=a.map(function(b){if(b.url)throw Error("Support for url field in sections not implemented.");var a=e.getArg(b,"offset"),f=e.getArg(a,"line"),t=e.getArg(a, +"column");if(f=b[e])throw new TypeError("Line must be greater than or equal to 1, got "+b[e]);if(0>b[d])throw new TypeError("Column must be greater than or equal to 0, got "+b[d]);return a.search(b,c,h,r)};d.prototype.computeColumnSpans=function(){for(var b=0;b=this._sources.size()&&!this.sourcesContent.some(function(b){return null==b}):!1};d.prototype.sourceContentFor=function(b,a){if(!this.sourcesContent)return null;null!=this.sourceRoot&&(b=e.relative(this.sourceRoot, +b));if(this._sources.has(b))return this.sourcesContent[this._sources.indexOf(b)];var c;if(null!=this.sourceRoot&&(c=e.urlParse(this.sourceRoot))){var f=b.replace(/^file:\/\//,"");if("file"==c.scheme&&this._sources.has(f))return this.sourcesContent[this._sources.indexOf(f)];if((!c.path||"/"==c.path)&&this._sources.has("/"+b))return this.sourcesContent[this._sources.indexOf("/"+b)]}if(a)return null;throw Error('"'+b+'" is not in the SourceMap.');};d.prototype.generatedPositionFor=function(b){var a= +e.getArg(b,"source");null!=this.sourceRoot&&(a=e.relative(this.sourceRoot,a));if(!this._sources.has(a))return{line:null,column:null,lastColumn:null};a=this._sources.indexOf(a);a={source:a,originalLine:e.getArg(b,"line"),originalColumn:e.getArg(b,"column")};b=this._findMapping(a,this._originalMappings,"originalLine","originalColumn",e.compareByOriginalPositions,e.getArg(b,"bias",c.GREATEST_LOWER_BOUND));return 0<=b&&(b=this._originalMappings[b],b.source===a.source)?{line:e.getArg(b,"generatedLine", +null),column:e.getArg(b,"generatedColumn",null),lastColumn:e.getArg(b,"lastGeneratedColumn",null)}:{line:null,column:null,lastColumn:null}};m.BasicSourceMapConsumer=d;q.prototype=Object.create(c.prototype);q.prototype.constructor=c;q.prototype._version=3;Object.defineProperty(q.prototype,"sources",{get:function(){for(var a=[],c=0;cb||95!==a.charCodeAt(b-1)||95!==a.charCodeAt(b-2)||111!==a.charCodeAt(b-3)||116!==a.charCodeAt(b-4)||111!==a.charCodeAt(b-5)||114!==a.charCodeAt(b-6)||112!==a.charCodeAt(b-7)||95!==a.charCodeAt(b-8)||95!==a.charCodeAt(b- +9))return!1;for(b-=10;0<=b;b--)if(36!==a.charCodeAt(b))return!1;return!0}m.getArg=function(a,c,d){if(c in a)return a[c];if(3===arguments.length)return d;throw Error('"'+c+'" is a required argument.');};var u=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,r=/^data:.+\,.+$/;m.urlParse=c;m.urlGenerate=d;m.normalize=k;m.join=function(a,e){""===a&&(a=".");""===e&&(e=".");var b=c(e),f=c(a);f&&(a=f.path||"/");if(b&&!b.scheme)return f&&(b.scheme=f.scheme),d(b);if(b||e.match(r))return e; +if(f&&!f.host&&!f.path)return f.host=e,d(f);b="/"===e.charAt(0)?e:k(a.replace(/\/+$/,"")+"/"+e);return f?(f.path=b,d(f)):b};m.isAbsolute=function(a){return"/"===a.charAt(0)||!!a.match(u)};m.relative=function(a,c){""===a&&(a=".");a=a.replace(/\/$/,"");for(var b=0;0!==c.indexOf(a+"/");){var d=a.lastIndexOf("/");if(0>d)return c;a=a.slice(0,d);if(a.match(/^([^\/]+:\/)?\/*$/))return c;++b}return Array(b+1).join("../")+c.substr(a.length+1)};n=!("__proto__"in Object.create(null));m.toSetString=n?q:e;m.fromSetString= +n?q:a;m.compareByOriginalPositions=function(a,c,d){var b=a.source-c.source;if(0!==b)return b;b=a.originalLine-c.originalLine;if(0!==b)return b;b=a.originalColumn-c.originalColumn;if(0!==b||d)return b;b=a.generatedColumn-c.generatedColumn;if(0!==b)return b;b=a.generatedLine-c.generatedLine;return 0!==b?b:a.name-c.name};m.compareByGeneratedPositionsDeflated=function(a,c,d){var b=a.generatedLine-c.generatedLine;if(0!==b)return b;b=a.generatedColumn-c.generatedColumn;if(0!==b||d)return b;b=a.source-c.source; +if(0!==b)return b;b=a.originalLine-c.originalLine;if(0!==b)return b;b=a.originalColumn-c.originalColumn;return 0!==b?b:a.name-c.name};m.compareByGeneratedPositionsInflated=function(a,c){var b=a.generatedLine-c.generatedLine;if(0!==b)return b;b=a.generatedColumn-c.generatedColumn;if(0!==b)return b;b=a.source;var d=c.source;b=b===d?0:b>d?1:-1;if(0!==b)return b;b=a.originalLine-c.originalLine;if(0!==b)return b;b=a.originalColumn-c.originalColumn;0===b&&(b=a.name,d=c.name,b=b===d?0:b>d?1:-1);return b}}, +{}],18:[function(n,v,m){m.SourceMapGenerator=n("./lib/source-map-generator").SourceMapGenerator;m.SourceMapConsumer=n("./lib/source-map-consumer").SourceMapConsumer;m.SourceNode=n("./lib/source-node").SourceNode},{"./lib/source-map-consumer":14,"./lib/source-map-generator":15,"./lib/source-node":16}],19:[function(n,v,m){(function(c,d){function k(){return"browser"===K?!0:"node"===K?!1:"undefined"!==typeof window&&"function"===typeof XMLHttpRequest&&!(window.require&&window.module&&window.process&& +"renderer"===window.process.type)}function q(a){return function(b){for(var c=0;c";b=this.getLineNumber();null!=b&&(a+=":"+b,(b=this.getColumnNumber())&&(a+=":"+b))}b="";var c=this.getFunctionName(),d=!0,e=this.isConstructor();if(this.isToplevel()||e)e?b+="new "+(c||""):c?b+=c:(b+=a,d=!1);else{e=this.getTypeName();"[object Object]"===e&&(e="null");var f=this.getMethodName();c?(e&&0!=c.indexOf(e)&&(b+=e+"."),b+=c,f&&c.indexOf("."+f)!=c.length-f.length-1&&(b+=" [as "+f+"]")):b+=e+"."+(f||"")}d&&(b+=" ("+a+")");return b}function r(a){var b= +{};Object.getOwnPropertyNames(Object.getPrototypeOf(a)).forEach(function(c){b[c]=/^(?:is|get)/.test(c)?function(){return a[c].call(a)}:a[c]});b.toString=u;return b}function b(b){if(b.isNative())return b;var c=b.getFileName()||b.getScriptNameOrSourceURL();if(c){var d=b.getLineNumber(),e=b.getColumnNumber()-1;1===d&&62"); + } + } else if (isConstructor) { + line += "new " + (functionName || ""); + } else if (functionName) { + line += functionName; + } else { + line += fileLocation; + addSuffix = false; + } + if (addSuffix) { + line += " (" + fileLocation + ")"; + } + return line; +} + +function cloneCallSite(frame) { + var object = {}; + Object.getOwnPropertyNames(Object.getPrototypeOf(frame)).forEach(function(name) { + object[name] = /^(?:is|get)/.test(name) ? function() { return frame[name].call(frame); } : frame[name]; + }); + object.toString = CallSiteToString; + return object; +} + +function wrapCallSite(frame) { + if(frame.isNative()) { + return frame; + } + + // Most call sites will return the source file from getFileName(), but code + // passed to eval() ending in "//# sourceURL=..." will return the source file + // from getScriptNameOrSourceURL() instead + var source = frame.getFileName() || frame.getScriptNameOrSourceURL(); + if (source) { + var line = frame.getLineNumber(); + var column = frame.getColumnNumber() - 1; + + // Fix position in Node where some (internal) code is prepended. + // See https://github.com/evanw/node-source-map-support/issues/36 + var headerLength = 62; + if (line === 1 && column > headerLength && !isInBrowser() && !frame.isEval()) { + column -= headerLength; + } + + var position = mapSourcePosition({ + source: source, + line: line, + column: column + }); + frame = cloneCallSite(frame); + frame.getFileName = function() { return position.source; }; + frame.getLineNumber = function() { return position.line; }; + frame.getColumnNumber = function() { return position.column + 1; }; + frame.getScriptNameOrSourceURL = function() { return position.source; }; + return frame; + } + + // Code called using eval() needs special handling + var origin = frame.isEval() && frame.getEvalOrigin(); + if (origin) { + origin = mapEvalOrigin(origin); + frame = cloneCallSite(frame); + frame.getEvalOrigin = function() { return origin; }; + return frame; + } + + // If we get here then we were unable to change the source position + return frame; +} + +// This function is part of the V8 stack trace API, for more info see: +// http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi +function prepareStackTrace(error, stack) { + if (emptyCacheBetweenOperations) { + fileContentsCache = {}; + sourceMapCache = {}; + } + + return error + stack.map(function(frame) { + return '\n at ' + wrapCallSite(frame); + }).join(''); +} + +// Generate position and snippet of original source with pointer +function getErrorSource(error) { + var match = /\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(error.stack); + if (match) { + var source = match[1]; + var line = +match[2]; + var column = +match[3]; + + // Support the inline sourceContents inside the source map + var contents = fileContentsCache[source]; + + // Support files on disk + if (!contents && fs && fs.existsSync(source)) { + try { + contents = fs.readFileSync(source, 'utf8'); + } catch (er) { + contents = ''; + } + } + + // Format the line from the original source code like node does + if (contents) { + var code = contents.split(/(?:\r\n|\r|\n)/)[line - 1]; + if (code) { + return source + ':' + line + '\n' + code + '\n' + + new Array(column).join(' ') + '^'; + } + } + } + return null; +} + +function printErrorAndExit (error) { + var source = getErrorSource(error); + + if (source) { + console.error(); + console.error(source); + } + + console.error(error.stack); + process.exit(1); +} + +function shimEmitUncaughtException () { + var origEmit = process.emit; + + process.emit = function (type) { + if (type === 'uncaughtException') { + var hasStack = (arguments[1] && arguments[1].stack); + var hasListeners = (this.listeners(type).length > 0); + + if (hasStack && !hasListeners) { + return printErrorAndExit(arguments[1]); + } + } + + return origEmit.apply(this, arguments); + }; +} + +exports.wrapCallSite = wrapCallSite; +exports.getErrorSource = getErrorSource; +exports.mapSourcePosition = mapSourcePosition; +exports.retrieveSourceMap = retrieveSourceMap; + +exports.install = function(options) { + options = options || {}; + + if (options.environment) { + environment = options.environment; + if (["node", "browser", "auto"].indexOf(environment) === -1) { + throw new Error("environment " + environment + " was unknown. Available options are {auto, browser, node}") + } + } + + // Allow sources to be found by methods other than reading the files + // directly from disk. + if (options.retrieveFile) { + if (options.overrideRetrieveFile) { + retrieveFileHandlers.length = 0; + } + + retrieveFileHandlers.unshift(options.retrieveFile); + } + + // Allow source maps to be found by methods other than reading the files + // directly from disk. + if (options.retrieveSourceMap) { + if (options.overrideRetrieveSourceMap) { + retrieveMapHandlers.length = 0; + } + + retrieveMapHandlers.unshift(options.retrieveSourceMap); + } + + // Support runtime transpilers that include inline source maps + if (options.hookRequire && !isInBrowser()) { + var Module; + try { + Module = require('module'); + } catch (err) { + // NOP: Loading in catch block to convert webpack error to warning. + } + var $compile = Module.prototype._compile; + + if (!$compile.__sourceMapSupport) { + Module.prototype._compile = function(content, filename) { + fileContentsCache[filename] = content; + sourceMapCache[filename] = undefined; + return $compile.call(this, content, filename); + }; + + Module.prototype._compile.__sourceMapSupport = true; + } + } + + // Configure options + if (!emptyCacheBetweenOperations) { + emptyCacheBetweenOperations = 'emptyCacheBetweenOperations' in options ? + options.emptyCacheBetweenOperations : false; + } + + // Install the error reformatter + if (!errorFormatterInstalled) { + errorFormatterInstalled = true; + Error.prepareStackTrace = prepareStackTrace; + } + + if (!uncaughtShimInstalled) { + var installHandler = 'handleUncaughtExceptions' in options ? + options.handleUncaughtExceptions : true; + + // Provide the option to not install the uncaught exception handler. This is + // to support other uncaught exception handlers (in test frameworks, for + // example). If this handler is not installed and there are no other uncaught + // exception handlers, uncaught exceptions will be caught by node's built-in + // exception handler and the process will still be terminated. However, the + // generated JavaScript code will be shown above the stack trace instead of + // the original source code. + if (installHandler && hasGlobalProcessEventEmitter()) { + uncaughtShimInstalled = true; + shimEmitUncaughtException(); + } + } +}; diff --git a/node_modules/source-map/CHANGELOG.md b/node_modules/source-map/CHANGELOG.md new file mode 100644 index 000000000..3a8c066c6 --- /dev/null +++ b/node_modules/source-map/CHANGELOG.md @@ -0,0 +1,301 @@ +# Change Log + +## 0.5.6 + +* Fix for regression when people were using numbers as names in source maps. See + #236. + +## 0.5.5 + +* Fix "regression" of unsupported, implementation behavior that half the world + happens to have come to depend on. See #235. + +* Fix regression involving function hoisting in SpiderMonkey. See #233. + +## 0.5.4 + +* Large performance improvements to source-map serialization. See #228 and #229. + +## 0.5.3 + +* Do not include unnecessary distribution files. See + commit ef7006f8d1647e0a83fdc60f04f5a7ca54886f86. + +## 0.5.2 + +* Include browser distributions of the library in package.json's `files`. See + issue #212. + +## 0.5.1 + +* Fix latent bugs in IndexedSourceMapConsumer.prototype._parseMappings. See + ff05274becc9e6e1295ed60f3ea090d31d843379. + +## 0.5.0 + +* Node 0.8 is no longer supported. + +* Use webpack instead of dryice for bundling. + +* Big speedups serializing source maps. See pull request #203. + +* Fix a bug with `SourceMapConsumer.prototype.sourceContentFor` and sources that + explicitly start with the source root. See issue #199. + +## 0.4.4 + +* Fix an issue where using a `SourceMapGenerator` after having created a + `SourceMapConsumer` from it via `SourceMapConsumer.fromSourceMap` failed. See + issue #191. + +* Fix an issue with where `SourceMapGenerator` would mistakenly consider + different mappings as duplicates of each other and avoid generating them. See + issue #192. + +## 0.4.3 + +* A very large number of performance improvements, particularly when parsing + source maps. Collectively about 75% of time shaved off of the source map + parsing benchmark! + +* Fix a bug in `SourceMapConsumer.prototype.allGeneratedPositionsFor` and fuzzy + searching in the presence of a column option. See issue #177. + +* Fix a bug with joining a source and its source root when the source is above + the root. See issue #182. + +* Add the `SourceMapConsumer.prototype.hasContentsOfAllSources` method to + determine when all sources' contents are inlined into the source map. See + issue #190. + +## 0.4.2 + +* Add an `.npmignore` file so that the benchmarks aren't pulled down by + dependent projects. Issue #169. + +* Add an optional `column` argument to + `SourceMapConsumer.prototype.allGeneratedPositionsFor` and better handle lines + with no mappings. Issues #172 and #173. + +## 0.4.1 + +* Fix accidentally defining a global variable. #170. + +## 0.4.0 + +* The default direction for fuzzy searching was changed back to its original + direction. See #164. + +* There is now a `bias` option you can supply to `SourceMapConsumer` to control + the fuzzy searching direction. See #167. + +* About an 8% speed up in parsing source maps. See #159. + +* Added a benchmark for parsing and generating source maps. + +## 0.3.0 + +* Change the default direction that searching for positions fuzzes when there is + not an exact match. See #154. + +* Support for environments using json2.js for JSON serialization. See #156. + +## 0.2.0 + +* Support for consuming "indexed" source maps which do not have any remote + sections. See pull request #127. This introduces a minor backwards + incompatibility if you are monkey patching `SourceMapConsumer.prototype` + methods. + +## 0.1.43 + +* Performance improvements for `SourceMapGenerator` and `SourceNode`. See issue + #148 for some discussion and issues #150, #151, and #152 for implementations. + +## 0.1.42 + +* Fix an issue where `SourceNode`s from different versions of the source-map + library couldn't be used in conjunction with each other. See issue #142. + +## 0.1.41 + +* Fix a bug with getting the source content of relative sources with a "./" + prefix. See issue #145 and [Bug 1090768](bugzil.la/1090768). + +* Add the `SourceMapConsumer.prototype.computeColumnSpans` method to compute the + column span of each mapping. + +* Add the `SourceMapConsumer.prototype.allGeneratedPositionsFor` method to find + all generated positions associated with a given original source and line. + +## 0.1.40 + +* Performance improvements for parsing source maps in SourceMapConsumer. + +## 0.1.39 + +* Fix a bug where setting a source's contents to null before any source content + had been set before threw a TypeError. See issue #131. + +## 0.1.38 + +* Fix a bug where finding relative paths from an empty path were creating + absolute paths. See issue #129. + +## 0.1.37 + +* Fix a bug where if the source root was an empty string, relative source paths + would turn into absolute source paths. Issue #124. + +## 0.1.36 + +* Allow the `names` mapping property to be an empty string. Issue #121. + +## 0.1.35 + +* A third optional parameter was added to `SourceNode.fromStringWithSourceMap` + to specify a path that relative sources in the second parameter should be + relative to. Issue #105. + +* If no file property is given to a `SourceMapGenerator`, then the resulting + source map will no longer have a `null` file property. The property will + simply not exist. Issue #104. + +* Fixed a bug where consecutive newlines were ignored in `SourceNode`s. + Issue #116. + +## 0.1.34 + +* Make `SourceNode` work with windows style ("\r\n") newlines. Issue #103. + +* Fix bug involving source contents and the + `SourceMapGenerator.prototype.applySourceMap`. Issue #100. + +## 0.1.33 + +* Fix some edge cases surrounding path joining and URL resolution. + +* Add a third parameter for relative path to + `SourceMapGenerator.prototype.applySourceMap`. + +* Fix issues with mappings and EOLs. + +## 0.1.32 + +* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns + (issue 92). + +* Fixed test runner to actually report number of failed tests as its process + exit code. + +* Fixed a typo when reporting bad mappings (issue 87). + +## 0.1.31 + +* Delay parsing the mappings in SourceMapConsumer until queried for a source + location. + +* Support Sass source maps (which at the time of writing deviate from the spec + in small ways) in SourceMapConsumer. + +## 0.1.30 + +* Do not join source root with a source, when the source is a data URI. + +* Extend the test runner to allow running single specific test files at a time. + +* Performance improvements in `SourceNode.prototype.walk` and + `SourceMapConsumer.prototype.eachMapping`. + +* Source map browser builds will now work inside Workers. + +* Better error messages when attempting to add an invalid mapping to a + `SourceMapGenerator`. + +## 0.1.29 + +* Allow duplicate entries in the `names` and `sources` arrays of source maps + (usually from TypeScript) we are parsing. Fixes github issue 72. + +## 0.1.28 + +* Skip duplicate mappings when creating source maps from SourceNode; github + issue 75. + +## 0.1.27 + +* Don't throw an error when the `file` property is missing in SourceMapConsumer, + we don't use it anyway. + +## 0.1.26 + +* Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70. + +## 0.1.25 + +* Make compatible with browserify + +## 0.1.24 + +* Fix issue with absolute paths and `file://` URIs. See + https://bugzilla.mozilla.org/show_bug.cgi?id=885597 + +## 0.1.23 + +* Fix issue with absolute paths and sourcesContent, github issue 64. + +## 0.1.22 + +* Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21. + +## 0.1.21 + +* Fixed handling of sources that start with a slash so that they are relative to + the source root's host. + +## 0.1.20 + +* Fixed github issue #43: absolute URLs aren't joined with the source root + anymore. + +## 0.1.19 + +* Using Travis CI to run tests. + +## 0.1.18 + +* Fixed a bug in the handling of sourceRoot. + +## 0.1.17 + +* Added SourceNode.fromStringWithSourceMap. + +## 0.1.16 + +* Added missing documentation. + +* Fixed the generating of empty mappings in SourceNode. + +## 0.1.15 + +* Added SourceMapGenerator.applySourceMap. + +## 0.1.14 + +* The sourceRoot is now handled consistently. + +## 0.1.13 + +* Added SourceMapGenerator.fromSourceMap. + +## 0.1.12 + +* SourceNode now generates empty mappings too. + +## 0.1.11 + +* Added name support to SourceNode. + +## 0.1.10 + +* Added sourcesContent support to the customer and generator. diff --git a/node_modules/source-map/LICENSE b/node_modules/source-map/LICENSE new file mode 100644 index 000000000..ed1b7cf27 --- /dev/null +++ b/node_modules/source-map/LICENSE @@ -0,0 +1,28 @@ + +Copyright (c) 2009-2011, Mozilla Foundation and 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. + +* Neither the names of the Mozilla Foundation nor the names of project + 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/node_modules/source-map/README.md b/node_modules/source-map/README.md new file mode 100644 index 000000000..32813394a --- /dev/null +++ b/node_modules/source-map/README.md @@ -0,0 +1,729 @@ +# Source Map + +[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map) + +[![NPM](https://nodei.co/npm/source-map.png?downloads=true&downloadRank=true)](https://www.npmjs.com/package/source-map) + +This is a library to generate and consume the source map format +[described here][format]. + +[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit + +## Use with Node + + $ npm install source-map + +## Use on the Web + + + +-------------------------------------------------------------------------------- + + + + + +## Table of Contents + +- [Examples](#examples) + - [Consuming a source map](#consuming-a-source-map) + - [Generating a source map](#generating-a-source-map) + - [With SourceNode (high level API)](#with-sourcenode-high-level-api) + - [With SourceMapGenerator (low level API)](#with-sourcemapgenerator-low-level-api) +- [API](#api) + - [SourceMapConsumer](#sourcemapconsumer) + - [new SourceMapConsumer(rawSourceMap)](#new-sourcemapconsumerrawsourcemap) + - [SourceMapConsumer.prototype.computeColumnSpans()](#sourcemapconsumerprototypecomputecolumnspans) + - [SourceMapConsumer.prototype.originalPositionFor(generatedPosition)](#sourcemapconsumerprototypeoriginalpositionforgeneratedposition) + - [SourceMapConsumer.prototype.generatedPositionFor(originalPosition)](#sourcemapconsumerprototypegeneratedpositionfororiginalposition) + - [SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)](#sourcemapconsumerprototypeallgeneratedpositionsfororiginalposition) + - [SourceMapConsumer.prototype.hasContentsOfAllSources()](#sourcemapconsumerprototypehascontentsofallsources) + - [SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])](#sourcemapconsumerprototypesourcecontentforsource-returnnullonmissing) + - [SourceMapConsumer.prototype.eachMapping(callback, context, order)](#sourcemapconsumerprototypeeachmappingcallback-context-order) + - [SourceMapGenerator](#sourcemapgenerator) + - [new SourceMapGenerator([startOfSourceMap])](#new-sourcemapgeneratorstartofsourcemap) + - [SourceMapGenerator.fromSourceMap(sourceMapConsumer)](#sourcemapgeneratorfromsourcemapsourcemapconsumer) + - [SourceMapGenerator.prototype.addMapping(mapping)](#sourcemapgeneratorprototypeaddmappingmapping) + - [SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)](#sourcemapgeneratorprototypesetsourcecontentsourcefile-sourcecontent) + - [SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])](#sourcemapgeneratorprototypeapplysourcemapsourcemapconsumer-sourcefile-sourcemappath) + - [SourceMapGenerator.prototype.toString()](#sourcemapgeneratorprototypetostring) + - [SourceNode](#sourcenode) + - [new SourceNode([line, column, source[, chunk[, name]]])](#new-sourcenodeline-column-source-chunk-name) + - [SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])](#sourcenodefromstringwithsourcemapcode-sourcemapconsumer-relativepath) + - [SourceNode.prototype.add(chunk)](#sourcenodeprototypeaddchunk) + - [SourceNode.prototype.prepend(chunk)](#sourcenodeprototypeprependchunk) + - [SourceNode.prototype.setSourceContent(sourceFile, sourceContent)](#sourcenodeprototypesetsourcecontentsourcefile-sourcecontent) + - [SourceNode.prototype.walk(fn)](#sourcenodeprototypewalkfn) + - [SourceNode.prototype.walkSourceContents(fn)](#sourcenodeprototypewalksourcecontentsfn) + - [SourceNode.prototype.join(sep)](#sourcenodeprototypejoinsep) + - [SourceNode.prototype.replaceRight(pattern, replacement)](#sourcenodeprototypereplacerightpattern-replacement) + - [SourceNode.prototype.toString()](#sourcenodeprototypetostring) + - [SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])](#sourcenodeprototypetostringwithsourcemapstartofsourcemap) + + + +## 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 +// Node.js +var sourceMap = require('source-map'); + +// Browser builds +var sourceMap = window.sourceMap; + +// Inside Firefox +const sourceMap = require("devtools/toolkit/sourcemap/source-map.js"); +``` + +### 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 referenced 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. + +```js +var consumer = new sourceMap.SourceMapConsumer(rawSourceMapJsonData); +``` + +#### SourceMapConsumer.prototype.computeColumnSpans() + +Compute the last column for each generated mapping. The last column is +inclusive. + +```js +// Before: +consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" }) +// [ { line: 2, +// column: 1 }, +// { line: 2, +// column: 10 }, +// { line: 2, +// column: 20 } ] + +consumer.computeColumnSpans(); + +// After: +consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" }) +// [ { line: 2, +// column: 1, +// lastColumn: 9 }, +// { line: 2, +// column: 10, +// lastColumn: 19 }, +// { line: 2, +// column: 20, +// lastColumn: Infinity } ] + +``` + +#### 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 if this + information is not available. + +* `name`: The original identifier, or null if this information is not available. + +```js +consumer.originalPositionFor({ line: 2, column: 10 }) +// { source: 'foo.coffee', +// line: 2, +// column: 2, +// name: null } + +consumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 }) +// { source: null, +// line: null, +// column: null, +// name: null } +``` + +#### 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. + +```js +consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 }) +// { line: 1, +// column: 56 } +``` + +#### 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. + +```js +consumer.allGeneratedpositionsfor({ line: 2, source: "foo.coffee" }) +// [ { line: 2, +// column: 1 }, +// { line: 2, +// column: 10 }, +// { line: 2, +// column: 20 } ] +``` + +#### 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 +`consumer.sourceContentFor(s)` will succeed for every source `s` in +`consumer.sources`. + +```js +// ... +if (consumer.hasContentsOfAllSources()) { + consumerReadyCallback(consumer); +} else { + fetchSources(consumer, consumerReadyCallback); +} +// ... +``` + +#### 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. + +```js +consumer.sources +// [ "my-cool-lib.clj" ] + +consumer.sourceContentFor("my-cool-lib.clj") +// "..." + +consumer.sourceContentFor("this is not in the source map"); +// Error: "this is not in the source map" is not in the source map + +consumer.sourceContentFor("this is not in the source map", true); +// null +``` + +#### 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`. + +```js +consumer.eachMapping(function (m) { console.log(m); }) +// ... +// { source: 'illmatic.js', +// generatedLine: 1, +// generatedColumn: 0, +// originalLine: 1, +// originalColumn: 0, +// name: null } +// { source: 'illmatic.js', +// generatedLine: 2, +// generatedColumn: 0, +// originalLine: 2, +// originalColumn: 0, +// name: null } +// ... +``` +### 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. + +```js +var generator = new sourceMap.SourceMapGenerator({ + file: "my-generated-javascript-file.js", + sourceRoot: "http://example.com/app/js/" +}); +``` + +#### SourceMapGenerator.fromSourceMap(sourceMapConsumer) + +Creates a new `SourceMapGenerator` from an existing `SourceMapConsumer` instance. + +* `sourceMapConsumer` The SourceMap. + +```js +var generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer); +``` + +#### 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. + +```js +generator.addMapping({ + source: "module-one.scm", + original: { line: 128, column: 0 }, + generated: { line: 3, column: 456 } +}) +``` + +#### 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. + +```js +generator.setSourceContent("module-one.scm", + fs.readFileSync("path/to/module-one.scm")) +``` + +#### 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 minimum 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. + +```js +generator.toString() +// '{"version":3,"sources":["module-one.scm"],"names":[],"mappings":"...snip...","file":"my-generated-javascript-file.js","sourceRoot":"http://example.com/app/js/"}' +``` + +### 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. + +```js +var node = new SourceNode(1, 2, "a.cpp", [ + new SourceNode(3, 4, "b.cpp", "extern int status;\n"), + new SourceNode(5, 6, "c.cpp", "std::string* make_string(size_t n);\n"), + new SourceNode(7, 8, "d.cpp", "int main(int argc, char** argv) {}\n"), +]); +``` + +#### 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. + +```js +var consumer = new SourceMapConsumer(fs.readFileSync("path/to/my-file.js.map", "utf8")); +var node = SourceNode.fromStringWithSourceMap(fs.readFileSync("path/to/my-file.js"), + consumer); +``` + +#### 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. + +```js +node.add(" + "); +node.add(otherNode); +node.add([leftHandOperandNode, " + ", rightHandOperandNode]); +``` + +#### 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. + +```js +node.prepend("/** Build Id: f783haef86324gf **/\n\n"); +``` + +#### 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 + +```js +node.setSourceContent("module-one.scm", + fs.readFileSync("path/to/module-one.scm")) +``` + +#### 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. + +```js +var node = new SourceNode(1, 2, "a.js", [ + new SourceNode(3, 4, "b.js", "uno"), + "dos", + [ + "tres", + new SourceNode(5, 6, "c.js", "quatro") + ] +]); + +node.walk(function (code, loc) { console.log("WALK:", code, loc); }) +// WALK: uno { source: 'b.js', line: 3, column: 4, name: null } +// WALK: dos { source: 'a.js', line: 1, column: 2, name: null } +// WALK: tres { source: 'a.js', line: 1, column: 2, name: null } +// WALK: quatro { source: 'c.js', line: 5, column: 6, name: null } +``` + +#### 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. + +```js +var a = new SourceNode(1, 2, "a.js", "generated from a"); +a.setSourceContent("a.js", "original a"); +var b = new SourceNode(1, 2, "b.js", "generated from b"); +b.setSourceContent("b.js", "original b"); +var c = new SourceNode(1, 2, "c.js", "generated from c"); +c.setSourceContent("c.js", "original c"); + +var node = new SourceNode(null, null, null, [a, b, c]); +node.walkSourceContents(function (source, contents) { console.log("WALK:", source, ":", contents); }) +// WALK: a.js : original a +// WALK: b.js : original b +// WALK: c.js : original c +``` + +#### 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. + +```js +var lhs = new SourceNode(1, 2, "a.rs", "my_copy"); +var operand = new SourceNode(3, 4, "a.rs", "="); +var rhs = new SourceNode(5, 6, "a.rs", "orig.clone()"); + +var node = new SourceNode(null, null, null, [ lhs, operand, rhs ]); +var joinedNode = node.join(" "); +``` + +#### SourceNode.prototype.replaceRight(pattern, replacement) + +Call `String.prototype.replace` on the very right-most source snippet. Useful +for trimming white space from the end of a source node, etc. + +* `pattern`: The pattern to replace. + +* `replacement`: The thing to replace the pattern with. + +```js +// Trim trailing white space. +node.replaceRight(/\s*$/, ""); +``` + +#### 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. + +```js +var node = new SourceNode(1, 2, "a.js", [ + new SourceNode(3, 4, "b.js", "uno"), + "dos", + [ + "tres", + new SourceNode(5, 6, "c.js", "quatro") + ] +]); + +node.toString() +// 'unodostresquatro' +``` + +#### 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`. + +```js +var node = new SourceNode(1, 2, "a.js", [ + new SourceNode(3, 4, "b.js", "uno"), + "dos", + [ + "tres", + new SourceNode(5, 6, "c.js", "quatro") + ] +]); + +node.toStringWithSourceMap({ file: "my-output-file.js" }) +// { code: 'unodostresquatro', +// map: [object SourceMapGenerator] } +``` diff --git a/node_modules/source-map/dist/source-map.debug.js b/node_modules/source-map/dist/source-map.debug.js new file mode 100644 index 000000000..b5ab6382a --- /dev/null +++ b/node_modules/source-map/dist/source-map.debug.js @@ -0,0 +1,3091 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sourceMap"] = factory(); + else + root["sourceMap"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + /* + * 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 = __webpack_require__(1).SourceMapGenerator; + exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; + exports.SourceNode = __webpack_require__(10).SourceNode; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var base64VLQ = __webpack_require__(2); + var util = __webpack_require__(4); + var ArraySet = __webpack_require__(5).ArraySet; + var MappingList = __webpack_require__(6).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) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!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 = Object.create(null); + } + 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) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + 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 next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + 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; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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. + */ + + var base64 = __webpack_require__(3); + + // 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; + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + /* -*- 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 + */ + + 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: " + number); + }; + + /** + * 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; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + /* -*- 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 + */ + + /** + * 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 consecutive 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 = exports.isAbsolute(path); + + 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; + + exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); + }; + + /** + * 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; + + var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); + }()); + + function identity (s) { + return s; + } + + /** + * 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) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + + function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; + } + + /** + * 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; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var util = __webpack_require__(4); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + + /** + * 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 = hasNativeMap ? new Map() : Object.create(null); + } + + /** + * 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 hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + 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; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var util = __webpack_require__(4); + + /** + * 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) { + 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; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var util = __webpack_require__(4); + var binarySearch = __webpack_require__(8); + var ArraySet = __webpack_require__(5).ArraySet; + var base64VLQ = __webpack_require__(2); + var quickSort = __webpack_require__(9).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); + } + + sources = sources + .map(String) + // 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. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // 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.map(String), 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 + * available. + */ + 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[j]; + + 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.generatedColumn + + (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; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /* -*- 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 + */ + + 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; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + /* -*- 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 + */ + + // 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); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + var util = __webpack_require__(4); + + // 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 accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // 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) { + // 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[remainingLinesIndex]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = 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[remainingLinesIndex]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + 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.splice(remainingLinesIndex).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; + + +/***/ }) +/******/ ]) +}); +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBlNDczOGZjNzJhN2IyMzAzOTg4OSIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTBDLFNBQVM7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNoYUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXNDLFNBQVM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQzlFQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxvQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLHdDQUF3QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLG1CQUFtQixFQUFFO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE2QixNQUFNO0FBQ25DO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBLElBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUMsc0JBQXFCLCtDQUErQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsMkJBQTJCO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBLHNCQUFxQiw0QkFBNEI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDempDQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQzlHQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ2pIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUF5QyxTQUFTO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNEMsY0FBYztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBLFlBQVc7QUFDWDtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUc7O0FBRUgsV0FBVTtBQUNWOztBQUVBIiwiZmlsZSI6InNvdXJjZS1tYXAuZGVidWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzb3VyY2VNYXBcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGU0NzM4ZmM3MmE3YjIzMDM5ODg5IiwiLypcbiAqIENvcHlyaWdodCAyMDA5LTIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLnR4dCBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5leHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2Utbm9kZScpLlNvdXJjZU5vZGU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NvdXJjZS1tYXAuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBNYXBwaW5nTGlzdCA9IHJlcXVpcmUoJy4vbWFwcGluZy1saXN0JykuTWFwcGluZ0xpc3Q7XG5cbi8qKlxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICogYmVpbmcgYnVpbHQgaW5jcmVtZW50YWxseS4gWW91IG1heSBwYXNzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAqIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGZpbGU6IFRoZSBmaWxlbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBzb3VyY2VSb290OiBBIHJvb3QgZm9yIGFsbCByZWxhdGl2ZSBVUkxzIGluIHRoaXMgc291cmNlIG1hcC5cbiAqL1xuZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKSB7XG4gIGlmICghYUFyZ3MpIHtcbiAgICBhQXJncyA9IHt9O1xuICB9XG4gIHRoaXMuX2ZpbGUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2ZpbGUnLCBudWxsKTtcbiAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB0aGlzLl9za2lwVmFsaWRhdGlvbiA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc2tpcFZhbGlkYXRpb24nLCBmYWxzZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbWFwcGluZ3MgPSBuZXcgTWFwcGluZ0xpc3QoKTtcbiAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbn1cblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgIHZhciBnZW5lcmF0b3IgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6IGFTb3VyY2VNYXBDb25zdW1lci5maWxlLFxuICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgIG5ld01hcHBpbmcuc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3TWFwcGluZy5vcmlnaW5hbCA9IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLm5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZ2VuZXJhdG9yLmFkZE1hcHBpbmcobmV3TWFwcGluZyk7XG4gICAgfSk7XG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfTtcblxuLyoqXG4gKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIGZvciB0aGlzIHNvdXJjZSBtYXAgYmVpbmcgY3JlYXRlZC4gVGhlIG1hcHBpbmdcbiAqIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGdlbmVyYXRlZDogQW4gb2JqZWN0IHdpdGggdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zLlxuICogICAtIG9yaWdpbmFsOiBBbiBvYmplY3Qgd2l0aCB0aGUgb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICogICAtIG5hbWU6IEFuIG9wdGlvbmFsIG9yaWdpbmFsIHRva2VuIG5hbWUgZm9yIHRoaXMgbWFwcGluZy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FkZE1hcHBpbmcoYUFyZ3MpIHtcbiAgICB2YXIgZ2VuZXJhdGVkID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdnZW5lcmF0ZWQnKTtcbiAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJywgbnVsbCk7XG4gICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhhQXJncywgJ25hbWUnLCBudWxsKTtcblxuICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlTWFwcGluZyhnZW5lcmF0ZWQsIG9yaWdpbmFsLCBzb3VyY2UsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gU3RyaW5nKHNvdXJjZSk7XG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgICAgaWYgKCF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX21hcHBpbmdzLmFkZCh7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogZ2VuZXJhdGVkLmNvbHVtbixcbiAgICAgIG9yaWdpbmFsTGluZTogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5saW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBuYW1lOiBuYW1lXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgdmFyIHNvdXJjZSA9IGFTb3VyY2VGaWxlO1xuICAgIGlmICh0aGlzLl9zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoYVNvdXJjZUNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgX3NvdXJjZXNDb250ZW50cyBtYXAgaWYgdGhlIHByb3BlcnR5IGlzIG51bGwuXG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoc291cmNlKV0gPSBhU291cmNlQ29udGVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgIC8vIElmIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcCBpcyBlbXB0eSwgc2V0IHRoZSBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gKiBzb3VyY2UgbWFwIGJlaW5nIGdlbmVyYXRlZC4gRWFjaCBtYXBwaW5nIHRvIHRoZSBzdXBwbGllZCBzb3VyY2UgZmlsZSBpc1xuICogcmV3cml0dGVuIHVzaW5nIHRoZSBzdXBwbGllZCBzb3VyY2UgbWFwLiBOb3RlOiBUaGUgcmVzb2x1dGlvbiBmb3IgdGhlXG4gKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAqICAgICAgICBJZiBvbWl0dGVkLCBTb3VyY2VNYXBDb25zdW1lcidzIGZpbGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGFTb3VyY2VNYXBQYXRoIE9wdGlvbmFsLiBUaGUgZGlybmFtZSBvZiB0aGUgcGF0aCB0byB0aGUgc291cmNlIG1hcFxuICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgbmVlZGVkIHdoZW4gdGhlIHR3byBzb3VyY2UgbWFwcyBhcmVuJ3QgaW4gdGhlIHNhbWVcbiAqICAgICAgICBkaXJlY3RvcnksIGFuZCB0aGUgc291cmNlIG1hcCB0byBiZSBhcHBsaWVkIGNvbnRhaW5zIHJlbGF0aXZlIHNvdXJjZVxuICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gKiAgICAgICAgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hcHBseVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIsIGFTb3VyY2VGaWxlLCBhU291cmNlTWFwUGF0aCkge1xuICAgIHZhciBzb3VyY2VGaWxlID0gYVNvdXJjZUZpbGU7XG4gICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgIGlmIChhU291cmNlRmlsZSA9PSBudWxsKSB7XG4gICAgICBpZiAoYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgcmVxdWlyZXMgZWl0aGVyIGFuIGV4cGxpY2l0IHNvdXJjZSBmaWxlLCAnICtcbiAgICAgICAgICAnb3IgdGhlIHNvdXJjZSBtYXBcXCdzIFwiZmlsZVwiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzb3VyY2VGaWxlID0gYVNvdXJjZU1hcENvbnN1bWVyLmZpbGU7XG4gICAgfVxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9vdDtcbiAgICAvLyBNYWtlIFwic291cmNlRmlsZVwiIHJlbGF0aXZlIGlmIGFuIGFic29sdXRlIFVybCBpcyBwYXNzZWQuXG4gICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlRmlsZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgfVxuICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgLy8gdGhlIG5hbWVzIGFycmF5LlxuICAgIHZhciBuZXdTb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAvLyBGaW5kIG1hcHBpbmdzIGZvciB0aGUgXCJzb3VyY2VGaWxlXCJcbiAgICB0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGNhbiBiZSBtYXBwZWQgYnkgdGhlIHNvdXJjZSBtYXAsIHRoZW4gdXBkYXRlIHRoZSBtYXBwaW5nLlxuICAgICAgICB2YXIgb3JpZ2luYWwgPSBhU291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb3B5IG1hcHBpbmdcbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIG1hcHBpbmcuc291cmNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgICAgICBpZiAob3JpZ2luYWwubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgIW5ld1NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgbmV3TmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5fc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXdOYW1lcztcblxuICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhU291cmNlTWFwUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAqXG4gKiAgIDEuIEp1c3QgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi5cbiAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIDMuIEdlbmVyYXRlZCBhbmQgb3JpZ2luYWwgcG9zaXRpb24sIG9yaWdpbmFsIHNvdXJjZSwgYXMgd2VsbCBhcyBhIG5hbWVcbiAqICAgICAgdG9rZW4uXG4gKlxuICogVG8gbWFpbnRhaW4gY29uc2lzdGVuY3ksIHdlIHZhbGlkYXRlIHRoYXQgYW55IG5ldyBtYXBwaW5nIGJlaW5nIGFkZGVkIGZhbGxzXG4gKiBpbiB0byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGVNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3ZhbGlkYXRlTWFwcGluZyhhR2VuZXJhdGVkLCBhT3JpZ2luYWwsIGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAvLyBXaGVuIGFPcmlnaW5hbCBpcyB0cnV0aHkgYnV0IGhhcyBlbXB0eSB2YWx1ZXMgZm9yIC5saW5lIGFuZCAuY29sdW1uLFxuICAgIC8vIGl0IGlzIG1vc3QgbGlrZWx5IGEgcHJvZ3JhbW1lciBlcnJvci4gSW4gdGhpcyBjYXNlIHdlIHRocm93IGEgdmVyeVxuICAgIC8vIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgdG8gdHJ5IHRvIGd1aWRlIHRoZW0gdGhlIHJpZ2h0IHdheS5cbiAgICAvLyBGb3IgZXhhbXBsZTogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcG9seW1lci1idW5kbGVyL3B1bGwvNTE5XG4gICAgaWYgKGFPcmlnaW5hbCAmJiB0eXBlb2YgYU9yaWdpbmFsLmxpbmUgIT09ICdudW1iZXInICYmIHR5cGVvZiBhT3JpZ2luYWwuY29sdW1uICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnb3JpZ2luYWwubGluZSBhbmQgb3JpZ2luYWwuY29sdW1uIGFyZSBub3QgbnVtYmVycyAtLSB5b3UgcHJvYmFibHkgbWVhbnQgdG8gb21pdCAnICtcbiAgICAgICAgICAgICd0aGUgb3JpZ2luYWwgbWFwcGluZyBlbnRpcmVseSBhbmQgb25seSBtYXAgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi4gSWYgc28sIHBhc3MgJyArXG4gICAgICAgICAgICAnbnVsbCBmb3IgdGhlIG9yaWdpbmFsIG1hcHBpbmcgaW5zdGVhZCBvZiBhbiBvYmplY3Qgd2l0aCBlbXB0eSBvciBudWxsIHZhbHVlcy4nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgJiYgIWFPcmlnaW5hbCAmJiAhYVNvdXJjZSAmJiAhYU5hbWUpIHtcbiAgICAgIC8vIENhc2UgMS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoYUdlbmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVkXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsLmxpbmUgPiAwICYmIGFPcmlnaW5hbC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgIC8vIENhc2VzIDIgYW5kIDMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hcHBpbmc6ICcgKyBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgc291cmNlOiBhU291cmNlLFxuICAgICAgICBvcmlnaW5hbDogYU9yaWdpbmFsLFxuICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGFjY3VtdWxhdGVkIG1hcHBpbmdzIGluIHRvIHRoZSBzdHJlYW0gb2YgYmFzZSA2NCBWTFFzXG4gKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBuZXh0O1xuICAgIHZhciBtYXBwaW5nO1xuICAgIHZhciBuYW1lSWR4O1xuICAgIHZhciBzb3VyY2VJZHg7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9tYXBwaW5ncy50b0FycmF5KCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG4gICAgICBuZXh0ID0gJydcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbmV4dCArPSAnOyc7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBpZiAoIXV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZywgbWFwcGluZ3NbaSAtIDFdKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQgKz0gJywnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbik7XG4gICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VJZHggPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUoc291cmNlSWR4IC0gcHJldmlvdXNTb3VyY2UpO1xuICAgICAgICBwcmV2aW91c1NvdXJjZSA9IHNvdXJjZUlkeDtcblxuICAgICAgICAvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmUgLSAxO1xuXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbENvbHVtbik7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5hbWVJZHggPSB0aGlzLl9uYW1lcy5pbmRleE9mKG1hcHBpbmcubmFtZSk7XG4gICAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG5hbWVJZHggLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgIHByZXZpb3VzTmFtZSA9IG5hbWVJZHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IG5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgIHJldHVybiBhU291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoYVNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgdmFyIGtleSA9IHV0aWwudG9TZXRTdHJpbmcoc291cmNlKTtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLCBrZXkpXG4gICAgICAgID8gdGhpcy5fc291cmNlc0NvbnRlbnRzW2tleV1cbiAgICAgICAgOiBudWxsO1xuICAgIH0sIHRoaXMpO1xuICB9O1xuXG4vKipcbiAqIEV4dGVybmFsaXplIHRoZSBzb3VyY2UgbWFwLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl90b0pTT04oKSB7XG4gICAgdmFyIG1hcCA9IHtcbiAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICBzb3VyY2VzOiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgIG5hbWVzOiB0aGlzLl9uYW1lcy50b0FycmF5KCksXG4gICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgIH07XG4gICAgaWYgKHRoaXMuX2ZpbGUgIT0gbnVsbCkge1xuICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9O1xuXG4vKipcbiAqIFJlbmRlciB0aGUgc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQgdG8gYSBzdHJpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUudG9TdHJpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IFNvdXJjZU1hcEdlbmVyYXRvcjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LXZscS5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvcXVpY2stc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF07XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW5vZGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/node_modules/source-map/dist/source-map.js b/node_modules/source-map/dist/source-map.js new file mode 100644 index 000000000..4e630e294 --- /dev/null +++ b/node_modules/source-map/dist/source-map.js @@ -0,0 +1,3090 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sourceMap"] = factory(); + else + root["sourceMap"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + /* + * 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 = __webpack_require__(1).SourceMapGenerator; + exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; + exports.SourceNode = __webpack_require__(10).SourceNode; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var base64VLQ = __webpack_require__(2); + var util = __webpack_require__(4); + var ArraySet = __webpack_require__(5).ArraySet; + var MappingList = __webpack_require__(6).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) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!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 = Object.create(null); + } + 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) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + 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 next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + 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; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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. + */ + + var base64 = __webpack_require__(3); + + // 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; + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + /* -*- 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 + */ + + 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: " + number); + }; + + /** + * 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; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + /* -*- 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 + */ + + /** + * 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 consecutive 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 = exports.isAbsolute(path); + + 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; + + exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); + }; + + /** + * 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; + + var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); + }()); + + function identity (s) { + return s; + } + + /** + * 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) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + + function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; + } + + /** + * 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; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var util = __webpack_require__(4); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + + /** + * 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 = hasNativeMap ? new Map() : Object.create(null); + } + + /** + * 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 hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + 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; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var util = __webpack_require__(4); + + /** + * 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) { + 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; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var util = __webpack_require__(4); + var binarySearch = __webpack_require__(8); + var ArraySet = __webpack_require__(5).ArraySet; + var base64VLQ = __webpack_require__(2); + var quickSort = __webpack_require__(9).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); + } + + sources = sources + .map(String) + // 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. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // 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.map(String), 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 + * available. + */ + 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[j]; + + 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.generatedColumn + + (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; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /* -*- 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 + */ + + 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; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + /* -*- 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 + */ + + // 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); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- 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 + */ + + var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + var util = __webpack_require__(4); + + // 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 accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // 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) { + // 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[remainingLinesIndex]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = 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[remainingLinesIndex]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + 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.splice(remainingLinesIndex).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; + + +/***/ }) +/******/ ]) +}); +; \ No newline at end of file diff --git a/node_modules/source-map/dist/source-map.min.js b/node_modules/source-map/dist/source-map.min.js new file mode 100644 index 000000000..f2a46bd02 --- /dev/null +++ b/node_modules/source-map/dist/source-map.min.js @@ -0,0 +1,2 @@ +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.sourceMap=n():e.sourceMap=n()}(this,function(){return function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){n.SourceMapGenerator=r(1).SourceMapGenerator,n.SourceMapConsumer=r(7).SourceMapConsumer,n.SourceNode=r(10).SourceNode},function(e,n,r){function t(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new s,this._names=new s,this._mappings=new a,this._sourcesContents=null}var o=r(2),i=r(4),s=r(5).ArraySet,a=r(6).MappingList;t.prototype._version=3,t.fromSourceMap=function(e){var n=e.sourceRoot,r=new t({file:e.file,sourceRoot:n});return e.eachMapping(function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(t.source=e.source,null!=n&&(t.source=i.relative(n,t.source)),t.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(t.name=e.name)),r.addMapping(t)}),e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&r.setSourceContent(n,t)}),r},t.prototype.addMapping=function(e){var n=i.getArg(e,"generated"),r=i.getArg(e,"original",null),t=i.getArg(e,"source",null),o=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(n,r,t,o),null!=t&&(t=String(t),this._sources.has(t)||this._sources.add(t)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:t,name:o})},t.prototype.setSourceContent=function(e,n){var r=e;null!=this._sourceRoot&&(r=i.relative(this._sourceRoot,r)),null!=n?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(r)]=n):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},t.prototype.applySourceMap=function(e,n,r){var t=n;if(null==n){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');t=e.file}var o=this._sourceRoot;null!=o&&(t=i.relative(o,t));var a=new s,u=new s;this._mappings.unsortedForEach(function(n){if(n.source===t&&null!=n.originalLine){var s=e.originalPositionFor({line:n.originalLine,column:n.originalColumn});null!=s.source&&(n.source=s.source,null!=r&&(n.source=i.join(r,n.source)),null!=o&&(n.source=i.relative(o,n.source)),n.originalLine=s.line,n.originalColumn=s.column,null!=s.name&&(n.name=s.name))}var l=n.source;null==l||a.has(l)||a.add(l);var c=n.name;null==c||u.has(c)||u.add(c)},this),this._sources=a,this._names=u,e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&(null!=r&&(n=i.join(r,n)),null!=o&&(n=i.relative(o,n)),this.setSourceContent(n,t))},this)},t.prototype._validateMapping=function(e,n,r,t){if(n&&"number"!=typeof n.line&&"number"!=typeof n.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||n||r||t)&&!(e&&"line"in e&&"column"in e&&n&&"line"in n&&"column"in n&&e.line>0&&e.column>=0&&n.line>0&&n.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:n,name:t}))},t.prototype._serializeMappings=function(){for(var e,n,r,t,s=0,a=1,u=0,l=0,c=0,g=0,p="",h=this._mappings.toArray(),f=0,d=h.length;f0){if(!i.compareByGeneratedPositionsInflated(n,h[f-1]))continue;e+=","}e+=o.encode(n.generatedColumn-s),s=n.generatedColumn,null!=n.source&&(t=this._sources.indexOf(n.source),e+=o.encode(t-g),g=t,e+=o.encode(n.originalLine-1-l),l=n.originalLine-1,e+=o.encode(n.originalColumn-u),u=n.originalColumn,null!=n.name&&(r=this._names.indexOf(n.name),e+=o.encode(r-c),c=r)),p+=e}return p},t.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=i.relative(n,e));var r=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},t.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},t.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=t},function(e,n,r){function t(e){return e<0?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(3),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),a===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function f(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=f(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:f(e.name,n.name)))))}n.getArg=r;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=h,n.compareByGeneratedPositionsInflated=d},function(e,n,r){function t(){this._array=[],this._set=s?new Map:Object.create(null)}var o=r(4),i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Map;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0)return n}else{var r=o.toSetString(e);if(i.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&er||t==r&&s>=o||i.compareByGeneratedPositionsInflated(e,n)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=r(4);o.prototype.unsortedForEach=function(e,n){this._array.forEach(e,n)},o.prototype.add=function(e){t(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;p1&&(r.source=d+o[1],d+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=m+o[4],m+=o[4])),S.push(r),"number"==typeof r.originalLine&&A.push(r)}g(S,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=S,g(A,a.compareByOriginalPositions),this.__originalMappings=A},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(i=0;n--)this.prepend(e[n]);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},t.prototype.walk=function(e){for(var n,r=0,t=this.children.length;r0){for(n=[],r=0;r 0 && aGenerated.column >= 0\n\t && !aOriginal && !aSource && !aName) {\n\t // Case 1.\n\t return;\n\t }\n\t else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n\t && aGenerated.line > 0 && aGenerated.column >= 0\n\t && aOriginal.line > 0 && aOriginal.column >= 0\n\t && aSource) {\n\t // Cases 2 and 3.\n\t return;\n\t }\n\t else {\n\t throw new Error('Invalid mapping: ' + JSON.stringify({\n\t generated: aGenerated,\n\t source: aSource,\n\t original: aOriginal,\n\t name: aName\n\t }));\n\t }\n\t };\n\t\n\t/**\n\t * Serialize the accumulated mappings in to the stream of base 64 VLQs\n\t * specified by the source map format.\n\t */\n\tSourceMapGenerator.prototype._serializeMappings =\n\t function SourceMapGenerator_serializeMappings() {\n\t var previousGeneratedColumn = 0;\n\t var previousGeneratedLine = 1;\n\t var previousOriginalColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousName = 0;\n\t var previousSource = 0;\n\t var result = '';\n\t var next;\n\t var mapping;\n\t var nameIdx;\n\t var sourceIdx;\n\t\n\t var mappings = this._mappings.toArray();\n\t for (var i = 0, len = mappings.length; i < len; i++) {\n\t mapping = mappings[i];\n\t next = ''\n\t\n\t if (mapping.generatedLine !== previousGeneratedLine) {\n\t previousGeneratedColumn = 0;\n\t while (mapping.generatedLine !== previousGeneratedLine) {\n\t next += ';';\n\t previousGeneratedLine++;\n\t }\n\t }\n\t else {\n\t if (i > 0) {\n\t if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n\t continue;\n\t }\n\t next += ',';\n\t }\n\t }\n\t\n\t next += base64VLQ.encode(mapping.generatedColumn\n\t - previousGeneratedColumn);\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (mapping.source != null) {\n\t sourceIdx = this._sources.indexOf(mapping.source);\n\t next += base64VLQ.encode(sourceIdx - previousSource);\n\t previousSource = sourceIdx;\n\t\n\t // lines are stored 0-based in SourceMap spec version 3\n\t next += base64VLQ.encode(mapping.originalLine - 1\n\t - previousOriginalLine);\n\t previousOriginalLine = mapping.originalLine - 1;\n\t\n\t next += base64VLQ.encode(mapping.originalColumn\n\t - previousOriginalColumn);\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (mapping.name != null) {\n\t nameIdx = this._names.indexOf(mapping.name);\n\t next += base64VLQ.encode(nameIdx - previousName);\n\t previousName = nameIdx;\n\t }\n\t }\n\t\n\t result += next;\n\t }\n\t\n\t return result;\n\t };\n\t\n\tSourceMapGenerator.prototype._generateSourcesContent =\n\t function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n\t return aSources.map(function (source) {\n\t if (!this._sourcesContents) {\n\t return null;\n\t }\n\t if (aSourceRoot != null) {\n\t source = util.relative(aSourceRoot, source);\n\t }\n\t var key = util.toSetString(source);\n\t return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n\t ? this._sourcesContents[key]\n\t : null;\n\t }, this);\n\t };\n\t\n\t/**\n\t * Externalize the source map.\n\t */\n\tSourceMapGenerator.prototype.toJSON =\n\t function SourceMapGenerator_toJSON() {\n\t var map = {\n\t version: this._version,\n\t sources: this._sources.toArray(),\n\t names: this._names.toArray(),\n\t mappings: this._serializeMappings()\n\t };\n\t if (this._file != null) {\n\t map.file = this._file;\n\t }\n\t if (this._sourceRoot != null) {\n\t map.sourceRoot = this._sourceRoot;\n\t }\n\t if (this._sourcesContents) {\n\t map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n\t }\n\t\n\t return map;\n\t };\n\t\n\t/**\n\t * Render the source map being generated to a string.\n\t */\n\tSourceMapGenerator.prototype.toString =\n\t function SourceMapGenerator_toString() {\n\t return JSON.stringify(this.toJSON());\n\t };\n\t\n\texports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t * * Redistributions of source code must retain the above copyright\n\t * notice, this list of conditions and the following disclaimer.\n\t * * Redistributions in binary form must reproduce the above\n\t * copyright notice, this list of conditions and the following\n\t * disclaimer in the documentation and/or other materials provided\n\t * with the distribution.\n\t * * Neither the name of Google Inc. nor the names of its\n\t * contributors may be used to endorse or promote products derived\n\t * from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\t\n\tvar base64 = __webpack_require__(3);\n\t\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t// Continuation\n\t// | Sign\n\t// | |\n\t// V V\n\t// 101011\n\t\n\tvar VLQ_BASE_SHIFT = 5;\n\t\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\t\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\t\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\t\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t return aValue < 0\n\t ? ((-aValue) << 1) + 1\n\t : (aValue << 1) + 0;\n\t}\n\t\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t var isNegative = (aValue & 1) === 1;\n\t var shifted = aValue >> 1;\n\t return isNegative\n\t ? -shifted\n\t : shifted;\n\t}\n\t\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t var encoded = \"\";\n\t var digit;\n\t\n\t var vlq = toVLQSigned(aValue);\n\t\n\t do {\n\t digit = vlq & VLQ_BASE_MASK;\n\t vlq >>>= VLQ_BASE_SHIFT;\n\t if (vlq > 0) {\n\t // There are still more digits in this value, so we must make sure the\n\t // continuation bit is marked.\n\t digit |= VLQ_CONTINUATION_BIT;\n\t }\n\t encoded += base64.encode(digit);\n\t } while (vlq > 0);\n\t\n\t return encoded;\n\t};\n\t\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t var strLen = aStr.length;\n\t var result = 0;\n\t var shift = 0;\n\t var continuation, digit;\n\t\n\t do {\n\t if (aIndex >= strLen) {\n\t throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t }\n\t\n\t digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t if (digit === -1) {\n\t throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t }\n\t\n\t continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t digit &= VLQ_BASE_MASK;\n\t result = result + (digit << shift);\n\t shift += VLQ_BASE_SHIFT;\n\t } while (continuation);\n\t\n\t aOutParam.value = fromVLQSigned(result);\n\t aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\t\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t if (0 <= number && number < intToCharMap.length) {\n\t return intToCharMap[number];\n\t }\n\t throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\t\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t var bigA = 65; // 'A'\n\t var bigZ = 90; // 'Z'\n\t\n\t var littleA = 97; // 'a'\n\t var littleZ = 122; // 'z'\n\t\n\t var zero = 48; // '0'\n\t var nine = 57; // '9'\n\t\n\t var plus = 43; // '+'\n\t var slash = 47; // '/'\n\t\n\t var littleOffset = 26;\n\t var numberOffset = 52;\n\t\n\t // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t if (bigA <= charCode && charCode <= bigZ) {\n\t return (charCode - bigA);\n\t }\n\t\n\t // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t if (littleA <= charCode && charCode <= littleZ) {\n\t return (charCode - littleA + littleOffset);\n\t }\n\t\n\t // 52 - 61: 0123456789\n\t if (zero <= charCode && charCode <= nine) {\n\t return (charCode - zero + numberOffset);\n\t }\n\t\n\t // 62: +\n\t if (charCode == plus) {\n\t return 62;\n\t }\n\t\n\t // 63: /\n\t if (charCode == slash) {\n\t return 63;\n\t }\n\t\n\t // Invalid base64 digit.\n\t return -1;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t if (aName in aArgs) {\n\t return aArgs[aName];\n\t } else if (arguments.length === 3) {\n\t return aDefaultValue;\n\t } else {\n\t throw new Error('\"' + aName + '\" is a required argument.');\n\t }\n\t}\n\texports.getArg = getArg;\n\t\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\t\n\tfunction urlParse(aUrl) {\n\t var match = aUrl.match(urlRegexp);\n\t if (!match) {\n\t return null;\n\t }\n\t return {\n\t scheme: match[1],\n\t auth: match[2],\n\t host: match[3],\n\t port: match[4],\n\t path: match[5]\n\t };\n\t}\n\texports.urlParse = urlParse;\n\t\n\tfunction urlGenerate(aParsedUrl) {\n\t var url = '';\n\t if (aParsedUrl.scheme) {\n\t url += aParsedUrl.scheme + ':';\n\t }\n\t url += '//';\n\t if (aParsedUrl.auth) {\n\t url += aParsedUrl.auth + '@';\n\t }\n\t if (aParsedUrl.host) {\n\t url += aParsedUrl.host;\n\t }\n\t if (aParsedUrl.port) {\n\t url += \":\" + aParsedUrl.port\n\t }\n\t if (aParsedUrl.path) {\n\t url += aParsedUrl.path;\n\t }\n\t return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\t\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t var path = aPath;\n\t var url = urlParse(aPath);\n\t if (url) {\n\t if (!url.path) {\n\t return aPath;\n\t }\n\t path = url.path;\n\t }\n\t var isAbsolute = exports.isAbsolute(path);\n\t\n\t var parts = path.split(/\\/+/);\n\t for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t part = parts[i];\n\t if (part === '.') {\n\t parts.splice(i, 1);\n\t } else if (part === '..') {\n\t up++;\n\t } else if (up > 0) {\n\t if (part === '') {\n\t // The first part is blank if the path is absolute. Trying to go\n\t // above the root is a no-op. Therefore we can remove all '..' parts\n\t // directly after the root.\n\t parts.splice(i + 1, up);\n\t up = 0;\n\t } else {\n\t parts.splice(i, 2);\n\t up--;\n\t }\n\t }\n\t }\n\t path = parts.join('/');\n\t\n\t if (path === '') {\n\t path = isAbsolute ? '/' : '.';\n\t }\n\t\n\t if (url) {\n\t url.path = path;\n\t return urlGenerate(url);\n\t }\n\t return path;\n\t}\n\texports.normalize = normalize;\n\t\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t * first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t * is updated with the result and aRoot is returned. Otherwise the result\n\t * is returned.\n\t * - If aPath is absolute, the result is aPath.\n\t * - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t if (aPath === \"\") {\n\t aPath = \".\";\n\t }\n\t var aPathUrl = urlParse(aPath);\n\t var aRootUrl = urlParse(aRoot);\n\t if (aRootUrl) {\n\t aRoot = aRootUrl.path || '/';\n\t }\n\t\n\t // `join(foo, '//www.example.org')`\n\t if (aPathUrl && !aPathUrl.scheme) {\n\t if (aRootUrl) {\n\t aPathUrl.scheme = aRootUrl.scheme;\n\t }\n\t return urlGenerate(aPathUrl);\n\t }\n\t\n\t if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t return aPath;\n\t }\n\t\n\t // `join('http://', 'www.example.com')`\n\t if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t aRootUrl.host = aPath;\n\t return urlGenerate(aRootUrl);\n\t }\n\t\n\t var joined = aPath.charAt(0) === '/'\n\t ? aPath\n\t : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\t\n\t if (aRootUrl) {\n\t aRootUrl.path = joined;\n\t return urlGenerate(aRootUrl);\n\t }\n\t return joined;\n\t}\n\texports.join = join;\n\t\n\texports.isAbsolute = function (aPath) {\n\t return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n\t};\n\t\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t\n\t aRoot = aRoot.replace(/\\/$/, '');\n\t\n\t // It is possible for the path to be above the root. In this case, simply\n\t // checking whether the root is a prefix of the path won't work. Instead, we\n\t // need to remove components from the root one by one, until either we find\n\t // a prefix that fits, or we run out of components to remove.\n\t var level = 0;\n\t while (aPath.indexOf(aRoot + '/') !== 0) {\n\t var index = aRoot.lastIndexOf(\"/\");\n\t if (index < 0) {\n\t return aPath;\n\t }\n\t\n\t // If the only part of the root that is left is the scheme (i.e. http://,\n\t // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t // have exhausted all components, so the path is not relative to the root.\n\t aRoot = aRoot.slice(0, index);\n\t if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t return aPath;\n\t }\n\t\n\t ++level;\n\t }\n\t\n\t // Make sure we add a \"../\" for each component we removed from the root.\n\t return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\t\n\tvar supportsNullProto = (function () {\n\t var obj = Object.create(null);\n\t return !('__proto__' in obj);\n\t}());\n\t\n\tfunction identity (s) {\n\t return s;\n\t}\n\t\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return '$' + aStr;\n\t }\n\t\n\t return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\t\n\tfunction fromSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return aStr.slice(1);\n\t }\n\t\n\t return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\t\n\tfunction isProtoString(s) {\n\t if (!s) {\n\t return false;\n\t }\n\t\n\t var length = s.length;\n\t\n\t if (length < 9 /* \"__proto__\".length */) {\n\t return false;\n\t }\n\t\n\t if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 9) !== 95 /* '_' */) {\n\t return false;\n\t }\n\t\n\t for (var i = length - 10; i >= 0; i--) {\n\t if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t return false;\n\t }\n\t }\n\t\n\t return true;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t var cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0 || onlyCompareOriginal) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\t\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0 || onlyCompareGenerated) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\t\n\tfunction strcmp(aStr1, aStr2) {\n\t if (aStr1 === aStr2) {\n\t return 0;\n\t }\n\t\n\t if (aStr1 > aStr2) {\n\t return 1;\n\t }\n\t\n\t return -1;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar hasNativeMap = typeof Map !== \"undefined\";\n\t\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t this._array = [];\n\t this._set = hasNativeMap ? new Map() : Object.create(null);\n\t}\n\t\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t var set = new ArraySet();\n\t for (var i = 0, len = aArray.length; i < len; i++) {\n\t set.add(aArray[i], aAllowDuplicates);\n\t }\n\t return set;\n\t};\n\t\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n\t};\n\t\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n\t var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n\t var idx = this._array.length;\n\t if (!isDuplicate || aAllowDuplicates) {\n\t this._array.push(aStr);\n\t }\n\t if (!isDuplicate) {\n\t if (hasNativeMap) {\n\t this._set.set(aStr, idx);\n\t } else {\n\t this._set[sStr] = idx;\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t if (hasNativeMap) {\n\t return this._set.has(aStr);\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t return has.call(this._set, sStr);\n\t }\n\t};\n\t\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t if (hasNativeMap) {\n\t var idx = this._set.get(aStr);\n\t if (idx >= 0) {\n\t return idx;\n\t }\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t if (has.call(this._set, sStr)) {\n\t return this._set[sStr];\n\t }\n\t }\n\t\n\t throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\t\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t if (aIdx >= 0 && aIdx < this._array.length) {\n\t return this._array[aIdx];\n\t }\n\t throw new Error('No element indexed by ' + aIdx);\n\t};\n\t\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t return this._array.slice();\n\t};\n\t\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2014 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\t\n\t/**\n\t * Determine whether mappingB is after mappingA with respect to generated\n\t * position.\n\t */\n\tfunction generatedPositionAfter(mappingA, mappingB) {\n\t // Optimized for most common case\n\t var lineA = mappingA.generatedLine;\n\t var lineB = mappingB.generatedLine;\n\t var columnA = mappingA.generatedColumn;\n\t var columnB = mappingB.generatedColumn;\n\t return lineB > lineA || lineB == lineA && columnB >= columnA ||\n\t util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n\t}\n\t\n\t/**\n\t * A data structure to provide a sorted view of accumulated mappings in a\n\t * performance conscious manner. It trades a neglibable overhead in general\n\t * case for a large speedup in case of mappings being added in order.\n\t */\n\tfunction MappingList() {\n\t this._array = [];\n\t this._sorted = true;\n\t // Serves as infimum\n\t this._last = {generatedLine: -1, generatedColumn: 0};\n\t}\n\t\n\t/**\n\t * Iterate through internal items. This method takes the same arguments that\n\t * `Array.prototype.forEach` takes.\n\t *\n\t * NOTE: The order of the mappings is NOT guaranteed.\n\t */\n\tMappingList.prototype.unsortedForEach =\n\t function MappingList_forEach(aCallback, aThisArg) {\n\t this._array.forEach(aCallback, aThisArg);\n\t };\n\t\n\t/**\n\t * Add the given source mapping.\n\t *\n\t * @param Object aMapping\n\t */\n\tMappingList.prototype.add = function MappingList_add(aMapping) {\n\t if (generatedPositionAfter(this._last, aMapping)) {\n\t this._last = aMapping;\n\t this._array.push(aMapping);\n\t } else {\n\t this._sorted = false;\n\t this._array.push(aMapping);\n\t }\n\t};\n\t\n\t/**\n\t * Returns the flat, sorted array of mappings. The mappings are sorted by\n\t * generated position.\n\t *\n\t * WARNING: This method returns internal data without copying, for\n\t * performance. The return value must NOT be mutated, and should be treated as\n\t * an immutable borrow. If you want to take ownership, you must make your own\n\t * copy.\n\t */\n\tMappingList.prototype.toArray = function MappingList_toArray() {\n\t if (!this._sorted) {\n\t this._array.sort(util.compareByGeneratedPositionsInflated);\n\t this._sorted = true;\n\t }\n\t return this._array;\n\t};\n\t\n\texports.MappingList = MappingList;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar binarySearch = __webpack_require__(8);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar base64VLQ = __webpack_require__(2);\n\tvar quickSort = __webpack_require__(9).quickSort;\n\t\n\tfunction SourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t return sourceMap.sections != null\n\t ? new IndexedSourceMapConsumer(sourceMap)\n\t : new BasicSourceMapConsumer(sourceMap);\n\t}\n\t\n\tSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n\t return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n\t}\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tSourceMapConsumer.prototype._version = 3;\n\t\n\t// `__generatedMappings` and `__originalMappings` are arrays that hold the\n\t// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n\t// are lazily instantiated, accessed via the `_generatedMappings` and\n\t// `_originalMappings` getters respectively, and we only parse the mappings\n\t// and create these arrays once queried for a source location. We jump through\n\t// these hoops because there can be many thousands of mappings, and parsing\n\t// them is expensive, so we only want to do it if we must.\n\t//\n\t// Each object in the arrays is of the form:\n\t//\n\t// {\n\t// generatedLine: The line number in the generated code,\n\t// generatedColumn: The column number in the generated code,\n\t// source: The path to the original source file that generated this\n\t// chunk of code,\n\t// originalLine: The line number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// originalColumn: The column number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// name: The name of the original symbol which generated this chunk of\n\t// code.\n\t// }\n\t//\n\t// All properties except for `generatedLine` and `generatedColumn` can be\n\t// `null`.\n\t//\n\t// `_generatedMappings` is ordered by the generated positions.\n\t//\n\t// `_originalMappings` is ordered by the original positions.\n\t\n\tSourceMapConsumer.prototype.__generatedMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n\t get: function () {\n\t if (!this.__generatedMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__generatedMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype.__originalMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n\t get: function () {\n\t if (!this.__originalMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__originalMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype._charIsMappingSeparator =\n\t function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n\t var c = aStr.charAt(index);\n\t return c === \";\" || c === \",\";\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t throw new Error(\"Subclasses must implement _parseMappings\");\n\t };\n\t\n\tSourceMapConsumer.GENERATED_ORDER = 1;\n\tSourceMapConsumer.ORIGINAL_ORDER = 2;\n\t\n\tSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\n\tSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Iterate over each mapping between an original source/line/column and a\n\t * generated line/column in this source map.\n\t *\n\t * @param Function aCallback\n\t * The function that is called with each mapping.\n\t * @param Object aContext\n\t * Optional. If specified, this object will be the value of `this` every\n\t * time that `aCallback` is called.\n\t * @param aOrder\n\t * Either `SourceMapConsumer.GENERATED_ORDER` or\n\t * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n\t * iterate over the mappings sorted by the generated file's line/column\n\t * order or the original's source/line/column order, respectively. Defaults to\n\t * `SourceMapConsumer.GENERATED_ORDER`.\n\t */\n\tSourceMapConsumer.prototype.eachMapping =\n\t function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n\t var context = aContext || null;\n\t var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\t\n\t var mappings;\n\t switch (order) {\n\t case SourceMapConsumer.GENERATED_ORDER:\n\t mappings = this._generatedMappings;\n\t break;\n\t case SourceMapConsumer.ORIGINAL_ORDER:\n\t mappings = this._originalMappings;\n\t break;\n\t default:\n\t throw new Error(\"Unknown order of iteration.\");\n\t }\n\t\n\t var sourceRoot = this.sourceRoot;\n\t mappings.map(function (mapping) {\n\t var source = mapping.source === null ? null : this._sources.at(mapping.source);\n\t if (source != null && sourceRoot != null) {\n\t source = util.join(sourceRoot, source);\n\t }\n\t return {\n\t source: source,\n\t generatedLine: mapping.generatedLine,\n\t generatedColumn: mapping.generatedColumn,\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: mapping.name === null ? null : this._names.at(mapping.name)\n\t };\n\t }, this).forEach(aCallback, context);\n\t };\n\t\n\t/**\n\t * Returns all generated line and column information for the original source,\n\t * line, and column provided. If no column is provided, returns all mappings\n\t * corresponding to a either the line we are searching for or the next\n\t * closest line that has any mappings. Otherwise, returns all mappings\n\t * corresponding to the given line and either the column we are searching for\n\t * or the next closest column that has any offsets.\n\t *\n\t * The only argument is an object with the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: Optional. the column number in the original source.\n\t *\n\t * and an array of objects is returned, each with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tSourceMapConsumer.prototype.allGeneratedPositionsFor =\n\t function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n\t var line = util.getArg(aArgs, 'line');\n\t\n\t // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n\t // returns the index of the closest mapping less than the needle. By\n\t // setting needle.originalColumn to 0, we thus find the last mapping for\n\t // the given line, provided such a mapping exists.\n\t var needle = {\n\t source: util.getArg(aArgs, 'source'),\n\t originalLine: line,\n\t originalColumn: util.getArg(aArgs, 'column', 0)\n\t };\n\t\n\t if (this.sourceRoot != null) {\n\t needle.source = util.relative(this.sourceRoot, needle.source);\n\t }\n\t if (!this._sources.has(needle.source)) {\n\t return [];\n\t }\n\t needle.source = this._sources.indexOf(needle.source);\n\t\n\t var mappings = [];\n\t\n\t var index = this._findMapping(needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t binarySearch.LEAST_UPPER_BOUND);\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (aArgs.column === undefined) {\n\t var originalLine = mapping.originalLine;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we found. Since\n\t // mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we found.\n\t while (mapping && mapping.originalLine === originalLine) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t } else {\n\t var originalColumn = mapping.originalColumn;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we were searching for.\n\t // Since mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we are searching for.\n\t while (mapping &&\n\t mapping.originalLine === line &&\n\t mapping.originalColumn == originalColumn) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t }\n\t }\n\t\n\t return mappings;\n\t };\n\t\n\texports.SourceMapConsumer = SourceMapConsumer;\n\t\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The only parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - sources: An array of URLs to the original source files.\n\t * - names: An array of identifiers which can be referrenced by individual mappings.\n\t * - sourceRoot: Optional. The URL root from which all sources are relative.\n\t * - sourcesContent: Optional. An array of contents of the original source files.\n\t * - mappings: A string of base64 VLQs which contain the actual mappings.\n\t * - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"out.js\",\n\t * sourceRoot : \"\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AA,AB;;ABCDE;\"\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sources = util.getArg(sourceMap, 'sources');\n\t // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t // requires the array) to play nice here.\n\t var names = util.getArg(sourceMap, 'names', []);\n\t var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t var mappings = util.getArg(sourceMap, 'mappings');\n\t var file = util.getArg(sourceMap, 'file', null);\n\t\n\t // Once again, Sass deviates from the spec and supplies the version as a\n\t // string rather than a number, so we use loose equality checking here.\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t sources = sources\n\t .map(String)\n\t // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t // \"foo.js\". Normalize these first so that future comparisons will succeed.\n\t // See bugzil.la/1090768.\n\t .map(util.normalize)\n\t // Always ensure that absolute sources are internally stored relative to\n\t // the source root, if the source root is absolute. Not doing this would\n\t // be particularly problematic when the source root is a prefix of the\n\t // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t .map(function (source) {\n\t return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t ? util.relative(sourceRoot, source)\n\t : source;\n\t });\n\t\n\t // Pass `true` below to allow duplicate names and sources. While source maps\n\t // are intended to be compressed and deduplicated, the TypeScript compiler\n\t // sometimes generates source maps with duplicates in them. See Github issue\n\t // #72 and bugzil.la/889492.\n\t this._names = ArraySet.fromArray(names.map(String), true);\n\t this._sources = ArraySet.fromArray(sources, true);\n\t\n\t this.sourceRoot = sourceRoot;\n\t this.sourcesContent = sourcesContent;\n\t this._mappings = mappings;\n\t this.file = file;\n\t}\n\t\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\t\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t * The source map that will be consumed.\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t function SourceMapConsumer_fromSourceMap(aSourceMap) {\n\t var smc = Object.create(BasicSourceMapConsumer.prototype);\n\t\n\t var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t smc.sourceRoot = aSourceMap._sourceRoot;\n\t smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t smc.sourceRoot);\n\t smc.file = aSourceMap._file;\n\t\n\t // Because we are modifying the entries (by converting string sources and\n\t // names to indices into the sources and names ArraySets), we have to make\n\t // a copy of the entry or else bad things happen. Shared mutable state\n\t // strikes again! See github issue #191.\n\t\n\t var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t var destGeneratedMappings = smc.__generatedMappings = [];\n\t var destOriginalMappings = smc.__originalMappings = [];\n\t\n\t for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t var srcMapping = generatedMappings[i];\n\t var destMapping = new Mapping;\n\t destMapping.generatedLine = srcMapping.generatedLine;\n\t destMapping.generatedColumn = srcMapping.generatedColumn;\n\t\n\t if (srcMapping.source) {\n\t destMapping.source = sources.indexOf(srcMapping.source);\n\t destMapping.originalLine = srcMapping.originalLine;\n\t destMapping.originalColumn = srcMapping.originalColumn;\n\t\n\t if (srcMapping.name) {\n\t destMapping.name = names.indexOf(srcMapping.name);\n\t }\n\t\n\t destOriginalMappings.push(destMapping);\n\t }\n\t\n\t destGeneratedMappings.push(destMapping);\n\t }\n\t\n\t quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\t\n\t return smc;\n\t };\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t return this._sources.toArray().map(function (s) {\n\t return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n\t }, this);\n\t }\n\t});\n\t\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t this.generatedLine = 0;\n\t this.generatedColumn = 0;\n\t this.source = null;\n\t this.originalLine = null;\n\t this.originalColumn = null;\n\t this.name = null;\n\t}\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t var generatedLine = 1;\n\t var previousGeneratedColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousOriginalColumn = 0;\n\t var previousSource = 0;\n\t var previousName = 0;\n\t var length = aStr.length;\n\t var index = 0;\n\t var cachedSegments = {};\n\t var temp = {};\n\t var originalMappings = [];\n\t var generatedMappings = [];\n\t var mapping, str, segment, end, value;\n\t\n\t while (index < length) {\n\t if (aStr.charAt(index) === ';') {\n\t generatedLine++;\n\t index++;\n\t previousGeneratedColumn = 0;\n\t }\n\t else if (aStr.charAt(index) === ',') {\n\t index++;\n\t }\n\t else {\n\t mapping = new Mapping();\n\t mapping.generatedLine = generatedLine;\n\t\n\t // Because each offset is encoded relative to the previous one,\n\t // many segments often have the same encoding. We can exploit this\n\t // fact by caching the parsed variable length fields of each segment,\n\t // allowing us to avoid a second parse if we encounter the same\n\t // segment again.\n\t for (end = index; end < length; end++) {\n\t if (this._charIsMappingSeparator(aStr, end)) {\n\t break;\n\t }\n\t }\n\t str = aStr.slice(index, end);\n\t\n\t segment = cachedSegments[str];\n\t if (segment) {\n\t index += str.length;\n\t } else {\n\t segment = [];\n\t while (index < end) {\n\t base64VLQ.decode(aStr, index, temp);\n\t value = temp.value;\n\t index = temp.rest;\n\t segment.push(value);\n\t }\n\t\n\t if (segment.length === 2) {\n\t throw new Error('Found a source, but no line and column');\n\t }\n\t\n\t if (segment.length === 3) {\n\t throw new Error('Found a source and line, but no column');\n\t }\n\t\n\t cachedSegments[str] = segment;\n\t }\n\t\n\t // Generated column.\n\t mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (segment.length > 1) {\n\t // Original source.\n\t mapping.source = previousSource + segment[1];\n\t previousSource += segment[1];\n\t\n\t // Original line.\n\t mapping.originalLine = previousOriginalLine + segment[2];\n\t previousOriginalLine = mapping.originalLine;\n\t // Lines are stored 0-based\n\t mapping.originalLine += 1;\n\t\n\t // Original column.\n\t mapping.originalColumn = previousOriginalColumn + segment[3];\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (segment.length > 4) {\n\t // Original name.\n\t mapping.name = previousName + segment[4];\n\t previousName += segment[4];\n\t }\n\t }\n\t\n\t generatedMappings.push(mapping);\n\t if (typeof mapping.originalLine === 'number') {\n\t originalMappings.push(mapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t this.__generatedMappings = generatedMappings;\n\t\n\t quickSort(originalMappings, util.compareByOriginalPositions);\n\t this.__originalMappings = originalMappings;\n\t };\n\t\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t aColumnName, aComparator, aBias) {\n\t // To return the position we are searching for, we must first find the\n\t // mapping for the given position and then return the opposite position it\n\t // points to. Because the mappings are sorted, we can use binary search to\n\t // find the best mapping.\n\t\n\t if (aNeedle[aLineName] <= 0) {\n\t throw new TypeError('Line must be greater than or equal to 1, got '\n\t + aNeedle[aLineName]);\n\t }\n\t if (aNeedle[aColumnName] < 0) {\n\t throw new TypeError('Column must be greater than or equal to 0, got '\n\t + aNeedle[aColumnName]);\n\t }\n\t\n\t return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t };\n\t\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t function SourceMapConsumer_computeColumnSpans() {\n\t for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t // Mappings do not contain a field for the last generated columnt. We\n\t // can come up with an optimistic estimate, however, by assuming that\n\t // mappings are contiguous (i.e. given two consecutive mappings, the\n\t // first mapping ends where the second one starts).\n\t if (index + 1 < this._generatedMappings.length) {\n\t var nextMapping = this._generatedMappings[index + 1];\n\t\n\t if (mapping.generatedLine === nextMapping.generatedLine) {\n\t mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t continue;\n\t }\n\t }\n\t\n\t // The last mapping for each line spans the entire line.\n\t mapping.lastGeneratedColumn = Infinity;\n\t }\n\t };\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t function SourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._generatedMappings,\n\t \"generatedLine\",\n\t \"generatedColumn\",\n\t util.compareByGeneratedPositionsDeflated,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t if (mapping.generatedLine === needle.generatedLine) {\n\t var source = util.getArg(mapping, 'source', null);\n\t if (source !== null) {\n\t source = this._sources.at(source);\n\t if (this.sourceRoot != null) {\n\t source = util.join(this.sourceRoot, source);\n\t }\n\t }\n\t var name = util.getArg(mapping, 'name', null);\n\t if (name !== null) {\n\t name = this._names.at(name);\n\t }\n\t return {\n\t source: source,\n\t line: util.getArg(mapping, 'originalLine', null),\n\t column: util.getArg(mapping, 'originalColumn', null),\n\t name: name\n\t };\n\t }\n\t }\n\t\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t if (!this.sourcesContent) {\n\t return false;\n\t }\n\t return this.sourcesContent.length >= this._sources.size() &&\n\t !this.sourcesContent.some(function (sc) { return sc == null; });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t if (!this.sourcesContent) {\n\t return null;\n\t }\n\t\n\t if (this.sourceRoot != null) {\n\t aSource = util.relative(this.sourceRoot, aSource);\n\t }\n\t\n\t if (this._sources.has(aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(aSource)];\n\t }\n\t\n\t var url;\n\t if (this.sourceRoot != null\n\t && (url = util.urlParse(this.sourceRoot))) {\n\t // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t // many users. We can help them out when they expect file:// URIs to\n\t // behave like it would if they were running a local HTTP server. See\n\t // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n\t if (url.scheme == \"file\"\n\t && this._sources.has(fileUriAbsPath)) {\n\t return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t }\n\t\n\t if ((!url.path || url.path == \"/\")\n\t && this._sources.has(\"/\" + aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n\t }\n\t }\n\t\n\t // This function is used recursively from\n\t // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t // don't want to throw if we can't find the source - we just want to\n\t // return null, so we provide a flag to exit gracefully.\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t var source = util.getArg(aArgs, 'source');\n\t if (this.sourceRoot != null) {\n\t source = util.relative(this.sourceRoot, source);\n\t }\n\t if (!this._sources.has(source)) {\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t }\n\t source = this._sources.indexOf(source);\n\t\n\t var needle = {\n\t source: source,\n\t originalLine: util.getArg(aArgs, 'line'),\n\t originalColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (mapping.source === needle.source) {\n\t return {\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t };\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t };\n\t\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\t\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The only parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - file: Optional. The generated file this source map is associated with.\n\t * - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t * - offset: The offset into the original specified at which this section\n\t * begins to apply, defined as an object with a \"line\" and \"column\"\n\t * field.\n\t * - map: A source map definition. This source map could also be indexed,\n\t * but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"app.js\",\n\t * sections: [{\n\t * offset: {line:100, column:10},\n\t * map: {\n\t * version : 3,\n\t * file: \"section.js\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AAAA,E;;ABCDE;\"\n\t * }\n\t * }],\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sections = util.getArg(sourceMap, 'sections');\n\t\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\t\n\t var lastOffset = {\n\t line: -1,\n\t column: 0\n\t };\n\t this._sections = sections.map(function (s) {\n\t if (s.url) {\n\t // The url field will require support for asynchronicity.\n\t // See https://github.com/mozilla/source-map/issues/16\n\t throw new Error('Support for url field in sections not implemented.');\n\t }\n\t var offset = util.getArg(s, 'offset');\n\t var offsetLine = util.getArg(offset, 'line');\n\t var offsetColumn = util.getArg(offset, 'column');\n\t\n\t if (offsetLine < lastOffset.line ||\n\t (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t throw new Error('Section offsets must be ordered and non-overlapping.');\n\t }\n\t lastOffset = offset;\n\t\n\t return {\n\t generatedOffset: {\n\t // The offset fields are 0-based, but we use 1-based indices when\n\t // encoding/decoding from VLQ.\n\t generatedLine: offsetLine + 1,\n\t generatedColumn: offsetColumn + 1\n\t },\n\t consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n\t }\n\t });\n\t}\n\t\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t var sources = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t sources.push(this._sections[i].consumer.sources[j]);\n\t }\n\t }\n\t return sources;\n\t }\n\t});\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t // Find the section containing the generated position we're trying to map\n\t // to an original position.\n\t var sectionIndex = binarySearch.search(needle, this._sections,\n\t function(needle, section) {\n\t var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t if (cmp) {\n\t return cmp;\n\t }\n\t\n\t return (needle.generatedColumn -\n\t section.generatedOffset.generatedColumn);\n\t });\n\t var section = this._sections[sectionIndex];\n\t\n\t if (!section) {\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t }\n\t\n\t return section.consumer.originalPositionFor({\n\t line: needle.generatedLine -\n\t (section.generatedOffset.generatedLine - 1),\n\t column: needle.generatedColumn -\n\t (section.generatedOffset.generatedLine === needle.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t bias: aArgs.bias\n\t });\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t return this._sections.every(function (s) {\n\t return s.consumer.hasContentsOfAllSources();\n\t });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t var content = section.consumer.sourceContentFor(aSource, true);\n\t if (content) {\n\t return content;\n\t }\n\t }\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t // Only consider this section if the requested source is in the list of\n\t // sources of the consumer.\n\t if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n\t continue;\n\t }\n\t var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t if (generatedPosition) {\n\t var ret = {\n\t line: generatedPosition.line +\n\t (section.generatedOffset.generatedLine - 1),\n\t column: generatedPosition.column +\n\t (section.generatedOffset.generatedLine === generatedPosition.line\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0)\n\t };\n\t return ret;\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null\n\t };\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t this.__generatedMappings = [];\n\t this.__originalMappings = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t var sectionMappings = section.consumer._generatedMappings;\n\t for (var j = 0; j < sectionMappings.length; j++) {\n\t var mapping = sectionMappings[j];\n\t\n\t var source = section.consumer._sources.at(mapping.source);\n\t if (section.consumer.sourceRoot !== null) {\n\t source = util.join(section.consumer.sourceRoot, source);\n\t }\n\t this._sources.add(source);\n\t source = this._sources.indexOf(source);\n\t\n\t var name = section.consumer._names.at(mapping.name);\n\t this._names.add(name);\n\t name = this._names.indexOf(name);\n\t\n\t // The mappings coming from the consumer for the section have\n\t // generated positions relative to the start of the section, so we\n\t // need to offset them to be relative to the start of the concatenated\n\t // generated file.\n\t var adjustedMapping = {\n\t source: source,\n\t generatedLine: mapping.generatedLine +\n\t (section.generatedOffset.generatedLine - 1),\n\t generatedColumn: mapping.generatedColumn +\n\t (section.generatedOffset.generatedLine === mapping.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: name\n\t };\n\t\n\t this.__generatedMappings.push(adjustedMapping);\n\t if (typeof adjustedMapping.originalLine === 'number') {\n\t this.__originalMappings.push(adjustedMapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t };\n\t\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t // This function terminates when one of the following is true:\n\t //\n\t // 1. We find the exact element we are looking for.\n\t //\n\t // 2. We did not find the exact element, but we can return the index of\n\t // the next-closest element.\n\t //\n\t // 3. We did not find the exact element, and there is no next-closest\n\t // element than the one we are searching for, so we return -1.\n\t var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t if (cmp === 0) {\n\t // Found the element we are looking for.\n\t return mid;\n\t }\n\t else if (cmp > 0) {\n\t // Our needle is greater than aHaystack[mid].\n\t if (aHigh - mid > 1) {\n\t // The element is in the upper half.\n\t return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // The exact needle element was not found in this haystack. Determine if\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return aHigh < aHaystack.length ? aHigh : -1;\n\t } else {\n\t return mid;\n\t }\n\t }\n\t else {\n\t // Our needle is less than aHaystack[mid].\n\t if (mid - aLow > 1) {\n\t // The element is in the lower half.\n\t return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return mid;\n\t } else {\n\t return aLow < 0 ? -1 : aLow;\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t * array and returns -1, 0, or 1 depending on whether the needle is less\n\t * than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t if (aHaystack.length === 0) {\n\t return -1;\n\t }\n\t\n\t var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t if (index < 0) {\n\t return -1;\n\t }\n\t\n\t // We have found either the exact element, or the next-closest element than\n\t // the one we are searching for. However, there may be more than one such\n\t // element. Make sure we always return the smallest of these.\n\t while (index - 1 >= 0) {\n\t if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t break;\n\t }\n\t --index;\n\t }\n\t\n\t return index;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\t\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t * The array.\n\t * @param {Number} x\n\t * The index of the first item.\n\t * @param {Number} y\n\t * The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t var temp = ary[x];\n\t ary[x] = ary[y];\n\t ary[y] = temp;\n\t}\n\t\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t * The lower bound on the range.\n\t * @param {Number} high\n\t * The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t return Math.round(low + (Math.random() * (high - low)));\n\t}\n\t\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t * @param {Number} p\n\t * Start index of the array\n\t * @param {Number} r\n\t * End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t // If our lower bound is less than our upper bound, we (1) partition the\n\t // array into two pieces and (2) recurse on each half. If it is not, this is\n\t // the empty array and our base case.\n\t\n\t if (p < r) {\n\t // (1) Partitioning.\n\t //\n\t // The partitioning chooses a pivot between `p` and `r` and moves all\n\t // elements that are less than or equal to the pivot to the before it, and\n\t // all the elements that are greater than it after it. The effect is that\n\t // once partition is done, the pivot is in the exact place it will be when\n\t // the array is put in sorted order, and it will not need to be moved\n\t // again. This runs in O(n) time.\n\t\n\t // Always choose a random pivot so that an input array which is reverse\n\t // sorted does not cause O(n^2) running time.\n\t var pivotIndex = randomIntInRange(p, r);\n\t var i = p - 1;\n\t\n\t swap(ary, pivotIndex, r);\n\t var pivot = ary[r];\n\t\n\t // Immediately after `j` is incremented in this loop, the following hold\n\t // true:\n\t //\n\t // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t //\n\t // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t for (var j = p; j < r; j++) {\n\t if (comparator(ary[j], pivot) <= 0) {\n\t i += 1;\n\t swap(ary, i, j);\n\t }\n\t }\n\t\n\t swap(ary, i + 1, j);\n\t var q = i + 1;\n\t\n\t // (2) Recurse on each half.\n\t\n\t doQuickSort(ary, comparator, p, q - 1);\n\t doQuickSort(ary, comparator, q + 1, r);\n\t }\n\t}\n\t\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\tvar util = __webpack_require__(4);\n\t\n\t// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n\t// operating systems these days (capturing the result).\n\tvar REGEX_NEWLINE = /(\\r?\\n)/;\n\t\n\t// Newline character code for charCodeAt() comparisons\n\tvar NEWLINE_CODE = 10;\n\t\n\t// Private symbol for identifying `SourceNode`s when multiple versions of\n\t// the source-map library are loaded. This MUST NOT CHANGE across\n\t// versions!\n\tvar isSourceNode = \"$$$isSourceNode$$$\";\n\t\n\t/**\n\t * SourceNodes provide a way to abstract over interpolating/concatenating\n\t * snippets of generated JavaScript source code while maintaining the line and\n\t * column information associated with the original source code.\n\t *\n\t * @param aLine The original line number.\n\t * @param aColumn The original column number.\n\t * @param aSource The original source's filename.\n\t * @param aChunks Optional. An array of strings which are snippets of\n\t * generated JS, or other SourceNodes.\n\t * @param aName The original identifier.\n\t */\n\tfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n\t this.children = [];\n\t this.sourceContents = {};\n\t this.line = aLine == null ? null : aLine;\n\t this.column = aColumn == null ? null : aColumn;\n\t this.source = aSource == null ? null : aSource;\n\t this.name = aName == null ? null : aName;\n\t this[isSourceNode] = true;\n\t if (aChunks != null) this.add(aChunks);\n\t}\n\t\n\t/**\n\t * Creates a SourceNode from generated code and a SourceMapConsumer.\n\t *\n\t * @param aGeneratedCode The generated code\n\t * @param aSourceMapConsumer The SourceMap for the generated code\n\t * @param aRelativePath Optional. The path that relative sources in the\n\t * SourceMapConsumer should be relative to.\n\t */\n\tSourceNode.fromStringWithSourceMap =\n\t function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n\t // The SourceNode we want to fill with the generated code\n\t // and the SourceMap\n\t var node = new SourceNode();\n\t\n\t // All even indices of this array are one line of the generated code,\n\t // while all odd indices are the newlines between two adjacent lines\n\t // (since `REGEX_NEWLINE` captures its match).\n\t // Processed fragments are accessed by calling `shiftNextLine`.\n\t var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n\t var remainingLinesIndex = 0;\n\t var shiftNextLine = function() {\n\t var lineContents = getNextLine();\n\t // The last line of a file might not have a newline.\n\t var newLine = getNextLine() || \"\";\n\t return lineContents + newLine;\n\t\n\t function getNextLine() {\n\t return remainingLinesIndex < remainingLines.length ?\n\t remainingLines[remainingLinesIndex++] : undefined;\n\t }\n\t };\n\t\n\t // We need to remember the position of \"remainingLines\"\n\t var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\t\n\t // The generate SourceNodes we need a code range.\n\t // To extract it current and last mapping is used.\n\t // Here we store the last mapping.\n\t var lastMapping = null;\n\t\n\t aSourceMapConsumer.eachMapping(function (mapping) {\n\t if (lastMapping !== null) {\n\t // We add the code from \"lastMapping\" to \"mapping\":\n\t // First check if there is a new line in between.\n\t if (lastGeneratedLine < mapping.generatedLine) {\n\t // Associate first line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t lastGeneratedLine++;\n\t lastGeneratedColumn = 0;\n\t // The remaining code is added without mapping\n\t } else {\n\t // There is no new line in between.\n\t // Associate the code between \"lastGeneratedColumn\" and\n\t // \"mapping.generatedColumn\" with \"lastMapping\"\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t var code = nextLine.substr(0, mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t addMappingWithCode(lastMapping, code);\n\t // No more remaining code, continue\n\t lastMapping = mapping;\n\t return;\n\t }\n\t }\n\t // We add the generated code until the first mapping\n\t // to the SourceNode without any mapping.\n\t // Each line is added as separate string.\n\t while (lastGeneratedLine < mapping.generatedLine) {\n\t node.add(shiftNextLine());\n\t lastGeneratedLine++;\n\t }\n\t if (lastGeneratedColumn < mapping.generatedColumn) {\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t node.add(nextLine.substr(0, mapping.generatedColumn));\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t }\n\t lastMapping = mapping;\n\t }, this);\n\t // We have processed all mappings.\n\t if (remainingLinesIndex < remainingLines.length) {\n\t if (lastMapping) {\n\t // Associate the remaining code in the current line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t }\n\t // and add the remaining lines without any mapping\n\t node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n\t }\n\t\n\t // Copy sourcesContent into SourceNode\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t if (aRelativePath != null) {\n\t sourceFile = util.join(aRelativePath, sourceFile);\n\t }\n\t node.setSourceContent(sourceFile, content);\n\t }\n\t });\n\t\n\t return node;\n\t\n\t function addMappingWithCode(mapping, code) {\n\t if (mapping === null || mapping.source === undefined) {\n\t node.add(code);\n\t } else {\n\t var source = aRelativePath\n\t ? util.join(aRelativePath, mapping.source)\n\t : mapping.source;\n\t node.add(new SourceNode(mapping.originalLine,\n\t mapping.originalColumn,\n\t source,\n\t code,\n\t mapping.name));\n\t }\n\t }\n\t };\n\t\n\t/**\n\t * Add a chunk of generated JS to this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.add = function SourceNode_add(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t aChunk.forEach(function (chunk) {\n\t this.add(chunk);\n\t }, this);\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t if (aChunk) {\n\t this.children.push(aChunk);\n\t }\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Add a chunk of generated JS to the beginning of this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t for (var i = aChunk.length-1; i >= 0; i--) {\n\t this.prepend(aChunk[i]);\n\t }\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t this.children.unshift(aChunk);\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Walk over the tree of JS snippets in this node and its children. The\n\t * walking function is called once for each snippet of JS and is passed that\n\t * snippet and the its original associated source's line/column location.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n\t var chunk;\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t chunk = this.children[i];\n\t if (chunk[isSourceNode]) {\n\t chunk.walk(aFn);\n\t }\n\t else {\n\t if (chunk !== '') {\n\t aFn(chunk, { source: this.source,\n\t line: this.line,\n\t column: this.column,\n\t name: this.name });\n\t }\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n\t * each of `this.children`.\n\t *\n\t * @param aSep The separator.\n\t */\n\tSourceNode.prototype.join = function SourceNode_join(aSep) {\n\t var newChildren;\n\t var i;\n\t var len = this.children.length;\n\t if (len > 0) {\n\t newChildren = [];\n\t for (i = 0; i < len-1; i++) {\n\t newChildren.push(this.children[i]);\n\t newChildren.push(aSep);\n\t }\n\t newChildren.push(this.children[i]);\n\t this.children = newChildren;\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Call String.prototype.replace on the very right-most source snippet. Useful\n\t * for trimming whitespace from the end of a source node, etc.\n\t *\n\t * @param aPattern The pattern to replace.\n\t * @param aReplacement The thing to replace the pattern with.\n\t */\n\tSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n\t var lastChild = this.children[this.children.length - 1];\n\t if (lastChild[isSourceNode]) {\n\t lastChild.replaceRight(aPattern, aReplacement);\n\t }\n\t else if (typeof lastChild === 'string') {\n\t this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n\t }\n\t else {\n\t this.children.push(''.replace(aPattern, aReplacement));\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Set the source content for a source file. This will be added to the SourceMapGenerator\n\t * in the sourcesContent field.\n\t *\n\t * @param aSourceFile The filename of the source file\n\t * @param aSourceContent The content of the source file\n\t */\n\tSourceNode.prototype.setSourceContent =\n\t function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n\t this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n\t };\n\t\n\t/**\n\t * Walk over the tree of SourceNodes. The walking function is called for each\n\t * source file content and is passed the filename and source content.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walkSourceContents =\n\t function SourceNode_walkSourceContents(aFn) {\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t if (this.children[i][isSourceNode]) {\n\t this.children[i].walkSourceContents(aFn);\n\t }\n\t }\n\t\n\t var sources = Object.keys(this.sourceContents);\n\t for (var i = 0, len = sources.length; i < len; i++) {\n\t aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n\t }\n\t };\n\t\n\t/**\n\t * Return the string representation of this source node. Walks over the tree\n\t * and concatenates all the various snippets together to one string.\n\t */\n\tSourceNode.prototype.toString = function SourceNode_toString() {\n\t var str = \"\";\n\t this.walk(function (chunk) {\n\t str += chunk;\n\t });\n\t return str;\n\t};\n\t\n\t/**\n\t * Returns the string representation of this source node along with a source\n\t * map.\n\t */\n\tSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n\t var generated = {\n\t code: \"\",\n\t line: 1,\n\t column: 0\n\t };\n\t var map = new SourceMapGenerator(aArgs);\n\t var sourceMappingActive = false;\n\t var lastOriginalSource = null;\n\t var lastOriginalLine = null;\n\t var lastOriginalColumn = null;\n\t var lastOriginalName = null;\n\t this.walk(function (chunk, original) {\n\t generated.code += chunk;\n\t if (original.source !== null\n\t && original.line !== null\n\t && original.column !== null) {\n\t if(lastOriginalSource !== original.source\n\t || lastOriginalLine !== original.line\n\t || lastOriginalColumn !== original.column\n\t || lastOriginalName !== original.name) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t lastOriginalSource = original.source;\n\t lastOriginalLine = original.line;\n\t lastOriginalColumn = original.column;\n\t lastOriginalName = original.name;\n\t sourceMappingActive = true;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t }\n\t });\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t }\n\t for (var idx = 0, length = chunk.length; idx < length; idx++) {\n\t if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n\t generated.line++;\n\t generated.column = 0;\n\t // Mappings end at eol\n\t if (idx + 1 === length) {\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t } else {\n\t generated.column++;\n\t }\n\t }\n\t });\n\t this.walkSourceContents(function (sourceFile, sourceContent) {\n\t map.setSourceContent(sourceFile, sourceContent);\n\t });\n\t\n\t return { code: generated.code, map: map };\n\t};\n\t\n\texports.SourceNode = SourceNode;\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// source-map.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 42c329f865e32e011afb","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap)\n : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n if (source != null && sourceRoot != null) {\n source = util.join(sourceRoot, source);\n }\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n if (this.sourceRoot != null) {\n needle.source = util.relative(this.sourceRoot, needle.source);\n }\n if (!this._sources.has(needle.source)) {\n return [];\n }\n needle.source = this._sources.indexOf(needle.source);\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._sources.toArray().map(function (s) {\n return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n }, this);\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n if (this.sourceRoot != null) {\n source = util.join(this.sourceRoot, source);\n }\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n if (this.sourceRoot != null) {\n aSource = util.relative(this.sourceRoot, aSource);\n }\n\n if (this._sources.has(aSource)) {\n return this.sourcesContent[this._sources.indexOf(aSource)];\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + aSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n if (this.sourceRoot != null) {\n source = util.relative(this.sourceRoot, source);\n }\n if (!this._sources.has(source)) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n source = this._sources.indexOf(source);\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n if (section.consumer.sourceRoot !== null) {\n source = util.join(section.consumer.sourceRoot, source);\n }\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex];\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex];\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/node_modules/source-map/lib/array-set.js b/node_modules/source-map/lib/array-set.js new file mode 100644 index 000000000..fbd5c81ca --- /dev/null +++ b/node_modules/source-map/lib/array-set.js @@ -0,0 +1,121 @@ +/* -*- 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 + */ + +var util = require('./util'); +var has = Object.prototype.hasOwnProperty; +var hasNativeMap = typeof Map !== "undefined"; + +/** + * 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 = hasNativeMap ? new Map() : Object.create(null); +} + +/** + * 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 hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; +}; + +/** + * Add the given string to this set. + * + * @param String aStr + */ +ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } +}; + +/** + * Is the given string a member of this set? + * + * @param String aStr + */ +ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } +}; + +/** + * What is the index of the given string in the array? + * + * @param String aStr + */ +ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + 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/node_modules/source-map/lib/base64-vlq.js b/node_modules/source-map/lib/base64-vlq.js new file mode 100644 index 000000000..612b40401 --- /dev/null +++ b/node_modules/source-map/lib/base64-vlq.js @@ -0,0 +1,140 @@ +/* -*- 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. + */ + +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/node_modules/source-map/lib/base64.js b/node_modules/source-map/lib/base64.js new file mode 100644 index 000000000..8aa86b302 --- /dev/null +++ b/node_modules/source-map/lib/base64.js @@ -0,0 +1,67 @@ +/* -*- 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 + */ + +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: " + number); +}; + +/** + * 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/node_modules/source-map/lib/binary-search.js b/node_modules/source-map/lib/binary-search.js new file mode 100644 index 000000000..010ac941e --- /dev/null +++ b/node_modules/source-map/lib/binary-search.js @@ -0,0 +1,111 @@ +/* -*- 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 + */ + +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/node_modules/source-map/lib/mapping-list.js b/node_modules/source-map/lib/mapping-list.js new file mode 100644 index 000000000..06d1274a0 --- /dev/null +++ b/node_modules/source-map/lib/mapping-list.js @@ -0,0 +1,79 @@ +/* -*- 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 + */ + +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) { + 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/node_modules/source-map/lib/quick-sort.js b/node_modules/source-map/lib/quick-sort.js new file mode 100644 index 000000000..6a7caadbb --- /dev/null +++ b/node_modules/source-map/lib/quick-sort.js @@ -0,0 +1,114 @@ +/* -*- 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 + */ + +// 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/node_modules/source-map/lib/source-map-consumer.js b/node_modules/source-map/lib/source-map-consumer.js new file mode 100644 index 000000000..6abcc280e --- /dev/null +++ b/node_modules/source-map/lib/source-map-consumer.js @@ -0,0 +1,1082 @@ +/* -*- 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 + */ + +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); + } + + sources = sources + .map(String) + // 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. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // 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.map(String), 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 + * available. + */ +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[j]; + + 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.generatedColumn + + (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/node_modules/source-map/lib/source-map-generator.js b/node_modules/source-map/lib/source-map-generator.js new file mode 100644 index 000000000..aff1e7fb2 --- /dev/null +++ b/node_modules/source-map/lib/source-map-generator.js @@ -0,0 +1,416 @@ +/* -*- 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 + */ + +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) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!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 = Object.create(null); + } + 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) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + 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 next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + 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/node_modules/source-map/lib/source-node.js b/node_modules/source-map/lib/source-node.js new file mode 100644 index 000000000..d196a53f8 --- /dev/null +++ b/node_modules/source-map/lib/source-node.js @@ -0,0 +1,413 @@ +/* -*- 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 + */ + +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 accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // 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) { + // 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[remainingLinesIndex]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = 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[remainingLinesIndex]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + 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.splice(remainingLinesIndex).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/node_modules/source-map/lib/util.js b/node_modules/source-map/lib/util.js new file mode 100644 index 000000000..44e0e4520 --- /dev/null +++ b/node_modules/source-map/lib/util.js @@ -0,0 +1,417 @@ +/* -*- 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 + */ + +/** + * 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 consecutive 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 = exports.isAbsolute(path); + + 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; + +exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); +}; + +/** + * 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; + +var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); +}()); + +function identity (s) { + return s; +} + +/** + * 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) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; +} +exports.toSetString = supportsNullProto ? identity : toSetString; + +function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; +} +exports.fromSetString = supportsNullProto ? identity : fromSetString; + +function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; +} + +/** + * 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/node_modules/source-map/package.json b/node_modules/source-map/package.json new file mode 100644 index 000000000..d2d7721a4 --- /dev/null +++ b/node_modules/source-map/package.json @@ -0,0 +1,214 @@ +{ + "_from": "source-map@^0.5.6", + "_id": "source-map@0.5.7", + "_inBundle": false, + "_integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "_location": "/source-map", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "source-map@^0.5.6", + "name": "source-map", + "escapedName": "source-map", + "rawSpec": "^0.5.6", + "saveSpec": null, + "fetchSpec": "^0.5.6" + }, + "_requiredBy": [ + "/babel-cli", + "/babel-core", + "/babel-generator", + "/source-map-support" + ], + "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "_shasum": "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc", + "_spec": "source-map@^0.5.6", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-cli", + "author": { + "name": "Nick Fitzgerald", + "email": "nfitzgerald@mozilla.com" + }, + "bugs": { + "url": "https://github.com/mozilla/source-map/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Tobias Koppers", + "email": "tobias.koppers@googlemail.com" + }, + { + "name": "Duncan Beevers", + "email": "duncan@dweebd.com" + }, + { + "name": "Stephen Crane", + "email": "scrane@mozilla.com" + }, + { + "name": "Ryan Seddon", + "email": "seddon.ryan@gmail.com" + }, + { + "name": "Miles Elam", + "email": "miles.elam@deem.com" + }, + { + "name": "Mihai Bazon", + "email": "mihai.bazon@gmail.com" + }, + { + "name": "Michael Ficarra", + "email": "github.public.email@michael.ficarra.me" + }, + { + "name": "Todd Wolfson", + "email": "todd@twolfson.com" + }, + { + "name": "Alexander Solovyov", + "email": "alexander@solovyov.net" + }, + { + "name": "Felix Gnass", + "email": "fgnass@gmail.com" + }, + { + "name": "Conrad Irwin", + "email": "conrad.irwin@gmail.com" + }, + { + "name": "usrbincc", + "email": "usrbincc@yahoo.com" + }, + { + "name": "David Glasser", + "email": "glasser@davidglasser.net" + }, + { + "name": "Chase Douglas", + "email": "chase@newrelic.com" + }, + { + "name": "Evan Wallace", + "email": "evan.exe@gmail.com" + }, + { + "name": "Heather Arthur", + "email": "fayearthur@gmail.com" + }, + { + "name": "Hugh Kennedy", + "email": "hughskennedy@gmail.com" + }, + { + "name": "David Glasser", + "email": "glasser@davidglasser.net" + }, + { + "name": "Simon Lydell", + "email": "simon.lydell@gmail.com" + }, + { + "name": "Jmeas Smith", + "email": "jellyes2@gmail.com" + }, + { + "name": "Michael Z Goddard", + "email": "mzgoddard@gmail.com" + }, + { + "name": "azu", + "email": "azu@users.noreply.github.com" + }, + { + "name": "John Gozde", + "email": "john@gozde.ca" + }, + { + "name": "Adam Kirkton", + "email": "akirkton@truefitinnovation.com" + }, + { + "name": "Chris Montgomery", + "email": "christopher.montgomery@dowjones.com" + }, + { + "name": "J. Ryan Stinnett", + "email": "jryans@gmail.com" + }, + { + "name": "Jack Herrington", + "email": "jherrington@walmartlabs.com" + }, + { + "name": "Chris Truter", + "email": "jeffpalentine@gmail.com" + }, + { + "name": "Daniel Espeset", + "email": "daniel@danielespeset.com" + }, + { + "name": "Jamie Wong", + "email": "jamie.lf.wong@gmail.com" + }, + { + "name": "Eddy Bruël", + "email": "ejpbruel@mozilla.com" + }, + { + "name": "Hawken Rives", + "email": "hawkrives@gmail.com" + }, + { + "name": "Gilad Peleg", + "email": "giladp007@gmail.com" + }, + { + "name": "djchie", + "email": "djchie.dev@gmail.com" + }, + { + "name": "Gary Ye", + "email": "garysye@gmail.com" + }, + { + "name": "Nicolas Lalevée", + "email": "nicolas.lalevee@hibnet.org" + } + ], + "deprecated": false, + "description": "Generates and consumes source maps", + "devDependencies": { + "doctoc": "^0.15.0", + "webpack": "^1.12.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "source-map.js", + "lib/", + "dist/source-map.debug.js", + "dist/source-map.js", + "dist/source-map.min.js", + "dist/source-map.min.js.map" + ], + "homepage": "https://github.com/mozilla/source-map", + "license": "BSD-3-Clause", + "main": "./source-map.js", + "name": "source-map", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/mozilla/source-map.git" + }, + "scripts": { + "build": "webpack --color", + "test": "npm run build && node test/run-tests.js", + "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md" + }, + "typings": "source-map", + "version": "0.5.7" +} diff --git a/node_modules/source-map/source-map.js b/node_modules/source-map/source-map.js new file mode 100644 index 000000000..bc88fe820 --- /dev/null +++ b/node_modules/source-map/source-map.js @@ -0,0 +1,8 @@ +/* + * 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('./lib/source-map-generator').SourceMapGenerator; +exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer; +exports.SourceNode = require('./lib/source-node').SourceNode; diff --git a/node_modules/spdx-correct/LICENSE b/node_modules/spdx-correct/LICENSE new file mode 100644 index 000000000..4b54239b2 --- /dev/null +++ b/node_modules/spdx-correct/LICENSE @@ -0,0 +1,57 @@ +SPDX:Apache-2.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: + +(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices stating that You changed the files; and + +(c) 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 + +(d) 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. diff --git a/node_modules/spdx-correct/README.md b/node_modules/spdx-correct/README.md new file mode 100644 index 000000000..4289e5cd8 --- /dev/null +++ b/node_modules/spdx-correct/README.md @@ -0,0 +1,10 @@ +```javascript +var correct = require('spdx-correct'); +var assert = require('assert'); + +assert.equal(correct('mit'), 'MIT') + +assert.equal(correct('Apache 2'), 'Apache-2.0') + +assert(correct('No idea what license') === null) +``` diff --git a/node_modules/spdx-correct/index.js b/node_modules/spdx-correct/index.js new file mode 100644 index 000000000..75b7a21af --- /dev/null +++ b/node_modules/spdx-correct/index.js @@ -0,0 +1,237 @@ +var licenseIDs = require('spdx-license-ids'); + +function valid(string) { + return licenseIDs.indexOf(string) > -1; +} + +// Common transpositions of license identifier acronyms +var transpositions = [ + ['APGL', 'AGPL'], + ['Gpl', 'GPL'], + ['GLP', 'GPL'], + ['APL', 'Apache'], + ['ISD', 'ISC'], + ['GLP', 'GPL'], + ['IST', 'ISC'], + ['Claude', 'Clause'], + [' or later', '+'], + [' International', ''], + ['GNU', 'GPL'], + ['GUN', 'GPL'], + ['+', ''], + ['GNU GPL', 'GPL'], + ['GNU/GPL', 'GPL'], + ['GNU GLP', 'GPL'], + ['GNU General Public License', 'GPL'], + ['Gnu public license', 'GPL'], + ['GNU Public License', 'GPL'], + ['GNU GENERAL PUBLIC LICENSE', 'GPL'], + ['MTI', 'MIT'], + ['Mozilla Public License', 'MPL'], + ['WTH', 'WTF'], + ['-License', ''] +]; + +var TRANSPOSED = 0; +var CORRECT = 1; + +// Simple corrections to nearly valid identifiers. +var transforms = [ + // e.g. 'mit' + function(argument) { + return argument.toUpperCase(); + }, + // e.g. 'MIT ' + function(argument) { + return argument.trim(); + }, + // e.g. 'M.I.T.' + function(argument) { + return argument.replace(/\./g, ''); + }, + // e.g. 'Apache- 2.0' + function(argument) { + return argument.replace(/\s+/g, ''); + }, + // e.g. 'CC BY 4.0'' + function(argument) { + return argument.replace(/\s+/g, '-'); + }, + // e.g. 'LGPLv2.1' + function(argument) { + return argument.replace('v', '-'); + }, + // e.g. 'Apache 2.0' + function(argument) { + return argument.replace(/,?\s*(\d)/, '-$1'); + }, + // e.g. 'GPL 2' + function(argument) { + return argument.replace(/,?\s*(\d)/, '-$1.0'); + }, + // e.g. 'Apache Version 2.0' + function(argument) { + return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, '-$2'); + }, + // e.g. 'Apache Version 2' + function(argument) { + return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, '-$2.0'); + }, + // e.g. 'ZLIB' + function(argument) { + return argument[0].toUpperCase() + argument.slice(1); + }, + // e.g. 'MPL/2.0' + function(argument) { + return argument.replace('/', '-'); + }, + // e.g. 'Apache 2' + function(argument) { + return argument + .replace(/\s*V\s*(\d)/, '-$1') + .replace(/(\d)$/, '$1.0'); + }, + // e.g. 'GPL-2.0-' + function(argument) { + return argument.slice(0, argument.length - 1); + }, + // e.g. 'GPL2' + function(argument) { + return argument.replace(/(\d)$/, '-$1.0'); + }, + // e.g. 'BSD 3' + function(argument) { + return argument.replace(/(-| )?(\d)$/, '-$2-Clause'); + }, + // e.g. 'BSD clause 3' + function(argument) { + return argument.replace(/(-| )clause(-| )(\d)/, '-$3-Clause'); + }, + // e.g. 'BY-NC-4.0' + function(argument) { + return 'CC-' + argument; + }, + // e.g. 'BY-NC' + function(argument) { + return 'CC-' + argument + '-4.0'; + }, + // e.g. 'Attribution-NonCommercial' + function(argument) { + return argument + .replace('Attribution', 'BY') + .replace('NonCommercial', 'NC') + .replace('NoDerivatives', 'ND') + .replace(/ (\d)/, '-$1') + .replace(/ ?International/, ''); + }, + // e.g. 'Attribution-NonCommercial' + function(argument) { + return 'CC-' + + argument + .replace('Attribution', 'BY') + .replace('NonCommercial', 'NC') + .replace('NoDerivatives', 'ND') + .replace(/ (\d)/, '-$1') + .replace(/ ?International/, '') + + '-4.0'; + } +]; + +// If all else fails, guess that strings containing certain substrings +// meant to identify certain licenses. +var lastResorts = [ + ['UNLI', 'Unlicense'], + ['WTF', 'WTFPL'], + ['2 CLAUSE', 'BSD-2-Clause'], + ['2-CLAUSE', 'BSD-2-Clause'], + ['3 CLAUSE', 'BSD-3-Clause'], + ['3-CLAUSE', 'BSD-3-Clause'], + ['AFFERO', 'AGPL-3.0'], + ['AGPL', 'AGPL-3.0'], + ['APACHE', 'Apache-2.0'], + ['ARTISTIC', 'Artistic-2.0'], + ['Affero', 'AGPL-3.0'], + ['BEER', 'Beerware'], + ['BOOST', 'BSL-1.0'], + ['BSD', 'BSD-2-Clause'], + ['ECLIPSE', 'EPL-1.0'], + ['FUCK', 'WTFPL'], + ['GNU', 'GPL-3.0'], + ['LGPL', 'LGPL-3.0'], + ['GPL', 'GPL-3.0'], + ['MIT', 'MIT'], + ['MPL', 'MPL-2.0'], + ['X11', 'X11'], + ['ZLIB', 'Zlib'] +]; + +var SUBSTRING = 0; +var IDENTIFIER = 1; + +var validTransformation = function(identifier) { + for (var i = 0; i < transforms.length; i++) { + var transformed = transforms[i](identifier); + if (transformed !== identifier && valid(transformed)) { + return transformed; + } + } + return null; +}; + +var validLastResort = function(identifier) { + var upperCased = identifier.toUpperCase(); + for (var i = 0; i < lastResorts.length; i++) { + var lastResort = lastResorts[i]; + if (upperCased.indexOf(lastResort[SUBSTRING]) > -1) { + return lastResort[IDENTIFIER]; + } + } + return null; +}; + +var anyCorrection = function(identifier, check) { + for (var i = 0; i < transpositions.length; i++) { + var transposition = transpositions[i]; + var transposed = transposition[TRANSPOSED]; + if (identifier.indexOf(transposed) > -1) { + var corrected = identifier.replace( + transposed, + transposition[CORRECT] + ); + var checked = check(corrected); + if (checked !== null) { + return checked; + } + } + } + return null; +}; + +module.exports = function(identifier) { + identifier = identifier.replace(/\+$/, ''); + if (valid(identifier)) { + return identifier; + } + var transformed = validTransformation(identifier); + if (transformed !== null) { + return transformed; + } + transformed = anyCorrection(identifier, function(argument) { + if (valid(argument)) { + return argument; + } + return validTransformation(argument); + }); + if (transformed !== null) { + return transformed; + } + transformed = validLastResort(identifier); + if (transformed !== null) { + return transformed; + } + transformed = anyCorrection(identifier, validLastResort); + if (transformed !== null) { + return transformed; + } + return null; +}; diff --git a/node_modules/spdx-correct/package.json b/node_modules/spdx-correct/package.json new file mode 100644 index 000000000..c5f83caf8 --- /dev/null +++ b/node_modules/spdx-correct/package.json @@ -0,0 +1,63 @@ +{ + "_from": "spdx-correct@~1.0.0", + "_id": "spdx-correct@1.0.2", + "_inBundle": false, + "_integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "_location": "/spdx-correct", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "spdx-correct@~1.0.0", + "name": "spdx-correct", + "escapedName": "spdx-correct", + "rawSpec": "~1.0.0", + "saveSpec": null, + "fetchSpec": "~1.0.0" + }, + "_requiredBy": [ + "/validate-npm-package-license" + ], + "_resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "_shasum": "4b3073d933ff51f3912f03ac5519498a4150db40", + "_spec": "spdx-correct@~1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/validate-npm-package-license", + "author": { + "name": "Kyle E. Mitchell", + "email": "kyle@kemitchell.com", + "url": "https://kemitchell.com" + }, + "bugs": { + "url": "https://github.com/kemitchell/spdx-correct.js/issues" + }, + "bundleDependencies": false, + "dependencies": { + "spdx-license-ids": "^1.0.2" + }, + "deprecated": false, + "description": "correct invalid SPDX identifiers", + "devDependencies": { + "defence-cli": "^1.0.1", + "replace-require-self": "^1.0.0", + "spdx-expression-parse": "^1.0.0", + "tape": "~4.0.0" + }, + "homepage": "https://github.com/kemitchell/spdx-correct.js#readme", + "keywords": [ + "SPDX", + "law", + "legal", + "license", + "metadata" + ], + "license": "Apache-2.0", + "name": "spdx-correct", + "repository": { + "type": "git", + "url": "git+https://github.com/kemitchell/spdx-correct.js.git" + }, + "scripts": { + "test": "defence README.md | replace-require-self | node && tape *.test.js" + }, + "version": "1.0.2" +} diff --git a/node_modules/spdx-expression-parse/AUTHORS b/node_modules/spdx-expression-parse/AUTHORS new file mode 100644 index 000000000..155f0f66c --- /dev/null +++ b/node_modules/spdx-expression-parse/AUTHORS @@ -0,0 +1,3 @@ +C. Scott Ananian (http://cscott.net) +Kyle E. Mitchell (https://kemitchell.com) +Shinnosuke Watanabe diff --git a/node_modules/spdx-expression-parse/LICENSE b/node_modules/spdx-expression-parse/LICENSE new file mode 100644 index 000000000..831618eab --- /dev/null +++ b/node_modules/spdx-expression-parse/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2015 Kyle E. Mitchell & other authors listed in AUTHORS + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/spdx-expression-parse/README.md b/node_modules/spdx-expression-parse/README.md new file mode 100644 index 000000000..9928cdccf --- /dev/null +++ b/node_modules/spdx-expression-parse/README.md @@ -0,0 +1,83 @@ +This package parses SPDX license expression strings describing license terms, like [package.json license strings](https://docs.npmjs.com/files/package.json#license), into consistently structured ECMAScript objects. The npm command-line interface depends on this package, as do many automatic license-audit tools. + +In a nutshell: + +```javascript +var parse = require('spdx-expression-parse') +var assert = require('assert') + +assert.deepEqual( + // Licensed under the terms of the Two-Clause BSD License. + parse('BSD-2-Clause'), + {license: 'BSD-2-Clause'} +) + +assert.throws(function () { + // An invalid SPDX license expression. + // Should be `Apache-2.0`. + parse('Apache 2') +}) + +assert.deepEqual( + // Dual licensed under LGPL 2.1 or a combination of the Three-Clause + // BSD License and the MIT License. + parse('(LGPL-2.1 OR BSD-3-Clause AND MIT)'), + { + left: {license: 'LGPL-2.1'}, + conjunction: 'or', + right: { + left: {license: 'BSD-3-Clause'}, + conjunction: 'and', + right: {license: 'MIT'} + } + } +) +``` + +The syntax comes from the [Software Package Data eXchange (SPDX)](https://spdx.org/), a standard from the [Linux Foundation](https://www.linuxfoundation.org) for shareable data about software package license terms. SPDX aims to make sharing and auditing license data easy, especially for users of open-source software. + +The bulk of the SPDX standard describes syntax and semantics of XML metadata files. This package implements two lightweight, plain-text components of that larger standard: + +1. The [license list](https://spdx.org/licenses), a mapping from specific string identifiers, like `Apache-2.0`, to standard form license texts and bolt-on license exceptions. The [spdx-license-ids](https://www.npmjs.com/package/spdx-exceptions) and [spdx-exceptions](https://www.npmjs.com/package/spdx-license-ids) packages implement the license list. They are development dependencies of this package. + + Any license identifier from the license list is a valid license expression: + + ```javascript + require('spdx-license-ids').forEach(function (id) { + assert.deepEqual(parse(id), {license: id}) + }) + ``` + + So is any license identifier `WITH` a standardized license exception: + + ```javascript + require('spdx-license-ids').forEach(function (id) { + require('spdx-exceptions').forEach(function (e) { + assert.deepEqual( + parse(id + ' WITH ' + e), + {license: id, exception: e} + ) + }) + }) + ``` + +2. The license expression language, for describing simple and complex license terms, like `MIT` for MIT-licensed and `(GPL-2.0 OR Apache-2.0)` for dual-licensing under GPL 2.0 and Apache 2.0. This package implements the license expression language. + + ```javascript + assert.deepEqual( + // Licensed under a combination of the MIT License and a combination + // of LGPL 2.1 (or a later version) and the Three-Clause BSD License. + parse('(MIT AND (LGPL-2.1+ AND BSD-3-Clause))'), + { + left: {license: 'MIT'}, + conjunction: 'and', + right: { + left: {license: 'LGPL-2.1', plus: true}, + conjunction: 'and', + right: {license: 'BSD-3-Clause'} + } + } + ) + ``` + +The Linux Foundation and its contributors license the SPDX standard under the terms of [the Creative Commons Attribution License 3.0 Unported (SPDX: "CC-BY-3.0")](http://spdx.org/licenses/CC-BY-3.0). "SPDX" is a United States federally registered trademark of the Linux Foundation. The authors of this package license their work under the terms of the MIT License. diff --git a/node_modules/spdx-expression-parse/index.js b/node_modules/spdx-expression-parse/index.js new file mode 100644 index 000000000..56a9b50c6 --- /dev/null +++ b/node_modules/spdx-expression-parse/index.js @@ -0,0 +1,5 @@ +var parser = require('./parser').parser + +module.exports = function (argument) { + return parser.parse(argument) +} diff --git a/node_modules/spdx-expression-parse/package.json b/node_modules/spdx-expression-parse/package.json new file mode 100644 index 000000000..548487d56 --- /dev/null +++ b/node_modules/spdx-expression-parse/package.json @@ -0,0 +1,89 @@ +{ + "_from": "spdx-expression-parse@~1.0.0", + "_id": "spdx-expression-parse@1.0.4", + "_inBundle": false, + "_integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "_location": "/spdx-expression-parse", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "spdx-expression-parse@~1.0.0", + "name": "spdx-expression-parse", + "escapedName": "spdx-expression-parse", + "rawSpec": "~1.0.0", + "saveSpec": null, + "fetchSpec": "~1.0.0" + }, + "_requiredBy": [ + "/validate-npm-package-license" + ], + "_resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "_shasum": "9bdf2f20e1f40ed447fbe273266191fced51626c", + "_spec": "spdx-expression-parse@~1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/validate-npm-package-license", + "author": { + "name": "Kyle E. Mitchell", + "email": "kyle@kemitchell.com", + "url": "http://kemitchell.com" + }, + "bugs": { + "url": "https://github.com/kemitchell/spdx-expression-parse.js/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "C. Scott Ananian", + "email": "cscott@cscott.net", + "url": "http://cscott.net" + }, + { + "name": "Kyle E. Mitchell", + "email": "kyle@kemitchell.com", + "url": "https://kemitchell.com" + }, + { + "name": "Shinnosuke Watanabe", + "email": "snnskwtnb@gmail.com" + } + ], + "deprecated": false, + "description": "parse SPDX license expressions", + "devDependencies": { + "defence-cli": "^1.0.1", + "jison": "^0.4.15", + "replace-require-self": "^1.0.0", + "spdx-exceptions": "^1.0.4", + "spdx-license-ids": "^1.0.0", + "standard": "^8.0.0" + }, + "files": [ + "AUTHORS", + "index.js", + "parser.js" + ], + "homepage": "https://github.com/kemitchell/spdx-expression-parse.js#readme", + "keywords": [ + "SPDX", + "law", + "legal", + "license", + "metadata", + "package", + "package.json", + "standards" + ], + "license": "(MIT AND CC-BY-3.0)", + "name": "spdx-expression-parse", + "repository": { + "type": "git", + "url": "git+https://github.com/kemitchell/spdx-expression-parse.js.git" + }, + "scripts": { + "lint": "standard", + "prepublish": "node generate-parser.js > parser.js", + "pretest": "npm run prepublish", + "test": "defence -i javascript README.md | replace-require-self | node" + }, + "version": "1.0.4" +} diff --git a/node_modules/spdx-expression-parse/parser.js b/node_modules/spdx-expression-parse/parser.js new file mode 100644 index 000000000..a5e2edbaa --- /dev/null +++ b/node_modules/spdx-expression-parse/parser.js @@ -0,0 +1,1357 @@ +/* parser generated by jison 0.4.17 */ +/* + Returns a Parser object of the following structure: + + Parser: { + yy: {} + } + + Parser.prototype: { + yy: {}, + trace: function(), + symbols_: {associative list: name ==> number}, + terminals_: {associative list: number ==> name}, + productions_: [...], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), + table: [...], + defaultActions: {...}, + parseError: function(str, hash), + parse: function(input), + + lexer: { + EOF: 1, + parseError: function(str, hash), + setInput: function(input), + input: function(), + unput: function(str), + more: function(), + less: function(n), + pastInput: function(), + upcomingInput: function(), + showPosition: function(), + test_match: function(regex_match_array, rule_index), + next: function(), + lex: function(), + begin: function(condition), + popState: function(), + _currentRules: function(), + topState: function(), + pushState: function(condition), + + options: { + ranges: boolean (optional: true ==> token location info will include a .range[] member) + flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) + backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) + }, + + performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), + rules: [...], + conditions: {associative list: name ==> set}, + } + } + + + token location info (@$, _$, etc.): { + first_line: n, + last_line: n, + first_column: n, + last_column: n, + range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) + } + + + the parseError function receives a 'hash' object with these members for lexer and parser errors: { + text: (matched text) + token: (the produced terminal token, if any) + line: (yylineno) + } + while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { + loc: (yylloc) + expected: (string describing the set of expected tokens) + recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) + } +*/ +var spdxparse = (function(){ +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,5],$V1=[1,6],$V2=[1,7],$V3=[1,4],$V4=[1,9],$V5=[1,10],$V6=[5,14,15,17],$V7=[5,12,14,15,17]; +var parser = {trace: function trace() { }, +yy: {}, +symbols_: {"error":2,"start":3,"expression":4,"EOS":5,"simpleExpression":6,"LICENSE":7,"PLUS":8,"LICENSEREF":9,"DOCUMENTREF":10,"COLON":11,"WITH":12,"EXCEPTION":13,"AND":14,"OR":15,"OPEN":16,"CLOSE":17,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOS",7:"LICENSE",8:"PLUS",9:"LICENSEREF",10:"DOCUMENTREF",11:"COLON",12:"WITH",13:"EXCEPTION",14:"AND",15:"OR",16:"OPEN",17:"CLOSE"}, +productions_: [0,[3,2],[6,1],[6,2],[6,1],[6,3],[4,1],[4,3],[4,3],[4,3],[4,3]], +performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { +/* this == yyval */ + +var $0 = $$.length - 1; +switch (yystate) { +case 1: +return this.$ = $$[$0-1] +break; +case 2: case 4: case 5: +this.$ = {license: yytext} +break; +case 3: +this.$ = {license: $$[$0-1], plus: true} +break; +case 6: +this.$ = $$[$0] +break; +case 7: +this.$ = {exception: $$[$0]} +this.$.license = $$[$0-2].license +if ($$[$0-2].hasOwnProperty('plus')) { + this.$.plus = $$[$0-2].plus +} +break; +case 8: +this.$ = {conjunction: 'and', left: $$[$0-2], right: $$[$0]} +break; +case 9: +this.$ = {conjunction: 'or', left: $$[$0-2], right: $$[$0]} +break; +case 10: +this.$ = $$[$0-1] +break; +} +}, +table: [{3:1,4:2,6:3,7:$V0,9:$V1,10:$V2,16:$V3},{1:[3]},{5:[1,8],14:$V4,15:$V5},o($V6,[2,6],{12:[1,11]}),{4:12,6:3,7:$V0,9:$V1,10:$V2,16:$V3},o($V7,[2,2],{8:[1,13]}),o($V7,[2,4]),{11:[1,14]},{1:[2,1]},{4:15,6:3,7:$V0,9:$V1,10:$V2,16:$V3},{4:16,6:3,7:$V0,9:$V1,10:$V2,16:$V3},{13:[1,17]},{14:$V4,15:$V5,17:[1,18]},o($V7,[2,3]),{9:[1,19]},o($V6,[2,8]),o([5,15,17],[2,9],{14:$V4}),o($V6,[2,7]),o($V6,[2,10]),o($V7,[2,5])], +defaultActions: {8:[2,1]}, +parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + function _parseError (msg, hash) { + this.message = msg; + this.hash = hash; + } + _parseError.prototype = Error; + + throw new _parseError(str, hash); + } +}, +parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer; + sharedState.yy.parser = this; + if (typeof lexer.yylloc == 'undefined') { + lexer.yylloc = {}; + } + var yyloc = lexer.yylloc; + lstack.push(yyloc); + var ranges = lexer.options && lexer.options.ranges; + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function popStack(n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + _token_stack: + var lex = function () { + var token; + token = lexer.lex() || EOF; + 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 = ''; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\''); + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + } + this.parseError(errStr, { + text: lexer.match, + token: this.terminals_[symbol] || symbol, + line: 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(lexer.yytext); + lstack.push(lexer.yylloc); + stack.push(action[1]); + symbol = null; + if (!preErrorSymbol) { + yyleng = lexer.yyleng; + yytext = lexer.yytext; + yylineno = lexer.yylineno; + yyloc = 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.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + 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; +}}; +/* generated by jison-lex 0.3.4 */ +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); + } + }, + +// resets the lexer, sets new input +setInput:function (input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = 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; + }, + +// consumes and returns one char from the input +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; + }, + +// unshifts one char (or a string) into the input +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); + //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]; + } + this.yyleng = this.yytext.length; + return this; + }, + +// When called from action, caches matched text and appends it on next action +more:function () { + this._more = true; + return this; + }, + +// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +reject:function () { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + + } + return this; + }, + +// retain first n characters of the match +less:function (n) { + this.unput(this.match.slice(n)); + }, + +// displays already matched input, i.e. for error messages +pastInput:function () { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); + }, + +// displays upcoming input, i.e. for error messages +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, ""); + }, + +// displays the character position where the lexing error occurred, i.e. for error messages +showPosition:function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + +// test the lexed token: return FALSE when not a match, otherwise return token +test_match:function (match, indexed_rule) { + var token, + lines, + backup; + + if (this.options.backtrack_lexer) { + // save context + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + + 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._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + // recover context + for (var k in backup) { + this[k] = backup[k]; + } + return false; // rule action called reject() implying the next rule should be tested instead. + } + return false; + }, + +// return next match in input +next:function () { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + + var token, + match, + tempMatch, + index; + 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.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; // rule action called reject() implying a rule MISmatch. + } else { + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + 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 + }); + } + }, + +// return next match that has a token +lex:function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + +// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +begin:function begin(condition) { + this.conditionStack.push(condition); + }, + +// pop the previously active lexer condition state off the condition stack +popState:function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + +// produce the lexer rule set which is active for the currently active lexer condition state +_currentRules:function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + +// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +topState:function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + +// alias for begin(condition) +pushState:function pushState(condition) { + this.begin(condition); + }, + +// return the number of states currently on the stack +stateStackSize:function stateStackSize() { + return this.conditionStack.length; + }, +options: {}, +performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { +var YYSTATE=YY_START; +switch($avoiding_name_collisions) { +case 0:return 5 +break; +case 1:/* skip whitespace */ +break; +case 2:return 8 +break; +case 3:return 16 +break; +case 4:return 17 +break; +case 5:return 11 +break; +case 6:return 10 +break; +case 7:return 9 +break; +case 8:return 14 +break; +case 9:return 15 +break; +case 10:return 12 +break; +case 11:return 7 +break; +case 12:return 7 +break; +case 13:return 7 +break; +case 14:return 7 +break; +case 15:return 7 +break; +case 16:return 7 +break; +case 17:return 7 +break; +case 18:return 7 +break; +case 19:return 7 +break; +case 20:return 7 +break; +case 21:return 7 +break; +case 22:return 7 +break; +case 23:return 7 +break; +case 24:return 13 +break; +case 25:return 13 +break; +case 26:return 13 +break; +case 27:return 13 +break; +case 28:return 13 +break; +case 29:return 13 +break; +case 30:return 13 +break; +case 31:return 13 +break; +case 32:return 7 +break; +case 33:return 13 +break; +case 34:return 7 +break; +case 35:return 13 +break; +case 36:return 7 +break; +case 37:return 13 +break; +case 38:return 13 +break; +case 39:return 7 +break; +case 40:return 13 +break; +case 41:return 13 +break; +case 42:return 13 +break; +case 43:return 13 +break; +case 44:return 13 +break; +case 45:return 7 +break; +case 46:return 13 +break; +case 47:return 7 +break; +case 48:return 7 +break; +case 49:return 7 +break; +case 50:return 7 +break; +case 51:return 7 +break; +case 52:return 7 +break; +case 53:return 7 +break; +case 54:return 7 +break; +case 55:return 7 +break; +case 56:return 7 +break; +case 57:return 7 +break; +case 58:return 7 +break; +case 59:return 7 +break; +case 60:return 7 +break; +case 61:return 7 +break; +case 62:return 7 +break; +case 63:return 13 +break; +case 64:return 7 +break; +case 65:return 7 +break; +case 66:return 13 +break; +case 67:return 7 +break; +case 68:return 7 +break; +case 69:return 7 +break; +case 70:return 7 +break; +case 71:return 7 +break; +case 72:return 7 +break; +case 73:return 13 +break; +case 74:return 7 +break; +case 75:return 13 +break; +case 76:return 7 +break; +case 77:return 7 +break; +case 78:return 7 +break; +case 79:return 7 +break; +case 80:return 7 +break; +case 81:return 7 +break; +case 82:return 7 +break; +case 83:return 7 +break; +case 84:return 7 +break; +case 85:return 7 +break; +case 86:return 7 +break; +case 87:return 7 +break; +case 88:return 7 +break; +case 89:return 7 +break; +case 90:return 7 +break; +case 91:return 7 +break; +case 92:return 7 +break; +case 93:return 7 +break; +case 94:return 7 +break; +case 95:return 7 +break; +case 96:return 7 +break; +case 97:return 7 +break; +case 98:return 7 +break; +case 99:return 7 +break; +case 100:return 7 +break; +case 101:return 7 +break; +case 102:return 7 +break; +case 103:return 7 +break; +case 104:return 7 +break; +case 105:return 7 +break; +case 106:return 7 +break; +case 107:return 7 +break; +case 108:return 7 +break; +case 109:return 7 +break; +case 110:return 7 +break; +case 111:return 7 +break; +case 112:return 7 +break; +case 113:return 7 +break; +case 114:return 7 +break; +case 115:return 7 +break; +case 116:return 7 +break; +case 117:return 7 +break; +case 118:return 7 +break; +case 119:return 7 +break; +case 120:return 7 +break; +case 121:return 7 +break; +case 122:return 7 +break; +case 123:return 7 +break; +case 124:return 7 +break; +case 125:return 7 +break; +case 126:return 7 +break; +case 127:return 7 +break; +case 128:return 7 +break; +case 129:return 7 +break; +case 130:return 7 +break; +case 131:return 7 +break; +case 132:return 7 +break; +case 133:return 7 +break; +case 134:return 7 +break; +case 135:return 7 +break; +case 136:return 7 +break; +case 137:return 7 +break; +case 138:return 7 +break; +case 139:return 7 +break; +case 140:return 7 +break; +case 141:return 7 +break; +case 142:return 7 +break; +case 143:return 7 +break; +case 144:return 7 +break; +case 145:return 7 +break; +case 146:return 7 +break; +case 147:return 7 +break; +case 148:return 7 +break; +case 149:return 7 +break; +case 150:return 7 +break; +case 151:return 7 +break; +case 152:return 7 +break; +case 153:return 7 +break; +case 154:return 7 +break; +case 155:return 7 +break; +case 156:return 7 +break; +case 157:return 7 +break; +case 158:return 7 +break; +case 159:return 7 +break; +case 160:return 7 +break; +case 161:return 7 +break; +case 162:return 7 +break; +case 163:return 7 +break; +case 164:return 7 +break; +case 165:return 7 +break; +case 166:return 7 +break; +case 167:return 7 +break; +case 168:return 7 +break; +case 169:return 7 +break; +case 170:return 7 +break; +case 171:return 7 +break; +case 172:return 7 +break; +case 173:return 7 +break; +case 174:return 7 +break; +case 175:return 7 +break; +case 176:return 7 +break; +case 177:return 7 +break; +case 178:return 7 +break; +case 179:return 7 +break; +case 180:return 7 +break; +case 181:return 7 +break; +case 182:return 7 +break; +case 183:return 7 +break; +case 184:return 7 +break; +case 185:return 7 +break; +case 186:return 7 +break; +case 187:return 7 +break; +case 188:return 7 +break; +case 189:return 7 +break; +case 190:return 7 +break; +case 191:return 7 +break; +case 192:return 7 +break; +case 193:return 7 +break; +case 194:return 7 +break; +case 195:return 7 +break; +case 196:return 7 +break; +case 197:return 7 +break; +case 198:return 7 +break; +case 199:return 7 +break; +case 200:return 7 +break; +case 201:return 7 +break; +case 202:return 7 +break; +case 203:return 7 +break; +case 204:return 7 +break; +case 205:return 7 +break; +case 206:return 7 +break; +case 207:return 7 +break; +case 208:return 7 +break; +case 209:return 7 +break; +case 210:return 7 +break; +case 211:return 7 +break; +case 212:return 7 +break; +case 213:return 7 +break; +case 214:return 7 +break; +case 215:return 7 +break; +case 216:return 7 +break; +case 217:return 7 +break; +case 218:return 7 +break; +case 219:return 7 +break; +case 220:return 7 +break; +case 221:return 7 +break; +case 222:return 7 +break; +case 223:return 7 +break; +case 224:return 7 +break; +case 225:return 7 +break; +case 226:return 7 +break; +case 227:return 7 +break; +case 228:return 7 +break; +case 229:return 7 +break; +case 230:return 7 +break; +case 231:return 7 +break; +case 232:return 7 +break; +case 233:return 7 +break; +case 234:return 7 +break; +case 235:return 7 +break; +case 236:return 7 +break; +case 237:return 7 +break; +case 238:return 7 +break; +case 239:return 7 +break; +case 240:return 7 +break; +case 241:return 7 +break; +case 242:return 7 +break; +case 243:return 7 +break; +case 244:return 7 +break; +case 245:return 7 +break; +case 246:return 7 +break; +case 247:return 7 +break; +case 248:return 7 +break; +case 249:return 7 +break; +case 250:return 7 +break; +case 251:return 7 +break; +case 252:return 7 +break; +case 253:return 7 +break; +case 254:return 7 +break; +case 255:return 7 +break; +case 256:return 7 +break; +case 257:return 7 +break; +case 258:return 7 +break; +case 259:return 7 +break; +case 260:return 7 +break; +case 261:return 7 +break; +case 262:return 7 +break; +case 263:return 7 +break; +case 264:return 7 +break; +case 265:return 7 +break; +case 266:return 7 +break; +case 267:return 7 +break; +case 268:return 7 +break; +case 269:return 7 +break; +case 270:return 7 +break; +case 271:return 7 +break; +case 272:return 7 +break; +case 273:return 7 +break; +case 274:return 7 +break; +case 275:return 7 +break; +case 276:return 7 +break; +case 277:return 7 +break; +case 278:return 7 +break; +case 279:return 7 +break; +case 280:return 7 +break; +case 281:return 7 +break; +case 282:return 7 +break; +case 283:return 7 +break; +case 284:return 7 +break; +case 285:return 7 +break; +case 286:return 7 +break; +case 287:return 7 +break; +case 288:return 7 +break; +case 289:return 7 +break; +case 290:return 7 +break; +case 291:return 7 +break; +case 292:return 7 +break; +case 293:return 7 +break; +case 294:return 7 +break; +case 295:return 7 +break; +case 296:return 7 +break; +case 297:return 7 +break; +case 298:return 7 +break; +case 299:return 7 +break; +case 300:return 7 +break; +case 301:return 7 +break; +case 302:return 7 +break; +case 303:return 7 +break; +case 304:return 7 +break; +case 305:return 7 +break; +case 306:return 7 +break; +case 307:return 7 +break; +case 308:return 7 +break; +case 309:return 7 +break; +case 310:return 7 +break; +case 311:return 7 +break; +case 312:return 7 +break; +case 313:return 7 +break; +case 314:return 7 +break; +case 315:return 7 +break; +case 316:return 7 +break; +case 317:return 7 +break; +case 318:return 7 +break; +case 319:return 7 +break; +case 320:return 7 +break; +case 321:return 7 +break; +case 322:return 7 +break; +case 323:return 7 +break; +case 324:return 7 +break; +case 325:return 7 +break; +case 326:return 7 +break; +case 327:return 7 +break; +case 328:return 7 +break; +case 329:return 7 +break; +case 330:return 7 +break; +case 331:return 7 +break; +case 332:return 7 +break; +case 333:return 7 +break; +case 334:return 7 +break; +case 335:return 7 +break; +case 336:return 7 +break; +case 337:return 7 +break; +case 338:return 7 +break; +case 339:return 7 +break; +case 340:return 7 +break; +case 341:return 7 +break; +case 342:return 7 +break; +case 343:return 7 +break; +case 344:return 7 +break; +case 345:return 7 +break; +case 346:return 7 +break; +case 347:return 7 +break; +case 348:return 7 +break; +case 349:return 7 +break; +case 350:return 7 +break; +case 351:return 7 +break; +case 352:return 7 +break; +case 353:return 7 +break; +case 354:return 7 +break; +case 355:return 7 +break; +case 356:return 7 +break; +case 357:return 7 +break; +case 358:return 7 +break; +case 359:return 7 +break; +case 360:return 7 +break; +case 361:return 7 +break; +case 362:return 7 +break; +case 363:return 7 +break; +case 364:return 7 +break; +} +}, +rules: [/^(?:$)/,/^(?:\s+)/,/^(?:\+)/,/^(?:\()/,/^(?:\))/,/^(?::)/,/^(?:DocumentRef-([0-9A-Za-z-+.]+))/,/^(?:LicenseRef-([0-9A-Za-z-+.]+))/,/^(?:AND)/,/^(?:OR)/,/^(?:WITH)/,/^(?:BSD-3-Clause-No-Nuclear-License-2014)/,/^(?:BSD-3-Clause-No-Nuclear-Warranty)/,/^(?:GPL-2\.0-with-classpath-exception)/,/^(?:GPL-3\.0-with-autoconf-exception)/,/^(?:GPL-2\.0-with-autoconf-exception)/,/^(?:BSD-3-Clause-No-Nuclear-License)/,/^(?:MPL-2\.0-no-copyleft-exception)/,/^(?:GPL-2\.0-with-bison-exception)/,/^(?:GPL-2\.0-with-font-exception)/,/^(?:GPL-2\.0-with-GCC-exception)/,/^(?:CNRI-Python-GPL-Compatible)/,/^(?:GPL-3\.0-with-GCC-exception)/,/^(?:BSD-3-Clause-Attribution)/,/^(?:Classpath-exception-2\.0)/,/^(?:WxWindows-exception-3\.1)/,/^(?:freertos-exception-2\.0)/,/^(?:Autoconf-exception-3\.0)/,/^(?:i2p-gpl-java-exception)/,/^(?:gnu-javamail-exception)/,/^(?:Nokia-Qt-exception-1\.1)/,/^(?:Autoconf-exception-2\.0)/,/^(?:BSD-2-Clause-FreeBSD)/,/^(?:u-boot-exception-2\.0)/,/^(?:zlib-acknowledgement)/,/^(?:Bison-exception-2\.2)/,/^(?:BSD-2-Clause-NetBSD)/,/^(?:CLISP-exception-2\.0)/,/^(?:eCos-exception-2\.0)/,/^(?:BSD-3-Clause-Clear)/,/^(?:Font-exception-2\.0)/,/^(?:FLTK-exception-2\.0)/,/^(?:GCC-exception-2\.0)/,/^(?:Qwt-exception-1\.0)/,/^(?:Libtool-exception)/,/^(?:BSD-3-Clause-LBNL)/,/^(?:GCC-exception-3\.1)/,/^(?:Artistic-1\.0-Perl)/,/^(?:Artistic-1\.0-cl8)/,/^(?:CC-BY-NC-SA-2\.5)/,/^(?:MIT-advertising)/,/^(?:BSD-Source-Code)/,/^(?:CC-BY-NC-SA-4\.0)/,/^(?:LiLiQ-Rplus-1\.1)/,/^(?:CC-BY-NC-SA-3\.0)/,/^(?:BSD-4-Clause-UC)/,/^(?:CC-BY-NC-SA-2\.0)/,/^(?:CC-BY-NC-SA-1\.0)/,/^(?:CC-BY-NC-ND-4\.0)/,/^(?:CC-BY-NC-ND-3\.0)/,/^(?:CC-BY-NC-ND-2\.5)/,/^(?:CC-BY-NC-ND-2\.0)/,/^(?:CC-BY-NC-ND-1\.0)/,/^(?:LZMA-exception)/,/^(?:BitTorrent-1\.1)/,/^(?:CrystalStacker)/,/^(?:FLTK-exception)/,/^(?:SugarCRM-1\.1\.3)/,/^(?:BSD-Protection)/,/^(?:BitTorrent-1\.0)/,/^(?:HaskellReport)/,/^(?:Interbase-1\.0)/,/^(?:StandardML-NJ)/,/^(?:mif-exception)/,/^(?:Frameworx-1\.0)/,/^(?:389-exception)/,/^(?:CC-BY-NC-2\.0)/,/^(?:CC-BY-NC-2\.5)/,/^(?:CC-BY-NC-3\.0)/,/^(?:CC-BY-NC-4\.0)/,/^(?:W3C-19980720)/,/^(?:CC-BY-SA-1\.0)/,/^(?:CC-BY-SA-2\.0)/,/^(?:CC-BY-SA-2\.5)/,/^(?:CC-BY-ND-2\.0)/,/^(?:CC-BY-SA-4\.0)/,/^(?:CC-BY-SA-3\.0)/,/^(?:Artistic-1\.0)/,/^(?:Artistic-2\.0)/,/^(?:CC-BY-ND-2\.5)/,/^(?:CC-BY-ND-3\.0)/,/^(?:CC-BY-ND-4\.0)/,/^(?:CC-BY-ND-1\.0)/,/^(?:BSD-4-Clause)/,/^(?:BSD-3-Clause)/,/^(?:BSD-2-Clause)/,/^(?:CC-BY-NC-1\.0)/,/^(?:bzip2-1\.0\.6)/,/^(?:Unicode-TOU)/,/^(?:CNRI-Jython)/,/^(?:ImageMagick)/,/^(?:Adobe-Glyph)/,/^(?:CUA-OPL-1\.0)/,/^(?:OLDAP-2\.2\.2)/,/^(?:LiLiQ-R-1\.1)/,/^(?:bzip2-1\.0\.5)/,/^(?:LiLiQ-P-1\.1)/,/^(?:OLDAP-2\.0\.1)/,/^(?:OLDAP-2\.2\.1)/,/^(?:CNRI-Python)/,/^(?:XFree86-1\.1)/,/^(?:OSET-PL-2\.1)/,/^(?:Apache-2\.0)/,/^(?:Watcom-1\.0)/,/^(?:PostgreSQL)/,/^(?:Python-2\.0)/,/^(?:RHeCos-1\.1)/,/^(?:EUDatagrid)/,/^(?:Spencer-99)/,/^(?:Intel-ACPI)/,/^(?:CECILL-1\.0)/,/^(?:CECILL-1\.1)/,/^(?:JasPer-2\.0)/,/^(?:CECILL-2\.0)/,/^(?:CECILL-2\.1)/,/^(?:gSOAP-1\.3b)/,/^(?:Spencer-94)/,/^(?:Apache-1\.1)/,/^(?:Spencer-86)/,/^(?:Apache-1\.0)/,/^(?:ClArtistic)/,/^(?:TORQUE-1\.1)/,/^(?:CATOSL-1\.1)/,/^(?:Adobe-2006)/,/^(?:Zimbra-1\.4)/,/^(?:Zimbra-1\.3)/,/^(?:Condor-1\.1)/,/^(?:CC-BY-3\.0)/,/^(?:CC-BY-2\.5)/,/^(?:OLDAP-2\.4)/,/^(?:SGI-B-1\.1)/,/^(?:SISSL-1\.2)/,/^(?:SGI-B-1\.0)/,/^(?:OLDAP-2\.3)/,/^(?:CC-BY-4\.0)/,/^(?:Crossword)/,/^(?:SimPL-2\.0)/,/^(?:OLDAP-2\.2)/,/^(?:OLDAP-2\.1)/,/^(?:ErlPL-1\.1)/,/^(?:LPPL-1\.3a)/,/^(?:LPPL-1\.3c)/,/^(?:OLDAP-2\.0)/,/^(?:Leptonica)/,/^(?:CPOL-1\.02)/,/^(?:OLDAP-1\.4)/,/^(?:OLDAP-1\.3)/,/^(?:CC-BY-2\.0)/,/^(?:Unlicense)/,/^(?:OLDAP-2\.8)/,/^(?:OLDAP-1\.2)/,/^(?:MakeIndex)/,/^(?:OLDAP-2\.7)/,/^(?:OLDAP-1\.1)/,/^(?:Sleepycat)/,/^(?:D-FSL-1\.0)/,/^(?:CC-BY-1\.0)/,/^(?:OLDAP-2\.6)/,/^(?:WXwindows)/,/^(?:NPOSL-3\.0)/,/^(?:FreeImage)/,/^(?:SGI-B-2\.0)/,/^(?:OLDAP-2\.5)/,/^(?:Beerware)/,/^(?:Newsletr)/,/^(?:NBPL-1\.0)/,/^(?:NASA-1\.3)/,/^(?:NLOD-1\.0)/,/^(?:AGPL-1\.0)/,/^(?:OCLC-2\.0)/,/^(?:ODbL-1\.0)/,/^(?:PDDL-1\.0)/,/^(?:Motosoto)/,/^(?:Afmparse)/,/^(?:ANTLR-PD)/,/^(?:LPL-1\.02)/,/^(?:Abstyles)/,/^(?:eCos-2\.0)/,/^(?:APSL-1\.0)/,/^(?:LPPL-1\.2)/,/^(?:LPPL-1\.1)/,/^(?:LPPL-1\.0)/,/^(?:APSL-1\.1)/,/^(?:APSL-2\.0)/,/^(?:Info-ZIP)/,/^(?:Zend-2\.0)/,/^(?:IBM-pibs)/,/^(?:LGPL-2\.0)/,/^(?:LGPL-3\.0)/,/^(?:LGPL-2\.1)/,/^(?:GFDL-1\.3)/,/^(?:PHP-3\.01)/,/^(?:GFDL-1\.2)/,/^(?:GFDL-1\.1)/,/^(?:AGPL-3\.0)/,/^(?:Giftware)/,/^(?:EUPL-1\.1)/,/^(?:RPSL-1\.0)/,/^(?:EUPL-1\.0)/,/^(?:MIT-enna)/,/^(?:CECILL-B)/,/^(?:diffmark)/,/^(?:CECILL-C)/,/^(?:CDDL-1\.0)/,/^(?:Sendmail)/,/^(?:CDDL-1\.1)/,/^(?:CPAL-1\.0)/,/^(?:APSL-1\.2)/,/^(?:NPL-1\.1)/,/^(?:AFL-1\.2)/,/^(?:Caldera)/,/^(?:AFL-2\.0)/,/^(?:FSFULLR)/,/^(?:AFL-2\.1)/,/^(?:VSL-1\.0)/,/^(?:VOSTROM)/,/^(?:UPL-1\.0)/,/^(?:Dotseqn)/,/^(?:CPL-1\.0)/,/^(?:dvipdfm)/,/^(?:EPL-1\.0)/,/^(?:OCCT-PL)/,/^(?:ECL-1\.0)/,/^(?:Latex2e)/,/^(?:ECL-2\.0)/,/^(?:GPL-1\.0)/,/^(?:GPL-2\.0)/,/^(?:GPL-3\.0)/,/^(?:AFL-3\.0)/,/^(?:LAL-1\.2)/,/^(?:LAL-1\.3)/,/^(?:EFL-1\.0)/,/^(?:EFL-2\.0)/,/^(?:gnuplot)/,/^(?:Aladdin)/,/^(?:LPL-1\.0)/,/^(?:libtiff)/,/^(?:Entessa)/,/^(?:AMDPLPA)/,/^(?:IPL-1\.0)/,/^(?:OPL-1\.0)/,/^(?:OSL-1\.0)/,/^(?:OSL-1\.1)/,/^(?:OSL-2\.0)/,/^(?:OSL-2\.1)/,/^(?:OSL-3\.0)/,/^(?:OpenSSL)/,/^(?:ZPL-2\.1)/,/^(?:PHP-3\.0)/,/^(?:ZPL-2\.0)/,/^(?:ZPL-1\.1)/,/^(?:CC0-1\.0)/,/^(?:SPL-1\.0)/,/^(?:psutils)/,/^(?:MPL-1\.0)/,/^(?:QPL-1\.0)/,/^(?:MPL-1\.1)/,/^(?:MPL-2\.0)/,/^(?:APL-1\.0)/,/^(?:RPL-1\.1)/,/^(?:RPL-1\.5)/,/^(?:MIT-CMU)/,/^(?:Multics)/,/^(?:Eurosym)/,/^(?:BSL-1\.0)/,/^(?:MIT-feh)/,/^(?:Saxpath)/,/^(?:Borceux)/,/^(?:OFL-1\.1)/,/^(?:OFL-1\.0)/,/^(?:AFL-1\.1)/,/^(?:YPL-1\.1)/,/^(?:YPL-1\.0)/,/^(?:NPL-1\.0)/,/^(?:iMatix)/,/^(?:mpich2)/,/^(?:APAFML)/,/^(?:Bahyph)/,/^(?:RSA-MD)/,/^(?:psfrag)/,/^(?:Plexus)/,/^(?:eGenix)/,/^(?:Glulxe)/,/^(?:SAX-PD)/,/^(?:Imlib2)/,/^(?:Wsuipa)/,/^(?:LGPLLR)/,/^(?:Libpng)/,/^(?:xinetd)/,/^(?:MITNFA)/,/^(?:NetCDF)/,/^(?:Naumen)/,/^(?:SMPPL)/,/^(?:Nunit)/,/^(?:FSFUL)/,/^(?:GL2PS)/,/^(?:SMLNJ)/,/^(?:Rdisc)/,/^(?:Noweb)/,/^(?:Nokia)/,/^(?:SISSL)/,/^(?:Qhull)/,/^(?:Intel)/,/^(?:Glide)/,/^(?:Xerox)/,/^(?:AMPAS)/,/^(?:WTFPL)/,/^(?:MS-PL)/,/^(?:XSkat)/,/^(?:MS-RL)/,/^(?:MirOS)/,/^(?:RSCPL)/,/^(?:TMate)/,/^(?:OGTSL)/,/^(?:FSFAP)/,/^(?:NCSA)/,/^(?:Zlib)/,/^(?:SCEA)/,/^(?:SNIA)/,/^(?:NGPL)/,/^(?:NOSL)/,/^(?:ADSL)/,/^(?:MTLL)/,/^(?:NLPL)/,/^(?:Ruby)/,/^(?:JSON)/,/^(?:Barr)/,/^(?:0BSD)/,/^(?:Xnet)/,/^(?:Cube)/,/^(?:curl)/,/^(?:DSDP)/,/^(?:Fair)/,/^(?:HPND)/,/^(?:TOSL)/,/^(?:IJG)/,/^(?:SWL)/,/^(?:Vim)/,/^(?:FTL)/,/^(?:ICU)/,/^(?:OML)/,/^(?:NRL)/,/^(?:DOC)/,/^(?:TCL)/,/^(?:W3C)/,/^(?:NTP)/,/^(?:IPA)/,/^(?:ISC)/,/^(?:X11)/,/^(?:AAL)/,/^(?:AML)/,/^(?:xpp)/,/^(?:Zed)/,/^(?:MIT)/,/^(?:Mup)/], +conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364],"inclusive":true}} +}); +return lexer; +})(); +parser.lexer = lexer; +function Parser () { + this.yy = {}; +} +Parser.prototype = parser;parser.Parser = Parser; +return new Parser; +})(); + + +if (typeof require !== 'undefined' && typeof exports !== 'undefined') { +exports.parser = spdxparse; +exports.Parser = spdxparse.Parser; +exports.parse = function () { return spdxparse.parse.apply(spdxparse, arguments); }; +exports.main = function commonjsMain(args) { + if (!args[1]) { + console.log('Usage: '+args[0]+' FILE'); + process.exit(1); + } + var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8"); + return exports.parser.parse(source); +}; +if (typeof module !== 'undefined' && require.main === module) { + exports.main(process.argv.slice(1)); +} +} diff --git a/node_modules/spdx-license-ids/LICENSE b/node_modules/spdx-license-ids/LICENSE new file mode 100644 index 000000000..68a49daad --- /dev/null +++ b/node_modules/spdx-license-ids/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +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 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. + +For more information, please refer to diff --git a/node_modules/spdx-license-ids/README.md b/node_modules/spdx-license-ids/README.md new file mode 100755 index 000000000..92523532b --- /dev/null +++ b/node_modules/spdx-license-ids/README.md @@ -0,0 +1,55 @@ +# spdx-license-ids + +A list of [SPDX license](https://spdx.org/licenses/) identifiers + +[**Download JSON**](https://raw.githubusercontent.com/shinnn/spdx-license-ids/master/spdx-license-ids.json) + +## Use as a JavaScript Library + +[![NPM version](https://img.shields.io/npm/v/spdx-license-ids.svg)](https://www.npmjs.org/package/spdx-license-ids) +[![Bower version](https://img.shields.io/bower/v/spdx-license-ids.svg)](https://github.com/shinnn/spdx-license-ids/releases) +[![Build Status](https://travis-ci.org/shinnn/spdx-license-ids.svg?branch=master)](https://travis-ci.org/shinnn/spdx-license-ids) +[![Coverage Status](https://img.shields.io/coveralls/shinnn/spdx-license-ids.svg)](https://coveralls.io/r/shinnn/spdx-license-ids) +[![devDependency Status](https://david-dm.org/shinnn/spdx-license-ids/dev-status.svg)](https://david-dm.org/shinnn/spdx-license-ids#info=devDependencies) + +### Installation + +#### Package managers + +##### [npm](https://www.npmjs.com/) + +```sh +npm install spdx-license-ids +``` + +##### [bower](http://bower.io/) + +```sh +bower install spdx-license-ids +``` + +##### [Duo](http://duojs.org/) + +```javascript +const spdxLicenseIds = require('shinnn/spdx-license-ids'); +``` + +#### Standalone + +[Download the script file directly.](https://raw.githubusercontent.com/shinnn/spdx-license-ids/master/spdx-license-ids-browser.js) + +### API + +#### spdxLicenseIds + +Type: `Array` of `String` + +It returns an array of SPDX license identifiers. + +```javascript +const spdxLicenseIds = require('spdx-license-ids'); //=> ['Glide', 'Abstyles', 'AFL-1.1', ... ] +``` + +## License + +[The Unlicense](./LICENSE). diff --git a/node_modules/spdx-license-ids/package.json b/node_modules/spdx-license-ids/package.json new file mode 100644 index 000000000..e632faf98 --- /dev/null +++ b/node_modules/spdx-license-ids/package.json @@ -0,0 +1,80 @@ +{ + "_from": "spdx-license-ids@^1.0.2", + "_id": "spdx-license-ids@1.2.2", + "_inBundle": false, + "_integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "_location": "/spdx-license-ids", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "spdx-license-ids@^1.0.2", + "name": "spdx-license-ids", + "escapedName": "spdx-license-ids", + "rawSpec": "^1.0.2", + "saveSpec": null, + "fetchSpec": "^1.0.2" + }, + "_requiredBy": [ + "/spdx-correct" + ], + "_resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "_shasum": "c9df7a3424594ade6bd11900d596696dc06bac57", + "_spec": "spdx-license-ids@^1.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/spdx-correct", + "author": { + "name": "Shinnosuke Watanabe", + "url": "https://github.com/shinnn" + }, + "bugs": { + "url": "https://github.com/shinnn/spdx-license-ids/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A list of SPDX license identifiers", + "devDependencies": { + "@shinnn/eslint-config-node": "^3.0.0", + "chalk": "^1.1.3", + "eslint": "^3.1.1", + "get-spdx-license-ids": "^1.0.0", + "istanbul": "^0.4.4", + "loud-rejection": "^1.6.0", + "rimraf-promise": "^2.0.0", + "stringify-object": "^2.4.0", + "tap-spec": "^4.1.1", + "tape": "^4.6.0", + "write-file-atomically": "1.0.0" + }, + "files": [ + "spdx-license-ids.json" + ], + "homepage": "https://github.com/shinnn/spdx-license-ids#readme", + "keywords": [ + "spdx", + "license", + "licenses", + "id", + "identifier", + "identifiers", + "json", + "array", + "oss", + "browser", + "client-side" + ], + "license": "Unlicense", + "main": "spdx-license-ids.json", + "name": "spdx-license-ids", + "repository": { + "type": "git", + "url": "git+https://github.com/shinnn/spdx-license-ids.git" + }, + "scripts": { + "build": "node --strong_mode build.js", + "coverage": "node --strong_mode node_modules/.bin/istanbul cover test.js", + "lint": "eslint --config @shinnn/node --env browser --ignore-path .gitignore .", + "pretest": "${npm_package_scripts_build} && ${npm_package_scripts_lint}", + "test": "node --strong_mode test.js | tap-spec" + }, + "version": "1.2.2" +} diff --git a/node_modules/spdx-license-ids/spdx-license-ids.json b/node_modules/spdx-license-ids/spdx-license-ids.json new file mode 100644 index 000000000..1c60d6eed --- /dev/null +++ b/node_modules/spdx-license-ids/spdx-license-ids.json @@ -0,0 +1,334 @@ +[ + "Glide", + "Abstyles", + "AFL-1.1", + "AFL-1.2", + "AFL-2.0", + "AFL-2.1", + "AFL-3.0", + "AMPAS", + "APL-1.0", + "Adobe-Glyph", + "APAFML", + "Adobe-2006", + "AGPL-1.0", + "Afmparse", + "Aladdin", + "ADSL", + "AMDPLPA", + "ANTLR-PD", + "Apache-1.0", + "Apache-1.1", + "Apache-2.0", + "AML", + "APSL-1.0", + "APSL-1.1", + "APSL-1.2", + "APSL-2.0", + "Artistic-1.0", + "Artistic-1.0-Perl", + "Artistic-1.0-cl8", + "Artistic-2.0", + "AAL", + "Bahyph", + "Barr", + "Beerware", + "BitTorrent-1.0", + "BitTorrent-1.1", + "BSL-1.0", + "Borceux", + "BSD-2-Clause", + "BSD-2-Clause-FreeBSD", + "BSD-2-Clause-NetBSD", + "BSD-3-Clause", + "BSD-3-Clause-Clear", + "BSD-4-Clause", + "BSD-Protection", + "BSD-Source-Code", + "BSD-3-Clause-Attribution", + "0BSD", + "BSD-4-Clause-UC", + "bzip2-1.0.5", + "bzip2-1.0.6", + "Caldera", + "CECILL-1.0", + "CECILL-1.1", + "CECILL-2.0", + "CECILL-2.1", + "CECILL-B", + "CECILL-C", + "ClArtistic", + "MIT-CMU", + "CNRI-Jython", + "CNRI-Python", + "CNRI-Python-GPL-Compatible", + "CPOL-1.02", + "CDDL-1.0", + "CDDL-1.1", + "CPAL-1.0", + "CPL-1.0", + "CATOSL-1.1", + "Condor-1.1", + "CC-BY-1.0", + "CC-BY-2.0", + "CC-BY-2.5", + "CC-BY-3.0", + "CC-BY-4.0", + "CC-BY-ND-1.0", + "CC-BY-ND-2.0", + "CC-BY-ND-2.5", + "CC-BY-ND-3.0", + "CC-BY-ND-4.0", + "CC-BY-NC-1.0", + "CC-BY-NC-2.0", + "CC-BY-NC-2.5", + "CC-BY-NC-3.0", + "CC-BY-NC-4.0", + "CC-BY-NC-ND-1.0", + "CC-BY-NC-ND-2.0", + "CC-BY-NC-ND-2.5", + "CC-BY-NC-ND-3.0", + "CC-BY-NC-ND-4.0", + "CC-BY-NC-SA-1.0", + "CC-BY-NC-SA-2.0", + "CC-BY-NC-SA-2.5", + "CC-BY-NC-SA-3.0", + "CC-BY-NC-SA-4.0", + "CC-BY-SA-1.0", + "CC-BY-SA-2.0", + "CC-BY-SA-2.5", + "CC-BY-SA-3.0", + "CC-BY-SA-4.0", + "CC0-1.0", + "Crossword", + "CrystalStacker", + "CUA-OPL-1.0", + "Cube", + "curl", + "D-FSL-1.0", + "diffmark", + "WTFPL", + "DOC", + "Dotseqn", + "DSDP", + "dvipdfm", + "EPL-1.0", + "ECL-1.0", + "ECL-2.0", + "eGenix", + "EFL-1.0", + "EFL-2.0", + "MIT-advertising", + "MIT-enna", + "Entessa", + "ErlPL-1.1", + "EUDatagrid", + "EUPL-1.0", + "EUPL-1.1", + "Eurosym", + "Fair", + "MIT-feh", + "Frameworx-1.0", + "FreeImage", + "FTL", + "FSFAP", + "FSFUL", + "FSFULLR", + "Giftware", + "GL2PS", + "Glulxe", + "AGPL-3.0", + "GFDL-1.1", + "GFDL-1.2", + "GFDL-1.3", + "GPL-1.0", + "GPL-2.0", + "GPL-3.0", + "LGPL-2.1", + "LGPL-3.0", + "LGPL-2.0", + "gnuplot", + "gSOAP-1.3b", + "HaskellReport", + "HPND", + "IBM-pibs", + "IPL-1.0", + "ICU", + "ImageMagick", + "iMatix", + "Imlib2", + "IJG", + "Info-ZIP", + "Intel-ACPI", + "Intel", + "Interbase-1.0", + "IPA", + "ISC", + "JasPer-2.0", + "JSON", + "LPPL-1.0", + "LPPL-1.1", + "LPPL-1.2", + "LPPL-1.3a", + "LPPL-1.3c", + "Latex2e", + "BSD-3-Clause-LBNL", + "Leptonica", + "LGPLLR", + "Libpng", + "libtiff", + "LAL-1.2", + "LAL-1.3", + "LiLiQ-P-1.1", + "LiLiQ-Rplus-1.1", + "LiLiQ-R-1.1", + "LPL-1.02", + "LPL-1.0", + "MakeIndex", + "MTLL", + "MS-PL", + "MS-RL", + "MirOS", + "MITNFA", + "MIT", + "Motosoto", + "MPL-1.0", + "MPL-1.1", + "MPL-2.0", + "MPL-2.0-no-copyleft-exception", + "mpich2", + "Multics", + "Mup", + "NASA-1.3", + "Naumen", + "NBPL-1.0", + "NetCDF", + "NGPL", + "NOSL", + "NPL-1.0", + "NPL-1.1", + "Newsletr", + "NLPL", + "Nokia", + "NPOSL-3.0", + "NLOD-1.0", + "Noweb", + "NRL", + "NTP", + "Nunit", + "OCLC-2.0", + "ODbL-1.0", + "PDDL-1.0", + "OCCT-PL", + "OGTSL", + "OLDAP-2.2.2", + "OLDAP-1.1", + "OLDAP-1.2", + "OLDAP-1.3", + "OLDAP-1.4", + "OLDAP-2.0", + "OLDAP-2.0.1", + "OLDAP-2.1", + "OLDAP-2.2", + "OLDAP-2.2.1", + "OLDAP-2.3", + "OLDAP-2.4", + "OLDAP-2.5", + "OLDAP-2.6", + "OLDAP-2.7", + "OLDAP-2.8", + "OML", + "OPL-1.0", + "OSL-1.0", + "OSL-1.1", + "OSL-2.0", + "OSL-2.1", + "OSL-3.0", + "OpenSSL", + "OSET-PL-2.1", + "PHP-3.0", + "PHP-3.01", + "Plexus", + "PostgreSQL", + "psfrag", + "psutils", + "Python-2.0", + "QPL-1.0", + "Qhull", + "Rdisc", + "RPSL-1.0", + "RPL-1.1", + "RPL-1.5", + "RHeCos-1.1", + "RSCPL", + "RSA-MD", + "Ruby", + "SAX-PD", + "Saxpath", + "SCEA", + "SWL", + "SMPPL", + "Sendmail", + "SGI-B-1.0", + "SGI-B-1.1", + "SGI-B-2.0", + "OFL-1.0", + "OFL-1.1", + "SimPL-2.0", + "Sleepycat", + "SNIA", + "Spencer-86", + "Spencer-94", + "Spencer-99", + "SMLNJ", + "SugarCRM-1.1.3", + "SISSL", + "SISSL-1.2", + "SPL-1.0", + "Watcom-1.0", + "TCL", + "Unlicense", + "TMate", + "TORQUE-1.1", + "TOSL", + "Unicode-TOU", + "UPL-1.0", + "NCSA", + "Vim", + "VOSTROM", + "VSL-1.0", + "W3C-19980720", + "W3C", + "Wsuipa", + "Xnet", + "X11", + "Xerox", + "XFree86-1.1", + "xinetd", + "xpp", + "XSkat", + "YPL-1.0", + "YPL-1.1", + "Zed", + "Zend-2.0", + "Zimbra-1.3", + "Zimbra-1.4", + "Zlib", + "zlib-acknowledgement", + "ZPL-1.1", + "ZPL-2.0", + "ZPL-2.1", + "BSD-3-Clause-No-Nuclear-License", + "BSD-3-Clause-No-Nuclear-Warranty", + "BSD-3-Clause-No-Nuclear-License-2014", + "eCos-2.0", + "GPL-2.0-with-autoconf-exception", + "GPL-2.0-with-bison-exception", + "GPL-2.0-with-classpath-exception", + "GPL-2.0-with-font-exception", + "GPL-2.0-with-GCC-exception", + "GPL-3.0-with-autoconf-exception", + "GPL-3.0-with-GCC-exception", + "StandardML-NJ", + "WXwindows" +] diff --git a/node_modules/stream-browserify/.npmignore b/node_modules/stream-browserify/.npmignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/node_modules/stream-browserify/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/stream-browserify/.travis.yml b/node_modules/stream-browserify/.travis.yml new file mode 100644 index 000000000..ccde138d1 --- /dev/null +++ b/node_modules/stream-browserify/.travis.yml @@ -0,0 +1,9 @@ +sudo: false +language: node_js +node_js: + - 'iojs' + - '0.12' + - '0.10' + - '0.8' +before_install: + - npm install -g npm diff --git a/node_modules/stream-browserify/LICENSE b/node_modules/stream-browserify/LICENSE new file mode 100644 index 000000000..ee27ba4b4 --- /dev/null +++ b/node_modules/stream-browserify/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/stream-browserify/index.js b/node_modules/stream-browserify/index.js new file mode 100644 index 000000000..8d6a13ab9 --- /dev/null +++ b/node_modules/stream-browserify/index.js @@ -0,0 +1,127 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +module.exports = Stream; + +var EE = require('events').EventEmitter; +var inherits = require('inherits'); + +inherits(Stream, EE); +Stream.Readable = require('readable-stream/readable.js'); +Stream.Writable = require('readable-stream/writable.js'); +Stream.Duplex = require('readable-stream/duplex.js'); +Stream.Transform = require('readable-stream/transform.js'); +Stream.PassThrough = require('readable-stream/passthrough.js'); + +// Backwards-compat with node 0.4.x +Stream.Stream = Stream; + + + +// old-style streams. Note that the pipe method (the only relevant +// part of this class) is overridden in the Readable class. + +function Stream() { + EE.call(this); +} + +Stream.prototype.pipe = function(dest, options) { + var source = this; + + function ondata(chunk) { + if (dest.writable) { + if (false === dest.write(chunk) && source.pause) { + source.pause(); + } + } + } + + source.on('data', ondata); + + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } + + dest.on('drain', ondrain); + + // If the 'end' option is not supplied, dest.end() will be called when + // source gets the 'end' or 'close' events. Only dest.end() once. + if (!dest._isStdio && (!options || options.end !== false)) { + source.on('end', onend); + source.on('close', onclose); + } + + var didOnEnd = false; + function onend() { + if (didOnEnd) return; + didOnEnd = true; + + dest.end(); + } + + + function onclose() { + if (didOnEnd) return; + didOnEnd = true; + + if (typeof dest.destroy === 'function') dest.destroy(); + } + + // don't leave dangling pipes when there are errors. + function onerror(er) { + cleanup(); + if (EE.listenerCount(this, 'error') === 0) { + throw er; // Unhandled stream error in pipe. + } + } + + source.on('error', onerror); + dest.on('error', onerror); + + // remove all the event listeners that were added. + function cleanup() { + source.removeListener('data', ondata); + dest.removeListener('drain', ondrain); + + source.removeListener('end', onend); + source.removeListener('close', onclose); + + source.removeListener('error', onerror); + dest.removeListener('error', onerror); + + source.removeListener('end', cleanup); + source.removeListener('close', cleanup); + + dest.removeListener('close', cleanup); + } + + source.on('end', cleanup); + source.on('close', cleanup); + + dest.on('close', cleanup); + + dest.emit('pipe', source); + + // Allow for unix-like usage: A.pipe(B).pipe(C) + return dest; +}; diff --git a/node_modules/stream-browserify/package.json b/node_modules/stream-browserify/package.json new file mode 100644 index 000000000..2dcc4925d --- /dev/null +++ b/node_modules/stream-browserify/package.json @@ -0,0 +1,79 @@ +{ + "_from": "stream-browserify@^2.0.1", + "_id": "stream-browserify@2.0.1", + "_inBundle": false, + "_integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "_location": "/stream-browserify", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "stream-browserify@^2.0.1", + "name": "stream-browserify", + "escapedName": "stream-browserify", + "rawSpec": "^2.0.1", + "saveSpec": null, + "fetchSpec": "^2.0.1" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "_shasum": "66266ee5f9bdb9940a4e4514cafb43bb71e5c9db", + "_spec": "stream-browserify@^2.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/stream-browserify/issues" + }, + "bundleDependencies": false, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "deprecated": false, + "description": "the stream module from node core for browsers", + "devDependencies": { + "tape": "^4.2.0", + "typedarray": "~0.0.6" + }, + "homepage": "https://github.com/substack/stream-browserify", + "keywords": [ + "stream", + "browser", + "browserify" + ], + "license": "MIT", + "main": "index.js", + "name": "stream-browserify", + "repository": { + "type": "git", + "url": "git://github.com/substack/stream-browserify.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/3.5", + "firefox/10", + "firefox/nightly", + "chrome/10", + "chrome/latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "2.0.1" +} diff --git a/node_modules/stream-browserify/readme.markdown b/node_modules/stream-browserify/readme.markdown new file mode 100644 index 000000000..c0c1b2f00 --- /dev/null +++ b/node_modules/stream-browserify/readme.markdown @@ -0,0 +1,25 @@ +# stream-browserify + +the stream module from node core, for browsers! + +[![build status](https://secure.travis-ci.org/substack/stream-browserify.svg)](http://travis-ci.org/substack/stream-browserify) + +# methods + +Consult the node core +[documentation on streams](http://nodejs.org/docs/latest/api/stream.html). + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install stream-browserify +``` + +but if you are using browserify you will get this module automatically when you +do `require('stream')`. + +# license + +MIT diff --git a/node_modules/stream-browserify/test/buf.js b/node_modules/stream-browserify/test/buf.js new file mode 100644 index 000000000..82178199b --- /dev/null +++ b/node_modules/stream-browserify/test/buf.js @@ -0,0 +1,32 @@ +var path = require('path'); +var test = require('tape'); + +var Writable = require('../').Writable; +var inherits = require('inherits'); + +inherits(TestWritable, Writable); + +function TestWritable(opt) { + if (!(this instanceof TestWritable)) + return new TestWritable(opt); + Writable.call(this, opt); + this._written = []; +} + +TestWritable.prototype._write = function(chunk, encoding, cb) { + this._written.push(chunk); + cb(); +}; + +var buf = Buffer([ 88 ]); + +test('.writable writing ArrayBuffer', function(t) { + var writable = new TestWritable(); + + writable.write(buf); + writable.end(); + + t.equal(writable._written.length, 1); + t.equal(writable._written[0].toString(), 'X') + t.end() +}); diff --git a/node_modules/stream-http/.npmignore b/node_modules/stream-http/.npmignore new file mode 100644 index 000000000..807464b69 --- /dev/null +++ b/node_modules/stream-http/.npmignore @@ -0,0 +1,5 @@ +.DS_Store +bundle.js +node_modules +npm-debug.log +.zuulrc diff --git a/node_modules/stream-http/.travis.yml b/node_modules/stream-http/.travis.yml new file mode 100644 index 000000000..943e6b8fc --- /dev/null +++ b/node_modules/stream-http/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "6.4" \ No newline at end of file diff --git a/node_modules/stream-http/.zuul.yml b/node_modules/stream-http/.zuul.yml new file mode 100644 index 000000000..4cb3cb985 --- /dev/null +++ b/node_modules/stream-http/.zuul.yml @@ -0,0 +1,22 @@ +ui: tape +browsers: + - name: chrome + version: 39..latest + - name: firefox + version: 34..latest + - name: safari + version: 5..latest + - name: microsoftedge + version: 13..latest + - name: ie + version: 9..latest + - name: opera + version: 11..latest + - name: iphone + version: '8.1..latest' + - name: android + version: '4.4..latest' +server: ./test/server/index.js +scripts: + - "/ie8-polyfill.js" + - "/test-polyfill.js" diff --git a/node_modules/stream-http/LICENSE b/node_modules/stream-http/LICENSE new file mode 100644 index 000000000..726746571 --- /dev/null +++ b/node_modules/stream-http/LICENSE @@ -0,0 +1,24 @@ +The MIT License + +Copyright (c) 2015 John Hiesey + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/stream-http/README.md b/node_modules/stream-http/README.md new file mode 100644 index 000000000..16e666512 --- /dev/null +++ b/node_modules/stream-http/README.md @@ -0,0 +1,134 @@ +# stream-http [![Build Status](https://travis-ci.org/jhiesey/stream-http.svg?branch=master)](https://travis-ci.org/jhiesey/stream-http) + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/stream-http.svg)](https://saucelabs.com/u/stream-http) + +This module is an implementation of Node's native `http` module for the browser. +It tries to match Node's API and behavior as closely as possible, but some features +aren't available, since browsers don't give nearly as much control over requests. + +This is heavily inspired by, and intended to replace, [http-browserify](https://github.com/substack/http-browserify). + +## What does it do? + +In accordance with its name, `stream-http` tries to provide data to its caller before +the request has completed whenever possible. + +The following browsers support true streaming, where only a small amount of the request +has to be held in memory at once: +* Chrome >= 43 (using the `fetch` API) +* Firefox >= 9 (using `moz-chunked-arraybuffer` responseType with xhr) + +The following browsers support pseudo-streaming, where the data is available before the +request finishes, but the entire response must be held in memory: +* Chrome +* Safari >= 5, and maybe older +* IE >= 10 +* Most other Webkit-based browsers, including the default Android browser + +All browsers newer than IE8 support binary responses. All of the above browsers that +support true streaming or pseudo-streaming support that for binary data as well +except for IE10. Old (presto-based) Opera also does not support binary streaming either. + +### IE8 note: +As of version 2.0.0, IE8 support requires the user to supply polyfills for +`Object.keys`, `Array.prototype.forEach`, and `Array.prototype.indexOf`. Example +implementations are provided in [ie8-polyfill.js](ie8-polyfill.js); alternately, +you may want to consider using [es5-shim](https://github.com/es-shims/es5-shim). +All browsers with full ES5 support shouldn't require any polyfills. + +## How do you use it? + +The intent is to have the same API as the client part of the +[Node HTTP module](https://nodejs.org/api/http.html). The interfaces are the same wherever +practical, although limitations in browsers make an exact clone of the Node API impossible. + +This module implements `http.request`, `http.get`, and most of `http.ClientRequest` +and `http.IncomingMessage` in addition to `http.METHODS` and `http.STATUS_CODES`. See the +Node docs for how these work. + +### Extra features compared to Node + +* The `message.url` property provides access to the final URL after all redirects. This +is useful since the browser follows all redirects silently, unlike Node. It is available +in Chrome 37 and newer, Firefox 32 and newer, and Safari 9 and newer. + +* The `options.withCredentials` boolean flag, used to indicate if the browser should send +cookies or authentication information with a CORS request. Default false. + +This module has to make some tradeoffs to support binary data and/or streaming. Generally, +the module can make a fairly good decision about which underlying browser features to use, +but sometimes it helps to get a little input from the developer. + +* The `options.mode` field passed into `http.request` or `http.get` can take on one of the +following values: + * 'default' (or any falsy value, including `undefined`): Try to provide partial data before +the request completes, but not at the cost of correctness for binary data or correctness of +the 'content-type' response header. This mode will also avoid slower code paths whenever +possible, which is particularly useful when making large requests in a browser like Safari +that has a weaker JavaScript engine. + * 'allow-wrong-content-type': Provides partial data in more cases than 'default', but +at the expense of causing the 'content-type' response header to be incorrectly reported +(as 'text/plain; charset=x-user-defined') in some browsers, notably Safari and Chrome 42 +and older. Preserves binary data whenever possible. In some cases the implementation may +also be a bit slow. This was the default in versions of this module before 1.5. + * 'prefer-stream': Provide data before the request completes even if binary data (anything +that isn't a single-byte ASCII or UTF8 character) will be corrupted. Of course, this option +is only safe for text data. May also cause the 'content-type' response header to be +incorrectly reported (as 'text/plain; charset=x-user-defined'). + * 'disable-fetch': Force the use of plain XHR regardless of the browser declaring a fetch +capability. Preserves the correctness of binary data and the 'content-type' response header. + * 'prefer-fast': Deprecated; now a synonym for 'default', which has the same performance +characteristics as this mode did in versions before 1.5. + +### Features missing compared to Node + +* `http.Agent` is only a stub +* The 'socket', 'connect', 'upgrade', and 'continue' events on `http.ClientRequest`. +* Any operations, including `request.setTimeout`, that operate directly on the underlying +socket. +* Any options that are disallowed for security reasons. This includes setting or getting +certain headers. +* `message.httpVersion` +* `message.rawHeaders` is modified by the browser, and may not quite match what is sent by +the server. +* `message.trailers` and `message.rawTrailers` will remain empty. +* Redirects are followed silently by the browser, so it isn't possible to access the 301/302 +redirect pages. +* The `timeout` options in the `request` method is non-operational in Safari <= 5 and +Opera <= 12. + +## Example + +``` js +http.get('/bundle.js', function (res) { + var div = document.getElementById('result'); + div.innerHTML += 'GET /beep
'; + + res.on('data', function (buf) { + div.innerHTML += buf; + }); + + res.on('end', function () { + div.innerHTML += '
__END__'; + }); +}) +``` + +## Running tests + +There are two sets of tests: the tests that run in Node (found in `test/node`) and the tests +that run in the browser (found in `test/browser`). Normally the browser tests run on +[Sauce Labs](http://saucelabs.com/). + +Running `npm test` will run both sets of tests, but in order for the Sauce Labs tests to run +you will need to sign up for an account (free for open source projects) and put the +credentials in a [`.zuulrc` file](https://github.com/defunctzombie/zuul/wiki/zuulrc). + +To run just the Node tests, run `npm run test-node`. + +To run the browser tests locally, run `npm run test-browser-local` and point your browser to +`http://localhost:8080/__zuul` + +## License + +MIT. Copyright (C) John Hiesey and other contributors. diff --git a/node_modules/stream-http/ie8-polyfill.js b/node_modules/stream-http/ie8-polyfill.js new file mode 100644 index 000000000..adea0fa0c --- /dev/null +++ b/node_modules/stream-http/ie8-polyfill.js @@ -0,0 +1,168 @@ +// These polyfills taken from MDN (developer.mozilla.org) + +// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys +if (!Object.keys) { + Object.keys = (function() { + 'use strict'; + var hasOwnProperty = Object.prototype.hasOwnProperty, + hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'), + dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' + ], + dontEnumsLength = dontEnums.length; + + return function(obj) { + if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { + throw new TypeError('Object.keys called on non-object'); + } + + var result = [], prop, i; + + for (prop in obj) { + if (hasOwnProperty.call(obj, prop)) { + result.push(prop); + } + } + + if (hasDontEnumBug) { + for (i = 0; i < dontEnumsLength; i++) { + if (hasOwnProperty.call(obj, dontEnums[i])) { + result.push(dontEnums[i]); + } + } + } + return result; + }; + }()); +} + +// Production steps of ECMA-262, Edition 5, 15.4.4.18 +// Reference: http://es5.github.io/#x15.4.4.18 +if (!Array.prototype.forEach) { + + Array.prototype.forEach = function(callback, thisArg) { + + var T, k; + + if (this == null) { + throw new TypeError(' this is null or not defined'); + } + + // 1. Let O be the result of calling ToObject passing the |this| value as the argument. + var O = Object(this); + + // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length". + // 3. Let len be ToUint32(lenValue). + var len = O.length >>> 0; + + // 4. If IsCallable(callback) is false, throw a TypeError exception. + // See: http://es5.github.com/#x9.11 + if (typeof callback !== "function") { + throw new TypeError(callback + ' is not a function'); + } + + // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. + if (arguments.length > 1) { + T = thisArg; + } + + // 6. Let k be 0 + k = 0; + + // 7. Repeat, while k < len + while (k < len) { + + var kValue; + + // a. Let Pk be ToString(k). + // This is implicit for LHS operands of the in operator + // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk. + // This step can be combined with c + // c. If kPresent is true, then + if (k in O) { + + // i. Let kValue be the result of calling the Get internal method of O with argument Pk. + kValue = O[k]; + + // ii. Call the Call internal method of callback with T as the this value and + // argument list containing kValue, k, and O. + callback.call(T, kValue, k, O); + } + // d. Increase k by 1. + k++; + } + // 8. return undefined + }; +} + +// Production steps of ECMA-262, Edition 5, 15.4.4.14 +// Reference: http://es5.github.io/#x15.4.4.14 +if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement, fromIndex) { + + var k; + + // 1. Let O be the result of calling ToObject passing + // the this value as the argument. + if (this == null) { + throw new TypeError('"this" is null or not defined'); + } + + var O = Object(this); + + // 2. Let lenValue be the result of calling the Get + // internal method of O with the argument "length". + // 3. Let len be ToUint32(lenValue). + var len = O.length >>> 0; + + // 4. If len is 0, return -1. + if (len === 0) { + return -1; + } + + // 5. If argument fromIndex was passed let n be + // ToInteger(fromIndex); else let n be 0. + var n = +fromIndex || 0; + + if (Math.abs(n) === Infinity) { + n = 0; + } + + // 6. If n >= len, return -1. + if (n >= len) { + return -1; + } + + // 7. If n >= 0, then Let k be n. + // 8. Else, n<0, Let k be len - abs(n). + // If k is less than 0, then let k be 0. + k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + + // 9. Repeat, while k < len + while (k < len) { + // a. Let Pk be ToString(k). + // This is implicit for LHS operands of the in operator + // b. Let kPresent be the result of calling the + // HasProperty internal method of O with argument Pk. + // This step can be combined with c + // c. If kPresent is true, then + // i. Let elementK be the result of calling the Get + // internal method of O with the argument ToString(k). + // ii. Let same be the result of applying the + // Strict Equality Comparison Algorithm to + // searchElement and elementK. + // iii. If same is true, return k. + if (k in O && O[k] === searchElement) { + return k; + } + k++; + } + return -1; + }; +} \ No newline at end of file diff --git a/node_modules/stream-http/index.js b/node_modules/stream-http/index.js new file mode 100644 index 000000000..829290c43 --- /dev/null +++ b/node_modules/stream-http/index.js @@ -0,0 +1,79 @@ +var ClientRequest = require('./lib/request') +var extend = require('xtend') +var statusCodes = require('builtin-status-codes') +var url = require('url') + +var http = exports + +http.request = function (opts, cb) { + if (typeof opts === 'string') + opts = url.parse(opts) + else + opts = extend(opts) + + // Normally, the page is loaded from http or https, so not specifying a protocol + // will result in a (valid) protocol-relative url. However, this won't work if + // the protocol is something else, like 'file:' + var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : '' + + var protocol = opts.protocol || defaultProtocol + var host = opts.hostname || opts.host + var port = opts.port + var path = opts.path || '/' + + // Necessary for IPv6 addresses + if (host && host.indexOf(':') !== -1) + host = '[' + host + ']' + + // This may be a relative url. The browser should always be able to interpret it correctly. + opts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path + opts.method = (opts.method || 'GET').toUpperCase() + opts.headers = opts.headers || {} + + // Also valid opts.auth, opts.mode + + var req = new ClientRequest(opts) + if (cb) + req.on('response', cb) + return req +} + +http.get = function get (opts, cb) { + var req = http.request(opts, cb) + req.end() + return req +} + +http.Agent = function () {} +http.Agent.defaultMaxSockets = 4 + +http.STATUS_CODES = statusCodes + +http.METHODS = [ + 'CHECKOUT', + 'CONNECT', + 'COPY', + 'DELETE', + 'GET', + 'HEAD', + 'LOCK', + 'M-SEARCH', + 'MERGE', + 'MKACTIVITY', + 'MKCOL', + 'MOVE', + 'NOTIFY', + 'OPTIONS', + 'PATCH', + 'POST', + 'PROPFIND', + 'PROPPATCH', + 'PURGE', + 'PUT', + 'REPORT', + 'SEARCH', + 'SUBSCRIBE', + 'TRACE', + 'UNLOCK', + 'UNSUBSCRIBE' +] \ No newline at end of file diff --git a/node_modules/stream-http/lib/capability.js b/node_modules/stream-http/lib/capability.js new file mode 100644 index 000000000..00dfe7696 --- /dev/null +++ b/node_modules/stream-http/lib/capability.js @@ -0,0 +1,69 @@ +exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream) + +exports.blobConstructor = false +try { + new Blob([new ArrayBuffer(1)]) + exports.blobConstructor = true +} catch (e) {} + +// The xhr request to example.com may violate some restrictive CSP configurations, +// so if we're running in a browser that supports `fetch`, avoid calling getXHR() +// and assume support for certain features below. +var xhr +function getXHR () { + // Cache the xhr value + if (xhr !== undefined) return xhr + + if (global.XMLHttpRequest) { + xhr = new global.XMLHttpRequest() + // If XDomainRequest is available (ie only, where xhr might not work + // cross domain), use the page location. Otherwise use example.com + // Note: this doesn't actually make an http request. + try { + xhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com') + } catch(e) { + xhr = null + } + } else { + // Service workers don't have XHR + xhr = null + } + return xhr +} + +function checkTypeSupport (type) { + var xhr = getXHR() + if (!xhr) return false + try { + xhr.responseType = type + return xhr.responseType === type + } catch (e) {} + return false +} + +// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'. +// Safari 7.1 appears to have fixed this bug. +var haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined' +var haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice) + +// If fetch is supported, then arraybuffer will be supported too. Skip calling +// checkTypeSupport(), since that calls getXHR(). +exports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer')) + +// These next two tests unavoidably show warnings in Chrome. Since fetch will always +// be used if it's available, just return false for these to avoid the warnings. +exports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream') +exports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer && + checkTypeSupport('moz-chunked-arraybuffer') + +// If fetch is supported, then overrideMimeType will be supported too. Skip calling +// getXHR(). +exports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false) + +exports.vbArray = isFunction(global.VBArray) + +function isFunction (value) { + return typeof value === 'function' +} + +xhr = null // Help gc diff --git a/node_modules/stream-http/lib/request.js b/node_modules/stream-http/lib/request.js new file mode 100644 index 000000000..36ad12db9 --- /dev/null +++ b/node_modules/stream-http/lib/request.js @@ -0,0 +1,306 @@ +var capability = require('./capability') +var inherits = require('inherits') +var response = require('./response') +var stream = require('readable-stream') +var toArrayBuffer = require('to-arraybuffer') + +var IncomingMessage = response.IncomingMessage +var rStates = response.readyStates + +function decideMode (preferBinary, useFetch) { + if (capability.fetch && useFetch) { + return 'fetch' + } else if (capability.mozchunkedarraybuffer) { + return 'moz-chunked-arraybuffer' + } else if (capability.msstream) { + return 'ms-stream' + } else if (capability.arraybuffer && preferBinary) { + return 'arraybuffer' + } else if (capability.vbArray && preferBinary) { + return 'text:vbarray' + } else { + return 'text' + } +} + +var ClientRequest = module.exports = function (opts) { + var self = this + stream.Writable.call(self) + + self._opts = opts + self._body = [] + self._headers = {} + if (opts.auth) + self.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64')) + Object.keys(opts.headers).forEach(function (name) { + self.setHeader(name, opts.headers[name]) + }) + + var preferBinary + var useFetch = true + if (opts.mode === 'disable-fetch' || 'timeout' in opts) { + // If the use of XHR should be preferred and includes preserving the 'content-type' header. + // Force XHR to be used since the Fetch API does not yet support timeouts. + useFetch = false + preferBinary = true + } else if (opts.mode === 'prefer-streaming') { + // If streaming is a high priority but binary compatibility and + // the accuracy of the 'content-type' header aren't + preferBinary = false + } else if (opts.mode === 'allow-wrong-content-type') { + // If streaming is more important than preserving the 'content-type' header + preferBinary = !capability.overrideMimeType + } else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') { + // Use binary if text streaming may corrupt data or the content-type header, or for speed + preferBinary = true + } else { + throw new Error('Invalid value for opts.mode') + } + self._mode = decideMode(preferBinary, useFetch) + + self.on('finish', function () { + self._onFinish() + }) +} + +inherits(ClientRequest, stream.Writable) + +ClientRequest.prototype.setHeader = function (name, value) { + var self = this + var lowerName = name.toLowerCase() + // This check is not necessary, but it prevents warnings from browsers about setting unsafe + // headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but + // http-browserify did it, so I will too. + if (unsafeHeaders.indexOf(lowerName) !== -1) + return + + self._headers[lowerName] = { + name: name, + value: value + } +} + +ClientRequest.prototype.getHeader = function (name) { + var header = this._headers[name.toLowerCase()] + if (header) + return header.value + return null +} + +ClientRequest.prototype.removeHeader = function (name) { + var self = this + delete self._headers[name.toLowerCase()] +} + +ClientRequest.prototype._onFinish = function () { + var self = this + + if (self._destroyed) + return + var opts = self._opts + + var headersObj = self._headers + var body = null + if (opts.method !== 'GET' && opts.method !== 'HEAD') { + if (capability.blobConstructor) { + body = new global.Blob(self._body.map(function (buffer) { + return toArrayBuffer(buffer) + }), { + type: (headersObj['content-type'] || {}).value || '' + }) + } else { + // get utf8 string + body = Buffer.concat(self._body).toString() + } + } + + // create flattened list of headers + var headersList = [] + Object.keys(headersObj).forEach(function (keyName) { + var name = headersObj[keyName].name + var value = headersObj[keyName].value + if (Array.isArray(value)) { + value.forEach(function (v) { + headersList.push([name, v]) + }) + } else { + headersList.push([name, value]) + } + }) + + if (self._mode === 'fetch') { + global.fetch(self._opts.url, { + method: self._opts.method, + headers: headersList, + body: body || undefined, + mode: 'cors', + credentials: opts.withCredentials ? 'include' : 'same-origin' + }).then(function (response) { + self._fetchResponse = response + self._connect() + }, function (reason) { + self.emit('error', reason) + }) + } else { + var xhr = self._xhr = new global.XMLHttpRequest() + try { + xhr.open(self._opts.method, self._opts.url, true) + } catch (err) { + process.nextTick(function () { + self.emit('error', err) + }) + return + } + + // Can't set responseType on really old browsers + if ('responseType' in xhr) + xhr.responseType = self._mode.split(':')[0] + + if ('withCredentials' in xhr) + xhr.withCredentials = !!opts.withCredentials + + if (self._mode === 'text' && 'overrideMimeType' in xhr) + xhr.overrideMimeType('text/plain; charset=x-user-defined') + + if ('timeout' in opts) { + xhr.timeout = opts.timeout + xhr.ontimeout = function () { + self.emit('timeout') + } + } + + headersList.forEach(function (header) { + xhr.setRequestHeader(header[0], header[1]) + }) + + self._response = null + xhr.onreadystatechange = function () { + switch (xhr.readyState) { + case rStates.LOADING: + case rStates.DONE: + self._onXHRProgress() + break + } + } + // Necessary for streaming in Firefox, since xhr.response is ONLY defined + // in onprogress, not in onreadystatechange with xhr.readyState = 3 + if (self._mode === 'moz-chunked-arraybuffer') { + xhr.onprogress = function () { + self._onXHRProgress() + } + } + + xhr.onerror = function () { + if (self._destroyed) + return + self.emit('error', new Error('XHR error')) + } + + try { + xhr.send(body) + } catch (err) { + process.nextTick(function () { + self.emit('error', err) + }) + return + } + } +} + +/** + * Checks if xhr.status is readable and non-zero, indicating no error. + * Even though the spec says it should be available in readyState 3, + * accessing it throws an exception in IE8 + */ +function statusValid (xhr) { + try { + var status = xhr.status + return (status !== null && status !== 0) + } catch (e) { + return false + } +} + +ClientRequest.prototype._onXHRProgress = function () { + var self = this + + if (!statusValid(self._xhr) || self._destroyed) + return + + if (!self._response) + self._connect() + + self._response._onXHRProgress() +} + +ClientRequest.prototype._connect = function () { + var self = this + + if (self._destroyed) + return + + self._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode) + self._response.on('error', function(err) { + self.emit('error', err) + }) + + self.emit('response', self._response) +} + +ClientRequest.prototype._write = function (chunk, encoding, cb) { + var self = this + + self._body.push(chunk) + cb() +} + +ClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () { + var self = this + self._destroyed = true + if (self._response) + self._response._destroyed = true + if (self._xhr) + self._xhr.abort() + // Currently, there isn't a way to truly abort a fetch. + // If you like bikeshedding, see https://github.com/whatwg/fetch/issues/27 +} + +ClientRequest.prototype.end = function (data, encoding, cb) { + var self = this + if (typeof data === 'function') { + cb = data + data = undefined + } + + stream.Writable.prototype.end.call(self, data, encoding, cb) +} + +ClientRequest.prototype.flushHeaders = function () {} +ClientRequest.prototype.setTimeout = function () {} +ClientRequest.prototype.setNoDelay = function () {} +ClientRequest.prototype.setSocketKeepAlive = function () {} + +// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method +var unsafeHeaders = [ + 'accept-charset', + 'accept-encoding', + 'access-control-request-headers', + 'access-control-request-method', + 'connection', + 'content-length', + 'cookie', + 'cookie2', + 'date', + 'dnt', + 'expect', + 'host', + 'keep-alive', + 'origin', + 'referer', + 'te', + 'trailer', + 'transfer-encoding', + 'upgrade', + 'user-agent', + 'via' +] diff --git a/node_modules/stream-http/lib/response.js b/node_modules/stream-http/lib/response.js new file mode 100644 index 000000000..e5d057d24 --- /dev/null +++ b/node_modules/stream-http/lib/response.js @@ -0,0 +1,182 @@ +var capability = require('./capability') +var inherits = require('inherits') +var stream = require('readable-stream') + +var rStates = exports.readyStates = { + UNSENT: 0, + OPENED: 1, + HEADERS_RECEIVED: 2, + LOADING: 3, + DONE: 4 +} + +var IncomingMessage = exports.IncomingMessage = function (xhr, response, mode) { + var self = this + stream.Readable.call(self) + + self._mode = mode + self.headers = {} + self.rawHeaders = [] + self.trailers = {} + self.rawTrailers = [] + + // Fake the 'close' event, but only once 'end' fires + self.on('end', function () { + // The nextTick is necessary to prevent the 'request' module from causing an infinite loop + process.nextTick(function () { + self.emit('close') + }) + }) + + if (mode === 'fetch') { + self._fetchResponse = response + + self.url = response.url + self.statusCode = response.status + self.statusMessage = response.statusText + + response.headers.forEach(function(header, key){ + self.headers[key.toLowerCase()] = header + self.rawHeaders.push(key, header) + }) + + + // TODO: this doesn't respect backpressure. Once WritableStream is available, this can be fixed + var reader = response.body.getReader() + function read () { + reader.read().then(function (result) { + if (self._destroyed) + return + if (result.done) { + self.push(null) + return + } + self.push(new Buffer(result.value)) + read() + }).catch(function(err) { + self.emit('error', err) + }) + } + read() + + } else { + self._xhr = xhr + self._pos = 0 + + self.url = xhr.responseURL + self.statusCode = xhr.status + self.statusMessage = xhr.statusText + var headers = xhr.getAllResponseHeaders().split(/\r?\n/) + headers.forEach(function (header) { + var matches = header.match(/^([^:]+):\s*(.*)/) + if (matches) { + var key = matches[1].toLowerCase() + if (key === 'set-cookie') { + if (self.headers[key] === undefined) { + self.headers[key] = [] + } + self.headers[key].push(matches[2]) + } else if (self.headers[key] !== undefined) { + self.headers[key] += ', ' + matches[2] + } else { + self.headers[key] = matches[2] + } + self.rawHeaders.push(matches[1], matches[2]) + } + }) + + self._charset = 'x-user-defined' + if (!capability.overrideMimeType) { + var mimeType = self.rawHeaders['mime-type'] + if (mimeType) { + var charsetMatch = mimeType.match(/;\s*charset=([^;])(;|$)/) + if (charsetMatch) { + self._charset = charsetMatch[1].toLowerCase() + } + } + if (!self._charset) + self._charset = 'utf-8' // best guess + } + } +} + +inherits(IncomingMessage, stream.Readable) + +IncomingMessage.prototype._read = function () {} + +IncomingMessage.prototype._onXHRProgress = function () { + var self = this + + var xhr = self._xhr + + var response = null + switch (self._mode) { + case 'text:vbarray': // For IE9 + if (xhr.readyState !== rStates.DONE) + break + try { + // This fails in IE8 + response = new global.VBArray(xhr.responseBody).toArray() + } catch (e) {} + if (response !== null) { + self.push(new Buffer(response)) + break + } + // Falls through in IE8 + case 'text': + try { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4 + response = xhr.responseText + } catch (e) { + self._mode = 'text:vbarray' + break + } + if (response.length > self._pos) { + var newData = response.substr(self._pos) + if (self._charset === 'x-user-defined') { + var buffer = new Buffer(newData.length) + for (var i = 0; i < newData.length; i++) + buffer[i] = newData.charCodeAt(i) & 0xff + + self.push(buffer) + } else { + self.push(newData, self._charset) + } + self._pos = response.length + } + break + case 'arraybuffer': + if (xhr.readyState !== rStates.DONE || !xhr.response) + break + response = xhr.response + self.push(new Buffer(new Uint8Array(response))) + break + case 'moz-chunked-arraybuffer': // take whole + response = xhr.response + if (xhr.readyState !== rStates.LOADING || !response) + break + self.push(new Buffer(new Uint8Array(response))) + break + case 'ms-stream': + response = xhr.response + if (xhr.readyState !== rStates.LOADING) + break + var reader = new global.MSStreamReader() + reader.onprogress = function () { + if (reader.result.byteLength > self._pos) { + self.push(new Buffer(new Uint8Array(reader.result.slice(self._pos)))) + self._pos = reader.result.byteLength + } + } + reader.onload = function () { + self.push(null) + } + // reader.onerror = ??? // TODO: this + reader.readAsArrayBuffer(response) + break + } + + // The ms-stream case handles end separately in reader.onload() + if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') { + self.push(null) + } +} diff --git a/node_modules/stream-http/package.json b/node_modules/stream-http/package.json new file mode 100644 index 000000000..52b945a0b --- /dev/null +++ b/node_modules/stream-http/package.json @@ -0,0 +1,73 @@ +{ + "_from": "stream-http@^2.3.1", + "_id": "stream-http@2.7.2", + "_inBundle": false, + "_integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "_location": "/stream-http", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "stream-http@^2.3.1", + "name": "stream-http", + "escapedName": "stream-http", + "rawSpec": "^2.3.1", + "saveSpec": null, + "fetchSpec": "^2.3.1" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "_shasum": "40a050ec8dc3b53b33d9909415c02c0bf1abfbad", + "_spec": "stream-http@^2.3.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "John Hiesey" + }, + "bugs": { + "url": "https://github.com/jhiesey/stream-http/issues" + }, + "bundleDependencies": false, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.2.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "deprecated": false, + "description": "Streaming http in the browser", + "devDependencies": { + "basic-auth": "^1.0.3", + "brfs": "^1.4.0", + "cookie-parser": "^1.4.3", + "express": "^4.15.2", + "tape": "^4.0.0", + "ua-parser-js": "^0.7.7", + "webworkify": "^1.0.2", + "zuul": "^3.10.3" + }, + "homepage": "https://github.com/jhiesey/stream-http#readme", + "keywords": [ + "http", + "stream", + "streaming", + "xhr", + "http-browserify" + ], + "license": "MIT", + "main": "index.js", + "name": "stream-http", + "repository": { + "type": "git", + "url": "git://github.com/jhiesey/stream-http.git" + }, + "scripts": { + "test": "npm run test-node && ([ -n \"${TRAVIS_PULL_REQUEST}\" -a \"${TRAVIS_PULL_REQUEST}\" != 'false' ] || npm run test-browser)", + "test-browser": "zuul --no-coverage -- test/browser/*.js", + "test-browser-local": "zuul --local 8080 --no-coverage -- test/browser/*.js", + "test-node": "tape test/node/*.js" + }, + "version": "2.7.2" +} diff --git a/node_modules/stream-http/test/browser/abort.js b/node_modules/stream-http/test/browser/abort.js new file mode 100644 index 000000000..2cf43e97a --- /dev/null +++ b/node_modules/stream-http/test/browser/abort.js @@ -0,0 +1,55 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') + +var http = require('../..') + +test('abort before response', function (t) { + var req = http.get('/basic.txt', function (res) { + t.fail('unexpected response') + }) + req.abort() + t.end() +}) + +test('abort on response', function (t) { + var req = http.get('/basic.txt', function (res) { + req.abort() + t.end() + + res.on('end', function () { + t.fail('unexpected end') + }) + + res.on('data', function (data) { + t.fail('unexpected data') + }) + }) +}) + +test('abort on data', function (t) { + var req = http.get('/browserify.png?copies=5', function (res) { + var firstData = true + var failOnData = false + + res.on('end', function () { + t.fail('unexpected end') + }) + + res.on('data', function (data) { + if (failOnData) + t.fail('unexpected data') + else if (firstData) { + firstData = false + req.abort() + t.end() + process.nextTick(function () { + // Wait for any data that may have been queued + // in the stream before considering data events + // as errors + failOnData = true + }) + } + }) + }) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/auth.js b/node_modules/stream-http/test/browser/auth.js new file mode 100644 index 000000000..5c731154d --- /dev/null +++ b/node_modules/stream-http/test/browser/auth.js @@ -0,0 +1,22 @@ +var Buffer = require('buffer').Buffer +var test = require('tape') + +var http = require('../..') + +test('authentication', function (t) { + http.get({ + path: '/auth', + auth: 'TestUser:trustno1' + }, function (res) { + var buffers = [] + + res.on('end', function () { + t.ok(new Buffer('You\'re in!').equals(Buffer.concat(buffers)), 'authentication succeeded') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/binary-streaming.js b/node_modules/stream-http/test/browser/binary-streaming.js new file mode 100644 index 000000000..4d2d63e00 --- /dev/null +++ b/node_modules/stream-http/test/browser/binary-streaming.js @@ -0,0 +1,71 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Binary streaming doesn't work in IE10 or below or in Opera +var skipStreamingCheck = (browserName === 'Opera' || (browserName === 'IE' && browserVersion <= 10)) + +// Binary data gets corrupted in IE8 or below +var skipVerification = (browserName === 'IE' && browserVersion <= 8) + +// IE8 tends to throw up modal dialogs complaining about scripts running too long +// Since streaming doesn't actually work there anyway, just use one copy +var COPIES = skipVerification ? 1 : 20 +var MIN_PIECES = 2 + +var referenceOnce = fs.readFileSync(__dirname + '/../server/static/browserify.png') +var reference = new Buffer(referenceOnce.length * COPIES) +for(var i = 0; i < COPIES; i++) { + referenceOnce.copy(reference, referenceOnce.length * i) +} + +test('binary streaming', function (t) { + http.get({ + path: '/browserify.png?copies=' + COPIES, + mode: 'allow-wrong-content-type' + }, function (res) { + var buffers = [] + res.on('end', function () { + if (skipVerification) + t.skip('binary data not preserved on IE <= 8') + else + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + + if (skipStreamingCheck) + t.skip('streaming not available on IE <= 8') + else + t.ok(buffers.length >= MIN_PIECES, 'received in multiple parts') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) + +test('large binary request without streaming', function (t) { + http.get({ + path: '/browserify.png?copies=' + COPIES, + mode: 'default', + }, function (res) { + var buffers = [] + res.on('end', function () { + if (skipVerification) + t.skip('binary data not preserved on IE <= 8') + else + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/binary.js b/node_modules/stream-http/test/browser/binary.js new file mode 100644 index 000000000..e116b8d89 --- /dev/null +++ b/node_modules/stream-http/test/browser/binary.js @@ -0,0 +1,32 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Binary data gets corrupted in IE8 or below +var skipVerification = (browserName === 'IE' && browserVersion <= 8) + +var reference = fs.readFileSync(__dirname + '/../server/static/browserify.png') + +test('binary download', function (t) { + http.get('/browserify.png', function (res) { + var buffers = [] + + res.on('end', function () { + if (skipVerification) + t.skip('binary data not preserved on IE <= 8') + else + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/body-empty.js b/node_modules/stream-http/test/browser/body-empty.js new file mode 100644 index 000000000..8e99bb7b0 --- /dev/null +++ b/node_modules/stream-http/test/browser/body-empty.js @@ -0,0 +1,29 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') + +var http = require('../..') + +var reference = fs.readFileSync(__dirname + '/../server/static/basic.txt') + +test('get body empty', function (t) { + var req = http.request({ + path: '/verifyEmpty', + method: 'GET' + }, function (res) { + var buffers = [] + + res.on('end', function () { + console.log(Buffer.concat(buffers).toString('utf8')) + t.ok(Buffer.from('empty').equals(Buffer.concat(buffers)), 'response body indicates request body was empty') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + + req.write(reference) + req.end() +}) diff --git a/node_modules/stream-http/test/browser/cookie.js b/node_modules/stream-http/test/browser/cookie.js new file mode 100644 index 000000000..114c687c9 --- /dev/null +++ b/node_modules/stream-http/test/browser/cookie.js @@ -0,0 +1,25 @@ +var Buffer = require('buffer').Buffer +var test = require('tape') + +var http = require('../..') + +test('cookie', function (t) { + var cookie = 'hello=world' + window.document.cookie = cookie + + http.get({ + path: '/cookie', + withCredentials: false + }, function (res) { + var buffers = [] + + res.on('end', function () { + t.ok(new Buffer(cookie).equals(Buffer.concat(buffers)), 'hello cookie echoed') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) diff --git a/node_modules/stream-http/test/browser/disable-fetch.js b/node_modules/stream-http/test/browser/disable-fetch.js new file mode 100644 index 000000000..b50aa7111 --- /dev/null +++ b/node_modules/stream-http/test/browser/disable-fetch.js @@ -0,0 +1,37 @@ +var Buffer = require('buffer').Buffer +var test = require('tape') + +var http = require('../..') + +test('disable fetch', function (t) { + var originalFetch + if (typeof fetch === 'function') { + originalFetch = fetch + } + + var fetchCalled = false + fetch = function (input, options) { + fetchCalled = true + if (originalFetch) { + return originalFetch(input, options) + } + } + + http.get({ + path: '/browserify.png', + mode: 'disable-fetch' + }, function (res) { + t.ok(!fetchCalled, 'fetch was not called') + + if (originalFetch) { + fetch = originalFetch + } + + res.on('end', function () { + t.ok(res.headers['content-type'] === 'image/png', 'content-type was set correctly') + t.end() + }) + + res.on('data', function () {}) + }) +}) diff --git a/node_modules/stream-http/test/browser/error.js.disabled b/node_modules/stream-http/test/browser/error.js.disabled new file mode 100644 index 000000000..4a328d622 --- /dev/null +++ b/node_modules/stream-http/test/browser/error.js.disabled @@ -0,0 +1,12 @@ +var Buffer = require('buffer').Buffer +var test = require('tape') + +var http = require('../..') + +test('error handling', function (t) { + var req = http.get('https://0.0.0.0:0/fail.txt') + req.on('error', function (err) { + t.ok(err && ('message' in err), 'got error') + t.end() + }) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/headers.js b/node_modules/stream-http/test/browser/headers.js new file mode 100644 index 000000000..9d0c77c5c --- /dev/null +++ b/node_modules/stream-http/test/browser/headers.js @@ -0,0 +1,116 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +test('headers', function (t) { + http.get({ + path: '/testHeaders?Response-Header=bar&Response-Header-2=BAR2', + headers: { + 'Test-Request-Header': 'foo', + 'Test-Request-Header-2': 'FOO2' + } + }, function (res) { + var rawHeaders = [] + for (var i = 0; i < res.rawHeaders.length; i += 2) { + var lowerKey = res.rawHeaders[i].toLowerCase() + if (lowerKey.indexOf('test-') === 0) + rawHeaders.push(lowerKey, res.rawHeaders[i + 1]) + } + var header1Pos = rawHeaders.indexOf('test-response-header') + t.ok(header1Pos >= 0, 'raw response header 1 present') + t.equal(rawHeaders[header1Pos + 1], 'bar', 'raw response header value 1') + var header2Pos = rawHeaders.indexOf('test-response-header-2') + t.ok(header2Pos >= 0, 'raw response header 2 present') + t.equal(rawHeaders[header2Pos + 1], 'BAR2', 'raw response header value 2') + t.equal(rawHeaders.length, 4, 'correct number of raw headers') + + t.equal(res.headers['test-response-header'], 'bar', 'response header 1') + t.equal(res.headers['test-response-header-2'], 'BAR2', 'response header 2') + + var buffers = [] + + res.on('end', function () { + var body = JSON.parse(Buffer.concat(buffers).toString()) + t.equal(body['test-request-header'], 'foo', 'request header 1') + t.equal(body['test-request-header-2'], 'FOO2', 'request header 2') + t.equal(Object.keys(body).length, 2, 'correct number of request headers') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) + +test('arrays of headers', function (t) { + http.get({ + path: '/testHeaders?Response-Header=bar&Response-Header=BAR2', + headers: { + 'Test-Request-Header': ['foo', 'FOO2'] + } + }, function (res) { + var rawHeaders = [] + for (var i = 0; i < res.rawHeaders.length; i += 2) { + var lowerKey = res.rawHeaders[i].toLowerCase() + if (lowerKey.indexOf('test-') === 0) + rawHeaders.push(lowerKey, res.rawHeaders[i + 1]) + } + t.equal(rawHeaders[0], 'test-response-header', 'raw response header present') + t.equal(rawHeaders[1], 'bar, BAR2', 'raw response header value') + t.equal(rawHeaders.length, 2, 'correct number of raw headers') + + t.equal(res.headers['test-response-header'], 'bar, BAR2', 'response header') + + var buffers = [] + + res.on('end', function () { + var body = JSON.parse(Buffer.concat(buffers).toString()) + t.equal(body['test-request-header'], 'foo,FOO2', 'request headers') + t.equal(Object.keys(body).length, 1, 'correct number of request headers') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) + +test('content-type response header', function (t) { + http.get('/testHeaders', function (res) { + t.equal(res.headers['content-type'], 'application/json', 'content-type preserved') + t.end() + }) +}) + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +var browserMinorVersion = browser.minor || 0 +// The content-type header is broken when 'prefer-streaming' or 'allow-wrong-content-type' +// is passed in browsers that rely on xhr.overrideMimeType(), namely older chrome, safari 6-10.0, and the stock Android browser +// Note that Safari 10.0 on iOS 10.3 doesn't need to override the mime type, so the content-type is preserved. +var wrongMimeType = ((browserName === 'Chrome' && browserVersion <= 42) || + ((browserName === 'Safari' || browserName === 'Mobile Safari') && browserVersion >= 6 && (browserVersion < 10 || (browserVersion == 10 && browserMinorVersion == 0))) + || (browserName === 'Android Browser')) + +test('content-type response header with forced streaming', function (t) { + http.get({ + path: '/testHeaders', + mode: 'prefer-streaming' + }, function (res) { + if (wrongMimeType) { + // allow both the 'wrong' and correct mime type, since sometimes it's impossible to tell which to expect + // from the browser version alone (e.g. Safari 10.0 on iOS 10.2 vs iOS 10.3) + var contentType = res.headers['content-type'] + var correct = (contentType === 'text/plain; charset=x-user-defined') || (contentType === 'application/json') + t.ok(correct, 'content-type either preserved or overridden') + } else + t.equal(res.headers['content-type'], 'application/json', 'content-type preserved') + t.end() + }) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/lib/webworker-worker.js b/node_modules/stream-http/test/browser/lib/webworker-worker.js new file mode 100644 index 000000000..c3c8b913c --- /dev/null +++ b/node_modules/stream-http/test/browser/lib/webworker-worker.js @@ -0,0 +1,20 @@ +var Buffer = require('buffer').Buffer + +var http = require('../../..') + +module.exports = function (self) { + self.addEventListener('message', function (ev) { + var url = ev.data + http.get(url, function (res) { + var buffers = [] + + res.on('end', function () { + self.postMessage(Buffer.concat(buffers).buffer) + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + }) +} \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/package.json b/node_modules/stream-http/test/browser/package.json new file mode 100644 index 000000000..f4f7b5ed1 --- /dev/null +++ b/node_modules/stream-http/test/browser/package.json @@ -0,0 +1,5 @@ +{ + "browserify": { + "transform": [ "brfs" ] + } +} diff --git a/node_modules/stream-http/test/browser/post-binary.js b/node_modules/stream-http/test/browser/post-binary.js new file mode 100644 index 000000000..31b465caa --- /dev/null +++ b/node_modules/stream-http/test/browser/post-binary.js @@ -0,0 +1,42 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Binary request bodies don't work in a bunch of browsers +var skipVerification = ((browserName === 'Opera' && browserVersion <= 11) || + (browserName === 'IE' && browserVersion <= 10) || + (browserName === 'Safari' && browserVersion <= 5) || + (browserName === 'WebKit' && browserVersion <= 534) || // Old mobile safari + (browserName === 'Android Browser' && browserVersion <= 4)) + +var reference = fs.readFileSync(__dirname + '/../server/static/browserify.png') + +test('post binary', function (t) { + var req = http.request({ + path: '/echo', + method: 'POST' + }, function (res) { + var buffers = [] + + res.on('end', function () { + if (skipVerification) + t.skip('binary data not preserved on this browser') + else + t.ok(reference.equals(Buffer.concat(buffers)), 'echoed contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + + req.write(reference) + req.end() +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/post-text.js b/node_modules/stream-http/test/browser/post-text.js new file mode 100644 index 000000000..1cea8d7a7 --- /dev/null +++ b/node_modules/stream-http/test/browser/post-text.js @@ -0,0 +1,48 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') + +var http = require('../..') + +var reference = fs.readFileSync(__dirname + '/../server/static/basic.txt') + +test('post text', function (t) { + var req = http.request({ + path: '/echo', + method: 'POST' + }, function (res) { + var buffers = [] + + res.on('end', function () { + t.ok(reference.equals(Buffer.concat(buffers)), 'echoed contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + + req.write(reference) + req.end() +}) + +test('post text with data in end()', function (t) { + var req = http.request({ + path: '/echo', + method: 'POST' + }, function (res) { + var buffers = [] + + res.on('end', function () { + t.ok(reference.equals(Buffer.concat(buffers)), 'echoed contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) + + req.end(reference) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/text-streaming.js b/node_modules/stream-http/test/browser/text-streaming.js new file mode 100644 index 000000000..812ef1457 --- /dev/null +++ b/node_modules/stream-http/test/browser/text-streaming.js @@ -0,0 +1,43 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Streaming doesn't work in IE9 or below or in Opera +var skipStreamingCheck = (browserName === 'Opera' || (browserName === 'IE' && browserVersion <= 9)) + +var COPIES = 1000 +var MIN_PIECES = 5 + +var referenceOnce = fs.readFileSync(__dirname + '/../server/static/basic.txt') +var reference = new Buffer(referenceOnce.length * COPIES) +for(var i = 0; i < COPIES; i++) { + referenceOnce.copy(reference, referenceOnce.length * i) +} + +test('text streaming', function (t) { + http.get({ + path: '/basic.txt?copies=' + COPIES, + mode: 'prefer-streaming' + }, function (res) { + var buffers = [] + + res.on('end', function () { + if (skipStreamingCheck) + t.skip('streaming not available on IE <= 8') + else + t.ok(buffers.length >= MIN_PIECES, 'received in multiple parts') + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/text.js b/node_modules/stream-http/test/browser/text.js new file mode 100644 index 000000000..6cc1c8148 --- /dev/null +++ b/node_modules/stream-http/test/browser/text.js @@ -0,0 +1,44 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') +var url = require('url') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Response urls don't work on many browsers +var skipResponseUrl = ((browserName === 'Opera') || + (browserName === 'IE') || + (browserName === 'Edge') || + (browserName === 'Chrome' && browserVersion <= 36) || + (browserName === 'Firefox' && browserVersion <= 31) || + ((browserName === 'Safari' || browserName === 'Mobile Safari') && browserVersion <= 8) || + (browserName === 'WebKit') || // Old mobile safari + (browserName === 'Android Browser' && browserVersion <= 4)) + +var reference = fs.readFileSync(__dirname + '/../server/static/basic.txt') + +test('basic functionality', function (t) { + http.get('/basic.txt', function (res) { + if (!skipResponseUrl) { + var testUrl = url.resolve(global.location.href, '/basic.txt') + // Redirects aren't tested, but presumably only browser bugs + // would cause this to fail only after redirects. + t.equals(res.url, testUrl, 'response url correct') + } + + var buffers = [] + + res.on('end', function () { + t.ok(reference.equals(Buffer.concat(buffers)), 'contents match') + t.end() + }) + + res.on('data', function (data) { + buffers.push(data) + }) + }) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/browser/timeout.js.disabled b/node_modules/stream-http/test/browser/timeout.js.disabled new file mode 100644 index 000000000..a49efdfb3 --- /dev/null +++ b/node_modules/stream-http/test/browser/timeout.js.disabled @@ -0,0 +1,33 @@ +var Buffer = require('buffer').Buffer +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') +var url = require('url') + +var http = require('../..') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major + +var skipTimeout = ((browserName === 'Opera' && browserVersion <= 12) || + (browserName === 'Safari' && browserVersion <= 5)) + + +test('emits timeout events', function (t) { + if (skipTimeout) { + return t.skip('Browser does not support setting timeouts') + } + + var req = http.request({ + path: '/basic.txt', + timeout: 1 + }) + + req.on('timeout', function () { + t.pass('timeout caught') + t.end() // the test will timeout if this does not happen + }) + + req.end() +}) diff --git a/node_modules/stream-http/test/browser/webworker.js b/node_modules/stream-http/test/browser/webworker.js new file mode 100644 index 000000000..b1df06471 --- /dev/null +++ b/node_modules/stream-http/test/browser/webworker.js @@ -0,0 +1,32 @@ +var fs = require('fs') +var test = require('tape') +var UAParser = require('ua-parser-js') +var url = require('url') +var work = require('webworkify') + +var browser = (new UAParser()).setUA(navigator.userAgent).getBrowser() +var browserName = browser.name +var browserVersion = browser.major +// Skip browsers with poor or nonexistant WebWorker support +var skip = ((browserName === 'Opera' && browserVersion <= 12) || + (browserName === 'IE' && browserVersion <= 10) || + (browserName === 'Safari' && browserVersion <= 5) || + (browserName === 'WebKit' && browserVersion <= 534) || // Old mobile safari + (browserName === 'Android Browser' && browserVersion <= 4)) + +var reference = fs.readFileSync(__dirname + '/../server/static/browserify.png') + +test('binary download in WebWorker', { + skip: skip +}, function (t) { + // We have to use a global url, since webworkify puts the worker in a Blob, + // which doesn't have a proper location + var testUrl = url.resolve(global.location.href, '/browserify.png') + var worker = work(require('./lib/webworker-worker.js')) + worker.addEventListener('message', function (ev) { + var data = new Buffer(new Uint8Array(ev.data)) + t.ok(reference.equals(data), 'contents match') + t.end() + }) + worker.postMessage(testUrl) +}) \ No newline at end of file diff --git a/node_modules/stream-http/test/node/http-browserify.js b/node_modules/stream-http/test/node/http-browserify.js new file mode 100644 index 000000000..fda851232 --- /dev/null +++ b/node_modules/stream-http/test/node/http-browserify.js @@ -0,0 +1,133 @@ +// These tests are teken from http-browserify to ensure compatibility with +// that module +var test = require('tape') +var url = require('url') + +var location = 'http://localhost:8081/foo/123' + +var noop = function() {} +global.location = url.parse(location) +global.XMLHttpRequest = function() { + this.open = noop + this.send = noop + this.withCredentials = false +} + +var moduleName = require.resolve('../../') +delete require.cache[moduleName] +var http = require('../../') + +test('Test simple url string', function(t) { + var testUrl = { path: '/api/foo' } + var request = http.get(testUrl, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://localhost:8081/api/foo', 'Url should be correct') + t.end() + +}) + +test('Test full url object', function(t) { + var testUrl = { + host: "localhost:8081", + hostname: "localhost", + href: "http://localhost:8081/api/foo?bar=baz", + method: "GET", + path: "/api/foo?bar=baz", + pathname: "/api/foo", + port: "8081", + protocol: "http:", + query: "bar=baz", + search: "?bar=baz", + slashes: true + } + + var request = http.get(testUrl, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://localhost:8081/api/foo?bar=baz', 'Url should be correct') + t.end() +}) + +test('Test alt protocol', function(t) { + var params = { + protocol: "foo:", + hostname: "localhost", + port: "3000", + path: "/bar" + } + + var request = http.get(params, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'foo://localhost:3000/bar', 'Url should be correct') + t.end() +}) + +test('Test page with \'file:\' protocol', function (t) { + var params = { + hostname: 'localhost', + port: 3000, + path: '/bar' + } + + var fileLocation = 'file:///home/me/stuff/index.html' + + var normalLocation = global.location + global.location = url.parse(fileLocation) // Temporarily change the location + var request = http.get(params, noop) + global.location = normalLocation // Reset the location + + var resolved = url.resolve(fileLocation, request._opts.url) + t.equal(resolved, 'http://localhost:3000/bar', 'Url should be correct') + t.end() +}) + +test('Test string as parameters', function(t) { + var testUrl = '/api/foo' + var request = http.get(testUrl, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://localhost:8081/api/foo', 'Url should be correct') + t.end() +}) + +test('Test withCredentials param', function(t) { + var url = '/api/foo' + + var request = http.get({ url: url, withCredentials: false }, noop) + t.equal(request._xhr.withCredentials, false, 'xhr.withCredentials should be false') + + var request = http.get({ url: url, withCredentials: true }, noop) + t.equal(request._xhr.withCredentials, true, 'xhr.withCredentials should be true') + + var request = http.get({ url: url }, noop) + t.equal(request._xhr.withCredentials, false, 'xhr.withCredentials should be false') + + t.end() +}) + +test('Test ipv6 address', function(t) { + var testUrl = 'http://[::1]:80/foo' + var request = http.get(testUrl, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://[::1]:80/foo', 'Url should be correct') + t.end() +}) + +test('Test relative path in url', function(t) { + var params = { path: './bar' } + var request = http.get(params, noop) + + var resolved = url.resolve(location, request._opts.url) + t.equal(resolved, 'http://localhost:8081/foo/bar', 'Url should be correct') + t.end() +}) + +test('Cleanup', function (t) { + delete global.location + delete global.XMLHttpRequest + delete require.cache[moduleName] + t.end() +}) diff --git a/node_modules/stream-http/test/server/index.js b/node_modules/stream-http/test/server/index.js new file mode 100644 index 000000000..f9f45de04 --- /dev/null +++ b/node_modules/stream-http/test/server/index.js @@ -0,0 +1,137 @@ +var cookieParser = require('cookie-parser') +var basicAuth = require('basic-auth') +var express = require('express') +var fs = require('fs') +var http = require('http') +var path = require('path') +var url = require('url') + +var app = express() +var server = http.createServer(app) + +// Otherwise, use 'application/octet-stream' +var copiesMimeTypes = { + '/basic.txt': 'text/plain' +} + +var maxDelay = 5000 // ms + +// This should make sure bodies aren't cached +// so the streaming tests always pass +app.use(function (req, res, next) { + res.setHeader('Cache-Control', 'no-store') + next() +}) + +app.get('/testHeaders', function (req, res) { + var parsed = url.parse(req.url, true) + + // Values in query parameters are sent as response headers + Object.keys(parsed.query).forEach(function (key) { + res.setHeader('Test-' + key, parsed.query[key]) + }) + + res.setHeader('Content-Type', 'application/json') + res.setHeader('Cache-Control', 'no-cache') + + // Request headers are sent in the body as json + var reqHeaders = {} + Object.keys(req.headers).forEach(function (key) { + key = key.toLowerCase() + if (key.indexOf('test-') === 0) { + // different browsers format request headers with multiple values + // slightly differently, so normalize + reqHeaders[key] = req.headers[key].replace(', ', ',') + } + }) + + var body = JSON.stringify(reqHeaders) + res.setHeader('Content-Length', body.length) + res.write(body) + res.end() +}) + +app.get('/cookie', cookieParser(), function (req, res) { + res.setHeader('Content-Type', 'text/plain') + res.write('hello=' + req.cookies.hello) + res.end() +}) + +app.get('/auth', function (req, res) { + var user = basicAuth(req) + + if (!user || user.name !== 'TestUser' || user.pass !== 'trustno1') { + res.setHeader('WWW-Authenticate', 'Basic realm="example"') + res.end('Access denied') + } else { + res.setHeader('Content-Type', 'text/plain') + res.write('You\'re in!') + res.end() + } +}) + +app.post('/echo', function (req, res) { + res.setHeader('Content-Type', 'application/octet-stream') + req.pipe(res) +}) + +app.use('/verifyEmpty', function (req, res) { + var empty = true + req.on('data', function (buf) { + if (buf.length > 0) { + empty = false + } + }) + req.on('end', function () { + res.setHeader('Content-Type', 'text/plain') + + if (empty) { + res.end('empty') + } else { + res.end('not empty') + } + }) +}) + +app.use(function (req, res, next) { + var parsed = url.parse(req.url, true) + + if ('copies' in parsed.query) { + var totalCopies = parseInt(parsed.query.copies, 10) + function fail () { + res.statusCode = 500 + res.end() + } + fs.readFile(path.join(__dirname, 'static', parsed.pathname), function (err, data) { + if (err) + return fail() + + var mimeType = copiesMimeTypes[parsed.pathname] || 'application/octet-stream' + res.setHeader('Content-Type', mimeType) + res.setHeader('Content-Length', data.length * totalCopies) + var pieceDelay = maxDelay / totalCopies + if (pieceDelay > 100) + pieceDelay = 100 + + function write (copies) { + if (copies === 0) + return res.end() + + res.write(data, function (err) { + if (err) + return fail() + setTimeout(write.bind(null, copies - 1), pieceDelay) + }) + } + write(totalCopies) + }) + return + } + next() +}) + +app.use(express.static(path.join(__dirname, 'static'))) + +var port = parseInt(process.env.ZUUL_PORT) || 8199 +console.log('Test server listening on port', port) +server.listen(port) diff --git a/node_modules/stream-http/test/server/static/basic.txt b/node_modules/stream-http/test/server/static/basic.txt new file mode 100644 index 000000000..aa7a0cc64 --- /dev/null +++ b/node_modules/stream-http/test/server/static/basic.txt @@ -0,0 +1,19 @@ +Mary had a little lamb, +His fleece was white as snow, +And everywhere that Mary went, +The lamb was sure to go. + +He followed her to school one day, +Which was against the rule, +It made the children laugh and play +To see a lamb at school. + +And so the teacher turned it out, +But still it lingered near, +And waited patiently about, +Till Mary did appear. + +"Why does the lamb love Mary so?" +The eager children cry. +"Why, Mary loves the lamb, you know." +The teacher did reply. diff --git a/node_modules/stream-http/test/server/static/browserify.png b/node_modules/stream-http/test/server/static/browserify.png new file mode 100644 index 0000000000000000000000000000000000000000..98d6bf5f6f5cb17d6fcca895f410102f9b2cd622 GIT binary patch literal 31422 zcmXt91yq#Z)26#qx}>|iTS`E>M7jl}8|g;68$?RFVFl^VMH*@8-X*`6-}(NW1G{kc zzW3gVXJ(!mqTj14Vxp0v!N9;^Dl5rp!N9;?0q@sQkbs}e?+%H97X)`1dAa0dZBW?=_}!hZ`t7$&!0lg& z-6`KrjtlRfPUf9KJ#i6W(ZXel-ZQOtycM{CBPbc`!sjfA$9aJDLy~zwk=Y=kSw?vj zY&PDg3oqzJhiJHH+;z-4bP}=IADtXd#y$Ta1lDV!7V%xRa$XUca-;snhF5zLk~zYd zo<*Ud)xh${gJ%_dM(9Fm0||ZP;lg}_-G#M^`bg4N)LOCPaxwIti2zNWFqJEajK^h* zkP0L0xm!x*R7cl4qj2|O`tqq+{pRgw%Fo?+|A39^58wAaI{oen*L&0`qz@vojb<(z z3M)_~Xovza;=qL=q2Rzh!ewWK-=Bpu2D^ul`T2D$V3q-Ul*CnD|fqsQ``{T^F^V|O(xthlZAtj#xwKSwXAXA2$xb*<++ zyEHL;U?Pa|5?L-c4KDWF%kzfThU6O>swc(D5Q#VXZaWYl3WH!leKWc5UsZ9)H1Wtj z*s0NeUq!i0kD|sY&H#ta-U_?5D=;t{bEufTQm{6UuKD^%xObVo;h8~$H$%yey=;

f61*3TbU>Mvy!+N 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∈Eo7_57n%<58;lFUQvp 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 F{|{O>Fs1+i literal 0 HcmV?d00001 diff --git a/node_modules/stream-http/test/server/static/test-polyfill.js b/node_modules/stream-http/test/server/static/test-polyfill.js new file mode 100644 index 000000000..f6a1a9d3d --- /dev/null +++ b/node_modules/stream-http/test/server/static/test-polyfill.js @@ -0,0 +1,9 @@ +if (!String.prototype.trim) { + (function() { + // Make sure we trim BOM and NBSP + var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + String.prototype.trim = function() { + return this.replace(rtrim, ''); + }; + })(); +} diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js new file mode 100644 index 000000000..bbc49d29b --- /dev/null +++ b/node_modules/string-width/index.js @@ -0,0 +1,36 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); + +module.exports = str => { + if (typeof str !== 'string' || str.length === 0) { + return 0; + } + + str = stripAnsi(str); + + let width = 0; + + for (let i = 0; i < str.length; i++) { + const code = str.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; diff --git a/node_modules/string-width/license b/node_modules/string-width/license new file mode 100644 index 000000000..e7af2f771 --- /dev/null +++ b/node_modules/string-width/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width/node_modules/ansi-regex/index.js b/node_modules/string-width/node_modules/ansi-regex/index.js new file mode 100644 index 000000000..c4aaecf50 --- /dev/null +++ b/node_modules/string-width/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = () => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[a-zA-Z\\d]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PRZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, 'g'); +}; diff --git a/node_modules/string-width/node_modules/ansi-regex/license b/node_modules/string-width/node_modules/ansi-regex/license new file mode 100644 index 000000000..e7af2f771 --- /dev/null +++ b/node_modules/string-width/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width/node_modules/ansi-regex/package.json b/node_modules/string-width/node_modules/ansi-regex/package.json new file mode 100644 index 000000000..e78dccc1f --- /dev/null +++ b/node_modules/string-width/node_modules/ansi-regex/package.json @@ -0,0 +1,85 @@ +{ + "_from": "ansi-regex@^3.0.0", + "_id": "ansi-regex@3.0.0", + "_inBundle": false, + "_integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "_location": "/string-width/ansi-regex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ansi-regex@^3.0.0", + "name": "ansi-regex", + "escapedName": "ansi-regex", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/string-width/strip-ansi" + ], + "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "_shasum": "ed0317c322064f79466c02966bddb605ab37d998", + "_spec": "ansi-regex@^3.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/string-width/node_modules/strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/ansi-regex/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Regular expression for matching ANSI escape codes", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/chalk/ansi-regex#readme", + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "license": "MIT", + "name": "ansi-regex", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/ansi-regex.git" + }, + "scripts": { + "test": "xo && ava", + "view-supported": "node fixtures/view-codes.js" + }, + "version": "3.0.0" +} diff --git a/node_modules/string-width/node_modules/ansi-regex/readme.md b/node_modules/string-width/node_modules/ansi-regex/readme.md new file mode 100644 index 000000000..22db1c340 --- /dev/null +++ b/node_modules/string-width/node_modules/ansi-regex/readme.md @@ -0,0 +1,46 @@ +# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex) + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] +``` + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +## License + +MIT diff --git a/node_modules/string-width/node_modules/is-fullwidth-code-point/index.js b/node_modules/string-width/node_modules/is-fullwidth-code-point/index.js new file mode 100644 index 000000000..d506327c3 --- /dev/null +++ b/node_modules/string-width/node_modules/is-fullwidth-code-point/index.js @@ -0,0 +1,46 @@ +'use strict'; +/* eslint-disable yoda */ +module.exports = x => { + if (Number.isNaN(x)) { + return false; + } + + // code points are derived from: + // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt + if ( + x >= 0x1100 && ( + x <= 0x115f || // Hangul Jamo + x === 0x2329 || // LEFT-POINTING ANGLE BRACKET + x === 0x232a || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2e80 <= x && x <= 0x3247 && x !== 0x303f) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + (0x3250 <= x && x <= 0x4dbf) || + // CJK Unified Ideographs .. Yi Radicals + (0x4e00 <= x && x <= 0xa4c6) || + // Hangul Jamo Extended-A + (0xa960 <= x && x <= 0xa97c) || + // Hangul Syllables + (0xac00 <= x && x <= 0xd7a3) || + // CJK Compatibility Ideographs + (0xf900 <= x && x <= 0xfaff) || + // Vertical Forms + (0xfe10 <= x && x <= 0xfe19) || + // CJK Compatibility Forms .. Small Form Variants + (0xfe30 <= x && x <= 0xfe6b) || + // Halfwidth and Fullwidth Forms + (0xff01 <= x && x <= 0xff60) || + (0xffe0 <= x && x <= 0xffe6) || + // Kana Supplement + (0x1b000 <= x && x <= 0x1b001) || + // Enclosed Ideographic Supplement + (0x1f200 <= x && x <= 0x1f251) || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + (0x20000 <= x && x <= 0x3fffd) + ) + ) { + return true; + } + + return false; +}; diff --git a/node_modules/string-width/node_modules/is-fullwidth-code-point/license b/node_modules/string-width/node_modules/is-fullwidth-code-point/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/string-width/node_modules/is-fullwidth-code-point/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/string-width/node_modules/is-fullwidth-code-point/package.json b/node_modules/string-width/node_modules/is-fullwidth-code-point/package.json new file mode 100644 index 000000000..f5ac55b5c --- /dev/null +++ b/node_modules/string-width/node_modules/is-fullwidth-code-point/package.json @@ -0,0 +1,77 @@ +{ + "_from": "is-fullwidth-code-point@^2.0.0", + "_id": "is-fullwidth-code-point@2.0.0", + "_inBundle": false, + "_integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "_location": "/string-width/is-fullwidth-code-point", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-fullwidth-code-point@^2.0.0", + "name": "is-fullwidth-code-point", + "escapedName": "is-fullwidth-code-point", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/string-width" + ], + "_resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "_shasum": "a3b30a5c4f199183167aaab93beefae3ddfb654f", + "_spec": "is-fullwidth-code-point@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-fullwidth-code-point/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if the character represented by a given Unicode code point is fullwidth", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-fullwidth-code-point#readme", + "keywords": [ + "fullwidth", + "full-width", + "full", + "width", + "unicode", + "character", + "char", + "string", + "str", + "codepoint", + "code", + "point", + "is", + "detect", + "check" + ], + "license": "MIT", + "name": "is-fullwidth-code-point", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-fullwidth-code-point.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0", + "xo": { + "esnext": true + } +} diff --git a/node_modules/string-width/node_modules/is-fullwidth-code-point/readme.md b/node_modules/string-width/node_modules/is-fullwidth-code-point/readme.md new file mode 100644 index 000000000..093b0281b --- /dev/null +++ b/node_modules/string-width/node_modules/is-fullwidth-code-point/readme.md @@ -0,0 +1,39 @@ +# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) + +> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) + + +## Install + +``` +$ npm install --save is-fullwidth-code-point +``` + + +## Usage + +```js +const isFullwidthCodePoint = require('is-fullwidth-code-point'); + +isFullwidthCodePoint('谢'.codePointAt()); +//=> true + +isFullwidthCodePoint('a'.codePointAt()); +//=> false +``` + + +## API + +### isFullwidthCodePoint(input) + +#### input + +Type: `number` + +[Code point](https://en.wikipedia.org/wiki/Code_point) of a character. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/string-width/node_modules/strip-ansi/index.js b/node_modules/string-width/node_modules/strip-ansi/index.js new file mode 100644 index 000000000..96e0292c8 --- /dev/null +++ b/node_modules/string-width/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = input => typeof input === 'string' ? input.replace(ansiRegex(), '') : input; diff --git a/node_modules/string-width/node_modules/strip-ansi/license b/node_modules/string-width/node_modules/strip-ansi/license new file mode 100644 index 000000000..e7af2f771 --- /dev/null +++ b/node_modules/string-width/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width/node_modules/strip-ansi/package.json b/node_modules/string-width/node_modules/strip-ansi/package.json new file mode 100644 index 000000000..087d344c9 --- /dev/null +++ b/node_modules/string-width/node_modules/strip-ansi/package.json @@ -0,0 +1,84 @@ +{ + "_from": "strip-ansi@^4.0.0", + "_id": "strip-ansi@4.0.0", + "_inBundle": false, + "_integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "_location": "/string-width/strip-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-ansi@^4.0.0", + "name": "strip-ansi", + "escapedName": "strip-ansi", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/string-width" + ], + "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "_shasum": "a8479022eb1ac368a871389b635262c505ee368f", + "_spec": "strip-ansi@^4.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/strip-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "deprecated": false, + "description": "Strip ANSI escape codes", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/chalk/strip-ansi#readme", + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "name": "strip-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/strip-ansi.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "4.0.0" +} diff --git a/node_modules/string-width/node_modules/strip-ansi/readme.md b/node_modules/string-width/node_modules/strip-ansi/readme.md new file mode 100644 index 000000000..dc76f0cb1 --- /dev/null +++ b/node_modules/string-width/node_modules/strip-ansi/readme.md @@ -0,0 +1,39 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' +``` + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +## License + +MIT diff --git a/node_modules/string-width/package.json b/node_modules/string-width/package.json new file mode 100644 index 000000000..f21f042e8 --- /dev/null +++ b/node_modules/string-width/package.json @@ -0,0 +1,87 @@ +{ + "_from": "string-width@^2.0.0", + "_id": "string-width@2.1.1", + "_inBundle": false, + "_integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "_location": "/string-width", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "string-width@^2.0.0", + "name": "string-width", + "escapedName": "string-width", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "_shasum": "ab93f27a8dc13d28cac815c462143a6d9012ae9e", + "_spec": "string-width@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/yargs", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/string-width/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "deprecated": false, + "description": "Get the visual width of a string - the number of columns required to display it", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/string-width#readme", + "keywords": [ + "string", + "str", + "character", + "char", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "license": "MIT", + "name": "string-width", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/string-width.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.1.1" +} diff --git a/node_modules/string-width/readme.md b/node_modules/string-width/readme.md new file mode 100644 index 000000000..df5b7199f --- /dev/null +++ b/node_modules/string-width/readme.md @@ -0,0 +1,42 @@ +# string-width [![Build Status](https://travis-ci.org/sindresorhus/string-width.svg?branch=master)](https://travis-ci.org/sindresorhus/string-width) + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('古'); +//=> 2 + +stringWidth('\u001b[1m古\u001b[22m'); +//=> 2 + +stringWidth('a'); +//=> 1 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/string_decoder/.npmignore b/node_modules/string_decoder/.npmignore new file mode 100644 index 000000000..206320cc1 --- /dev/null +++ b/node_modules/string_decoder/.npmignore @@ -0,0 +1,2 @@ +build +test diff --git a/node_modules/string_decoder/LICENSE b/node_modules/string_decoder/LICENSE new file mode 100644 index 000000000..778edb207 --- /dev/null +++ b/node_modules/string_decoder/LICENSE @@ -0,0 +1,48 @@ +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + diff --git a/node_modules/string_decoder/README.md b/node_modules/string_decoder/README.md new file mode 100644 index 000000000..dc3a2d216 --- /dev/null +++ b/node_modules/string_decoder/README.md @@ -0,0 +1,28 @@ +# string_decoder + +***Node-core v7.0.0 string_decoder for userland*** + + +[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/) +[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/) + + +```bash +npm install --save string_decoder +``` + +***Node-core string_decoderstring_decoder for userland*** + +This package is a mirror of the string_decoder implementation in Node-core. + +Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v7.8.0/docs/api/). + +As of version 1.0.0 **string_decoder** uses semantic versioning. + +## Previous versions + +Previous version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. + +## Update + +The *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version. diff --git a/node_modules/string_decoder/lib/string_decoder.js b/node_modules/string_decoder/lib/string_decoder.js new file mode 100644 index 000000000..26fb94c34 --- /dev/null +++ b/node_modules/string_decoder/lib/string_decoder.js @@ -0,0 +1,272 @@ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. +function utf8CheckByte(byte) { + if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; + return -1; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'.repeat(p); + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'.repeat(p + 1); + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'.repeat(p + 2); + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character for each buffered byte of a (partial) +// character needs to be added to the output. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed); + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} + +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} + +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} \ No newline at end of file diff --git a/node_modules/string_decoder/package.json b/node_modules/string_decoder/package.json new file mode 100644 index 000000000..779733a82 --- /dev/null +++ b/node_modules/string_decoder/package.json @@ -0,0 +1,56 @@ +{ + "_from": "string_decoder@~1.0.3", + "_id": "string_decoder@1.0.3", + "_inBundle": false, + "_integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "_location": "/string_decoder", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "string_decoder@~1.0.3", + "name": "string_decoder", + "escapedName": "string_decoder", + "rawSpec": "~1.0.3", + "saveSpec": null, + "fetchSpec": "~1.0.3" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "_shasum": "0fc67d7c141825de94282dd536bec6b9bce860ab", + "_spec": "string_decoder@~1.0.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/readable-stream", + "bugs": { + "url": "https://github.com/rvagg/string_decoder/issues" + }, + "bundleDependencies": false, + "dependencies": { + "safe-buffer": "~5.1.0" + }, + "deprecated": false, + "description": "The string_decoder module from Node core", + "devDependencies": { + "babel-polyfill": "^6.23.0", + "tap": "~0.4.8" + }, + "homepage": "https://github.com/rvagg/string_decoder", + "keywords": [ + "string", + "decoder", + "browser", + "browserify" + ], + "license": "MIT", + "main": "lib/string_decoder.js", + "name": "string_decoder", + "repository": { + "type": "git", + "url": "git://github.com/rvagg/string_decoder.git" + }, + "scripts": { + "test": "tap test/parallel/*.js && node test/verify-dependencies" + }, + "version": "1.0.3" +} diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js new file mode 100644 index 000000000..099480fbf --- /dev/null +++ b/node_modules/strip-ansi/index.js @@ -0,0 +1,6 @@ +'use strict'; +var ansiRegex = require('ansi-regex')(); + +module.exports = function (str) { + return typeof str === 'string' ? str.replace(ansiRegex, '') : str; +}; diff --git a/node_modules/strip-ansi/license b/node_modules/strip-ansi/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/strip-ansi/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json new file mode 100644 index 000000000..9117f3d8b --- /dev/null +++ b/node_modules/strip-ansi/package.json @@ -0,0 +1,101 @@ +{ + "_from": "strip-ansi@^3.0.0", + "_id": "strip-ansi@3.0.1", + "_inBundle": false, + "_integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "_location": "/strip-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-ansi@^3.0.0", + "name": "strip-ansi", + "escapedName": "strip-ansi", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/chalk" + ], + "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "_shasum": "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf", + "_spec": "strip-ansi@^3.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/chalk", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/strip-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "deprecated": false, + "description": "Strip ANSI escape codes", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/chalk/strip-ansi#readme", + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "maintainers": [ + { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + { + "name": "Joshua Boy Nicolai Appelman", + "email": "joshua@jbna.nl", + "url": "jbna.nl" + }, + { + "name": "JD Ballard", + "email": "i.am.qix@gmail.com", + "url": "github.com/qix-" + } + ], + "name": "strip-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/strip-ansi.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.0.1" +} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md new file mode 100644 index 000000000..cb7d9ff7e --- /dev/null +++ b/node_modules/strip-ansi/readme.md @@ -0,0 +1,33 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install --save strip-ansi +``` + + +## Usage + +```js +var stripAnsi = require('strip-ansi'); + +stripAnsi('\u001b[4mcake\u001b[0m'); +//=> 'cake' +``` + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/strip-bom/index.js b/node_modules/strip-bom/index.js new file mode 100644 index 000000000..b00feb9a4 --- /dev/null +++ b/node_modules/strip-bom/index.js @@ -0,0 +1,14 @@ +'use strict'; +module.exports = x => { + if (typeof x !== 'string') { + throw new TypeError('Expected a string, got ' + typeof x); + } + + // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string + // conversion translates it to FEFF (UTF-16 BOM) + if (x.charCodeAt(0) === 0xFEFF) { + return x.slice(1); + } + + return x; +}; diff --git a/node_modules/strip-bom/license b/node_modules/strip-bom/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/strip-bom/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/strip-bom/package.json b/node_modules/strip-bom/package.json new file mode 100644 index 000000000..6f99d73d7 --- /dev/null +++ b/node_modules/strip-bom/package.json @@ -0,0 +1,72 @@ +{ + "_from": "strip-bom@^3.0.0", + "_id": "strip-bom@3.0.0", + "_inBundle": false, + "_integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "_location": "/strip-bom", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-bom@^3.0.0", + "name": "strip-bom", + "escapedName": "strip-bom", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/load-json-file" + ], + "_resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "_shasum": "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3", + "_spec": "strip-bom@^3.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/load-json-file", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/strip-bom/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Strip UTF-8 byte order mark (BOM) from a string", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/strip-bom#readme", + "keywords": [ + "strip", + "bom", + "byte", + "order", + "mark", + "unicode", + "utf8", + "utf-8", + "remove", + "delete", + "trim", + "text", + "string" + ], + "license": "MIT", + "name": "strip-bom", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/strip-bom.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.0.0" +} diff --git a/node_modules/strip-bom/readme.md b/node_modules/strip-bom/readme.md new file mode 100644 index 000000000..812a98071 --- /dev/null +++ b/node_modules/strip-bom/readme.md @@ -0,0 +1,36 @@ +# strip-bom [![Build Status](https://travis-ci.org/sindresorhus/strip-bom.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-bom) + +> Strip UTF-8 [byte order mark](http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8) (BOM) from a string + +From Wikipedia: + +> The Unicode Standard permits the BOM in UTF-8, but does not require nor recommend its use. Byte order has no meaning in UTF-8. + + +## Install + +``` +$ npm install --save strip-bom +``` + + +## Usage + +```js +const stripBom = require('strip-bom'); + +stripBom('\uFEFFunicorn'); +//=> 'unicorn' +``` + + +## Related + +- [strip-bom-cli](https://github.com/sindresorhus/strip-bom-cli) - CLI for this module +- [strip-bom-buf](https://github.com/sindresorhus/strip-bom-buf) - Buffer version of this module +- [strip-bom-stream](https://github.com/sindresorhus/strip-bom-stream) - Stream version of this module + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/strip-eof/index.js b/node_modules/strip-eof/index.js new file mode 100644 index 000000000..a17d0afd3 --- /dev/null +++ b/node_modules/strip-eof/index.js @@ -0,0 +1,15 @@ +'use strict'; +module.exports = function (x) { + var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt(); + var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt(); + + if (x[x.length - 1] === lf) { + x = x.slice(0, x.length - 1); + } + + if (x[x.length - 1] === cr) { + x = x.slice(0, x.length - 1); + } + + return x; +}; diff --git a/node_modules/strip-eof/license b/node_modules/strip-eof/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/strip-eof/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/strip-eof/package.json b/node_modules/strip-eof/package.json new file mode 100644 index 000000000..d29807778 --- /dev/null +++ b/node_modules/strip-eof/package.json @@ -0,0 +1,71 @@ +{ + "_from": "strip-eof@^1.0.0", + "_id": "strip-eof@1.0.0", + "_inBundle": false, + "_integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "_location": "/strip-eof", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-eof@^1.0.0", + "name": "strip-eof", + "escapedName": "strip-eof", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "_shasum": "bb43ff5598a6eb05d89b59fcd129c983313606bf", + "_spec": "strip-eof@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/execa", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/strip-eof/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Strip the End-Of-File (EOF) character from a string/buffer", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/strip-eof#readme", + "keywords": [ + "strip", + "trim", + "remove", + "delete", + "eof", + "end", + "file", + "newline", + "linebreak", + "character", + "string", + "buffer" + ], + "license": "MIT", + "name": "strip-eof", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/strip-eof.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.0" +} diff --git a/node_modules/strip-eof/readme.md b/node_modules/strip-eof/readme.md new file mode 100644 index 000000000..45ffe0436 --- /dev/null +++ b/node_modules/strip-eof/readme.md @@ -0,0 +1,28 @@ +# strip-eof [![Build Status](https://travis-ci.org/sindresorhus/strip-eof.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-eof) + +> Strip the [End-Of-File](https://en.wikipedia.org/wiki/End-of-file) (EOF) character from a string/buffer + + +## Install + +``` +$ npm install --save strip-eof +``` + + +## Usage + +```js +const stripEof = require('strip-eof'); + +stripEof('foo\nbar\n\n'); +//=> 'foo\nbar\n' + +stripEof(new Buffer('foo\nbar\n\n')).toString(); +//=> 'foo\nbar\n' +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/supports-color/index.js b/node_modules/supports-color/index.js new file mode 100644 index 000000000..4346e272e --- /dev/null +++ b/node_modules/supports-color/index.js @@ -0,0 +1,50 @@ +'use strict'; +var argv = process.argv; + +var terminator = argv.indexOf('--'); +var hasFlag = function (flag) { + flag = '--' + flag; + var pos = argv.indexOf(flag); + return pos !== -1 && (terminator !== -1 ? pos < terminator : true); +}; + +module.exports = (function () { + if ('FORCE_COLOR' in process.env) { + return true; + } + + if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { + return false; + } + + if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + return true; + } + + if (process.stdout && !process.stdout.isTTY) { + return false; + } + + if (process.platform === 'win32') { + return true; + } + + if ('COLORTERM' in process.env) { + return true; + } + + if (process.env.TERM === 'dumb') { + return false; + } + + if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { + return true; + } + + return false; +})(); diff --git a/node_modules/supports-color/license b/node_modules/supports-color/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/supports-color/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/supports-color/package.json b/node_modules/supports-color/package.json new file mode 100644 index 000000000..eae620eda --- /dev/null +++ b/node_modules/supports-color/package.json @@ -0,0 +1,89 @@ +{ + "_from": "supports-color@^2.0.0", + "_id": "supports-color@2.0.0", + "_inBundle": false, + "_integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "_location": "/supports-color", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "supports-color@^2.0.0", + "name": "supports-color", + "escapedName": "supports-color", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/chalk" + ], + "_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "_shasum": "535d045ce6b6363fa40117084629995e9df324c7", + "_spec": "supports-color@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/chalk", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/supports-color/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Detect whether a terminal supports color", + "devDependencies": { + "mocha": "*", + "require-uncached": "^1.0.2" + }, + "engines": { + "node": ">=0.8.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/chalk/supports-color#readme", + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "ansi", + "styles", + "tty", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "support", + "supports", + "capability", + "detect" + ], + "license": "MIT", + "maintainers": [ + { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + { + "name": "Joshua Appelman", + "email": "jappelman@xebia.com", + "url": "jbnicolai.com" + } + ], + "name": "supports-color", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/supports-color.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "2.0.0" +} diff --git a/node_modules/supports-color/readme.md b/node_modules/supports-color/readme.md new file mode 100644 index 000000000..b4761f1ec --- /dev/null +++ b/node_modules/supports-color/readme.md @@ -0,0 +1,36 @@ +# 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'); +} +``` + +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`. + + +## 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/node_modules/tapable/README.md b/node_modules/tapable/README.md new file mode 100644 index 000000000..5340702af --- /dev/null +++ b/node_modules/tapable/README.md @@ -0,0 +1,151 @@ +# Tapable + +``` javascript +var Tapable = require("tapable"); +``` + +`Tapable` is a class for plugin binding and applying. + +Just extend it. + +``` javascript +function MyClass() { + Tapable.call(this); +} + +MyClass.prototype = Object.create(Tapable.prototype); + +MyClass.prototype.method = function() {}; +``` + +Or mix it in. + +``` javascript +function MyClass2() { + EventEmitter.call(this); + Tapable.call(this); +} + +MyClass2.prototype = Object.create(EventEmitter.prototype); +Tapable.mixin(MyClass2.prototype); + +MyClass2.prototype.method = function() {}; +``` + +## Public functions + +### apply + +``` javascript +void apply(plugins: Plugin...) +``` + +Attaches all plugins passed as arguments to the instance, by calling `apply` on them. + +### plugin + +``` javascript +void plugin(names: string|string[], handler: Function) +``` + +`names` are the names (or a single name) of the plugin interfaces the class provides. + +`handler` is a callback function. The signature depends on the class. `this` is the instance of the class. + +## Protected functions + +### applyPlugins + +``` javascript +void applyPlugins(name: string, args: any...) +``` + +Synchronously applies all registered handlers for `name`. The handler functions are called with all args. + +### applyPluginsWaterfall + +``` javascript +any applyPluginsWaterfall(name: string, init: any, args: any...) +``` + +Synchronously applies all registered handlers for `name`. The handler functions are called with the return value of the previous handler and all args. For the first handler `init` is used and the return value of the last handler is return by `applyPluginsWaterfall` + +### applyPluginsAsync + +``` javascript +void applyPluginsAsync( + name: string, + args: any..., + callback: (err?: Error) -> void +) +``` + +Asynchronously applies all registered handlers for `name`. The handler functions are called with all args and a callback function with the signature `(err?: Error) -> void`. The handler functions are called in order of registration. + +`callback` is called after all handlers are called. + +### applyPluginsBailResult + +``` javascript +any applyPluginsBailResult(name: string, args: any...) +``` + +Synchronously applies all registered handlers for `name`. The handler function are called with all args. If a handler function returns something `!== undefined`, the value is returned and no more handlers are applied. + +### applyPluginsAsyncWaterfall + +``` javascript +applyPluginsAsyncWaterfall( + name: string, + init: any, + callback: (err: Error, result: any) -> void +) +``` + +Asynchronously applies all registered handlers for `name`. The handler functions are called with the current value and a callback function with the signature `(err: Error, nextValue: any) -> void`. When called, `nextValue` is the current value for the next handler. The current value for the first handler is `init`. After all handlers are applied, `callback` is called with the last value. If any handler passes a value for `err`, the `callback` is called with this error and no more handlers are called. + +### applyPluginsAsyncSeries + +``` javascript +applyPluginsAsyncSeries( + name: string, + args: any..., + callback: (err: Error, result: any) -> void +) +``` + +Asynchronously applies all registered handlers for `name`. The handler functions are called with all `args` and a callback function with the signature `(err: Error) -> void`. The handlers are called in series, one at a time. After all handlers are applied, `callback` is called. If any handler passes a value for `err`, the `callback` is called with this error and no more handlers are called. + +### applyPluginsParallel + +``` javascript +applyPluginsParallel( + name: string, + args: any..., + callback: (err?: Error) -> void +) +``` + +Applies all registered handlers for `name` in parallel. The handler functions are called with all args and a callback function with the signature `(err?: Error) -> void`. The `callback` function is called when all handlers have called the callback without `err`. If any handler calls the callback with `err`, `callback` is invoked with this error and the other handlers are ignored. + +### applyPluginsParallelBailResult + +``` javascript +applyPluginsParallelBailResult( + name: string, + args: any..., + callback: (err: Error, result: any) -> void +) +``` + +Applies all registered handlers for `name` in parallel. The handler functions are called with all args and a callback function with the signature `(err?: Error) -> void`. Handler functions must call the callback. They can either pass an error, pass undefined, or pass a value. The first result (either error or value) which is not undefined is passed to the `callback`. The order is defined by registration, not by the speed of the handler function. + +### hasPlugins + +``` js +hasPlugins( + name: string +) +``` + +Returns true, if plugins are registered for this name. diff --git a/node_modules/tapable/lib/Tapable.js b/node_modules/tapable/lib/Tapable.js new file mode 100644 index 000000000..f3ed1410c --- /dev/null +++ b/node_modules/tapable/lib/Tapable.js @@ -0,0 +1,377 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + +// polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter +// using the polyfill specifically to avoid the call to `Object.defineProperty` for performance reasons +function fastFilter(fun/*, thisArg*/) { + 'use strict'; + + if (this === void 0 || this === null) { + throw new TypeError(); + } + + var t = Object(this); + var len = t.length >>> 0; + if (typeof fun !== 'function') { + throw new TypeError(); + } + + var res = []; + var thisArg = arguments.length >= 2 ? arguments[1] : void 0; + for (var i = 0; i < len; i++) { + if (i in t) { + var val = t[i]; + + // NOTE: Technically this should Object.defineProperty at + // the next index, as push can be affected by + // properties on Object.prototype and Array.prototype. + // But that method's new, and collisions should be + // rare, so use the more-compatible alternative. + if (fun.call(thisArg, val, i, t)) { + res.push(val); + } + } + } + + return res; +} + +function Tapable() { + this._plugins = {}; +} +module.exports = Tapable; + +function copyProperties(from, to) { + for(var key in from) + to[key] = from[key]; + return to; +} + +Tapable.mixin = function mixinTapable(pt) { + copyProperties(Tapable.prototype, pt); +}; + +Tapable.prototype.applyPlugins = function applyPlugins(name) { + if(!this._plugins[name]) return; + var args = Array.prototype.slice.call(arguments, 1); + var plugins = this._plugins[name]; + for(var i = 0; i < plugins.length; i++) + plugins[i].apply(this, args); +}; + +Tapable.prototype.applyPlugins0 = function applyPlugins0(name) { + var plugins = this._plugins[name]; + if(!plugins) return; + for(var i = 0; i < plugins.length; i++) + plugins[i].call(this); +}; + +Tapable.prototype.applyPlugins1 = function applyPlugins1(name, param) { + var plugins = this._plugins[name]; + if(!plugins) return; + for(var i = 0; i < plugins.length; i++) + plugins[i].call(this, param); +}; + +Tapable.prototype.applyPlugins2 = function applyPlugins2(name, param1, param2) { + var plugins = this._plugins[name]; + if(!plugins) return; + for(var i = 0; i < plugins.length; i++) + plugins[i].call(this, param1, param2); +}; + +Tapable.prototype.applyPluginsWaterfall = function applyPluginsWaterfall(name, init) { + if(!this._plugins[name]) return init; + var args = Array.prototype.slice.call(arguments, 1); + var plugins = this._plugins[name]; + var current = init; + for(var i = 0; i < plugins.length; i++) { + args[0] = current; + current = plugins[i].apply(this, args); + } + return current; +}; + +Tapable.prototype.applyPluginsWaterfall0 = function applyPluginsWaterfall0(name, init) { + var plugins = this._plugins[name]; + if(!plugins) return init; + var current = init; + for(var i = 0; i < plugins.length; i++) + current = plugins[i].call(this, current); + return current; +}; + +Tapable.prototype.applyPluginsWaterfall1 = function applyPluginsWaterfall1(name, init, param) { + var plugins = this._plugins[name]; + if(!plugins) return init; + var current = init; + for(var i = 0; i < plugins.length; i++) + current = plugins[i].call(this, current, param); + return current; +}; + +Tapable.prototype.applyPluginsWaterfall2 = function applyPluginsWaterfall2(name, init, param1, param2) { + var plugins = this._plugins[name]; + if(!plugins) return init; + var current = init; + for(var i = 0; i < plugins.length; i++) + current = plugins[i].call(this, current, param1, param2); + return current; +}; + +Tapable.prototype.applyPluginsBailResult = function applyPluginsBailResult(name) { + if(!this._plugins[name]) return; + var args = Array.prototype.slice.call(arguments, 1); + var plugins = this._plugins[name]; + for(var i = 0; i < plugins.length; i++) { + var result = plugins[i].apply(this, args); + if(typeof result !== "undefined") { + return result; + } + } +}; + +Tapable.prototype.applyPluginsBailResult1 = function applyPluginsBailResult1(name, param) { + if(!this._plugins[name]) return; + var plugins = this._plugins[name]; + for(var i = 0; i < plugins.length; i++) { + var result = plugins[i].call(this, param); + if(typeof result !== "undefined") { + return result; + } + } +}; + +Tapable.prototype.applyPluginsBailResult2 = function applyPluginsBailResult2(name, param1, param2) { + if(!this._plugins[name]) return; + var plugins = this._plugins[name]; + for(var i = 0; i < plugins.length; i++) { + var result = plugins[i].call(this, param1, param2); + if(typeof result !== "undefined") { + return result; + } + } +}; + +Tapable.prototype.applyPluginsBailResult3 = function applyPluginsBailResult3(name, param1, param2, param3) { + if(!this._plugins[name]) return; + var plugins = this._plugins[name]; + for(var i = 0; i < plugins.length; i++) { + var result = plugins[i].call(this, param1, param2, param3); + if(typeof result !== "undefined") { + return result; + } + } +}; + +Tapable.prototype.applyPluginsBailResult4 = function applyPluginsBailResult4(name, param1, param2, param3, param4) { + if(!this._plugins[name]) return; + var plugins = this._plugins[name]; + for(var i = 0; i < plugins.length; i++) { + var result = plugins[i].call(this, param1, param2, param3, param4); + if(typeof result !== "undefined") { + return result; + } + } +}; + +Tapable.prototype.applyPluginsBailResult5 = function applyPluginsBailResult5(name, param1, param2, param3, param4, param5) { + if(!this._plugins[name]) return; + var plugins = this._plugins[name]; + for(var i = 0; i < plugins.length; i++) { + var result = plugins[i].call(this, param1, param2, param3, param4, param5); + if(typeof result !== "undefined") { + return result; + } + } +}; + +Tapable.prototype.applyPluginsAsyncSeries = Tapable.prototype.applyPluginsAsync = function applyPluginsAsyncSeries(name) { + var args = Array.prototype.slice.call(arguments, 1); + var callback = args.pop(); + var plugins = this._plugins[name]; + if(!plugins || plugins.length === 0) return callback(); + var i = 0; + var _this = this; + args.push(copyProperties(callback, function next(err) { + if(err) return callback(err); + i++; + if(i >= plugins.length) { + return callback(); + } + plugins[i].apply(_this, args); + })); + plugins[0].apply(this, args); +}; + +Tapable.prototype.applyPluginsAsyncSeries1 = function applyPluginsAsyncSeries1(name, param, callback) { + var plugins = this._plugins[name]; + if(!plugins || plugins.length === 0) return callback(); + var i = 0; + var _this = this; + var innerCallback = copyProperties(callback, function next(err) { + if(err) return callback(err); + i++; + if(i >= plugins.length) { + return callback(); + } + plugins[i].call(_this, param, innerCallback); + }); + plugins[0].call(this, param, innerCallback); +}; + +Tapable.prototype.applyPluginsAsyncSeriesBailResult = function applyPluginsAsyncSeriesBailResult(name) { + var args = Array.prototype.slice.call(arguments, 1); + var callback = args.pop(); + if(!this._plugins[name] || this._plugins[name].length === 0) return callback(); + var plugins = this._plugins[name]; + var i = 0; + var _this = this; + args.push(copyProperties(callback, function next() { + if(arguments.length > 0) return callback.apply(null, arguments); + i++; + if(i >= plugins.length) { + return callback(); + } + plugins[i].apply(_this, args); + })); + plugins[0].apply(this, args); +}; + +Tapable.prototype.applyPluginsAsyncSeriesBailResult1 = function applyPluginsAsyncSeriesBailResult1(name, param, callback) { + var plugins = this._plugins[name]; + if(!plugins || plugins.length === 0) return callback(); + var i = 0; + var _this = this; + var innerCallback = copyProperties(callback, function next(err, result) { + if(arguments.length > 0) return callback(err, result); + i++; + if(i >= plugins.length) { + return callback(); + } + plugins[i].call(_this, param, innerCallback); + }); + plugins[0].call(this, param, innerCallback); +}; + +Tapable.prototype.applyPluginsAsyncWaterfall = function applyPluginsAsyncWaterfall(name, init, callback) { + if(!this._plugins[name] || this._plugins[name].length === 0) return callback(null, init); + var plugins = this._plugins[name]; + var i = 0; + var _this = this; + var next = copyProperties(callback, function(err, value) { + if(err) return callback(err); + i++; + if(i >= plugins.length) { + return callback(null, value); + } + plugins[i].call(_this, value, next); + }); + plugins[0].call(this, init, next); +}; + +Tapable.prototype.applyPluginsParallel = function applyPluginsParallel(name) { + var args = Array.prototype.slice.call(arguments, 1); + var callback = args.pop(); + if(!this._plugins[name] || this._plugins[name].length === 0) return callback(); + var plugins = this._plugins[name]; + var remaining = plugins.length; + args.push(copyProperties(callback, function(err) { + if(remaining < 0) return; // ignore + if(err) { + remaining = -1; + return callback(err); + } + remaining--; + if(remaining === 0) { + return callback(); + } + })); + for(var i = 0; i < plugins.length; i++) { + plugins[i].apply(this, args); + if(remaining < 0) return; + } +}; + +Tapable.prototype.applyPluginsParallelBailResult = function applyPluginsParallelBailResult(name) { + var args = Array.prototype.slice.call(arguments, 1); + var callback = args[args.length - 1]; + if(!this._plugins[name] || this._plugins[name].length === 0) return callback(); + var plugins = this._plugins[name]; + var currentPos = plugins.length; + var currentResult; + var done = []; + for(var i = 0; i < plugins.length; i++) { + args[args.length - 1] = (function(i) { + return copyProperties(callback, function() { + if(i >= currentPos) return; // ignore + done.push(i); + if(arguments.length > 0) { + currentPos = i + 1; + done = fastFilter.call(done, function(item) { + return item <= i; + }); + currentResult = Array.prototype.slice.call(arguments); + } + if(done.length === currentPos) { + callback.apply(null, currentResult); + currentPos = 0; + } + }); + }(i)); + plugins[i].apply(this, args); + } +}; + +Tapable.prototype.applyPluginsParallelBailResult1 = function applyPluginsParallelBailResult1(name, param, callback) { + var plugins = this._plugins[name]; + if(!plugins || plugins.length === 0) return callback(); + var currentPos = plugins.length; + var currentResult; + var done = []; + for(var i = 0; i < plugins.length; i++) { + var innerCallback = (function(i) { + return copyProperties(callback, function() { + if(i >= currentPos) return; // ignore + done.push(i); + if(arguments.length > 0) { + currentPos = i + 1; + done = fastFilter.call(done, function(item) { + return item <= i; + }); + currentResult = Array.prototype.slice.call(arguments); + } + if(done.length === currentPos) { + callback.apply(null, currentResult); + currentPos = 0; + } + }); + }(i)); + plugins[i].call(this, param, innerCallback); + } +}; + +Tapable.prototype.hasPlugins = function hasPlugins(name) { + var plugins = this._plugins[name]; + return plugins && plugins.length > 0; +}; + + +Tapable.prototype.plugin = function plugin(name, fn) { + if(Array.isArray(name)) { + name.forEach(function(name) { + this.plugin(name, fn); + }, this); + return; + } + if(!this._plugins[name]) this._plugins[name] = [fn]; + else this._plugins[name].push(fn); +}; + +Tapable.prototype.apply = function apply() { + for(var i = 0; i < arguments.length; i++) { + arguments[i].apply(this); + } +}; diff --git a/node_modules/tapable/package.json b/node_modules/tapable/package.json new file mode 100644 index 000000000..49d6f2354 --- /dev/null +++ b/node_modules/tapable/package.json @@ -0,0 +1,57 @@ +{ + "_from": "tapable@^0.2.7", + "_id": "tapable@0.2.8", + "_inBundle": false, + "_integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "_location": "/tapable", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "tapable@^0.2.7", + "name": "tapable", + "escapedName": "tapable", + "rawSpec": "^0.2.7", + "saveSpec": null, + "fetchSpec": "^0.2.7" + }, + "_requiredBy": [ + "/enhanced-resolve", + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "_shasum": "99372a5c999bf2df160afc0d74bed4f47948cd22", + "_spec": "tapable@^0.2.7", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack", + "author": { + "name": "Tobias Koppers @sokra" + }, + "bugs": { + "url": "https://github.com/webpack/tapable/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Just a little module for plugins.", + "devDependencies": { + "mocha": "^2.2.4", + "should": "^5.2.0" + }, + "engines": { + "node": ">=0.6" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/webpack/tapable", + "license": "MIT", + "main": "lib/Tapable.js", + "name": "tapable", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/webpack/tapable.git" + }, + "scripts": { + "test": "mocha --reporter spec" + }, + "version": "0.2.8" +} diff --git a/node_modules/timers-browserify/.npmignore b/node_modules/timers-browserify/.npmignore new file mode 100644 index 000000000..a387873da --- /dev/null +++ b/node_modules/timers-browserify/.npmignore @@ -0,0 +1,2 @@ +node_modules +example diff --git a/node_modules/timers-browserify/CHANGELOG.md b/node_modules/timers-browserify/CHANGELOG.md new file mode 100644 index 000000000..841e59c48 --- /dev/null +++ b/node_modules/timers-browserify/CHANGELOG.md @@ -0,0 +1,102 @@ +# Change Log +All notable changes to this project will be documented in this file. +This project adheres to [Semantic Versioning](http://semver.org/). + +## 2.0.4 - 2017-08-14 + +### Fixed + +* Revert `setImmediate` and `clearImmediate` changes from 2.0.3 because they + appear to break Webpack. + +### 2.0.3 - 2017-07-31 + +### Fixed + +* `setImmediate` and `clearImmediate` are indirected through the `global` module + for better coverage of esoteric environments. + +## 2.0.2 - 2016-10-19 + +### Added + +* `.npmignore` now excludes example scripts, reducing package size + +## 2.0.1 - 2016-06-21 + +### Fixed +* `clearTimeout` and `clearInterval` no longer throws when passed null or + undefined instead of the timeout token. + +## 2.0.0 - 2016-03-28 + +### Changed +* `setImmediate` and `clearImmediate` now use the `setimmediate` module which + has better cross-browser coverage. In particular, it resolves a crash in + Safari. The `setimmediate` module adds these methods to the global + immediately, so a major version bump seems safest. + +## 1.4.2 - 2015-12-08 + +### Added +* Metadata used by `jspm` in `package.json` + +## 1.4.1 - 2015-05-10 + +### Changed +* Update `process` dependency + +## 1.4.0 - 2015-02-23 + +### Added +* Link to `timers-browserify-full`, which offers a larger, but much more exact, + version of Node's `timers` library + +### Changed +* `setTimeout` and `setInterval` return objects with the same API as the Node + implementation, instead of just IDs + +### Fixed +* `active` implementation actually has an effect, as in Node +* Replaced usages of `apply` that break in IE 8 + +## 1.3.0 - 2015-02-04 + +### Changed +* Prefer native versions of `setImmediate` and `clearImmediate` if they exist + +## 1.2.0 - 2015-01-02 + +### Changed +* Update `process` dependency + +## 1.1.0 - 2014-08-26 + +### Added +* `clearImmediate` available to undo `setImmediate` + +## 1.0.3 - 2014-06-30 + +### Fixed +* Resume returning opaque IDs from `setTimeout` and `setInterval` + +## 1.0.2 - 2014-06-30 + +### Fixed +* Pass `window` explicitly to `setTimeout` and others to resolve an error in + Chrome + +## 1.0.1 - 2013-12-28 + +### Changed +* Replaced `setimmediate` dependency with `process` for the `nextTick` shim + +## 1.0.0 - 2013-12-10 + +### Added +* Guard against undefined globals like `setTimeout` in some environments + +## 0.0.0 - 2012-05-30 + +### Added +* Basic functionality for initial release diff --git a/node_modules/timers-browserify/LICENSE.md b/node_modules/timers-browserify/LICENSE.md new file mode 100644 index 000000000..940ec90a7 --- /dev/null +++ b/node_modules/timers-browserify/LICENSE.md @@ -0,0 +1,46 @@ +# timers-browserify + +This project uses the [MIT](http://jryans.mit-license.org/) license: + + Copyright © 2012 J. Ryan Stinnett + + 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. + +# lib/node + +The `lib/node` directory borrows files from joyent/node which uses the following license: + + Copyright Joyent, Inc. and other Node contributors. All rights reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. diff --git a/node_modules/timers-browserify/README.md b/node_modules/timers-browserify/README.md new file mode 100644 index 000000000..c7efa1921 --- /dev/null +++ b/node_modules/timers-browserify/README.md @@ -0,0 +1,40 @@ +# Overview + +Adds support for the `timers` module to browserify. + +## Wait, isn't it already supported in the browser? + +The public methods of the `timers` module are: + +* `setTimeout(callback, delay, [arg], [...])` +* `clearTimeout(timeoutId)` +* `setInterval(callback, delay, [arg], [...])` +* `clearInterval(intervalId)` + +and indeed, browsers support these already. + +## So, why does this exist? + +The `timers` module also includes some private methods used in other built-in +Node.js modules: + +* `enroll(item, delay)` +* `unenroll(item)` +* `active(item)` + +These are used to efficiently support a large quantity of timers with the same +timeouts by creating only a few timers under the covers. + +Node.js also offers the `immediate` APIs, which aren't yet available cross-browser, so we polyfill those: + +* `setImmediate(callback, [arg], [...])` +* `clearImmediate(immediateId)` + +## I need lots of timers and want to use linked list timers as Node.js does. + +Linked lists are efficient when you have thousands (millions?) of timers with the same delay. +Take a look at [timers-browserify-full](https://www.npmjs.com/package/timers-browserify-full) in this case. + +# License + +[MIT](http://jryans.mit-license.org/) diff --git a/node_modules/timers-browserify/main.js b/node_modules/timers-browserify/main.js new file mode 100644 index 000000000..001c63190 --- /dev/null +++ b/node_modules/timers-browserify/main.js @@ -0,0 +1,53 @@ +var apply = Function.prototype.apply; + +// DOM APIs, for completeness + +exports.setTimeout = function() { + return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); +}; +exports.setInterval = function() { + return new Timeout(apply.call(setInterval, window, arguments), clearInterval); +}; +exports.clearTimeout = +exports.clearInterval = function(timeout) { + if (timeout) { + timeout.close(); + } +}; + +function Timeout(id, clearFn) { + this._id = id; + this._clearFn = clearFn; +} +Timeout.prototype.unref = Timeout.prototype.ref = function() {}; +Timeout.prototype.close = function() { + this._clearFn.call(window, this._id); +}; + +// Does not start the time, just sets up the members needed. +exports.enroll = function(item, msecs) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = msecs; +}; + +exports.unenroll = function(item) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = -1; +}; + +exports._unrefActive = exports.active = function(item) { + clearTimeout(item._idleTimeoutId); + + var msecs = item._idleTimeout; + if (msecs >= 0) { + item._idleTimeoutId = setTimeout(function onTimeout() { + if (item._onTimeout) + item._onTimeout(); + }, msecs); + } +}; + +// setimmediate attaches itself to the global object +require("setimmediate"); +exports.setImmediate = setImmediate; +exports.clearImmediate = clearImmediate; diff --git a/node_modules/timers-browserify/package.json b/node_modules/timers-browserify/package.json new file mode 100644 index 000000000..cd33aeacc --- /dev/null +++ b/node_modules/timers-browserify/package.json @@ -0,0 +1,115 @@ +{ + "_from": "timers-browserify@^2.0.2", + "_id": "timers-browserify@2.0.4", + "_inBundle": false, + "_integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "_location": "/timers-browserify", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "timers-browserify@^2.0.2", + "name": "timers-browserify", + "escapedName": "timers-browserify", + "rawSpec": "^2.0.2", + "saveSpec": null, + "fetchSpec": "^2.0.2" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "_shasum": "96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6", + "_spec": "timers-browserify@^2.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "J. Ryan Stinnett", + "email": "jryans@gmail.com", + "url": "http://convolv.es/" + }, + "bugs": { + "url": "https://github.com/jryans/timers-browserify/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Colton Brown", + "email": "coltonTB@me.com" + }, + { + "name": "Guy Bedford", + "email": "guybedford@gmail.com" + }, + { + "name": "Ionut-Cristian Florescu", + "email": "ionut.florescu@gmail.com" + }, + { + "name": "James Halliday", + "email": "mail@substack.net" + }, + { + "name": "Jan Schär", + "email": "jscissr@gmail.com" + }, + { + "name": "Johannes Ewald", + "email": "johannes.ewald@peerigon.com" + }, + { + "name": "Jonathan Prins", + "email": "jon@blip.tv" + }, + { + "name": "Matt Esch", + "email": "matt@mattesch.info" + }, + { + "name": "taoqf", + "email": "tao_qiufeng@126.com" + }, + { + "name": "wtgtybhertgeghgtwtg", + "email": "wtgtybhertgeghgtwtg@gmail.com" + } + ], + "dependencies": { + "setimmediate": "^1.0.4" + }, + "deprecated": false, + "description": "timers module for browserify", + "devDependencies": { + "browserify": "~1.10.16", + "connect": "~2.3.0" + }, + "engines": { + "node": ">=0.6.0" + }, + "homepage": "https://github.com/jryans/timers-browserify", + "jspm": { + "map": { + "./main.js": { + "node": "@node/timers" + } + } + }, + "keywords": [ + "timers", + "browserify", + "browser" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/jryans/timers-browserify/blob/master/LICENSE.md" + } + ], + "main": "main.js", + "name": "timers-browserify", + "optionalDependencies": {}, + "repository": { + "type": "git", + "url": "git://github.com/jryans/timers-browserify.git" + }, + "version": "2.0.4" +} diff --git a/node_modules/to-arraybuffer/.npmignore b/node_modules/to-arraybuffer/.npmignore new file mode 100644 index 000000000..6c3df58ff --- /dev/null +++ b/node_modules/to-arraybuffer/.npmignore @@ -0,0 +1,4 @@ +.DS_Store +node_modules +npm-debug.log +.zuulrc diff --git a/node_modules/to-arraybuffer/.travis.yml b/node_modules/to-arraybuffer/.travis.yml new file mode 100644 index 000000000..3428b14b3 --- /dev/null +++ b/node_modules/to-arraybuffer/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "4.1" \ No newline at end of file diff --git a/node_modules/to-arraybuffer/.zuul.yml b/node_modules/to-arraybuffer/.zuul.yml new file mode 100644 index 000000000..7e60601fa --- /dev/null +++ b/node_modules/to-arraybuffer/.zuul.yml @@ -0,0 +1,16 @@ +ui: tape +browsers: + - name: chrome + version: 39..latest + - name: firefox + version: 34..latest + - name: safari + version: 5..latest + - name: ie + version: 10..latest + - name: opera + version: 11..latest + - name: iphone + version: 5.1..latest + - name: android + version: 4.0..latest \ No newline at end of file diff --git a/node_modules/to-arraybuffer/LICENSE b/node_modules/to-arraybuffer/LICENSE new file mode 100644 index 000000000..1e936dad4 --- /dev/null +++ b/node_modules/to-arraybuffer/LICENSE @@ -0,0 +1,24 @@ +The MIT License + +Copyright (c) 2016 John Hiesey + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/to-arraybuffer/README.md b/node_modules/to-arraybuffer/README.md new file mode 100644 index 000000000..6bdef265b --- /dev/null +++ b/node_modules/to-arraybuffer/README.md @@ -0,0 +1,27 @@ +# to-arraybuffer [![Build Status](https://travis-ci.org/jhiesey/to-arraybuffer.svg?branch=master)](https://travis-ci.org/jhiesey/to-arraybuffer) + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/to-arraybuffer.svg)](https://saucelabs.com/u/to-arraybuffer) + +Convert from a Buffer to an ArrayBuffer as fast as possible. + +Note that in some cases the returned ArrayBuffer is backed by the same memory as the original +Buffer (but in other cases it is a copy), so **modifying the ArrayBuffer is not recommended**. + +This module is designed to work both in node.js and in all browsers with ArrayBuffer support +when using [the Buffer implementation provided by Browserify](https://www.npmjs.com/package/buffer). + +## Usage + +``` js +var toArrayBuffer = require('to-arraybuffer') + +var buffer = new Buffer(100) +// Fill the buffer with some data + +var ab = toArrayBuffer(buffer) +// `ab` now contains the same data as `buffer` +``` + +## License + +MIT \ No newline at end of file diff --git a/node_modules/to-arraybuffer/index.js b/node_modules/to-arraybuffer/index.js new file mode 100644 index 000000000..2f69ae0c8 --- /dev/null +++ b/node_modules/to-arraybuffer/index.js @@ -0,0 +1,27 @@ +var Buffer = require('buffer').Buffer + +module.exports = function (buf) { + // If the buffer is backed by a Uint8Array, a faster version will work + if (buf instanceof Uint8Array) { + // If the buffer isn't a subarray, return the underlying ArrayBuffer + if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { + return buf.buffer + } else if (typeof buf.buffer.slice === 'function') { + // Otherwise we need to get a proper copy + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) + } + } + + if (Buffer.isBuffer(buf)) { + // This is the slow version that will work with any Buffer + // implementation (even in old browsers) + var arrayCopy = new Uint8Array(buf.length) + var len = buf.length + for (var i = 0; i < len; i++) { + arrayCopy[i] = buf[i] + } + return arrayCopy.buffer + } else { + throw new Error('Argument must be a Buffer') + } +} diff --git a/node_modules/to-arraybuffer/package.json b/node_modules/to-arraybuffer/package.json new file mode 100644 index 000000000..3c4bd039a --- /dev/null +++ b/node_modules/to-arraybuffer/package.json @@ -0,0 +1,61 @@ +{ + "_from": "to-arraybuffer@^1.0.0", + "_id": "to-arraybuffer@1.0.1", + "_inBundle": false, + "_integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "_location": "/to-arraybuffer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "to-arraybuffer@^1.0.0", + "name": "to-arraybuffer", + "escapedName": "to-arraybuffer", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/stream-http" + ], + "_resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "_shasum": "7d229b1fcc637e466ca081180836a7aabff83f43", + "_spec": "to-arraybuffer@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/stream-http", + "author": { + "name": "John Hiesey" + }, + "bugs": { + "url": "https://github.com/jhiesey/to-arraybuffer/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Get an ArrayBuffer from a Buffer as fast as possible", + "devDependencies": { + "tape": "^4.4.0", + "zuul": "^3.9.0" + }, + "homepage": "https://github.com/jhiesey/to-arraybuffer#readme", + "keywords": [ + "buffer", + "to", + "arraybuffer", + "fast", + "read", + "only" + ], + "license": "MIT", + "main": "index.js", + "name": "to-arraybuffer", + "repository": { + "type": "git", + "url": "git://github.com/jhiesey/to-arraybuffer.git" + }, + "scripts": { + "test": "npm run test-node && ([ -n \"${TRAVIS_PULL_REQUEST}\" -a \"${TRAVIS_PULL_REQUEST}\" != 'false' ] || npm run test-browser)", + "test-browser": "zuul --no-coverage -- test.js", + "test-browser-local": "zuul --local 8080 --no-coverage -- test.js", + "test-node": "tape test.js" + }, + "version": "1.0.1" +} diff --git a/node_modules/to-arraybuffer/test.js b/node_modules/to-arraybuffer/test.js new file mode 100644 index 000000000..1814ae3ff --- /dev/null +++ b/node_modules/to-arraybuffer/test.js @@ -0,0 +1,57 @@ +var Buffer = require('buffer').Buffer +var test = require('tape') + +var toArrayBuffer = require('.') + +function elementsEqual (ab, buffer) { + var view = new Uint8Array(ab) + for (var i = 0; i < view.length; i++) { + if (view[i] !== buffer[i]) { + return false + } + } + return true +} + +test('Basic behavior', function (t) { + var buf = new Buffer(10) + for (var i = 0; i < 10; i++) { + buf[i] = i + } + + var ab = toArrayBuffer(buf) + + t.equals(ab.byteLength, 10, 'correct length') + t.ok(elementsEqual(ab, buf), 'elements equal') + t.end() +}) + +test('Behavior when input is a subarray 1', function (t) { + var origBuf = new Buffer(10) + for (var i = 0; i < 10; i++) { + origBuf[i] = i + } + var buf = origBuf.slice(1) + + var ab = toArrayBuffer(buf) + + t.equals(ab.byteLength, 9, 'correct length') + t.ok(elementsEqual(ab, buf), 'elements equal') + t.notOk(ab === buf.buffer, 'the underlying ArrayBuffer is not returned when incorrect') + t.end() +}) + +test('Behavior when input is a subarray 2', function (t) { + var origBuf = new Buffer(10) + for (var i = 0; i < 10; i++) { + origBuf[i] = i + } + var buf = origBuf.slice(0, 9) + + var ab = toArrayBuffer(buf) + + t.equals(ab.byteLength, 9, 'correct length') + t.ok(elementsEqual(ab, buf), 'elements equal') + t.notOk(ab === buf.buffer, 'the underlying ArrayBuffer is not returned when incorrect') + t.end() +}) diff --git a/node_modules/to-fast-properties/index.js b/node_modules/to-fast-properties/index.js new file mode 100644 index 000000000..56fc00bde --- /dev/null +++ b/node_modules/to-fast-properties/index.js @@ -0,0 +1,11 @@ +'use strict'; +module.exports = function toFastproperties(o) { + function Sub() {} + Sub.prototype = o; + var receiver = new Sub(); // create an instance + function ic() { return typeof receiver.foo; } // perform access + ic(); + ic(); + return o; + eval("o" + o); // ensure no dead code elimination +} diff --git a/node_modules/to-fast-properties/license b/node_modules/to-fast-properties/license new file mode 100644 index 000000000..55cc204eb --- /dev/null +++ b/node_modules/to-fast-properties/license @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014 Petka Antonov + 2015 Sindre Sorhus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/to-fast-properties/package.json b/node_modules/to-fast-properties/package.json new file mode 100644 index 000000000..9b22ebfeb --- /dev/null +++ b/node_modules/to-fast-properties/package.json @@ -0,0 +1,67 @@ +{ + "_from": "to-fast-properties@^1.0.3", + "_id": "to-fast-properties@1.0.3", + "_inBundle": false, + "_integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "_location": "/to-fast-properties", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "to-fast-properties@^1.0.3", + "name": "to-fast-properties", + "escapedName": "to-fast-properties", + "rawSpec": "^1.0.3", + "saveSpec": null, + "fetchSpec": "^1.0.3" + }, + "_requiredBy": [ + "/babel-types" + ], + "_resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "_shasum": "b83571fa4d8c25b82e231b06e3a3055de4ca1a47", + "_spec": "to-fast-properties@^1.0.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-types", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/to-fast-properties/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Force V8 to use fast properties for an object", + "devDependencies": { + "ava": "0.0.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/to-fast-properties#readme", + "keywords": [ + "object", + "obj", + "properties", + "props", + "v8", + "optimize", + "fast", + "convert", + "mode" + ], + "license": "MIT", + "name": "to-fast-properties", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/to-fast-properties.git" + }, + "scripts": { + "test": "node --allow-natives-syntax test.js" + }, + "version": "1.0.3" +} diff --git a/node_modules/to-fast-properties/readme.md b/node_modules/to-fast-properties/readme.md new file mode 100644 index 000000000..e298c2089 --- /dev/null +++ b/node_modules/to-fast-properties/readme.md @@ -0,0 +1,37 @@ +# to-fast-properties [![Build Status](https://travis-ci.org/sindresorhus/to-fast-properties.svg?branch=master)](https://travis-ci.org/sindresorhus/to-fast-properties) + +> Force V8 to use fast properties for an object + +[Read more.](http://stackoverflow.com/questions/24987896/) + +Use `%HasFastProperties(object)` and `--allow-natives-syntax` to check whether an object already has fast properties. + + +## Install + +``` +$ npm install --save to-fast-properties +``` + + +## Usage + +```js +const toFastProperties = require('to-fast-properties'); + +const obj = { + foo: true, + bar: true +}; + +delete obj.foo; +// `obj` now has slow properties + +toFastProperties(obj); +// `obj` now has fast properties +``` + + +## License + +MIT © Petka Antonov, Sindre Sorhus diff --git a/node_modules/trim-right/index.js b/node_modules/trim-right/index.js new file mode 100644 index 000000000..666f4b2f4 --- /dev/null +++ b/node_modules/trim-right/index.js @@ -0,0 +1,10 @@ +'use strict'; +module.exports = function (str) { + var tail = str.length; + + while (/[\s\uFEFF\u00A0]/.test(str[tail - 1])) { + tail--; + } + + return str.slice(0, tail); +}; diff --git a/node_modules/trim-right/license b/node_modules/trim-right/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/trim-right/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/trim-right/package.json b/node_modules/trim-right/package.json new file mode 100644 index 000000000..d9f543c34 --- /dev/null +++ b/node_modules/trim-right/package.json @@ -0,0 +1,69 @@ +{ + "_from": "trim-right@^1.0.1", + "_id": "trim-right@1.0.1", + "_inBundle": false, + "_integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "_location": "/trim-right", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "trim-right@^1.0.1", + "name": "trim-right", + "escapedName": "trim-right", + "rawSpec": "^1.0.1", + "saveSpec": null, + "fetchSpec": "^1.0.1" + }, + "_requiredBy": [ + "/babel-generator" + ], + "_resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "_shasum": "cb2e1203067e0c8de1f614094b9fe45704ea6003", + "_spec": "trim-right@^1.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-generator", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/trim-right/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Similar to String#trim() but removes only whitespace on the right", + "devDependencies": { + "ava": "0.0.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/trim-right#readme", + "keywords": [ + "trim", + "right", + "string", + "str", + "util", + "utils", + "utility", + "whitespace", + "space", + "remove", + "delete" + ], + "license": "MIT", + "name": "trim-right", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/trim-right.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.0.1" +} diff --git a/node_modules/trim-right/readme.md b/node_modules/trim-right/readme.md new file mode 100644 index 000000000..0a4438acd --- /dev/null +++ b/node_modules/trim-right/readme.md @@ -0,0 +1,30 @@ +# trim-right [![Build Status](https://travis-ci.org/sindresorhus/trim-right.svg?branch=master)](https://travis-ci.org/sindresorhus/trim-right) + +> Similar to [`String#trim()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim) but removes only whitespace on the right + + +## Install + +``` +$ npm install --save trim-right +``` + + +## Usage + +```js +var trimRight = require('trim-right'); + +trimRight(' unicorn '); +//=> ' unicorn' +``` + + +## Related + +- [`trim-left`](https://github.com/sindresorhus/trim-left) - Similar to `String#trim()` but removes only whitespace on the left + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/tty-browserify/LICENSE b/node_modules/tty-browserify/LICENSE new file mode 100644 index 000000000..ee27ba4b4 --- /dev/null +++ b/node_modules/tty-browserify/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/tty-browserify/index.js b/node_modules/tty-browserify/index.js new file mode 100644 index 000000000..2b5f04c16 --- /dev/null +++ b/node_modules/tty-browserify/index.js @@ -0,0 +1,11 @@ +exports.isatty = function () { return false; }; + +function ReadStream() { + throw new Error('tty.ReadStream is not implemented'); +} +exports.ReadStream = ReadStream; + +function WriteStream() { + throw new Error('tty.ReadStream is not implemented'); +} +exports.WriteStream = WriteStream; diff --git a/node_modules/tty-browserify/package.json b/node_modules/tty-browserify/package.json new file mode 100644 index 000000000..fb635ec6e --- /dev/null +++ b/node_modules/tty-browserify/package.json @@ -0,0 +1,57 @@ +{ + "_from": "tty-browserify@0.0.0", + "_id": "tty-browserify@0.0.0", + "_inBundle": false, + "_integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "_location": "/tty-browserify", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "tty-browserify@0.0.0", + "name": "tty-browserify", + "escapedName": "tty-browserify", + "rawSpec": "0.0.0", + "saveSpec": null, + "fetchSpec": "0.0.0" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "_shasum": "a157ba402da24e9bf957f9aa69d524eed42901a6", + "_spec": "tty-browserify@0.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/tty-browserify/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "the tty module from node core for browsers", + "devDependencies": { + "tape": "~1.0.4" + }, + "homepage": "https://github.com/substack/tty-browserify", + "keywords": [ + "tty", + "browser", + "browserify" + ], + "license": "MIT", + "main": "index.js", + "name": "tty-browserify", + "repository": { + "type": "git", + "url": "git://github.com/substack/tty-browserify.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "version": "0.0.0" +} diff --git a/node_modules/tty-browserify/readme.markdown b/node_modules/tty-browserify/readme.markdown new file mode 100644 index 000000000..91a2051ae --- /dev/null +++ b/node_modules/tty-browserify/readme.markdown @@ -0,0 +1 @@ +# tty-browserify diff --git a/node_modules/uglify-js/LICENSE b/node_modules/uglify-js/LICENSE new file mode 100644 index 000000000..dd7706f0c --- /dev/null +++ b/node_modules/uglify-js/LICENSE @@ -0,0 +1,29 @@ +UglifyJS is released under the BSD license: + +Copyright 2012-2013 (c) Mihai Bazon + +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 HOLDER “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 BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/node_modules/uglify-js/README.md b/node_modules/uglify-js/README.md new file mode 100644 index 000000000..8c1d67642 --- /dev/null +++ b/node_modules/uglify-js/README.md @@ -0,0 +1,995 @@ +UglifyJS 2 +========== +[![Build Status](https://travis-ci.org/mishoo/UglifyJS2.svg)](https://travis-ci.org/mishoo/UglifyJS2) + +UglifyJS is a JavaScript parser, minifier, compressor or beautifier toolkit. + +This page documents the command line utility. For +[API and internals documentation see my website](http://lisperator.net/uglifyjs/). +There's also an +[in-browser online demo](http://lisperator.net/uglifyjs/#demo) (for Firefox, +Chrome and probably Safari). + +#### Note: +- `uglify-js` only supports ECMAScript 5 (ES5). +- Support for `const` is [present but incomplete](#support-for-const), and may not be + transformed properly. +- Those wishing to minify ES2015+ (ES6+) should use the `npm` package [**uglify-es**](https://github.com/mishoo/UglifyJS2/tree/harmony). + +Install +------- + +First make sure you have installed the latest version of [node.js](http://nodejs.org/) +(You may need to restart your computer after this step). + +From NPM for use as a command line app: + + npm install uglify-js -g + +From NPM for programmatic use: + + npm install uglify-js + +Usage +----- + + uglifyjs [input files] [options] + +UglifyJS2 can take multiple input files. It's recommended that you pass the +input files first, then pass the options. UglifyJS will parse input files +in sequence and apply any compression options. The files are parsed in the +same global scope, that is, a reference from a file to some +variable/function declared in another file will be matched properly. + +If you want to read from STDIN instead, pass a single dash instead of input +files. + +If you wish to pass your options before the input files, separate the two with +a double dash to prevent input files being used as option arguments: + + uglifyjs --compress --mangle -- input.js + +The available options are: + +``` + --source-map Specify an output file where to generate source + map. + --source-map-root The path to the original source to be included + in the source map. + --source-map-url The path to the source map to be added in //# + sourceMappingURL. Defaults to the value passed + with --source-map. + --source-map-include-sources Pass this flag if you want to include the + content of source files in the source map as + sourcesContent property. + --source-map-inline Write base64-encoded source map to the end of js output. + --in-source-map Input source map, useful if you're compressing + JS that was generated from some other original + code. Specify "inline" if the source map is included + inline with the sources. + --screw-ie8 Use this flag if you don't wish to support + Internet Explorer 6/7/8. + By default UglifyJS will not try to be IE-proof. + --support-ie8 Use this flag to support Internet Explorer 6/7/8. + Equivalent to setting `screw_ie8: false` in `minify()` + for `compress`, `mangle` and `output` options. + --expr Parse a single expression, rather than a + program (for parsing JSON) + -p, --prefix Skip prefix for original filenames that appear + in source maps. For example -p 3 will drop 3 + directories from file names and ensure they are + relative paths. You can also specify -p + relative, which will make UglifyJS figure out + itself the relative paths between original + sources, the source map and the output file. + -o, --output Output file (default STDOUT). + -b, --beautify Beautify output/specify output options. + -m, --mangle Mangle names/pass mangler options. + -r, --reserved Reserved names to exclude from mangling. + -c, --compress Enable compressor/pass compressor options, e.g. + `-c 'if_return=false,pure_funcs=["Math.pow","console.log"]'` + Use `-c` with no argument to enable default compression + options. + -d, --define Global definitions + -e, --enclose Embed everything in a big function, with a + configurable parameter/argument list. + --comments Preserve copyright comments in the output. By + default this works like Google Closure, keeping + JSDoc-style comments that contain "@license" or + "@preserve". You can optionally pass one of the + following arguments to this flag: + - "all" to keep all comments + - a valid JS RegExp like `/foo/` or `/^!/` to + keep only matching comments. + Note that currently not *all* comments can be + kept when compression is on, because of dead + code removal or cascading statements into + sequences. + --preamble Preamble to prepend to the output. You can use + this to insert a comment, for example for + licensing information. This will not be + parsed, but the source map will adjust for its + presence. + --stats Display operations run time on STDERR. + --acorn Use Acorn for parsing. + --spidermonkey Assume input files are SpiderMonkey AST format + (as JSON). + --self Build itself (UglifyJS2) as a library (implies + --wrap=UglifyJS --export-all) + --wrap Embed everything in a big function, making the + “exports” and “global” variables available. You + need to pass an argument to this option to + specify the name that your module will take + when included in, say, a browser. + --export-all Only used when --wrap, this tells UglifyJS to + add code to automatically export all globals. + --lint Display some scope warnings + -v, --verbose Verbose + -V, --version Print version number and exit. + --noerr Don't throw an error for unknown options in -c, + -b or -m. + --bare-returns Allow return outside of functions. Useful when + minifying CommonJS modules and Userscripts that + may be anonymous function wrapped (IIFE) by the + .user.js engine `caller`. + --keep-fnames Do not mangle/drop function names. Useful for + code relying on Function.prototype.name. + --reserved-file File containing reserved names + --reserve-domprops Make (most?) DOM properties reserved for + --mangle-props + --mangle-props Mangle property names (default `0`). Set to + `true` or `1` to mangle all property names. Set + to `unquoted` or `2` to only mangle unquoted + property names. Mode `2` also enables the + `keep_quoted_props` beautifier option to + preserve the quotes around property names and + disables the `properties` compressor option to + prevent rewriting quoted properties with dot + notation. You can override these by setting + them explicitly on the command line. + --mangle-regex Only mangle property names matching the regex + --name-cache File to hold mangled names mappings + --pure-funcs Functions that can be safely removed if their + return value is not used, e.g. + `--pure-funcs Math.floor console.info` + (requires `--compress`) +``` + +Specify `--output` (`-o`) to declare the output file. Otherwise the output +goes to STDOUT. + +## Source map options + +UglifyJS2 can generate a source map file, which is highly useful for +debugging your compressed JavaScript. To get a source map, pass +`--source-map output.js.map` (full path to the file where you want the +source map dumped). + +Additionally you might need `--source-map-root` to pass the URL where the +original files can be found. In case you are passing full paths to input +files to UglifyJS, you can use `--prefix` (`-p`) to specify the number of +directories to drop from the path prefix when declaring files in the source +map. + +For example: + + uglifyjs /home/doe/work/foo/src/js/file1.js \ + /home/doe/work/foo/src/js/file2.js \ + -o foo.min.js \ + --source-map foo.min.js.map \ + --source-map-root http://foo.com/src \ + -p 5 -c -m + +The above will compress and mangle `file1.js` and `file2.js`, will drop the +output in `foo.min.js` and the source map in `foo.min.js.map`. The source +mapping will refer to `http://foo.com/src/js/file1.js` and +`http://foo.com/src/js/file2.js` (in fact it will list `http://foo.com/src` +as the source map root, and the original files as `js/file1.js` and +`js/file2.js`). + +### Composed source map + +When you're compressing JS code that was output by a compiler such as +CoffeeScript, mapping to the JS code won't be too helpful. Instead, you'd +like to map back to the original code (i.e. CoffeeScript). UglifyJS has an +option to take an input source map. Assuming you have a mapping from +CoffeeScript → compiled JS, UglifyJS can generate a map from CoffeeScript → +compressed JS by mapping every token in the compiled JS to its original +location. + +To use this feature you need to pass `--in-source-map +/path/to/input/source.map` or `--in-source-map inline` if the source map is +included inline with the sources. Normally the input source map should also +point to the file containing the generated JS, so if that's correct you can +omit input files from the command line. + +## Mangler options + +To enable the mangler you need to pass `--mangle` (`-m`). The following +(comma-separated) options are supported: + +- `toplevel` — mangle names declared in the toplevel scope (disabled by + default). + +- `eval` — mangle names visible in scopes where `eval` or `with` are used + (disabled by default). + +When mangling is enabled but you want to prevent certain names from being +mangled, you can declare those names with `--reserved` (`-r`) — pass a +comma-separated list of names. For example: + + uglifyjs ... -m -r '$,require,exports' + +to prevent the `require`, `exports` and `$` names from being changed. + +### Mangling property names (`--mangle-props`) + +**Note:** this will probably break your code. Mangling property names is a +separate step, different from variable name mangling. Pass +`--mangle-props`. It will mangle all properties that are seen in some +object literal, or that are assigned to. For example: + +```js +var x = { + foo: 1 +}; + +x.bar = 2; +x["baz"] = 3; +x[condition ? "moo" : "boo"] = 4; +console.log(x.something()); +``` + +In the above code, `foo`, `bar`, `baz`, `moo` and `boo` will be replaced +with single characters, while `something()` will be left as is. + +In order for this to be of any use, we should avoid mangling standard JS +names. For instance, if your code would contain `x.length = 10`, then +`length` becomes a candidate for mangling and it will be mangled throughout +the code, regardless if it's being used as part of your own objects or +accessing an array's length. To avoid that, you can use `--reserved-file` +to pass a filename that should contain the names to be excluded from +mangling. This file can be used both for excluding variable names and +property names. It could look like this, for example: + +```js +{ + "vars": [ "define", "require", ... ], + "props": [ "length", "prototype", ... ] +} +``` + +`--reserved-file` can be an array of file names (either a single +comma-separated argument, or you can pass multiple `--reserved-file` +arguments) — in this case it will exclude names from all those files. + +A default exclusion file is provided in `tools/domprops.json` which should +cover most standard JS and DOM properties defined in various browsers. Pass +`--reserve-domprops` to read that in. + +You can also use a regular expression to define which property names should be +mangled. For example, `--mangle-regex="/^_/"` will only mangle property names +that start with an underscore. + +When you compress multiple files using this option, in order for them to +work together in the end we need to ensure somehow that one property gets +mangled to the same name in all of them. For this, pass `--name-cache +filename.json` and UglifyJS will maintain these mappings in a file which can +then be reused. It should be initially empty. Example: + +``` +rm -f /tmp/cache.json # start fresh +uglifyjs file1.js file2.js --mangle-props --name-cache /tmp/cache.json -o part1.js +uglifyjs file3.js file4.js --mangle-props --name-cache /tmp/cache.json -o part2.js +``` + +Now, `part1.js` and `part2.js` will be consistent with each other in terms +of mangled property names. + +Using the name cache is not necessary if you compress all your files in a +single call to UglifyJS. + +#### Mangling unquoted names (`--mangle-props=unquoted` or `--mangle-props=2`) + +Using quoted property name (`o["foo"]`) reserves the property name (`foo`) +so that it is not mangled throughout the entire script even when used in an +unquoted style (`o.foo`). Example: + +``` +$ echo 'var o={"foo":1, bar:3}; o.foo += o.bar; console.log(o.foo);' | uglifyjs --mangle-props=2 -mc +var o={"foo":1,a:3};o.foo+=o.a,console.log(o.foo); +``` + +#### Debugging property name mangling + +You can also pass `--mangle-props-debug` in order to mangle property names +without completely obscuring them. For example the property `o.foo` +would mangle to `o._$foo$_` with this option. This allows property mangling +of a large codebase while still being able to debug the code and identify +where mangling is breaking things. + +You can also pass a custom suffix using `--mangle-props-debug=XYZ`. This would then +mangle `o.foo` to `o._$foo$XYZ_`. You can change this each time you compile a +script to identify how a property got mangled. One technique is to pass a +random number on every compile to simulate mangling changing with different +inputs (e.g. as you update the input script with new properties), and to help +identify mistakes like writing mangled keys to storage. + +## Compressor options + +You need to pass `--compress` (`-c`) to enable the compressor. Optionally +you can pass a comma-separated list of options. Options are in the form +`foo=bar`, or just `foo` (the latter implies a boolean option that you want +to set `true`; it's effectively a shortcut for `foo=true`). + +- `sequences` (default: true) -- join consecutive simple statements using the + comma operator. May be set to a positive integer to specify the maximum number + of consecutive comma sequences that will be generated. If this option is set to + `true` then the default `sequences` limit is `200`. Set option to `false` or `0` + to disable. The smallest `sequences` length is `2`. A `sequences` value of `1` + is grandfathered to be equivalent to `true` and as such means `200`. On rare + occasions the default sequences limit leads to very slow compress times in which + case a value of `20` or less is recommended. + +- `properties` -- rewrite property access using the dot notation, for + example `foo["bar"] → foo.bar` + +- `dead_code` -- remove unreachable code + +- `drop_debugger` -- remove `debugger;` statements + +- `unsafe` (default: false) -- apply "unsafe" transformations (discussion below) + +- `unsafe_comps` (default: false) -- Reverse `<` and `<=` to `>` and `>=` to + allow improved compression. This might be unsafe when an at least one of two + operands is an object with computed values due the use of methods like `get`, + or `valueOf`. This could cause change in execution order after operands in the + comparison are switching. Compression only works if both `comparisons` and + `unsafe_comps` are both set to true. + +- `unsafe_math` (default: false) -- optimize numerical expressions like + `2 * x * 3` into `6 * x`, which may give imprecise floating point results. + +- `unsafe_proto` (default: false) -- optimize expressions like + `Array.prototype.slice.call(a)` into `[].slice.call(a)` + +- `unsafe_regexp` (default: false) -- enable substitutions of variables with + `RegExp` values the same way as if they are constants. + +- `conditionals` -- apply optimizations for `if`-s and conditional + expressions + +- `comparisons` -- apply certain optimizations to binary nodes, for example: + `!(a <= b) → a > b` (only when `unsafe_comps`), attempts to negate binary + nodes, e.g. `a = !b && !c && !d && !e → a=!(b||c||d||e)` etc. + +- `evaluate` -- attempt to evaluate constant expressions + +- `booleans` -- various optimizations for boolean context, for example `!!a + ? b : c → a ? b : c` + +- `loops` -- optimizations for `do`, `while` and `for` loops when we can + statically determine the condition + +- `unused` -- drop unreferenced functions and variables (simple direct variable + assignments do not count as references unless set to `"keep_assign"`) + +- `toplevel` -- drop unreferenced functions (`"funcs"`) and/or variables (`"vars"`) + in the toplevel scope (`false` by default, `true` to drop both unreferenced + functions and variables) + +- `top_retain` -- prevent specific toplevel functions and variables from `unused` + removal (can be array, comma-separated, RegExp or function. Implies `toplevel`) + +- `hoist_funs` -- hoist function declarations + +- `hoist_vars` (default: false) -- hoist `var` declarations (this is `false` + by default because it seems to increase the size of the output in general) + +- `if_return` -- optimizations for if/return and if/continue + +- `join_vars` -- join consecutive `var` statements + +- `cascade` -- small optimization for sequences, transform `x, x` into `x` + and `x = something(), x` into `x = something()` + +- `collapse_vars` -- Collapse single-use `var` and `const` definitions + when possible. + +- `reduce_vars` -- Improve optimization on variables assigned with and + used as constant values. + +- `warnings` -- display warnings when dropping unreachable code or unused + declarations etc. + +- `negate_iife` -- negate "Immediately-Called Function Expressions" + where the return value is discarded, to avoid the parens that the + code generator would insert. + +- `pure_getters` -- the default is `false`. If you pass `true` for + this, UglifyJS will assume that object property access + (e.g. `foo.bar` or `foo["bar"]`) doesn't have any side effects. + Specify `"strict"` to treat `foo.bar` as side-effect-free only when + `foo` is certain to not throw, i.e. not `null` or `undefined`. + +- `pure_funcs` -- default `null`. You can pass an array of names and + UglifyJS will assume that those functions do not produce side + effects. DANGER: will not check if the name is redefined in scope. + An example case here, for instance `var q = Math.floor(a/b)`. If + variable `q` is not used elsewhere, UglifyJS will drop it, but will + still keep the `Math.floor(a/b)`, not knowing what it does. You can + pass `pure_funcs: [ 'Math.floor' ]` to let it know that this + function won't produce any side effect, in which case the whole + statement would get discarded. The current implementation adds some + overhead (compression will be slower). + +- `drop_console` -- default `false`. Pass `true` to discard calls to + `console.*` functions. If you wish to drop a specific function call + such as `console.info` and/or retain side effects from function arguments + after dropping the function call then use `pure_funcs` instead. + +- `expression` -- default `false`. Pass `true` to preserve completion values + from terminal statements without `return`, e.g. in bookmarklets. + +- `keep_fargs` -- default `true`. Prevents the + compressor from discarding unused function arguments. You need this + for code which relies on `Function.length`. + +- `keep_fnames` -- default `false`. Pass `true` to prevent the + compressor from discarding function names. Useful for code relying on + `Function.prototype.name`. See also: the `keep_fnames` [mangle option](#mangle). + +- `passes` -- default `1`. Number of times to run compress with a maximum of 3. + In some cases more than one pass leads to further compressed code. Keep in + mind more passes will take more time. + +- `keep_infinity` -- default `false`. Pass `true` to prevent `Infinity` from + being compressed into `1/0`, which may cause performance issues on Chrome. + +- `side_effects` -- default `true`. Pass `false` to disable potentially dropping + functions marked as "pure". A function call is marked as "pure" if a comment + annotation `/*@__PURE__*/` or `/*#__PURE__*/` immediately precedes the call. For + example: `/*@__PURE__*/foo();` + + +### The `unsafe` option + +It enables some transformations that *might* break code logic in certain +contrived cases, but should be fine for most code. You might want to try it +on your own code, it should reduce the minified size. Here's what happens +when this flag is on: + +- `new Array(1, 2, 3)` or `Array(1, 2, 3)` → `[ 1, 2, 3 ]` +- `new Object()` → `{}` +- `String(exp)` or `exp.toString()` → `"" + exp` +- `new Object/RegExp/Function/Error/Array (...)` → we discard the `new` +- `typeof foo == "undefined"` → `foo === void 0` +- `void 0` → `undefined` (if there is a variable named "undefined" in + scope; we do it because the variable name will be mangled, typically + reduced to a single character) + +### Conditional compilation + +You can use the `--define` (`-d`) switch in order to declare global +variables that UglifyJS will assume to be constants (unless defined in +scope). For example if you pass `--define DEBUG=false` then, coupled with +dead code removal UglifyJS will discard the following from the output: +```javascript +if (DEBUG) { + console.log("debug stuff"); +} +``` + +You can specify nested constants in the form of `--define env.DEBUG=false`. + +UglifyJS will warn about the condition being always false and about dropping +unreachable code; for now there is no option to turn off only this specific +warning, you can pass `warnings=false` to turn off *all* warnings. + +Another way of doing that is to declare your globals as constants in a +separate file and include it into the build. For example you can have a +`build/defines.js` file with the following: +```javascript +const DEBUG = false; +const PRODUCTION = true; +// etc. +``` + +and build your code like this: + + uglifyjs build/defines.js js/foo.js js/bar.js... -c + +UglifyJS will notice the constants and, since they cannot be altered, it +will evaluate references to them to the value itself and drop unreachable +code as usual. The build will contain the `const` declarations if you use +them. If you are targeting < ES6 environments which does not support `const`, +using `var` with `reduce_vars` (enabled by default) should suffice. + + + +#### Conditional compilation, API +You can also use conditional compilation via the programmatic API. With the difference that the +property name is `global_defs` and is a compressor property: + +```js +uglifyJS.minify([ "input.js"], { + compress: { + dead_code: true, + global_defs: { + DEBUG: false + } + } +}); +``` + +## Beautifier options + +The code generator tries to output shortest code possible by default. In +case you want beautified output, pass `--beautify` (`-b`). Optionally you +can pass additional arguments that control the code output: + +- `beautify` (default `true`) -- whether to actually beautify the output. + Passing `-b` will set this to true, but you might need to pass `-b` even + when you want to generate minified code, in order to specify additional + arguments, so you can use `-b beautify=false` to override it. +- `indent-level` (default 4) +- `indent-start` (default 0) -- prefix all lines by that many spaces +- `quote-keys` (default `false`) -- pass `true` to quote all keys in literal + objects +- `space-colon` (default `true`) -- insert a space after the colon signs +- `ascii-only` (default `false`) -- escape Unicode characters in strings and + regexps (affects directives with non-ascii characters becoming invalid) +- `inline-script` (default `false`) -- escape the slash in occurrences of + ` 0) { + print_error("WARN: Ignoring input files since --self was passed"); + } + files = UglifyJS.FILES; + if (!ARGS.wrap) ARGS.wrap = "UglifyJS"; +} + +var ORIG_MAP = ARGS.in_source_map; + +if (ORIG_MAP && ORIG_MAP != "inline") { + ORIG_MAP = JSON.parse(fs.readFileSync(ORIG_MAP)); + if (files.length == 0) { + print_error("INFO: Using file from the input source map: " + ORIG_MAP.file); + files = [ ORIG_MAP.file ]; + } +} + +if (files.length == 0) { + files = [ "-" ]; +} + +if (ORIG_MAP == "inline") { + if (files.length > 1) { + print_error("ERROR: Inline source map only works with singular input"); + process.exit(1); + } + if (ARGS.acorn || ARGS.spidermonkey) { + print_error("ERROR: Inline source map only works with built-in parser"); + process.exit(1); + } +} + +if (files.indexOf("-") >= 0 && ARGS.source_map) { + print_error("ERROR: Source map doesn't work with input from STDIN"); + process.exit(1); +} + +if (files.filter(function(el){ return el == "-" }).length > 1) { + print_error("ERROR: Can read a single file from STDIN (two or more dashes specified)"); + process.exit(1); +} + +var STATS = {}; +var TOPLEVEL = null; +var P_RELATIVE = ARGS.p && ARGS.p == "relative"; +var SOURCES_CONTENT = {}; +var index = 0; + +!function cb() { + if (index == files.length) return done(); + var file = files[index++]; + read_whole_file(file, function (err, code) { + if (err) { + print_error("ERROR: can't read file: " + file); + process.exit(1); + } + if (ORIG_MAP == "inline") { + ORIG_MAP = read_source_map(code); + } + if (ARGS.p != null) { + if (P_RELATIVE) { + file = path.relative(path.dirname(ARGS.source_map), file).replace(/\\/g, '/'); + } else { + var p = parseInt(ARGS.p, 10); + if (!isNaN(p)) { + file = file.replace(/^\/+/, "").split(/\/+/).slice(ARGS.p).join("/"); + } + } + } + SOURCES_CONTENT[file] = code; + time_it("parse", function(){ + if (ARGS.spidermonkey) { + var program = JSON.parse(code); + if (!TOPLEVEL) TOPLEVEL = program; + else TOPLEVEL.body = TOPLEVEL.body.concat(program.body); + } + else if (ARGS.acorn) { + TOPLEVEL = acorn.parse(code, { + locations : true, + sourceFile : file, + program : TOPLEVEL + }); + } + else { + try { + TOPLEVEL = UglifyJS.parse(code, { + filename : file, + toplevel : TOPLEVEL, + expression : ARGS.expr, + bare_returns : ARGS.bare_returns, + }); + } catch(ex) { + if (ex instanceof UglifyJS.JS_Parse_Error) { + print_error("Parse error at " + file + ":" + ex.line + "," + ex.col); + var col = ex.col; + var lines = code.split(/\r?\n/); + var line = lines[ex.line - 1]; + if (!line && !col) { + line = lines[ex.line - 2]; + col = line.length; + } + if (line) { + if (col > 40) { + line = line.slice(col - 40); + col = 40; + } + print_error(line.slice(0, 80)); + print_error(line.slice(0, col).replace(/\S/g, " ") + "^"); + } + print_error(ex.stack); + process.exit(1); + } + throw ex; + } + }; + }); + cb(); + }); +}(); + +function done() { + var OUTPUT_FILE = ARGS.o; + + var SOURCE_MAP = (ARGS.source_map || ARGS.source_map_inline) ? UglifyJS.SourceMap({ + file: P_RELATIVE ? path.relative(path.dirname(ARGS.source_map), OUTPUT_FILE) : OUTPUT_FILE, + root: ARGS.source_map_root || ORIG_MAP && ORIG_MAP.sourceRoot, + orig: ORIG_MAP, + }) : null; + + OUTPUT_OPTIONS.source_map = SOURCE_MAP; + + try { + var output = UglifyJS.OutputStream(OUTPUT_OPTIONS); + var compressor = COMPRESS && UglifyJS.Compressor(COMPRESS); + } catch(ex) { + if (ex instanceof UglifyJS.DefaultsError) { + print_error(ex.message); + print_error("Supported options:"); + print_error(sys.inspect(ex.defs)); + process.exit(1); + } + } + + if (ARGS.acorn || ARGS.spidermonkey) time_it("convert_ast", function(){ + TOPLEVEL = UglifyJS.AST_Node.from_mozilla_ast(TOPLEVEL); + }); + + if (ARGS.wrap != null) { + TOPLEVEL = TOPLEVEL.wrap_commonjs(ARGS.wrap, ARGS.export_all); + } + + if (ARGS.enclose != null) { + var arg_parameter_list = ARGS.enclose; + if (arg_parameter_list === true) { + arg_parameter_list = []; + } + else if (!(arg_parameter_list instanceof Array)) { + arg_parameter_list = [arg_parameter_list]; + } + TOPLEVEL = TOPLEVEL.wrap_enclose(arg_parameter_list); + } + + if (ARGS.mangle_props || ARGS.name_cache) (function(){ + var reserved = RESERVED ? RESERVED.props : null; + var cache = readNameCache("props"); + var regex; + + try { + regex = ARGS.mangle_regex ? extractRegex(ARGS.mangle_regex) : null; + } catch (e) { + print_error("ERROR: Invalid --mangle-regex: " + e.message); + process.exit(1); + } + + TOPLEVEL = UglifyJS.mangle_properties(TOPLEVEL, { + reserved : reserved, + cache : cache, + only_cache : !ARGS.mangle_props, + regex : regex, + ignore_quoted : ARGS.mangle_props == 2, + debug : typeof ARGS.mangle_props_debug === "undefined" ? false : ARGS.mangle_props_debug + }); + writeNameCache("props", cache); + })(); + + var SCOPE_IS_NEEDED = COMPRESS || MANGLE || ARGS.lint + var TL_CACHE = readNameCache("vars"); + if (MANGLE) MANGLE.cache = TL_CACHE; + + if (SCOPE_IS_NEEDED) { + time_it("scope", function(){ + TOPLEVEL.figure_out_scope(MANGLE || { screw_ie8: screw_ie8, cache: TL_CACHE }); + if (ARGS.lint) { + TOPLEVEL.scope_warnings(); + } + }); + } + + if (COMPRESS) { + time_it("squeeze", function(){ + TOPLEVEL = compressor.compress(TOPLEVEL); + }); + } + + if (SCOPE_IS_NEEDED) { + time_it("scope", function(){ + TOPLEVEL.figure_out_scope(MANGLE || { screw_ie8: screw_ie8, cache: TL_CACHE }); + if (MANGLE && !TL_CACHE) { + TOPLEVEL.compute_char_frequency(MANGLE); + } + }); + } + + if (MANGLE) time_it("mangle", function(){ + TOPLEVEL.mangle_names(MANGLE); + }); + + writeNameCache("vars", TL_CACHE); + + if (ARGS.source_map_include_sources) { + for (var file in SOURCES_CONTENT) { + if (SOURCES_CONTENT.hasOwnProperty(file)) { + SOURCE_MAP.get().setSourceContent(file, SOURCES_CONTENT[file]); + } + } + } + + if (ARGS.dump_spidermonkey_ast) { + print(JSON.stringify(TOPLEVEL.to_mozilla_ast(), null, 2)); + } else { + time_it("generate", function(){ + TOPLEVEL.print(output); + }); + + output = output.get(); + + if (SOURCE_MAP) { + if (ARGS.source_map_inline) { + var base64_string = new Buffer(SOURCE_MAP.toString()).toString('base64'); + output += "\n//# sourceMappingURL=data:application/json;charset=utf-8;base64," + base64_string; + } else { + fs.writeFileSync(ARGS.source_map, SOURCE_MAP, "utf8"); + var source_map_url = ARGS.source_map_url || ( + P_RELATIVE + ? path.relative(path.dirname(OUTPUT_FILE), ARGS.source_map) + : ARGS.source_map + ); + output += "\n//# sourceMappingURL=" + source_map_url; + } + } + + if (OUTPUT_FILE) { + fs.writeFileSync(OUTPUT_FILE, output, "utf8"); + } else { + print(output); + } + } + + if (ARGS.stats) { + print_error(UglifyJS.string_template("Timing information (compressed {count} files):", { + count: files.length + })); + for (var i in STATS) if (STATS.hasOwnProperty(i)) { + print_error(UglifyJS.string_template("- {name}: {time}s", { + name: i, + time: (STATS[i] / 1000).toFixed(3) + })); + } + } +} + +/* -----[ functions ]----- */ + +function normalize(o) { + for (var i in o) if (o.hasOwnProperty(i) && /-/.test(i)) { + o[i.replace(/-/g, "_")] = o[i]; + delete o[i]; + } +} + +function getOptions(flag, constants) { + var x = ARGS[flag]; + if (x == null || x === false) return null; + var ret = {}; + if (x !== "") { + if (Array.isArray(x)) x = x.map(function (v) { return "(" + v + ")"; }).join(", "); + + var ast; + try { + ast = UglifyJS.parse(x, { cli: true, expression: true }); + } catch(ex) { + if (ex instanceof UglifyJS.JS_Parse_Error) { + print_error("Error parsing arguments for flag `" + flag + "': " + x); + process.exit(1); + } + } + ast.walk(new UglifyJS.TreeWalker(function(node){ + if (node instanceof UglifyJS.AST_Seq) return; // descend + if (node instanceof UglifyJS.AST_Assign) { + var name = node.left.print_to_string().replace(/-/g, "_"); + var value = node.right; + if (constants) + value = new Function("return (" + value.print_to_string() + ")")(); + ret[name] = value; + return true; // no descend + } + if (node instanceof UglifyJS.AST_Symbol || node instanceof UglifyJS.AST_Binary) { + var name = node.print_to_string().replace(/-/g, "_"); + ret[name] = true; + return true; // no descend + } + print_error(node.TYPE) + print_error("Error parsing arguments for flag `" + flag + "': " + x); + process.exit(1); + })); + } + return ret; +} + +function read_whole_file(filename, cb) { + if (filename == "-") { + var chunks = []; + process.stdin.setEncoding('utf-8'); + process.stdin.on('data', function (chunk) { + chunks.push(chunk); + }).on('end', function () { + cb(null, chunks.join("")); + }); + process.openStdin(); + } else { + fs.readFile(filename, "utf-8", cb); + } +} + +function read_source_map(code) { + var match = /\n\/\/# sourceMappingURL=data:application\/json(;.*?)?;base64,(.*)/.exec(code); + if (!match) { + print_error("WARN: inline source map not found"); + return null; + } + return JSON.parse(new Buffer(match[2], "base64")); +} + +function time_it(name, cont) { + var t1 = new Date().getTime(); + var ret = cont(); + if (ARGS.stats) { + var spent = new Date().getTime() - t1; + if (STATS[name]) STATS[name] += spent; + else STATS[name] = spent; + } + return ret; +} + +function print_error(msg) { + console.error("%s", msg); +} + +function print(txt) { + console.log("%s", txt); +} diff --git a/node_modules/uglify-js/lib/ast.js b/node_modules/uglify-js/lib/ast.js new file mode 100644 index 000000000..028772f3f --- /dev/null +++ b/node_modules/uglify-js/lib/ast.js @@ -0,0 +1,1052 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS2 + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + 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 HOLDER “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 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"; + +function DEFNODE(type, props, methods, base) { + if (arguments.length < 4) base = AST_Node; + if (!props) props = []; + else props = props.split(/\s+/); + var self_props = props; + if (base && base.PROPS) + props = props.concat(base.PROPS); + var code = "return function AST_" + type + "(props){ if (props) { "; + for (var i = props.length; --i >= 0;) { + code += "this." + props[i] + " = props." + props[i] + ";"; + } + var proto = base && new base; + if (proto && proto.initialize || (methods && methods.initialize)) + code += "this.initialize();"; + code += "}}"; + var ctor = new Function(code)(); + if (proto) { + ctor.prototype = proto; + ctor.BASE = base; + } + if (base) base.SUBCLASSES.push(ctor); + ctor.prototype.CTOR = ctor; + ctor.PROPS = props || null; + ctor.SELF_PROPS = self_props; + ctor.SUBCLASSES = []; + if (type) { + ctor.prototype.TYPE = ctor.TYPE = type; + } + if (methods) for (i in methods) if (HOP(methods, i)) { + if (/^\$/.test(i)) { + ctor[i.substr(1)] = methods[i]; + } else { + ctor.prototype[i] = methods[i]; + } + } + ctor.DEFMETHOD = function(name, method) { + this.prototype[name] = method; + }; + if (typeof exports !== "undefined") { + exports["AST_" + type] = ctor; + } + return ctor; +}; + +var AST_Token = DEFNODE("Token", "type value line col pos endline endcol endpos nlb comments_before file raw", { +}, null); + +var AST_Node = DEFNODE("Node", "start end", { + _clone: function(deep) { + if (deep) { + var self = this.clone(); + return self.transform(new TreeTransformer(function(node) { + if (node !== self) { + return node.clone(true); + } + })); + } + return new this.CTOR(this); + }, + clone: function(deep) { + return this._clone(deep); + }, + $documentation: "Base class of all AST nodes", + $propdoc: { + start: "[AST_Token] The first token of this node", + end: "[AST_Token] The last token of this node" + }, + _walk: function(visitor) { + return visitor._visit(this); + }, + walk: function(visitor) { + return this._walk(visitor); // not sure the indirection will be any help + } +}, null); + +AST_Node.warn_function = null; +AST_Node.warn = function(txt, props) { + if (AST_Node.warn_function) + AST_Node.warn_function(string_template(txt, props)); +}; + +/* -----[ statements ]----- */ + +var AST_Statement = DEFNODE("Statement", null, { + $documentation: "Base class of all statements", +}); + +var AST_Debugger = DEFNODE("Debugger", null, { + $documentation: "Represents a debugger statement", +}, AST_Statement); + +var AST_Directive = DEFNODE("Directive", "value scope quote", { + $documentation: "Represents a directive, like \"use strict\";", + $propdoc: { + value: "[string] The value of this directive as a plain string (it's not an AST_String!)", + scope: "[AST_Scope/S] The scope that this directive affects", + quote: "[string] the original quote character" + }, +}, AST_Statement); + +var AST_SimpleStatement = DEFNODE("SimpleStatement", "body", { + $documentation: "A statement consisting of an expression, i.e. a = 1 + 2", + $propdoc: { + body: "[AST_Node] an expression node (should not be instanceof AST_Statement)" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.body._walk(visitor); + }); + } +}, AST_Statement); + +function walk_body(node, visitor) { + var body = node.body; + if (body instanceof AST_Statement) { + body._walk(visitor); + } + else for (var i = 0, len = body.length; i < len; i++) { + body[i]._walk(visitor); + } +}; + +var AST_Block = DEFNODE("Block", "body", { + $documentation: "A body of statements (usually bracketed)", + $propdoc: { + body: "[AST_Statement*] an array of statements" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + walk_body(this, visitor); + }); + } +}, AST_Statement); + +var AST_BlockStatement = DEFNODE("BlockStatement", null, { + $documentation: "A block statement", +}, AST_Block); + +var AST_EmptyStatement = DEFNODE("EmptyStatement", null, { + $documentation: "The empty statement (empty block or simply a semicolon)", + _walk: function(visitor) { + return visitor._visit(this); + } +}, AST_Statement); + +var AST_StatementWithBody = DEFNODE("StatementWithBody", "body", { + $documentation: "Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`", + $propdoc: { + body: "[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.body._walk(visitor); + }); + } +}, AST_Statement); + +var AST_LabeledStatement = DEFNODE("LabeledStatement", "label", { + $documentation: "Statement with a label", + $propdoc: { + label: "[AST_Label] a label definition" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.label._walk(visitor); + this.body._walk(visitor); + }); + }, + clone: function(deep) { + var node = this._clone(deep); + if (deep) { + var label = node.label; + var def = this.label; + node.walk(new TreeWalker(function(node) { + if (node instanceof AST_LoopControl + && node.label && node.label.thedef === def) { + node.label.thedef = label; + label.references.push(node); + } + })); + } + return node; + } +}, AST_StatementWithBody); + +var AST_IterationStatement = DEFNODE("IterationStatement", null, { + $documentation: "Internal class. All loops inherit from it." +}, AST_StatementWithBody); + +var AST_DWLoop = DEFNODE("DWLoop", "condition", { + $documentation: "Base class for do/while statements", + $propdoc: { + condition: "[AST_Node] the loop condition. Should not be instanceof AST_Statement" + } +}, AST_IterationStatement); + +var AST_Do = DEFNODE("Do", null, { + $documentation: "A `do` statement", + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.body._walk(visitor); + this.condition._walk(visitor); + }); + } +}, AST_DWLoop); + +var AST_While = DEFNODE("While", null, { + $documentation: "A `while` statement", + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.condition._walk(visitor); + this.body._walk(visitor); + }); + } +}, AST_DWLoop); + +var AST_For = DEFNODE("For", "init condition step", { + $documentation: "A `for` statement", + $propdoc: { + init: "[AST_Node?] the `for` initialization code, or null if empty", + condition: "[AST_Node?] the `for` termination clause, or null if empty", + step: "[AST_Node?] the `for` update clause, or null if empty" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + if (this.init) this.init._walk(visitor); + if (this.condition) this.condition._walk(visitor); + if (this.step) this.step._walk(visitor); + this.body._walk(visitor); + }); + } +}, AST_IterationStatement); + +var AST_ForIn = DEFNODE("ForIn", "init name object", { + $documentation: "A `for ... in` statement", + $propdoc: { + init: "[AST_Node] the `for/in` initialization code", + name: "[AST_SymbolRef?] the loop variable, only if `init` is AST_Var", + object: "[AST_Node] the object that we're looping through" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.init._walk(visitor); + this.object._walk(visitor); + this.body._walk(visitor); + }); + } +}, AST_IterationStatement); + +var AST_With = DEFNODE("With", "expression", { + $documentation: "A `with` statement", + $propdoc: { + expression: "[AST_Node] the `with` expression" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.expression._walk(visitor); + this.body._walk(visitor); + }); + } +}, AST_StatementWithBody); + +/* -----[ scope and functions ]----- */ + +var AST_Scope = DEFNODE("Scope", "directives variables functions uses_with uses_eval parent_scope enclosed cname", { + $documentation: "Base class for all statements introducing a lexical scope", + $propdoc: { + directives: "[string*/S] an array of directives declared in this scope", + variables: "[Object/S] a map of name -> SymbolDef for all variables/functions defined in this scope", + functions: "[Object/S] like `variables`, but only lists function declarations", + uses_with: "[boolean/S] tells whether this scope uses the `with` statement", + uses_eval: "[boolean/S] tells whether this scope contains a direct call to the global `eval`", + parent_scope: "[AST_Scope?/S] link to the parent scope", + enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes", + cname: "[integer/S] current index for mangling variables (used internally by the mangler)", + }, +}, AST_Block); + +var AST_Toplevel = DEFNODE("Toplevel", "globals", { + $documentation: "The toplevel scope", + $propdoc: { + globals: "[Object/S] a map of name -> SymbolDef for all undeclared names", + }, + wrap_enclose: function(arg_parameter_pairs) { + var self = this; + var args = []; + var parameters = []; + + arg_parameter_pairs.forEach(function(pair) { + var splitAt = pair.lastIndexOf(":"); + + args.push(pair.substr(0, splitAt)); + parameters.push(pair.substr(splitAt + 1)); + }); + + var wrapped_tl = "(function(" + parameters.join(",") + "){ '$ORIG'; })(" + args.join(",") + ")"; + wrapped_tl = parse(wrapped_tl); + wrapped_tl = wrapped_tl.transform(new TreeTransformer(function before(node){ + if (node instanceof AST_Directive && node.value == "$ORIG") { + return MAP.splice(self.body); + } + })); + return wrapped_tl; + }, + wrap_commonjs: function(name, export_all) { + var self = this; + var to_export = []; + if (export_all) { + self.figure_out_scope(); + self.walk(new TreeWalker(function(node){ + if (node instanceof AST_SymbolDeclaration && node.definition().global) { + if (!find_if(function(n){ return n.name == node.name }, to_export)) + to_export.push(node); + } + })); + } + var wrapped_tl = "(function(exports, global){ '$ORIG'; '$EXPORTS'; global['" + name + "'] = exports; }({}, (function(){return this}())))"; + wrapped_tl = parse(wrapped_tl); + wrapped_tl = wrapped_tl.transform(new TreeTransformer(function before(node){ + if (node instanceof AST_Directive) { + switch (node.value) { + case "$ORIG": + return MAP.splice(self.body); + case "$EXPORTS": + var body = []; + to_export.forEach(function(sym){ + body.push(new AST_SimpleStatement({ + body: new AST_Assign({ + left: new AST_Sub({ + expression: new AST_SymbolRef({ name: "exports" }), + property: new AST_String({ value: sym.name }), + }), + operator: "=", + right: new AST_SymbolRef(sym), + }), + })); + }); + return MAP.splice(body); + } + } + })); + return wrapped_tl; + } +}, AST_Scope); + +var AST_Lambda = DEFNODE("Lambda", "name argnames uses_arguments", { + $documentation: "Base class for functions", + $propdoc: { + name: "[AST_SymbolDeclaration?] the name of this function", + argnames: "[AST_SymbolFunarg*] array of function arguments", + uses_arguments: "[boolean/S] tells whether this function accesses the arguments array" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + if (this.name) this.name._walk(visitor); + var argnames = this.argnames; + for (var i = 0, len = argnames.length; i < len; i++) { + argnames[i]._walk(visitor); + } + walk_body(this, visitor); + }); + } +}, AST_Scope); + +var AST_Accessor = DEFNODE("Accessor", null, { + $documentation: "A setter/getter function. The `name` property is always null." +}, AST_Lambda); + +var AST_Function = DEFNODE("Function", null, { + $documentation: "A function expression" +}, AST_Lambda); + +var AST_Defun = DEFNODE("Defun", null, { + $documentation: "A function definition" +}, AST_Lambda); + +/* -----[ JUMPS ]----- */ + +var AST_Jump = DEFNODE("Jump", null, { + $documentation: "Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)" +}, AST_Statement); + +var AST_Exit = DEFNODE("Exit", "value", { + $documentation: "Base class for “exits” (`return` and `throw`)", + $propdoc: { + value: "[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return" + }, + _walk: function(visitor) { + return visitor._visit(this, this.value && function(){ + this.value._walk(visitor); + }); + } +}, AST_Jump); + +var AST_Return = DEFNODE("Return", null, { + $documentation: "A `return` statement" +}, AST_Exit); + +var AST_Throw = DEFNODE("Throw", null, { + $documentation: "A `throw` statement" +}, AST_Exit); + +var AST_LoopControl = DEFNODE("LoopControl", "label", { + $documentation: "Base class for loop control statements (`break` and `continue`)", + $propdoc: { + label: "[AST_LabelRef?] the label, or null if none", + }, + _walk: function(visitor) { + return visitor._visit(this, this.label && function(){ + this.label._walk(visitor); + }); + } +}, AST_Jump); + +var AST_Break = DEFNODE("Break", null, { + $documentation: "A `break` statement" +}, AST_LoopControl); + +var AST_Continue = DEFNODE("Continue", null, { + $documentation: "A `continue` statement" +}, AST_LoopControl); + +/* -----[ IF ]----- */ + +var AST_If = DEFNODE("If", "condition alternative", { + $documentation: "A `if` statement", + $propdoc: { + condition: "[AST_Node] the `if` condition", + alternative: "[AST_Statement?] the `else` part, or null if not present" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.condition._walk(visitor); + this.body._walk(visitor); + if (this.alternative) this.alternative._walk(visitor); + }); + } +}, AST_StatementWithBody); + +/* -----[ SWITCH ]----- */ + +var AST_Switch = DEFNODE("Switch", "expression", { + $documentation: "A `switch` statement", + $propdoc: { + expression: "[AST_Node] the `switch` “discriminant”" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.expression._walk(visitor); + walk_body(this, visitor); + }); + } +}, AST_Block); + +var AST_SwitchBranch = DEFNODE("SwitchBranch", null, { + $documentation: "Base class for `switch` branches", +}, AST_Block); + +var AST_Default = DEFNODE("Default", null, { + $documentation: "A `default` switch branch", +}, AST_SwitchBranch); + +var AST_Case = DEFNODE("Case", "expression", { + $documentation: "A `case` switch branch", + $propdoc: { + expression: "[AST_Node] the `case` expression" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.expression._walk(visitor); + walk_body(this, visitor); + }); + } +}, AST_SwitchBranch); + +/* -----[ EXCEPTIONS ]----- */ + +var AST_Try = DEFNODE("Try", "bcatch bfinally", { + $documentation: "A `try` statement", + $propdoc: { + bcatch: "[AST_Catch?] the catch block, or null if not present", + bfinally: "[AST_Finally?] the finally block, or null if not present" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + walk_body(this, visitor); + if (this.bcatch) this.bcatch._walk(visitor); + if (this.bfinally) this.bfinally._walk(visitor); + }); + } +}, AST_Block); + +var AST_Catch = DEFNODE("Catch", "argname", { + $documentation: "A `catch` node; only makes sense as part of a `try` statement", + $propdoc: { + argname: "[AST_SymbolCatch] symbol for the exception" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.argname._walk(visitor); + walk_body(this, visitor); + }); + } +}, AST_Block); + +var AST_Finally = DEFNODE("Finally", null, { + $documentation: "A `finally` node; only makes sense as part of a `try` statement" +}, AST_Block); + +/* -----[ VAR/CONST ]----- */ + +var AST_Definitions = DEFNODE("Definitions", "definitions", { + $documentation: "Base class for `var` or `const` nodes (variable declarations/initializations)", + $propdoc: { + definitions: "[AST_VarDef*] array of variable definitions" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + var definitions = this.definitions; + for (var i = 0, len = definitions.length; i < len; i++) { + definitions[i]._walk(visitor); + } + }); + } +}, AST_Statement); + +var AST_Var = DEFNODE("Var", null, { + $documentation: "A `var` statement" +}, AST_Definitions); + +var AST_Const = DEFNODE("Const", null, { + $documentation: "A `const` statement" +}, AST_Definitions); + +var AST_VarDef = DEFNODE("VarDef", "name value", { + $documentation: "A variable declaration; only appears in a AST_Definitions node", + $propdoc: { + name: "[AST_SymbolVar|AST_SymbolConst] name of the variable", + value: "[AST_Node?] initializer, or null of there's no initializer" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.name._walk(visitor); + if (this.value) this.value._walk(visitor); + }); + } +}); + +/* -----[ OTHER ]----- */ + +var AST_Call = DEFNODE("Call", "expression args", { + $documentation: "A function call expression", + $propdoc: { + expression: "[AST_Node] expression to invoke as function", + args: "[AST_Node*] array of arguments" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.expression._walk(visitor); + var args = this.args; + for (var i = 0, len = args.length; i < len; i++) { + args[i]._walk(visitor); + } + }); + } +}); + +var AST_New = DEFNODE("New", null, { + $documentation: "An object instantiation. Derives from a function call since it has exactly the same properties" +}, AST_Call); + +var AST_Seq = DEFNODE("Seq", "car cdr", { + $documentation: "A sequence expression (two comma-separated expressions)", + $propdoc: { + car: "[AST_Node] first element in sequence", + cdr: "[AST_Node] second element in sequence" + }, + $cons: function(x, y) { + var seq = new AST_Seq(x); + seq.car = x; + seq.cdr = y; + return seq; + }, + $from_array: function(array) { + if (array.length == 0) return null; + if (array.length == 1) return array[0].clone(); + var list = null; + for (var i = array.length; --i >= 0;) { + list = AST_Seq.cons(array[i], list); + } + var p = list; + while (p) { + if (p.cdr && !p.cdr.cdr) { + p.cdr = p.cdr.car; + break; + } + p = p.cdr; + } + return list; + }, + to_array: function() { + var p = this, a = []; + while (p) { + a.push(p.car); + if (p.cdr && !(p.cdr instanceof AST_Seq)) { + a.push(p.cdr); + break; + } + p = p.cdr; + } + return a; + }, + add: function(node) { + var p = this; + while (p) { + if (!(p.cdr instanceof AST_Seq)) { + var cell = AST_Seq.cons(p.cdr, node); + return p.cdr = cell; + } + p = p.cdr; + } + }, + len: function() { + if (this.cdr instanceof AST_Seq) { + return this.cdr.len() + 1; + } else { + return 2; + } + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.car._walk(visitor); + if (this.cdr) this.cdr._walk(visitor); + }); + } +}); + +var AST_PropAccess = DEFNODE("PropAccess", "expression property", { + $documentation: "Base class for property access expressions, i.e. `a.foo` or `a[\"foo\"]`", + $propdoc: { + expression: "[AST_Node] the “container” expression", + property: "[AST_Node|string] the property to access. For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node" + } +}); + +var AST_Dot = DEFNODE("Dot", null, { + $documentation: "A dotted property access expression", + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.expression._walk(visitor); + }); + } +}, AST_PropAccess); + +var AST_Sub = DEFNODE("Sub", null, { + $documentation: "Index-style property access, i.e. `a[\"foo\"]`", + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.expression._walk(visitor); + this.property._walk(visitor); + }); + } +}, AST_PropAccess); + +var AST_Unary = DEFNODE("Unary", "operator expression", { + $documentation: "Base class for unary expressions", + $propdoc: { + operator: "[string] the operator", + expression: "[AST_Node] expression that this unary operator applies to" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.expression._walk(visitor); + }); + } +}); + +var AST_UnaryPrefix = DEFNODE("UnaryPrefix", null, { + $documentation: "Unary prefix expression, i.e. `typeof i` or `++i`" +}, AST_Unary); + +var AST_UnaryPostfix = DEFNODE("UnaryPostfix", null, { + $documentation: "Unary postfix expression, i.e. `i++`" +}, AST_Unary); + +var AST_Binary = DEFNODE("Binary", "left operator right", { + $documentation: "Binary expression, i.e. `a + b`", + $propdoc: { + left: "[AST_Node] left-hand side expression", + operator: "[string] the operator", + right: "[AST_Node] right-hand side expression" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.left._walk(visitor); + this.right._walk(visitor); + }); + } +}); + +var AST_Conditional = DEFNODE("Conditional", "condition consequent alternative", { + $documentation: "Conditional expression using the ternary operator, i.e. `a ? b : c`", + $propdoc: { + condition: "[AST_Node]", + consequent: "[AST_Node]", + alternative: "[AST_Node]" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.condition._walk(visitor); + this.consequent._walk(visitor); + this.alternative._walk(visitor); + }); + } +}); + +var AST_Assign = DEFNODE("Assign", null, { + $documentation: "An assignment expression — `a = b + 5`", +}, AST_Binary); + +/* -----[ LITERALS ]----- */ + +var AST_Array = DEFNODE("Array", "elements", { + $documentation: "An array literal", + $propdoc: { + elements: "[AST_Node*] array of elements" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + var elements = this.elements; + for (var i = 0, len = elements.length; i < len; i++) { + elements[i]._walk(visitor); + } + }); + } +}); + +var AST_Object = DEFNODE("Object", "properties", { + $documentation: "An object literal", + $propdoc: { + properties: "[AST_ObjectProperty*] array of properties" + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + var properties = this.properties; + for (var i = 0, len = properties.length; i < len; i++) { + properties[i]._walk(visitor); + } + }); + } +}); + +var AST_ObjectProperty = DEFNODE("ObjectProperty", "key value", { + $documentation: "Base class for literal object properties", + $propdoc: { + key: "[string] the property name converted to a string for ObjectKeyVal. For setters and getters this is an AST_SymbolAccessor.", + value: "[AST_Node] property value. For setters and getters this is an AST_Accessor." + }, + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.value._walk(visitor); + }); + } +}); + +var AST_ObjectKeyVal = DEFNODE("ObjectKeyVal", "quote", { + $documentation: "A key: value object property", + $propdoc: { + quote: "[string] the original quote character" + } +}, AST_ObjectProperty); + +var AST_ObjectSetter = DEFNODE("ObjectSetter", null, { + $documentation: "An object setter property", +}, AST_ObjectProperty); + +var AST_ObjectGetter = DEFNODE("ObjectGetter", null, { + $documentation: "An object getter property", +}, AST_ObjectProperty); + +var AST_Symbol = DEFNODE("Symbol", "scope name thedef", { + $propdoc: { + name: "[string] name of this symbol", + scope: "[AST_Scope/S] the current scope (not necessarily the definition scope)", + thedef: "[SymbolDef/S] the definition of this symbol" + }, + $documentation: "Base class for all symbols", +}); + +var AST_SymbolAccessor = DEFNODE("SymbolAccessor", null, { + $documentation: "The name of a property accessor (setter/getter function)" +}, AST_Symbol); + +var AST_SymbolDeclaration = DEFNODE("SymbolDeclaration", "init", { + $documentation: "A declaration symbol (symbol in var/const, function name or argument, symbol in catch)", +}, AST_Symbol); + +var AST_SymbolVar = DEFNODE("SymbolVar", null, { + $documentation: "Symbol defining a variable", +}, AST_SymbolDeclaration); + +var AST_SymbolConst = DEFNODE("SymbolConst", null, { + $documentation: "A constant declaration" +}, AST_SymbolDeclaration); + +var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, { + $documentation: "Symbol naming a function argument", +}, AST_SymbolVar); + +var AST_SymbolDefun = DEFNODE("SymbolDefun", null, { + $documentation: "Symbol defining a function", +}, AST_SymbolDeclaration); + +var AST_SymbolLambda = DEFNODE("SymbolLambda", null, { + $documentation: "Symbol naming a function expression", +}, AST_SymbolDeclaration); + +var AST_SymbolCatch = DEFNODE("SymbolCatch", null, { + $documentation: "Symbol naming the exception in catch", +}, AST_SymbolDeclaration); + +var AST_Label = DEFNODE("Label", "references", { + $documentation: "Symbol naming a label (declaration)", + $propdoc: { + references: "[AST_LoopControl*] a list of nodes referring to this label" + }, + initialize: function() { + this.references = []; + this.thedef = this; + } +}, AST_Symbol); + +var AST_SymbolRef = DEFNODE("SymbolRef", null, { + $documentation: "Reference to some symbol (not definition/declaration)", +}, AST_Symbol); + +var AST_LabelRef = DEFNODE("LabelRef", null, { + $documentation: "Reference to a label symbol", +}, AST_Symbol); + +var AST_This = DEFNODE("This", null, { + $documentation: "The `this` symbol", +}, AST_Symbol); + +var AST_Constant = DEFNODE("Constant", null, { + $documentation: "Base class for all constants", + getValue: function() { + return this.value; + } +}); + +var AST_String = DEFNODE("String", "value quote", { + $documentation: "A string literal", + $propdoc: { + value: "[string] the contents of this string", + quote: "[string] the original quote character" + } +}, AST_Constant); + +var AST_Number = DEFNODE("Number", "value literal", { + $documentation: "A number literal", + $propdoc: { + value: "[number] the numeric value", + literal: "[string] numeric value as string (optional)" + } +}, AST_Constant); + +var AST_RegExp = DEFNODE("RegExp", "value", { + $documentation: "A regexp literal", + $propdoc: { + value: "[RegExp] the actual regexp" + } +}, AST_Constant); + +var AST_Atom = DEFNODE("Atom", null, { + $documentation: "Base class for atoms", +}, AST_Constant); + +var AST_Null = DEFNODE("Null", null, { + $documentation: "The `null` atom", + value: null +}, AST_Atom); + +var AST_NaN = DEFNODE("NaN", null, { + $documentation: "The impossible value", + value: 0/0 +}, AST_Atom); + +var AST_Undefined = DEFNODE("Undefined", null, { + $documentation: "The `undefined` value", + value: (function(){}()) +}, AST_Atom); + +var AST_Hole = DEFNODE("Hole", null, { + $documentation: "A hole in an array", + value: (function(){}()) +}, AST_Atom); + +var AST_Infinity = DEFNODE("Infinity", null, { + $documentation: "The `Infinity` value", + value: 1/0 +}, AST_Atom); + +var AST_Boolean = DEFNODE("Boolean", null, { + $documentation: "Base class for booleans", +}, AST_Atom); + +var AST_False = DEFNODE("False", null, { + $documentation: "The `false` atom", + value: false +}, AST_Boolean); + +var AST_True = DEFNODE("True", null, { + $documentation: "The `true` atom", + value: true +}, AST_Boolean); + +/* -----[ TreeWalker ]----- */ + +function TreeWalker(callback) { + this.visit = callback; + this.stack = []; + this.directives = Object.create(null); +}; +TreeWalker.prototype = { + _visit: function(node, descend) { + this.push(node); + var ret = this.visit(node, descend ? function(){ + descend.call(node); + } : noop); + if (!ret && descend) { + descend.call(node); + } + this.pop(node); + return ret; + }, + parent: function(n) { + return this.stack[this.stack.length - 2 - (n || 0)]; + }, + push: function (node) { + if (node instanceof AST_Lambda) { + this.directives = Object.create(this.directives); + } else if (node instanceof AST_Directive && !this.directives[node.value]) { + this.directives[node.value] = node; + } + this.stack.push(node); + }, + pop: function(node) { + this.stack.pop(); + if (node instanceof AST_Lambda) { + this.directives = Object.getPrototypeOf(this.directives); + } + }, + self: function() { + return this.stack[this.stack.length - 1]; + }, + find_parent: function(type) { + var stack = this.stack; + for (var i = stack.length; --i >= 0;) { + var x = stack[i]; + if (x instanceof type) return x; + } + }, + has_directive: function(type) { + var dir = this.directives[type]; + if (dir) return dir; + var node = this.stack[this.stack.length - 1]; + if (node instanceof AST_Scope) { + for (var i = 0; i < node.body.length; ++i) { + var st = node.body[i]; + if (!(st instanceof AST_Directive)) break; + if (st.value == type) return st; + } + } + }, + in_boolean_context: function() { + var stack = this.stack; + var i = stack.length, self = stack[--i]; + while (i > 0) { + var p = stack[--i]; + if ((p instanceof AST_If && p.condition === self) || + (p instanceof AST_Conditional && p.condition === self) || + (p instanceof AST_DWLoop && p.condition === self) || + (p instanceof AST_For && p.condition === self) || + (p instanceof AST_UnaryPrefix && p.operator == "!" && p.expression === self)) + { + return true; + } + if (!(p instanceof AST_Binary && (p.operator == "&&" || p.operator == "||"))) + return false; + self = p; + } + }, + loopcontrol_target: function(node) { + var stack = this.stack; + if (node.label) for (var i = stack.length; --i >= 0;) { + var x = stack[i]; + if (x instanceof AST_LabeledStatement && x.label.name == node.label.name) + return x.body; + } else for (var i = stack.length; --i >= 0;) { + var x = stack[i]; + if (x instanceof AST_IterationStatement + || node instanceof AST_Break && x instanceof AST_Switch) + return x; + } + } +}; diff --git a/node_modules/uglify-js/lib/compress.js b/node_modules/uglify-js/lib/compress.js new file mode 100644 index 000000000..d8a491ebc --- /dev/null +++ b/node_modules/uglify-js/lib/compress.js @@ -0,0 +1,4101 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS2 + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + 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 HOLDER “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 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"; + +function Compressor(options, false_by_default) { + if (!(this instanceof Compressor)) + return new Compressor(options, false_by_default); + TreeTransformer.call(this, this.before, this.after); + this.options = defaults(options, { + angular : false, + booleans : !false_by_default, + cascade : !false_by_default, + collapse_vars : !false_by_default, + comparisons : !false_by_default, + conditionals : !false_by_default, + dead_code : !false_by_default, + drop_console : false, + drop_debugger : !false_by_default, + evaluate : !false_by_default, + expression : false, + global_defs : {}, + hoist_funs : !false_by_default, + hoist_vars : false, + if_return : !false_by_default, + join_vars : !false_by_default, + keep_fargs : true, + keep_fnames : false, + keep_infinity : false, + loops : !false_by_default, + negate_iife : !false_by_default, + passes : 1, + properties : !false_by_default, + pure_getters : !false_by_default && "strict", + pure_funcs : null, + reduce_vars : !false_by_default, + screw_ie8 : true, + sequences : !false_by_default, + side_effects : !false_by_default, + switches : !false_by_default, + top_retain : null, + toplevel : !!(options && options["top_retain"]), + unsafe : false, + unsafe_comps : false, + unsafe_math : false, + unsafe_proto : false, + unsafe_regexp : false, + unused : !false_by_default, + warnings : true, + }, true); + var pure_funcs = this.options["pure_funcs"]; + if (typeof pure_funcs == "function") { + this.pure_funcs = pure_funcs; + } else { + this.pure_funcs = pure_funcs ? function(node) { + return pure_funcs.indexOf(node.expression.print_to_string()) < 0; + } : return_true; + } + var top_retain = this.options["top_retain"]; + if (top_retain instanceof RegExp) { + this.top_retain = function(def) { + return top_retain.test(def.name); + }; + } else if (typeof top_retain == "function") { + this.top_retain = top_retain; + } else if (top_retain) { + if (typeof top_retain == "string") { + top_retain = top_retain.split(/,/); + } + this.top_retain = function(def) { + return top_retain.indexOf(def.name) >= 0; + }; + } + var sequences = this.options["sequences"]; + this.sequences_limit = sequences == 1 ? 200 : sequences | 0; + this.warnings_produced = {}; +}; + +Compressor.prototype = new TreeTransformer; +merge(Compressor.prototype, { + option: function(key) { return this.options[key] }, + compress: function(node) { + if (this.option("expression")) { + node = node.process_expression(true); + } + var passes = +this.options.passes || 1; + for (var pass = 0; pass < passes && pass < 3; ++pass) { + if (pass > 0 || this.option("reduce_vars")) + node.reset_opt_flags(this, true); + node = node.transform(this); + } + if (this.option("expression")) { + node = node.process_expression(false); + } + return node; + }, + info: function() { + if (this.options.warnings == "verbose") { + AST_Node.warn.apply(AST_Node, arguments); + } + }, + warn: function(text, props) { + if (this.options.warnings) { + // only emit unique warnings + var message = string_template(text, props); + if (!(message in this.warnings_produced)) { + this.warnings_produced[message] = true; + AST_Node.warn.apply(AST_Node, arguments); + } + } + }, + clear_warnings: function() { + this.warnings_produced = {}; + }, + before: function(node, descend, in_list) { + if (node._squeezed) return node; + var was_scope = false; + if (node instanceof AST_Scope) { + node = node.hoist_declarations(this); + was_scope = true; + } + // Before https://github.com/mishoo/UglifyJS2/pull/1602 AST_Node.optimize() + // would call AST_Node.transform() if a different instance of AST_Node is + // produced after OPT(). + // This corrupts TreeWalker.stack, which cause AST look-ups to malfunction. + // Migrate and defer all children's AST_Node.transform() to below, which + // will now happen after this parent AST_Node has been properly substituted + // thus gives a consistent AST snapshot. + descend(node, this); + // Existing code relies on how AST_Node.optimize() worked, and omitting the + // following replacement call would result in degraded efficiency of both + // output and performance. + descend(node, this); + var opt = node.optimize(this); + if (was_scope && opt instanceof AST_Scope) { + opt.drop_unused(this); + descend(opt, this); + } + if (opt === node) opt._squeezed = true; + return opt; + } +}); + +(function(){ + + function OPT(node, optimizer) { + node.DEFMETHOD("optimize", function(compressor){ + var self = this; + if (self._optimized) return self; + if (compressor.has_directive("use asm")) return self; + var opt = optimizer(self, compressor); + opt._optimized = true; + return opt; + }); + }; + + OPT(AST_Node, function(self, compressor){ + return self; + }); + + AST_Node.DEFMETHOD("equivalent_to", function(node){ + return this.TYPE == node.TYPE && this.print_to_string() == node.print_to_string(); + }); + + AST_Node.DEFMETHOD("process_expression", function(insert, compressor) { + var self = this; + var tt = new TreeTransformer(function(node) { + if (insert && node instanceof AST_SimpleStatement) { + return make_node(AST_Return, node, { + value: node.body + }); + } + if (!insert && node instanceof AST_Return) { + if (compressor) { + var value = node.value && node.value.drop_side_effect_free(compressor, true); + return value ? make_node(AST_SimpleStatement, node, { + body: value + }) : make_node(AST_EmptyStatement, node); + } + return make_node(AST_SimpleStatement, node, { + body: node.value || make_node(AST_UnaryPrefix, node, { + operator: "void", + expression: make_node(AST_Number, node, { + value: 0 + }) + }) + }); + } + if (node instanceof AST_Lambda && node !== self) { + return node; + } + if (node instanceof AST_Block) { + var index = node.body.length - 1; + if (index >= 0) { + node.body[index] = node.body[index].transform(tt); + } + } + if (node instanceof AST_If) { + node.body = node.body.transform(tt); + if (node.alternative) { + node.alternative = node.alternative.transform(tt); + } + } + if (node instanceof AST_With) { + node.body = node.body.transform(tt); + } + return node; + }); + return self.transform(tt); + }); + + AST_Node.DEFMETHOD("reset_opt_flags", function(compressor, rescan){ + var reduce_vars = rescan && compressor.option("reduce_vars"); + var toplevel = compressor.option("toplevel"); + var safe_ids = Object.create(null); + var suppressor = new TreeWalker(function(node) { + if (node instanceof AST_Symbol) { + var d = node.definition(); + if (node instanceof AST_SymbolRef) d.references.push(node); + d.fixed = false; + } + }); + var tw = new TreeWalker(function(node, descend){ + node._squeezed = false; + node._optimized = false; + if (reduce_vars) { + if (node instanceof AST_Toplevel) node.globals.each(reset_def); + if (node instanceof AST_Scope) node.variables.each(reset_def); + if (node instanceof AST_SymbolRef) { + var d = node.definition(); + d.references.push(node); + if (d.fixed === undefined || !is_safe(d) + || is_modified(node, 0, node.fixed_value() instanceof AST_Lambda)) { + d.fixed = false; + } else { + var parent = tw.parent(); + if (parent instanceof AST_Assign && parent.operator == "=" && node === parent.right + || parent instanceof AST_Call && node !== parent.expression + || parent instanceof AST_Return && node === parent.value && node.scope !== d.scope + || parent instanceof AST_VarDef && node === parent.value) { + d.escaped = true; + } + } + } + if (node instanceof AST_SymbolCatch) { + node.definition().fixed = false; + } + if (node instanceof AST_VarDef) { + var d = node.name.definition(); + if (d.fixed == null) { + if (node.value) { + d.fixed = function() { + return node.value; + }; + mark(d, false); + descend(); + } else { + d.fixed = null; + } + mark(d, true); + return true; + } else if (node.value) { + d.fixed = false; + } + } + if (node instanceof AST_Defun) { + var d = node.name.definition(); + if (!toplevel && d.global || is_safe(d)) { + d.fixed = false; + } else { + d.fixed = node; + mark(d, true); + } + var save_ids = safe_ids; + safe_ids = Object.create(null); + descend(); + safe_ids = save_ids; + return true; + } + if (node instanceof AST_Function) { + push(); + var iife; + if (!node.name + && (iife = tw.parent()) instanceof AST_Call + && iife.expression === node) { + // Virtually turn IIFE parameters into variable definitions: + // (function(a,b) {...})(c,d) => (function() {var a=c,b=d; ...})() + // So existing transformation rules can work on them. + node.argnames.forEach(function(arg, i) { + var d = arg.definition(); + if (!node.uses_arguments && d.fixed === undefined) { + d.fixed = function() { + return iife.args[i] || make_node(AST_Undefined, iife); + }; + mark(d, true); + } else { + d.fixed = false; + } + }); + } + descend(); + pop(); + return true; + } + if (node instanceof AST_Accessor) { + var save_ids = safe_ids; + safe_ids = Object.create(null); + descend(); + safe_ids = save_ids; + return true; + } + if (node instanceof AST_Binary + && (node.operator == "&&" || node.operator == "||")) { + node.left.walk(tw); + push(); + node.right.walk(tw); + pop(); + return true; + } + if (node instanceof AST_Conditional) { + node.condition.walk(tw); + push(); + node.consequent.walk(tw); + pop(); + push(); + node.alternative.walk(tw); + pop(); + return true; + } + if (node instanceof AST_If || node instanceof AST_DWLoop) { + node.condition.walk(tw); + push(); + node.body.walk(tw); + pop(); + if (node.alternative) { + push(); + node.alternative.walk(tw); + pop(); + } + return true; + } + if (node instanceof AST_LabeledStatement) { + push(); + node.body.walk(tw); + pop(); + return true; + } + if (node instanceof AST_For) { + if (node.init) node.init.walk(tw); + push(); + if (node.condition) node.condition.walk(tw); + node.body.walk(tw); + if (node.step) node.step.walk(tw); + pop(); + return true; + } + if (node instanceof AST_ForIn) { + node.init.walk(suppressor); + node.object.walk(tw); + push(); + node.body.walk(tw); + pop(); + return true; + } + if (node instanceof AST_Try) { + push(); + walk_body(node, tw); + pop(); + if (node.bcatch) { + push(); + node.bcatch.walk(tw); + pop(); + } + if (node.bfinally) node.bfinally.walk(tw); + return true; + } + if (node instanceof AST_SwitchBranch) { + push(); + descend(); + pop(); + return true; + } + } + }); + this.walk(tw); + + function mark(def, safe) { + safe_ids[def.id] = safe; + } + + function is_safe(def) { + if (safe_ids[def.id]) { + if (def.fixed == null) { + var orig = def.orig[0]; + if (orig instanceof AST_SymbolFunarg || orig.name == "arguments") return false; + def.fixed = make_node(AST_Undefined, orig); + } + return true; + } + } + + function push() { + safe_ids = Object.create(safe_ids); + } + + function pop() { + safe_ids = Object.getPrototypeOf(safe_ids); + } + + function reset_def(def) { + def.escaped = false; + if (def.scope.uses_eval) { + def.fixed = false; + } else if (toplevel || !def.global || def.orig[0] instanceof AST_SymbolConst) { + def.fixed = undefined; + } else { + def.fixed = false; + } + def.references = []; + def.should_replace = undefined; + } + + function is_modified(node, level, func) { + var parent = tw.parent(level); + if (is_lhs(node, parent) + || !func && parent instanceof AST_Call && parent.expression === node) { + return true; + } else if (parent instanceof AST_PropAccess && parent.expression === node) { + return !func && is_modified(parent, level + 1); + } + } + }); + + AST_SymbolRef.DEFMETHOD("fixed_value", function() { + var fixed = this.definition().fixed; + if (!fixed || fixed instanceof AST_Node) return fixed; + return fixed(); + }); + + function is_reference_const(ref) { + if (!(ref instanceof AST_SymbolRef)) return false; + var orig = ref.definition().orig; + for (var i = orig.length; --i >= 0;) { + if (orig[i] instanceof AST_SymbolConst) return true; + } + } + + function find_variable(compressor, name) { + var scope, i = 0; + while (scope = compressor.parent(i++)) { + if (scope instanceof AST_Scope) break; + if (scope instanceof AST_Catch) { + scope = scope.argname.definition().scope; + break; + } + } + return scope.find_variable(name); + } + + function make_node(ctor, orig, props) { + if (!props) props = {}; + if (orig) { + if (!props.start) props.start = orig.start; + if (!props.end) props.end = orig.end; + } + return new ctor(props); + }; + + function make_node_from_constant(val, orig) { + switch (typeof val) { + case "string": + return make_node(AST_String, orig, { + value: val + }); + case "number": + if (isNaN(val)) return make_node(AST_NaN, orig); + if (isFinite(val)) { + return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, { + operator: "-", + expression: make_node(AST_Number, orig, { value: -val }) + }) : make_node(AST_Number, orig, { value: val }); + } + return val < 0 ? make_node(AST_UnaryPrefix, orig, { + operator: "-", + expression: make_node(AST_Infinity, orig) + }) : make_node(AST_Infinity, orig); + case "boolean": + return make_node(val ? AST_True : AST_False, orig); + case "undefined": + return make_node(AST_Undefined, orig); + default: + if (val === null) { + return make_node(AST_Null, orig, { value: null }); + } + if (val instanceof RegExp) { + return make_node(AST_RegExp, orig, { value: val }); + } + throw new Error(string_template("Can't handle constant of type: {type}", { + type: typeof val + })); + } + }; + + // we shouldn't compress (1,func)(something) to + // func(something) because that changes the meaning of + // the func (becomes lexical instead of global). + function maintain_this_binding(parent, orig, val) { + if (parent instanceof AST_UnaryPrefix && parent.operator == "delete" + || parent instanceof AST_Call && parent.expression === orig + && (val instanceof AST_PropAccess || val instanceof AST_SymbolRef && val.name == "eval")) { + return make_node(AST_Seq, orig, { + car: make_node(AST_Number, orig, { + value: 0 + }), + cdr: val + }); + } + return val; + } + + function as_statement_array(thing) { + if (thing === null) return []; + if (thing instanceof AST_BlockStatement) return thing.body; + if (thing instanceof AST_EmptyStatement) return []; + if (thing instanceof AST_Statement) return [ thing ]; + throw new Error("Can't convert thing to statement array"); + }; + + function is_empty(thing) { + if (thing === null) return true; + if (thing instanceof AST_EmptyStatement) return true; + if (thing instanceof AST_BlockStatement) return thing.body.length == 0; + return false; + }; + + function loop_body(x) { + if (x instanceof AST_Switch) return x; + if (x instanceof AST_For || x instanceof AST_ForIn || x instanceof AST_DWLoop) { + return (x.body instanceof AST_BlockStatement ? x.body : x); + } + return x; + }; + + function is_iife_call(node) { + if (node instanceof AST_Call && !(node instanceof AST_New)) { + return node.expression instanceof AST_Function || is_iife_call(node.expression); + } + return false; + } + + function tighten_body(statements, compressor) { + var CHANGED, max_iter = 10; + do { + CHANGED = false; + if (compressor.option("angular")) { + statements = process_for_angular(statements); + } + statements = eliminate_spurious_blocks(statements); + if (compressor.option("dead_code")) { + statements = eliminate_dead_code(statements, compressor); + } + if (compressor.option("if_return")) { + statements = handle_if_return(statements, compressor); + } + if (compressor.sequences_limit > 0) { + statements = sequencesize(statements, compressor); + } + if (compressor.option("join_vars")) { + statements = join_consecutive_vars(statements, compressor); + } + if (compressor.option("collapse_vars")) { + statements = collapse_single_use_vars(statements, compressor); + } + } while (CHANGED && max_iter-- > 0); + + return statements; + + function collapse_single_use_vars(statements, compressor) { + // Iterate statements backwards looking for a statement with a var/const + // declaration immediately preceding it. Grab the rightmost var definition + // and if it has exactly one reference then attempt to replace its reference + // in the statement with the var value and then erase the var definition. + + var self = compressor.self(); + var var_defs_removed = false; + var toplevel = compressor.option("toplevel"); + for (var stat_index = statements.length; --stat_index >= 0;) { + var stat = statements[stat_index]; + if (stat instanceof AST_Definitions) continue; + + // Process child blocks of statement if present. + [stat, stat.body, stat.alternative, stat.bcatch, stat.bfinally].forEach(function(node) { + node && node.body && collapse_single_use_vars(node.body, compressor); + }); + + // The variable definition must precede a statement. + if (stat_index <= 0) break; + var prev_stat_index = stat_index - 1; + var prev_stat = statements[prev_stat_index]; + if (!(prev_stat instanceof AST_Definitions)) continue; + var var_defs = prev_stat.definitions; + if (var_defs == null) continue; + + var var_names_seen = {}; + var side_effects_encountered = false; + var lvalues_encountered = false; + var lvalues = {}; + + // Scan variable definitions from right to left. + for (var var_defs_index = var_defs.length; --var_defs_index >= 0;) { + + // Obtain var declaration and var name with basic sanity check. + var var_decl = var_defs[var_defs_index]; + if (var_decl.value == null) break; + var var_name = var_decl.name.name; + if (!var_name || !var_name.length) break; + + // Bail if we've seen a var definition of same name before. + if (var_name in var_names_seen) break; + var_names_seen[var_name] = true; + + // Only interested in cases with just one reference to the variable. + var def = self.find_variable && self.find_variable(var_name); + if (!def || !def.references || def.references.length !== 1 + || var_name == "arguments" || (!toplevel && def.global)) { + side_effects_encountered = true; + continue; + } + var ref = def.references[0]; + + // Don't replace ref if eval() or with statement in scope. + if (ref.scope.uses_eval || ref.scope.uses_with) break; + + // Constant single use vars can be replaced in any scope. + if (var_decl.value.is_constant()) { + var ctt = new TreeTransformer(function(node) { + var parent = ctt.parent(); + if (parent instanceof AST_IterationStatement + && (parent.condition === node || parent.init === node)) { + return node; + } + if (node === ref) + return replace_var(node, parent, true); + }); + stat.transform(ctt); + continue; + } + + // Restrict var replacement to constants if side effects encountered. + if (side_effects_encountered |= lvalues_encountered) continue; + + var value_has_side_effects = var_decl.value.has_side_effects(compressor); + // Non-constant single use vars can only be replaced in same scope. + if (ref.scope !== self) { + side_effects_encountered |= value_has_side_effects; + continue; + } + + // Detect lvalues in var value. + var tw = new TreeWalker(function(node){ + if (node instanceof AST_SymbolRef && is_lvalue(node, tw.parent())) { + lvalues[node.name] = lvalues_encountered = true; + } + }); + var_decl.value.walk(tw); + + // Replace the non-constant single use var in statement if side effect free. + var unwind = false; + var tt = new TreeTransformer( + function preorder(node) { + if (unwind) return node; + var parent = tt.parent(); + if (node instanceof AST_Lambda + || node instanceof AST_Try + || node instanceof AST_With + || node instanceof AST_Case + || node instanceof AST_IterationStatement + || (parent instanceof AST_If && node !== parent.condition) + || (parent instanceof AST_Conditional && node !== parent.condition) + || (node instanceof AST_SymbolRef + && value_has_side_effects + && !are_references_in_scope(node.definition(), self)) + || (parent instanceof AST_Binary + && (parent.operator == "&&" || parent.operator == "||") + && node === parent.right) + || (parent instanceof AST_Switch && node !== parent.expression)) { + return side_effects_encountered = unwind = true, node; + } + function are_references_in_scope(def, scope) { + if (def.orig.length === 1 + && def.orig[0] instanceof AST_SymbolDefun) return true; + if (def.scope !== scope) return false; + var refs = def.references; + for (var i = 0, len = refs.length; i < len; i++) { + if (refs[i].scope !== scope) return false; + } + return true; + } + }, + function postorder(node) { + if (unwind) return node; + if (node === ref) + return unwind = true, replace_var(node, tt.parent(), false); + if (side_effects_encountered |= node.has_side_effects(compressor)) + return unwind = true, node; + if (lvalues_encountered && node instanceof AST_SymbolRef && node.name in lvalues) { + side_effects_encountered = true; + return unwind = true, node; + } + } + ); + stat.transform(tt); + } + } + + // Remove extraneous empty statments in block after removing var definitions. + // Leave at least one statement in `statements`. + if (var_defs_removed) for (var i = statements.length; --i >= 0;) { + if (statements.length > 1 && statements[i] instanceof AST_EmptyStatement) + statements.splice(i, 1); + } + + return statements; + + function is_lvalue(node, parent) { + return node instanceof AST_SymbolRef && is_lhs(node, parent); + } + function replace_var(node, parent, is_constant) { + if (is_lvalue(node, parent)) return node; + + // Remove var definition and return its value to the TreeTransformer to replace. + var value = maintain_this_binding(parent, node, var_decl.value); + var_decl.value = null; + + var_defs.splice(var_defs_index, 1); + if (var_defs.length === 0) { + statements[prev_stat_index] = make_node(AST_EmptyStatement, self); + var_defs_removed = true; + } + // Further optimize statement after substitution. + stat.reset_opt_flags(compressor); + + compressor.info("Collapsing " + (is_constant ? "constant" : "variable") + + " " + var_name + " [{file}:{line},{col}]", node.start); + CHANGED = true; + return value; + } + } + + function process_for_angular(statements) { + function has_inject(comment) { + return /@ngInject/.test(comment.value); + } + function make_arguments_names_list(func) { + return func.argnames.map(function(sym){ + return make_node(AST_String, sym, { value: sym.name }); + }); + } + function make_array(orig, elements) { + return make_node(AST_Array, orig, { elements: elements }); + } + function make_injector(func, name) { + return make_node(AST_SimpleStatement, func, { + body: make_node(AST_Assign, func, { + operator: "=", + left: make_node(AST_Dot, name, { + expression: make_node(AST_SymbolRef, name, name), + property: "$inject" + }), + right: make_array(func, make_arguments_names_list(func)) + }) + }); + } + function check_expression(body) { + if (body && body.args) { + // if this is a function call check all of arguments passed + body.args.forEach(function(argument, index, array) { + var comments = argument.start.comments_before; + // if the argument is function preceded by @ngInject + if (argument instanceof AST_Lambda && comments.length && has_inject(comments[0])) { + // replace the function with an array of names of its parameters and function at the end + array[index] = make_array(argument, make_arguments_names_list(argument).concat(argument)); + } + }); + // if this is chained call check previous one recursively + if (body.expression && body.expression.expression) { + check_expression(body.expression.expression); + } + } + } + return statements.reduce(function(a, stat){ + a.push(stat); + + if (stat.body && stat.body.args) { + check_expression(stat.body); + } else { + var token = stat.start; + var comments = token.comments_before; + if (comments && comments.length > 0) { + var last = comments.pop(); + if (has_inject(last)) { + // case 1: defun + if (stat instanceof AST_Defun) { + a.push(make_injector(stat, stat.name)); + } + else if (stat instanceof AST_Definitions) { + stat.definitions.forEach(function(def) { + if (def.value && def.value instanceof AST_Lambda) { + a.push(make_injector(def.value, def.name)); + } + }); + } + else { + compressor.warn("Unknown statement marked with @ngInject [{file}:{line},{col}]", token); + } + } + } + } + + return a; + }, []); + } + + function eliminate_spurious_blocks(statements) { + var seen_dirs = []; + return statements.reduce(function(a, stat){ + if (stat instanceof AST_BlockStatement) { + CHANGED = true; + a.push.apply(a, eliminate_spurious_blocks(stat.body)); + } else if (stat instanceof AST_EmptyStatement) { + CHANGED = true; + } else if (stat instanceof AST_Directive) { + if (seen_dirs.indexOf(stat.value) < 0) { + a.push(stat); + seen_dirs.push(stat.value); + } else { + CHANGED = true; + } + } else { + a.push(stat); + } + return a; + }, []); + }; + + function handle_if_return(statements, compressor) { + var self = compressor.self(); + var multiple_if_returns = has_multiple_if_returns(statements); + var in_lambda = self instanceof AST_Lambda; + var ret = []; // Optimized statements, build from tail to front + loop: for (var i = statements.length; --i >= 0;) { + var stat = statements[i]; + switch (true) { + case (in_lambda && stat instanceof AST_Return && !stat.value && ret.length == 0): + CHANGED = true; + // note, ret.length is probably always zero + // because we drop unreachable code before this + // step. nevertheless, it's good to check. + continue loop; + case stat instanceof AST_If: + if (stat.body instanceof AST_Return) { + //--- + // pretty silly case, but: + // if (foo()) return; return; ==> foo(); return; + if (((in_lambda && ret.length == 0) + || (ret[0] instanceof AST_Return && !ret[0].value)) + && !stat.body.value && !stat.alternative) { + CHANGED = true; + var cond = make_node(AST_SimpleStatement, stat.condition, { + body: stat.condition + }); + ret.unshift(cond); + continue loop; + } + //--- + // if (foo()) return x; return y; ==> return foo() ? x : y; + if (ret[0] instanceof AST_Return && stat.body.value && ret[0].value && !stat.alternative) { + CHANGED = true; + stat = stat.clone(); + stat.alternative = ret[0]; + ret[0] = stat.transform(compressor); + continue loop; + } + //--- + // if (foo()) return x; [ return ; ] ==> return foo() ? x : undefined; + if (multiple_if_returns && (ret.length == 0 || ret[0] instanceof AST_Return) + && stat.body.value && !stat.alternative && in_lambda) { + CHANGED = true; + stat = stat.clone(); + stat.alternative = ret[0] || make_node(AST_Return, stat, { + value: null + }); + ret[0] = stat.transform(compressor); + continue loop; + } + //--- + // if (foo()) return; [ else x... ]; y... ==> if (!foo()) { x...; y... } + if (!stat.body.value && in_lambda) { + CHANGED = true; + stat = stat.clone(); + stat.condition = stat.condition.negate(compressor); + var body = as_statement_array(stat.alternative).concat(ret); + var funs = extract_functions_from_statement_array(body); + stat.body = make_node(AST_BlockStatement, stat, { + body: body + }); + stat.alternative = null; + ret = funs.concat([ stat.transform(compressor) ]); + continue loop; + } + + //--- + // if (a) return b; if (c) return d; e; ==> return a ? b : c ? d : void e; + // + // if sequences is not enabled, this can lead to an endless loop (issue #866). + // however, with sequences on this helps producing slightly better output for + // the example code. + if (compressor.option("sequences") + && i > 0 && statements[i - 1] instanceof AST_If && statements[i - 1].body instanceof AST_Return + && ret.length == 1 && in_lambda && ret[0] instanceof AST_SimpleStatement + && !stat.alternative) { + CHANGED = true; + ret.push(make_node(AST_Return, ret[0], { + value: null + }).transform(compressor)); + ret.unshift(stat); + continue loop; + } + } + + var ab = aborts(stat.body); + var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab) : null; + if (ab && ((ab instanceof AST_Return && !ab.value && in_lambda) + || (ab instanceof AST_Continue && self === loop_body(lct)) + || (ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct))) { + if (ab.label) { + remove(ab.label.thedef.references, ab); + } + CHANGED = true; + var body = as_statement_array(stat.body).slice(0, -1); + stat = stat.clone(); + stat.condition = stat.condition.negate(compressor); + stat.body = make_node(AST_BlockStatement, stat, { + body: as_statement_array(stat.alternative).concat(ret) + }); + stat.alternative = make_node(AST_BlockStatement, stat, { + body: body + }); + ret = [ stat.transform(compressor) ]; + continue loop; + } + + var ab = aborts(stat.alternative); + var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab) : null; + if (ab && ((ab instanceof AST_Return && !ab.value && in_lambda) + || (ab instanceof AST_Continue && self === loop_body(lct)) + || (ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct))) { + if (ab.label) { + remove(ab.label.thedef.references, ab); + } + CHANGED = true; + stat = stat.clone(); + stat.body = make_node(AST_BlockStatement, stat.body, { + body: as_statement_array(stat.body).concat(ret) + }); + stat.alternative = make_node(AST_BlockStatement, stat.alternative, { + body: as_statement_array(stat.alternative).slice(0, -1) + }); + ret = [ stat.transform(compressor) ]; + continue loop; + } + + ret.unshift(stat); + break; + default: + ret.unshift(stat); + break; + } + } + return ret; + + function has_multiple_if_returns(statements) { + var n = 0; + for (var i = statements.length; --i >= 0;) { + var stat = statements[i]; + if (stat instanceof AST_If && stat.body instanceof AST_Return) { + if (++n > 1) return true; + } + } + return false; + } + }; + + function eliminate_dead_code(statements, compressor) { + var has_quit = false; + var orig = statements.length; + var self = compressor.self(); + statements = statements.reduce(function(a, stat){ + if (has_quit) { + extract_declarations_from_unreachable_code(compressor, stat, a); + } else { + if (stat instanceof AST_LoopControl) { + var lct = compressor.loopcontrol_target(stat); + if ((stat instanceof AST_Break + && !(lct instanceof AST_IterationStatement) + && loop_body(lct) === self) || (stat instanceof AST_Continue + && loop_body(lct) === self)) { + if (stat.label) { + remove(stat.label.thedef.references, stat); + } + } else { + a.push(stat); + } + } else { + a.push(stat); + } + if (aborts(stat)) has_quit = true; + } + return a; + }, []); + CHANGED = statements.length != orig; + return statements; + }; + + function sequencesize(statements, compressor) { + if (statements.length < 2) return statements; + var seq = [], ret = []; + function push_seq() { + seq = AST_Seq.from_array(seq); + if (seq) ret.push(make_node(AST_SimpleStatement, seq, { + body: seq + })); + seq = []; + }; + statements.forEach(function(stat){ + if (stat instanceof AST_SimpleStatement) { + if (seqLength(seq) >= compressor.sequences_limit) push_seq(); + var body = stat.body; + if (seq.length > 0) body = body.drop_side_effect_free(compressor); + if (body) seq.push(body); + } else { + push_seq(); + ret.push(stat); + } + }); + push_seq(); + ret = sequencesize_2(ret, compressor); + CHANGED = ret.length != statements.length; + return ret; + }; + + function seqLength(a) { + for (var len = 0, i = 0; i < a.length; ++i) { + var stat = a[i]; + if (stat instanceof AST_Seq) { + len += stat.len(); + } else { + len++; + } + } + return len; + }; + + function sequencesize_2(statements, compressor) { + function cons_seq(right) { + ret.pop(); + var left = prev.body; + if (left instanceof AST_Seq) { + left.add(right); + } else { + left = AST_Seq.cons(left, right); + } + return left.transform(compressor); + }; + var ret = [], prev = null; + statements.forEach(function(stat){ + if (prev) { + if (stat instanceof AST_For) { + var opera = {}; + try { + prev.body.walk(new TreeWalker(function(node){ + if (node instanceof AST_Binary && node.operator == "in") + throw opera; + })); + if (stat.init && !(stat.init instanceof AST_Definitions)) { + stat.init = cons_seq(stat.init); + } + else if (!stat.init) { + stat.init = prev.body.drop_side_effect_free(compressor); + ret.pop(); + } + } catch(ex) { + if (ex !== opera) throw ex; + } + } + else if (stat instanceof AST_If) { + stat.condition = cons_seq(stat.condition); + } + else if (stat instanceof AST_With) { + stat.expression = cons_seq(stat.expression); + } + else if (stat instanceof AST_Exit && stat.value) { + stat.value = cons_seq(stat.value); + } + else if (stat instanceof AST_Exit) { + stat.value = cons_seq(make_node(AST_Undefined, stat).transform(compressor)); + } + else if (stat instanceof AST_Switch) { + stat.expression = cons_seq(stat.expression); + } + } + ret.push(stat); + prev = stat instanceof AST_SimpleStatement ? stat : null; + }); + return ret; + }; + + function join_consecutive_vars(statements, compressor) { + var prev = null; + return statements.reduce(function(a, stat){ + if (stat instanceof AST_Definitions && prev && prev.TYPE == stat.TYPE) { + prev.definitions = prev.definitions.concat(stat.definitions); + CHANGED = true; + } + else if (stat instanceof AST_For + && prev instanceof AST_Var + && (!stat.init || stat.init.TYPE == prev.TYPE)) { + CHANGED = true; + a.pop(); + if (stat.init) { + stat.init.definitions = prev.definitions.concat(stat.init.definitions); + } else { + stat.init = prev; + } + a.push(stat); + prev = stat; + } + else { + prev = stat; + a.push(stat); + } + return a; + }, []); + }; + + }; + + function extract_functions_from_statement_array(statements) { + var funs = []; + for (var i = statements.length - 1; i >= 0; --i) { + var stat = statements[i]; + if (stat instanceof AST_Defun) { + statements.splice(i, 1); + funs.unshift(stat); + } + } + return funs; + } + + function extract_declarations_from_unreachable_code(compressor, stat, target) { + if (!(stat instanceof AST_Defun)) { + compressor.warn("Dropping unreachable code [{file}:{line},{col}]", stat.start); + } + stat.walk(new TreeWalker(function(node){ + if (node instanceof AST_Definitions) { + compressor.warn("Declarations in unreachable code! [{file}:{line},{col}]", node.start); + node.remove_initializers(); + target.push(node); + return true; + } + if (node instanceof AST_Defun) { + target.push(node); + return true; + } + if (node instanceof AST_Scope) { + return true; + } + })); + }; + + function is_undefined(node, compressor) { + return node.is_undefined + || node instanceof AST_Undefined + || node instanceof AST_UnaryPrefix + && node.operator == "void" + && !node.expression.has_side_effects(compressor); + } + + // may_throw_on_access() + // returns true if this node may be null, undefined or contain `AST_Accessor` + (function(def) { + AST_Node.DEFMETHOD("may_throw_on_access", function(compressor) { + var pure_getters = compressor.option("pure_getters"); + return !pure_getters || this._throw_on_access(pure_getters); + }); + + function is_strict(pure_getters) { + return /strict/.test(pure_getters); + } + + def(AST_Node, is_strict); + def(AST_Null, return_true); + def(AST_Undefined, return_true); + def(AST_Constant, return_false); + def(AST_Array, return_false); + def(AST_Object, function(pure_getters) { + if (!is_strict(pure_getters)) return false; + for (var i = this.properties.length; --i >=0;) + if (this.properties[i].value instanceof AST_Accessor) return true; + return false; + }); + def(AST_Function, return_false); + def(AST_UnaryPostfix, return_false); + def(AST_UnaryPrefix, function() { + return this.operator == "void"; + }); + def(AST_Binary, function(pure_getters) { + switch (this.operator) { + case "&&": + return this.left._throw_on_access(pure_getters); + case "||": + return this.left._throw_on_access(pure_getters) + && this.right._throw_on_access(pure_getters); + default: + return false; + } + }) + def(AST_Assign, function(pure_getters) { + return this.operator == "=" + && this.right._throw_on_access(pure_getters); + }) + def(AST_Conditional, function(pure_getters) { + return this.consequent._throw_on_access(pure_getters) + || this.alternative._throw_on_access(pure_getters); + }) + def(AST_Seq, function(pure_getters) { + return this.cdr._throw_on_access(pure_getters); + }); + def(AST_SymbolRef, function(pure_getters) { + if (this.is_undefined) return true; + if (!is_strict(pure_getters)) return false; + var fixed = this.fixed_value(); + return !fixed || fixed._throw_on_access(pure_getters); + }); + })(function(node, func) { + node.DEFMETHOD("_throw_on_access", func); + }); + + /* -----[ boolean/negation helpers ]----- */ + + // methods to determine whether an expression has a boolean result type + (function (def){ + var unary_bool = [ "!", "delete" ]; + var binary_bool = [ "in", "instanceof", "==", "!=", "===", "!==", "<", "<=", ">=", ">" ]; + def(AST_Node, return_false); + def(AST_UnaryPrefix, function(){ + return member(this.operator, unary_bool); + }); + def(AST_Binary, function(){ + return member(this.operator, binary_bool) || + ( (this.operator == "&&" || this.operator == "||") && + this.left.is_boolean() && this.right.is_boolean() ); + }); + def(AST_Conditional, function(){ + return this.consequent.is_boolean() && this.alternative.is_boolean(); + }); + def(AST_Assign, function(){ + return this.operator == "=" && this.right.is_boolean(); + }); + def(AST_Seq, function(){ + return this.cdr.is_boolean(); + }); + def(AST_True, return_true); + def(AST_False, return_true); + })(function(node, func){ + node.DEFMETHOD("is_boolean", func); + }); + + // methods to determine if an expression has a numeric result type + (function (def){ + def(AST_Node, return_false); + def(AST_Number, return_true); + var unary = makePredicate("+ - ~ ++ --"); + def(AST_Unary, function(){ + return unary(this.operator); + }); + var binary = makePredicate("- * / % & | ^ << >> >>>"); + def(AST_Binary, function(compressor){ + return binary(this.operator) || this.operator == "+" + && this.left.is_number(compressor) + && this.right.is_number(compressor); + }); + def(AST_Assign, function(compressor){ + return binary(this.operator.slice(0, -1)) + || this.operator == "=" && this.right.is_number(compressor); + }); + def(AST_Seq, function(compressor){ + return this.cdr.is_number(compressor); + }); + def(AST_Conditional, function(compressor){ + return this.consequent.is_number(compressor) && this.alternative.is_number(compressor); + }); + })(function(node, func){ + node.DEFMETHOD("is_number", func); + }); + + // methods to determine if an expression has a string result type + (function (def){ + def(AST_Node, return_false); + def(AST_String, return_true); + def(AST_UnaryPrefix, function(){ + return this.operator == "typeof"; + }); + def(AST_Binary, function(compressor){ + return this.operator == "+" && + (this.left.is_string(compressor) || this.right.is_string(compressor)); + }); + def(AST_Assign, function(compressor){ + return (this.operator == "=" || this.operator == "+=") && this.right.is_string(compressor); + }); + def(AST_Seq, function(compressor){ + return this.cdr.is_string(compressor); + }); + def(AST_Conditional, function(compressor){ + return this.consequent.is_string(compressor) && this.alternative.is_string(compressor); + }); + })(function(node, func){ + node.DEFMETHOD("is_string", func); + }); + + var unary_side_effects = makePredicate("delete ++ --"); + + function is_lhs(node, parent) { + if (parent instanceof AST_Unary && unary_side_effects(parent.operator)) return parent.expression; + if (parent instanceof AST_Assign && parent.left === node) return node; + } + + (function (def){ + AST_Node.DEFMETHOD("resolve_defines", function(compressor) { + if (!compressor.option("global_defs")) return; + var def = this._find_defs(compressor, ""); + if (def) { + var node, parent = this, level = 0; + do { + node = parent; + parent = compressor.parent(level++); + } while (parent instanceof AST_PropAccess && parent.expression === node); + if (is_lhs(node, parent)) { + compressor.warn('global_defs ' + this.print_to_string() + ' redefined [{file}:{line},{col}]', this.start); + } else { + return def; + } + } + }); + function to_node(value, orig) { + if (value instanceof AST_Node) return make_node(value.CTOR, orig, value); + if (Array.isArray(value)) return make_node(AST_Array, orig, { + elements: value.map(function(value) { + return to_node(value, orig); + }) + }); + if (value && typeof value == "object") { + var props = []; + for (var key in value) { + props.push(make_node(AST_ObjectKeyVal, orig, { + key: key, + value: to_node(value[key], orig) + })); + } + return make_node(AST_Object, orig, { + properties: props + }); + } + return make_node_from_constant(value, orig); + } + def(AST_Node, noop); + def(AST_Dot, function(compressor, suffix){ + return this.expression._find_defs(compressor, "." + this.property + suffix); + }); + def(AST_SymbolRef, function(compressor, suffix){ + if (!this.global()) return; + var name; + var defines = compressor.option("global_defs"); + if (defines && HOP(defines, (name = this.name + suffix))) { + var node = to_node(defines[name], this); + var top = compressor.find_parent(AST_Toplevel); + node.walk(new TreeWalker(function(node) { + if (node instanceof AST_SymbolRef) { + node.scope = top; + node.thedef = top.def_global(node); + } + })); + return node; + } + }); + })(function(node, func){ + node.DEFMETHOD("_find_defs", func); + }); + + function best_of_expression(ast1, ast2) { + return ast1.print_to_string().length > + ast2.print_to_string().length + ? ast2 : ast1; + } + + function best_of_statement(ast1, ast2) { + return best_of_expression(make_node(AST_SimpleStatement, ast1, { + body: ast1 + }), make_node(AST_SimpleStatement, ast2, { + body: ast2 + })).body; + } + + function best_of(compressor, ast1, ast2) { + return (first_in_statement(compressor) ? best_of_statement : best_of_expression)(ast1, ast2); + } + + // methods to evaluate a constant expression + (function (def){ + // If the node has been successfully reduced to a constant, + // then its value is returned; otherwise the element itself + // is returned. + // They can be distinguished as constant value is never a + // descendant of AST_Node. + AST_Node.DEFMETHOD("evaluate", function(compressor){ + if (!compressor.option("evaluate")) return this; + try { + var val = this._eval(compressor); + return !val || val instanceof RegExp || typeof val != "object" ? val : this; + } catch(ex) { + if (ex !== def) throw ex; + return this; + } + }); + var unaryPrefix = makePredicate("! ~ - + void"); + AST_Node.DEFMETHOD("is_constant", function(){ + // Accomodate when compress option evaluate=false + // as well as the common constant expressions !0 and -1 + if (this instanceof AST_Constant) { + return !(this instanceof AST_RegExp); + } else { + return this instanceof AST_UnaryPrefix + && this.expression instanceof AST_Constant + && unaryPrefix(this.operator); + } + }); + // Obtain the constant value of an expression already known to be constant. + // Result only valid iff this.is_constant() is true. + AST_Node.DEFMETHOD("constant_value", function(compressor){ + // Accomodate when option evaluate=false. + if (this instanceof AST_Constant && !(this instanceof AST_RegExp)) { + return this.value; + } + // Accomodate the common constant expressions !0 and -1 when option evaluate=false. + if (this instanceof AST_UnaryPrefix + && this.expression instanceof AST_Constant) switch (this.operator) { + case "!": + return !this.expression.value; + case "~": + return ~this.expression.value; + case "-": + return -this.expression.value; + case "+": + return +this.expression.value; + default: + throw new Error(string_template("Cannot evaluate unary expression {value}", { + value: this.print_to_string() + })); + } + var result = this.evaluate(compressor); + if (result !== this) { + return result; + } + throw new Error(string_template("Cannot evaluate constant [{file}:{line},{col}]", this.start)); + }); + def(AST_Statement, function(){ + throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]", this.start)); + }); + def(AST_Lambda, function(){ + throw def; + }); + function ev(node, compressor) { + if (!compressor) throw new Error("Compressor must be passed"); + + return node._eval(compressor); + }; + def(AST_Node, function(){ + throw def; // not constant + }); + def(AST_Constant, function(){ + return this.getValue(); + }); + def(AST_Array, function(compressor){ + if (compressor.option("unsafe")) { + return this.elements.map(function(element) { + return ev(element, compressor); + }); + } + throw def; + }); + def(AST_Object, function(compressor){ + if (compressor.option("unsafe")) { + var val = {}; + for (var i = 0, len = this.properties.length; i < len; i++) { + var prop = this.properties[i]; + var key = prop.key; + if (key instanceof AST_Symbol) { + key = key.name; + } else if (key instanceof AST_Node) { + key = ev(key, compressor); + } + if (typeof Object.prototype[key] === 'function') { + throw def; + } + val[key] = ev(prop.value, compressor); + } + return val; + } + throw def; + }); + def(AST_UnaryPrefix, function(compressor){ + var e = this.expression; + switch (this.operator) { + case "!": return !ev(e, compressor); + case "typeof": + // Function would be evaluated to an array and so typeof would + // incorrectly return 'object'. Hence making is a special case. + if (e instanceof AST_Function) return typeof function(){}; + + e = ev(e, compressor); + + // typeof returns "object" or "function" on different platforms + // so cannot evaluate reliably + if (e instanceof RegExp) throw def; + + return typeof e; + case "void": return void ev(e, compressor); + case "~": return ~ev(e, compressor); + case "-": return -ev(e, compressor); + case "+": return +ev(e, compressor); + } + throw def; + }); + def(AST_Binary, function(c){ + var left = this.left, right = this.right, result; + switch (this.operator) { + case "&&" : result = ev(left, c) && ev(right, c); break; + case "||" : result = ev(left, c) || ev(right, c); break; + case "|" : result = ev(left, c) | ev(right, c); break; + case "&" : result = ev(left, c) & ev(right, c); break; + case "^" : result = ev(left, c) ^ ev(right, c); break; + case "+" : result = ev(left, c) + ev(right, c); break; + case "*" : result = ev(left, c) * ev(right, c); break; + case "/" : result = ev(left, c) / ev(right, c); break; + case "%" : result = ev(left, c) % ev(right, c); break; + case "-" : result = ev(left, c) - ev(right, c); break; + case "<<" : result = ev(left, c) << ev(right, c); break; + case ">>" : result = ev(left, c) >> ev(right, c); break; + case ">>>" : result = ev(left, c) >>> ev(right, c); break; + case "==" : result = ev(left, c) == ev(right, c); break; + case "===" : result = ev(left, c) === ev(right, c); break; + case "!=" : result = ev(left, c) != ev(right, c); break; + case "!==" : result = ev(left, c) !== ev(right, c); break; + case "<" : result = ev(left, c) < ev(right, c); break; + case "<=" : result = ev(left, c) <= ev(right, c); break; + case ">" : result = ev(left, c) > ev(right, c); break; + case ">=" : result = ev(left, c) >= ev(right, c); break; + default: + throw def; + } + if (isNaN(result) && c.find_parent(AST_With)) { + // leave original expression as is + throw def; + } + return result; + }); + def(AST_Conditional, function(compressor){ + return ev(this.condition, compressor) + ? ev(this.consequent, compressor) + : ev(this.alternative, compressor); + }); + def(AST_SymbolRef, function(compressor){ + if (!compressor.option("reduce_vars") || this._evaluating) throw def; + this._evaluating = true; + try { + var fixed = this.fixed_value(); + if (!fixed) throw def; + var value = ev(fixed, compressor); + if (!HOP(fixed, "_eval")) fixed._eval = function() { + return value; + }; + if (value && typeof value == "object" && this.definition().escaped) throw def; + return value; + } finally { + this._evaluating = false; + } + }); + def(AST_PropAccess, function(compressor){ + if (compressor.option("unsafe")) { + var key = this.property; + if (key instanceof AST_Node) { + key = ev(key, compressor); + } + var val = ev(this.expression, compressor); + if (val && HOP(val, key)) { + return val[key]; + } + } + throw def; + }); + })(function(node, func){ + node.DEFMETHOD("_eval", func); + }); + + // method to negate an expression + (function(def){ + function basic_negation(exp) { + return make_node(AST_UnaryPrefix, exp, { + operator: "!", + expression: exp + }); + } + function best(orig, alt, first_in_statement) { + var negated = basic_negation(orig); + if (first_in_statement) { + var stat = make_node(AST_SimpleStatement, alt, { + body: alt + }); + return best_of_expression(negated, stat) === stat ? alt : negated; + } + return best_of_expression(negated, alt); + } + def(AST_Node, function(){ + return basic_negation(this); + }); + def(AST_Statement, function(){ + throw new Error("Cannot negate a statement"); + }); + def(AST_Function, function(){ + return basic_negation(this); + }); + def(AST_UnaryPrefix, function(){ + if (this.operator == "!") + return this.expression; + return basic_negation(this); + }); + def(AST_Seq, function(compressor){ + var self = this.clone(); + self.cdr = self.cdr.negate(compressor); + return self; + }); + def(AST_Conditional, function(compressor, first_in_statement){ + var self = this.clone(); + self.consequent = self.consequent.negate(compressor); + self.alternative = self.alternative.negate(compressor); + return best(this, self, first_in_statement); + }); + def(AST_Binary, function(compressor, first_in_statement){ + var self = this.clone(), op = this.operator; + if (compressor.option("unsafe_comps")) { + switch (op) { + case "<=" : self.operator = ">" ; return self; + case "<" : self.operator = ">=" ; return self; + case ">=" : self.operator = "<" ; return self; + case ">" : self.operator = "<=" ; return self; + } + } + switch (op) { + case "==" : self.operator = "!="; return self; + case "!=" : self.operator = "=="; return self; + case "===": self.operator = "!=="; return self; + case "!==": self.operator = "==="; return self; + case "&&": + self.operator = "||"; + self.left = self.left.negate(compressor, first_in_statement); + self.right = self.right.negate(compressor); + return best(this, self, first_in_statement); + case "||": + self.operator = "&&"; + self.left = self.left.negate(compressor, first_in_statement); + self.right = self.right.negate(compressor); + return best(this, self, first_in_statement); + } + return basic_negation(this); + }); + })(function(node, func){ + node.DEFMETHOD("negate", function(compressor, first_in_statement){ + return func.call(this, compressor, first_in_statement); + }); + }); + + AST_Call.DEFMETHOD("has_pure_annotation", function(compressor) { + if (!compressor.option("side_effects")) return false; + if (this.pure !== undefined) return this.pure; + var pure = false; + var comments, last_comment; + if (this.start + && (comments = this.start.comments_before) + && comments.length + && /[@#]__PURE__/.test((last_comment = comments[comments.length - 1]).value)) { + pure = last_comment; + } + return this.pure = pure; + }); + + // determine if expression has side effects + (function(def){ + def(AST_Node, return_true); + + def(AST_EmptyStatement, return_false); + def(AST_Constant, return_false); + def(AST_This, return_false); + + def(AST_Call, function(compressor){ + if (!this.has_pure_annotation(compressor) && compressor.pure_funcs(this)) return true; + for (var i = this.args.length; --i >= 0;) { + if (this.args[i].has_side_effects(compressor)) + return true; + } + return false; + }); + + function any(list, compressor) { + for (var i = list.length; --i >= 0;) + if (list[i].has_side_effects(compressor)) + return true; + return false; + } + + def(AST_Block, function(compressor){ + return any(this.body, compressor); + }); + def(AST_Switch, function(compressor){ + return this.expression.has_side_effects(compressor) + || any(this.body, compressor); + }); + def(AST_Case, function(compressor){ + return this.expression.has_side_effects(compressor) + || any(this.body, compressor); + }); + def(AST_Try, function(compressor){ + return any(this.body, compressor) + || this.bcatch && this.bcatch.has_side_effects(compressor) + || this.bfinally && this.bfinally.has_side_effects(compressor); + }); + def(AST_If, function(compressor){ + return this.condition.has_side_effects(compressor) + || this.body && this.body.has_side_effects(compressor) + || this.alternative && this.alternative.has_side_effects(compressor); + }); + def(AST_LabeledStatement, function(compressor){ + return this.body.has_side_effects(compressor); + }); + def(AST_SimpleStatement, function(compressor){ + return this.body.has_side_effects(compressor); + }); + def(AST_Defun, return_true); + def(AST_Function, return_false); + def(AST_Binary, function(compressor){ + return this.left.has_side_effects(compressor) + || this.right.has_side_effects(compressor); + }); + def(AST_Assign, return_true); + def(AST_Conditional, function(compressor){ + return this.condition.has_side_effects(compressor) + || this.consequent.has_side_effects(compressor) + || this.alternative.has_side_effects(compressor); + }); + def(AST_Unary, function(compressor){ + return unary_side_effects(this.operator) + || this.expression.has_side_effects(compressor); + }); + def(AST_SymbolRef, function(compressor){ + return this.undeclared(); + }); + def(AST_Object, function(compressor){ + return any(this.properties, compressor); + }); + def(AST_ObjectProperty, function(compressor){ + return this.value.has_side_effects(compressor); + }); + def(AST_Array, function(compressor){ + return any(this.elements, compressor); + }); + def(AST_Dot, function(compressor){ + return this.expression.may_throw_on_access(compressor) + || this.expression.has_side_effects(compressor); + }); + def(AST_Sub, function(compressor){ + return this.expression.may_throw_on_access(compressor) + || this.expression.has_side_effects(compressor) + || this.property.has_side_effects(compressor); + }); + def(AST_Seq, function(compressor){ + return this.car.has_side_effects(compressor) + || this.cdr.has_side_effects(compressor); + }); + })(function(node, func){ + node.DEFMETHOD("has_side_effects", func); + }); + + // tell me if a statement aborts + function aborts(thing) { + return thing && thing.aborts(); + }; + (function(def){ + def(AST_Statement, return_null); + def(AST_Jump, return_this); + function block_aborts(){ + var n = this.body.length; + return n > 0 && aborts(this.body[n - 1]); + }; + def(AST_BlockStatement, block_aborts); + def(AST_SwitchBranch, block_aborts); + def(AST_If, function(){ + return this.alternative && aborts(this.body) && aborts(this.alternative) && this; + }); + })(function(node, func){ + node.DEFMETHOD("aborts", func); + }); + + /* -----[ optimizers ]----- */ + + OPT(AST_Directive, function(self, compressor){ + if (compressor.has_directive(self.value) !== self) { + return make_node(AST_EmptyStatement, self); + } + return self; + }); + + OPT(AST_Debugger, function(self, compressor){ + if (compressor.option("drop_debugger")) + return make_node(AST_EmptyStatement, self); + return self; + }); + + OPT(AST_LabeledStatement, function(self, compressor){ + if (self.body instanceof AST_Break + && compressor.loopcontrol_target(self.body) === self.body) { + return make_node(AST_EmptyStatement, self); + } + return self.label.references.length == 0 ? self.body : self; + }); + + OPT(AST_Block, function(self, compressor){ + self.body = tighten_body(self.body, compressor); + return self; + }); + + OPT(AST_BlockStatement, function(self, compressor){ + self.body = tighten_body(self.body, compressor); + switch (self.body.length) { + case 1: return self.body[0]; + case 0: return make_node(AST_EmptyStatement, self); + } + return self; + }); + + AST_Scope.DEFMETHOD("drop_unused", function(compressor){ + var self = this; + if (compressor.has_directive("use asm")) return self; + var toplevel = compressor.option("toplevel"); + if (compressor.option("unused") + && (!(self instanceof AST_Toplevel) || toplevel) + && !self.uses_eval + && !self.uses_with) { + var assign_as_unused = !/keep_assign/.test(compressor.option("unused")); + var drop_funcs = /funcs/.test(toplevel); + var drop_vars = /vars/.test(toplevel); + if (!(self instanceof AST_Toplevel) || toplevel == true) { + drop_funcs = drop_vars = true; + } + var in_use = []; + var in_use_ids = Object.create(null); // avoid expensive linear scans of in_use + if (self instanceof AST_Toplevel && compressor.top_retain) { + self.variables.each(function(def) { + if (compressor.top_retain(def) && !(def.id in in_use_ids)) { + in_use_ids[def.id] = true; + in_use.push(def); + } + }); + } + var initializations = new Dictionary(); + // pass 1: find out which symbols are directly used in + // this scope (not in nested scopes). + var scope = this; + var tw = new TreeWalker(function(node, descend){ + if (node !== self) { + if (node instanceof AST_Defun) { + if (!drop_funcs && scope === self) { + var node_def = node.name.definition(); + if (!(node_def.id in in_use_ids)) { + in_use_ids[node_def.id] = true; + in_use.push(node_def); + } + } + initializations.add(node.name.name, node); + return true; // don't go in nested scopes + } + if (node instanceof AST_Definitions && scope === self) { + node.definitions.forEach(function(def){ + if (!drop_vars) { + var node_def = def.name.definition(); + if (!(node_def.id in in_use_ids)) { + in_use_ids[node_def.id] = true; + in_use.push(node_def); + } + } + if (def.value) { + initializations.add(def.name.name, def.value); + if (def.value.has_side_effects(compressor)) { + def.value.walk(tw); + } + } + }); + return true; + } + if (assign_as_unused + && node instanceof AST_Assign + && node.operator == "=" + && node.left instanceof AST_SymbolRef + && !is_reference_const(node.left) + && scope === self) { + node.right.walk(tw); + return true; + } + if (node instanceof AST_SymbolRef) { + var node_def = node.definition(); + if (!(node_def.id in in_use_ids)) { + in_use_ids[node_def.id] = true; + in_use.push(node_def); + } + return true; + } + if (node instanceof AST_Scope) { + var save_scope = scope; + scope = node; + descend(); + scope = save_scope; + return true; + } + } + }); + self.walk(tw); + // pass 2: for every used symbol we need to walk its + // initialization code to figure out if it uses other + // symbols (that may not be in_use). + for (var i = 0; i < in_use.length; ++i) { + in_use[i].orig.forEach(function(decl){ + // undeclared globals will be instanceof AST_SymbolRef + var init = initializations.get(decl.name); + if (init) init.forEach(function(init){ + var tw = new TreeWalker(function(node){ + if (node instanceof AST_SymbolRef) { + var node_def = node.definition(); + if (!(node_def.id in in_use_ids)) { + in_use_ids[node_def.id] = true; + in_use.push(node_def); + } + } + }); + init.walk(tw); + }); + }); + } + // pass 3: we should drop declarations not in_use + var tt = new TreeTransformer( + function before(node, descend, in_list) { + if (node instanceof AST_Function + && node.name + && !compressor.option("keep_fnames")) { + var def = node.name.definition(); + // any declarations with same name will overshadow + // name of this anonymous function and can therefore + // never be used anywhere + if (!(def.id in in_use_ids) || def.orig.length > 1) + node.name = null; + } + if (node instanceof AST_Lambda && !(node instanceof AST_Accessor)) { + var trim = !compressor.option("keep_fargs"); + for (var a = node.argnames, i = a.length; --i >= 0;) { + var sym = a[i]; + if (!(sym.definition().id in in_use_ids)) { + sym.__unused = true; + if (trim) { + a.pop(); + compressor[sym.unreferenced() ? "warn" : "info"]("Dropping unused function argument {name} [{file}:{line},{col}]", { + name : sym.name, + file : sym.start.file, + line : sym.start.line, + col : sym.start.col + }); + } + } + else { + trim = false; + } + } + } + if (drop_funcs && node instanceof AST_Defun && node !== self) { + if (!(node.name.definition().id in in_use_ids)) { + compressor[node.name.unreferenced() ? "warn" : "info"]("Dropping unused function {name} [{file}:{line},{col}]", { + name : node.name.name, + file : node.name.start.file, + line : node.name.start.line, + col : node.name.start.col + }); + return make_node(AST_EmptyStatement, node); + } + return node; + } + if (drop_vars && node instanceof AST_Definitions && !(tt.parent() instanceof AST_ForIn && tt.parent().init === node)) { + var def = node.definitions.filter(function(def){ + if (def.value) def.value = def.value.transform(tt); + var sym = def.name.definition(); + if (sym.id in in_use_ids) return true; + if (sym.orig[0] instanceof AST_SymbolCatch) { + def.value = def.value && def.value.drop_side_effect_free(compressor); + return true; + } + var w = { + name : def.name.name, + file : def.name.start.file, + line : def.name.start.line, + col : def.name.start.col + }; + if (def.value && (def._unused_side_effects = def.value.drop_side_effect_free(compressor))) { + compressor.warn("Side effects in initialization of unused variable {name} [{file}:{line},{col}]", w); + return true; + } + compressor[def.name.unreferenced() ? "warn" : "info"]("Dropping unused variable {name} [{file}:{line},{col}]", w); + return false; + }); + // place uninitialized names at the start + def = mergeSort(def, function(a, b){ + if (!a.value && b.value) return -1; + if (!b.value && a.value) return 1; + return 0; + }); + // for unused names whose initialization has + // side effects, we can cascade the init. code + // into the next one, or next statement. + var side_effects = []; + for (var i = 0; i < def.length;) { + var x = def[i]; + if (x._unused_side_effects) { + side_effects.push(x._unused_side_effects); + def.splice(i, 1); + } else { + if (side_effects.length > 0) { + side_effects.push(x.value); + x.value = AST_Seq.from_array(side_effects); + side_effects = []; + } + ++i; + } + } + if (side_effects.length > 0) { + side_effects = make_node(AST_BlockStatement, node, { + body: [ make_node(AST_SimpleStatement, node, { + body: AST_Seq.from_array(side_effects) + }) ] + }); + } else { + side_effects = null; + } + if (def.length == 0 && !side_effects) { + return make_node(AST_EmptyStatement, node); + } + if (def.length == 0) { + return in_list ? MAP.splice(side_effects.body) : side_effects; + } + node.definitions = def; + if (side_effects) { + side_effects.body.unshift(node); + return in_list ? MAP.splice(side_effects.body) : side_effects; + } + return node; + } + if (drop_vars && assign_as_unused + && node instanceof AST_Assign + && node.operator == "=" + && node.left instanceof AST_SymbolRef) { + var def = node.left.definition(); + if (!(def.id in in_use_ids) + && self.variables.get(def.name) === def) { + return maintain_this_binding(tt.parent(), node, node.right.transform(tt)); + } + } + // certain combination of unused name + side effect leads to: + // https://github.com/mishoo/UglifyJS2/issues/44 + // https://github.com/mishoo/UglifyJS2/issues/1830 + // that's an invalid AST. + // We fix it at this stage by moving the `var` outside the `for`. + if (node instanceof AST_For) { + descend(node, this); + if (node.init instanceof AST_BlockStatement) { + var block = node.init; + node.init = block.body.pop(); + block.body.push(node); + return in_list ? MAP.splice(block.body) : block; + } else if (is_empty(node.init)) { + node.init = null; + } + return node; + } + if (node instanceof AST_LabeledStatement && node.body instanceof AST_For) { + descend(node, this); + if (node.body instanceof AST_BlockStatement) { + var block = node.body; + node.body = block.body.pop(); + block.body.push(node); + return in_list ? MAP.splice(block.body) : block; + } + return node; + } + if (node instanceof AST_Scope && node !== self) + return node; + } + ); + self.transform(tt); + } + }); + + AST_Scope.DEFMETHOD("hoist_declarations", function(compressor){ + var self = this; + if (compressor.has_directive("use asm")) return self; + var hoist_funs = compressor.option("hoist_funs"); + var hoist_vars = compressor.option("hoist_vars"); + if (hoist_funs || hoist_vars) { + var dirs = []; + var hoisted = []; + var vars = new Dictionary(), vars_found = 0, var_decl = 0; + // let's count var_decl first, we seem to waste a lot of + // space if we hoist `var` when there's only one. + self.walk(new TreeWalker(function(node){ + if (node instanceof AST_Scope && node !== self) + return true; + if (node instanceof AST_Var) { + ++var_decl; + return true; + } + })); + hoist_vars = hoist_vars && var_decl > 1; + var tt = new TreeTransformer( + function before(node) { + if (node !== self) { + if (node instanceof AST_Directive) { + dirs.push(node); + return make_node(AST_EmptyStatement, node); + } + if (node instanceof AST_Defun && hoist_funs) { + hoisted.push(node); + return make_node(AST_EmptyStatement, node); + } + if (node instanceof AST_Var && hoist_vars) { + node.definitions.forEach(function(def){ + vars.set(def.name.name, def); + ++vars_found; + }); + var seq = node.to_assignments(compressor); + var p = tt.parent(); + if (p instanceof AST_ForIn && p.init === node) { + if (seq == null) { + var def = node.definitions[0].name; + return make_node(AST_SymbolRef, def, def); + } + return seq; + } + if (p instanceof AST_For && p.init === node) { + return seq; + } + if (!seq) return make_node(AST_EmptyStatement, node); + return make_node(AST_SimpleStatement, node, { + body: seq + }); + } + if (node instanceof AST_Scope) + return node; // to avoid descending in nested scopes + } + } + ); + self = self.transform(tt); + if (vars_found > 0) { + // collect only vars which don't show up in self's arguments list + var defs = []; + vars.each(function(def, name){ + if (self instanceof AST_Lambda + && find_if(function(x){ return x.name == def.name.name }, + self.argnames)) { + vars.del(name); + } else { + def = def.clone(); + def.value = null; + defs.push(def); + vars.set(name, def); + } + }); + if (defs.length > 0) { + // try to merge in assignments + for (var i = 0; i < self.body.length;) { + if (self.body[i] instanceof AST_SimpleStatement) { + var expr = self.body[i].body, sym, assign; + if (expr instanceof AST_Assign + && expr.operator == "=" + && (sym = expr.left) instanceof AST_Symbol + && vars.has(sym.name)) + { + var def = vars.get(sym.name); + if (def.value) break; + def.value = expr.right; + remove(defs, def); + defs.push(def); + self.body.splice(i, 1); + continue; + } + if (expr instanceof AST_Seq + && (assign = expr.car) instanceof AST_Assign + && assign.operator == "=" + && (sym = assign.left) instanceof AST_Symbol + && vars.has(sym.name)) + { + var def = vars.get(sym.name); + if (def.value) break; + def.value = assign.right; + remove(defs, def); + defs.push(def); + self.body[i].body = expr.cdr; + continue; + } + } + if (self.body[i] instanceof AST_EmptyStatement) { + self.body.splice(i, 1); + continue; + } + if (self.body[i] instanceof AST_BlockStatement) { + var tmp = [ i, 1 ].concat(self.body[i].body); + self.body.splice.apply(self.body, tmp); + continue; + } + break; + } + defs = make_node(AST_Var, self, { + definitions: defs + }); + hoisted.push(defs); + }; + } + self.body = dirs.concat(hoisted, self.body); + } + return self; + }); + + // drop_side_effect_free() + // remove side-effect-free parts which only affects return value + (function(def){ + // Drop side-effect-free elements from an array of expressions. + // Returns an array of expressions with side-effects or null + // if all elements were dropped. Note: original array may be + // returned if nothing changed. + function trim(nodes, compressor, first_in_statement) { + var ret = [], changed = false; + for (var i = 0, len = nodes.length; i < len; i++) { + var node = nodes[i].drop_side_effect_free(compressor, first_in_statement); + changed |= node !== nodes[i]; + if (node) { + ret.push(node); + first_in_statement = false; + } + } + return changed ? ret.length ? ret : null : nodes; + } + + def(AST_Node, return_this); + def(AST_Constant, return_null); + def(AST_This, return_null); + def(AST_Call, function(compressor, first_in_statement){ + if (!this.has_pure_annotation(compressor) && compressor.pure_funcs(this)) { + if (this.expression instanceof AST_Function + && (!this.expression.name || !this.expression.name.definition().references.length)) { + var node = this.clone(); + node.expression = node.expression.process_expression(false, compressor); + return node; + } + return this; + } + if (this.pure) { + compressor.warn("Dropping __PURE__ call [{file}:{line},{col}]", this.start); + this.pure.value = this.pure.value.replace(/[@#]__PURE__/g, ' '); + } + var args = trim(this.args, compressor, first_in_statement); + return args && AST_Seq.from_array(args); + }); + def(AST_Accessor, return_null); + def(AST_Function, return_null); + def(AST_Binary, function(compressor, first_in_statement){ + var right = this.right.drop_side_effect_free(compressor); + if (!right) return this.left.drop_side_effect_free(compressor, first_in_statement); + switch (this.operator) { + case "&&": + case "||": + if (right === this.right) return this; + var node = this.clone(); + node.right = right; + return node; + default: + var left = this.left.drop_side_effect_free(compressor, first_in_statement); + if (!left) return this.right.drop_side_effect_free(compressor, first_in_statement); + return make_node(AST_Seq, this, { + car: left, + cdr: right + }); + } + }); + def(AST_Assign, return_this); + def(AST_Conditional, function(compressor){ + var consequent = this.consequent.drop_side_effect_free(compressor); + var alternative = this.alternative.drop_side_effect_free(compressor); + if (consequent === this.consequent && alternative === this.alternative) return this; + if (!consequent) return alternative ? make_node(AST_Binary, this, { + operator: "||", + left: this.condition, + right: alternative + }) : this.condition.drop_side_effect_free(compressor); + if (!alternative) return make_node(AST_Binary, this, { + operator: "&&", + left: this.condition, + right: consequent + }); + var node = this.clone(); + node.consequent = consequent; + node.alternative = alternative; + return node; + }); + def(AST_Unary, function(compressor, first_in_statement){ + if (unary_side_effects(this.operator)) return this; + if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef) return null; + var expression = this.expression.drop_side_effect_free(compressor, first_in_statement); + if (first_in_statement + && this instanceof AST_UnaryPrefix + && is_iife_call(expression)) { + if (expression === this.expression && this.operator.length === 1) return this; + return make_node(AST_UnaryPrefix, this, { + operator: this.operator.length === 1 ? this.operator : "!", + expression: expression + }); + } + return expression; + }); + def(AST_SymbolRef, function() { + return this.undeclared() ? this : null; + }); + def(AST_Object, function(compressor, first_in_statement){ + var values = trim(this.properties, compressor, first_in_statement); + return values && AST_Seq.from_array(values); + }); + def(AST_ObjectProperty, function(compressor, first_in_statement){ + return this.value.drop_side_effect_free(compressor, first_in_statement); + }); + def(AST_Array, function(compressor, first_in_statement){ + var values = trim(this.elements, compressor, first_in_statement); + return values && AST_Seq.from_array(values); + }); + def(AST_Dot, function(compressor, first_in_statement){ + if (this.expression.may_throw_on_access(compressor)) return this; + return this.expression.drop_side_effect_free(compressor, first_in_statement); + }); + def(AST_Sub, function(compressor, first_in_statement){ + if (this.expression.may_throw_on_access(compressor)) return this; + var expression = this.expression.drop_side_effect_free(compressor, first_in_statement); + if (!expression) return this.property.drop_side_effect_free(compressor, first_in_statement); + var property = this.property.drop_side_effect_free(compressor); + if (!property) return expression; + return make_node(AST_Seq, this, { + car: expression, + cdr: property + }); + }); + def(AST_Seq, function(compressor){ + var cdr = this.cdr.drop_side_effect_free(compressor); + if (cdr === this.cdr) return this; + if (!cdr) return this.car; + return make_node(AST_Seq, this, { + car: this.car, + cdr: cdr + }); + }); + })(function(node, func){ + node.DEFMETHOD("drop_side_effect_free", func); + }); + + OPT(AST_SimpleStatement, function(self, compressor){ + if (compressor.option("side_effects")) { + var body = self.body; + var node = body.drop_side_effect_free(compressor, true); + if (!node) { + compressor.warn("Dropping side-effect-free statement [{file}:{line},{col}]", self.start); + return make_node(AST_EmptyStatement, self); + } + if (node !== body) { + return make_node(AST_SimpleStatement, self, { body: node }); + } + } + return self; + }); + + OPT(AST_DWLoop, function(self, compressor){ + if (!compressor.option("loops")) return self; + var cond = self.condition.evaluate(compressor); + if (cond !== self.condition) { + if (cond) { + return make_node(AST_For, self, { + body: self.body + }); + } + if (compressor.option("dead_code") && self instanceof AST_While) { + var a = []; + extract_declarations_from_unreachable_code(compressor, self.body, a); + return make_node(AST_BlockStatement, self, { body: a }).optimize(compressor); + } + if (self instanceof AST_Do) { + var has_loop_control = false; + var tw = new TreeWalker(function(node) { + if (node instanceof AST_Scope || has_loop_control) return true; + if (node instanceof AST_LoopControl && tw.loopcontrol_target(node) === self) + return has_loop_control = true; + }); + var parent = compressor.parent(); + (parent instanceof AST_LabeledStatement ? parent : self).walk(tw); + if (!has_loop_control) return self.body; + } + } + if (self instanceof AST_While) { + return make_node(AST_For, self, self).optimize(compressor); + } + return self; + }); + + function if_break_in_loop(self, compressor) { + function drop_it(rest) { + rest = as_statement_array(rest); + if (self.body instanceof AST_BlockStatement) { + self.body = self.body.clone(); + self.body.body = rest.concat(self.body.body.slice(1)); + self.body = self.body.transform(compressor); + } else { + self.body = make_node(AST_BlockStatement, self.body, { + body: rest + }).transform(compressor); + } + if_break_in_loop(self, compressor); + } + var first = self.body instanceof AST_BlockStatement ? self.body.body[0] : self.body; + if (first instanceof AST_If) { + if (first.body instanceof AST_Break + && compressor.loopcontrol_target(first.body) === compressor.self()) { + if (self.condition) { + self.condition = make_node(AST_Binary, self.condition, { + left: self.condition, + operator: "&&", + right: first.condition.negate(compressor), + }); + } else { + self.condition = first.condition.negate(compressor); + } + drop_it(first.alternative); + } + else if (first.alternative instanceof AST_Break + && compressor.loopcontrol_target(first.alternative) === compressor.self()) { + if (self.condition) { + self.condition = make_node(AST_Binary, self.condition, { + left: self.condition, + operator: "&&", + right: first.condition, + }); + } else { + self.condition = first.condition; + } + drop_it(first.body); + } + } + }; + + OPT(AST_For, function(self, compressor){ + if (!compressor.option("loops")) return self; + if (self.condition) { + var cond = self.condition.evaluate(compressor); + if (compressor.option("dead_code") && !cond) { + var a = []; + if (self.init instanceof AST_Statement) { + a.push(self.init); + } + else if (self.init) { + a.push(make_node(AST_SimpleStatement, self.init, { + body: self.init + })); + } + extract_declarations_from_unreachable_code(compressor, self.body, a); + return make_node(AST_BlockStatement, self, { body: a }).optimize(compressor); + } + if (cond !== self.condition) { + cond = make_node_from_constant(cond, self.condition).transform(compressor); + self.condition = best_of_expression(cond, self.condition); + } + } + if_break_in_loop(self, compressor); + return self; + }); + + OPT(AST_If, function(self, compressor){ + if (is_empty(self.alternative)) self.alternative = null; + + if (!compressor.option("conditionals")) return self; + // if condition can be statically determined, warn and drop + // one of the blocks. note, statically determined implies + // “has no side effects”; also it doesn't work for cases like + // `x && true`, though it probably should. + var cond = self.condition.evaluate(compressor); + if (cond !== self.condition) { + if (cond) { + compressor.warn("Condition always true [{file}:{line},{col}]", self.condition.start); + if (compressor.option("dead_code")) { + var a = []; + if (self.alternative) { + extract_declarations_from_unreachable_code(compressor, self.alternative, a); + } + a.push(self.body); + return make_node(AST_BlockStatement, self, { body: a }).optimize(compressor); + } + } else { + compressor.warn("Condition always false [{file}:{line},{col}]", self.condition.start); + if (compressor.option("dead_code")) { + var a = []; + extract_declarations_from_unreachable_code(compressor, self.body, a); + if (self.alternative) a.push(self.alternative); + return make_node(AST_BlockStatement, self, { body: a }).optimize(compressor); + } + } + cond = make_node_from_constant(cond, self.condition).transform(compressor); + self.condition = best_of_expression(cond, self.condition); + } + var negated = self.condition.negate(compressor); + var self_condition_length = self.condition.print_to_string().length; + var negated_length = negated.print_to_string().length; + var negated_is_best = negated_length < self_condition_length; + if (self.alternative && negated_is_best) { + negated_is_best = false; // because we already do the switch here. + // no need to swap values of self_condition_length and negated_length + // here because they are only used in an equality comparison later on. + self.condition = negated; + var tmp = self.body; + self.body = self.alternative || make_node(AST_EmptyStatement, self); + self.alternative = tmp; + } + if (is_empty(self.body) && is_empty(self.alternative)) { + return make_node(AST_SimpleStatement, self.condition, { + body: self.condition.clone() + }).optimize(compressor); + } + if (self.body instanceof AST_SimpleStatement + && self.alternative instanceof AST_SimpleStatement) { + return make_node(AST_SimpleStatement, self, { + body: make_node(AST_Conditional, self, { + condition : self.condition, + consequent : self.body.body, + alternative : self.alternative.body + }) + }).optimize(compressor); + } + if (is_empty(self.alternative) && self.body instanceof AST_SimpleStatement) { + if (self_condition_length === negated_length && !negated_is_best + && self.condition instanceof AST_Binary && self.condition.operator == "||") { + // although the code length of self.condition and negated are the same, + // negated does not require additional surrounding parentheses. + // see https://github.com/mishoo/UglifyJS2/issues/979 + negated_is_best = true; + } + if (negated_is_best) return make_node(AST_SimpleStatement, self, { + body: make_node(AST_Binary, self, { + operator : "||", + left : negated, + right : self.body.body + }) + }).optimize(compressor); + return make_node(AST_SimpleStatement, self, { + body: make_node(AST_Binary, self, { + operator : "&&", + left : self.condition, + right : self.body.body + }) + }).optimize(compressor); + } + if (self.body instanceof AST_EmptyStatement + && self.alternative instanceof AST_SimpleStatement) { + return make_node(AST_SimpleStatement, self, { + body: make_node(AST_Binary, self, { + operator : "||", + left : self.condition, + right : self.alternative.body + }) + }).optimize(compressor); + } + if (self.body instanceof AST_Exit + && self.alternative instanceof AST_Exit + && self.body.TYPE == self.alternative.TYPE) { + return make_node(self.body.CTOR, self, { + value: make_node(AST_Conditional, self, { + condition : self.condition, + consequent : self.body.value || make_node(AST_Undefined, self.body), + alternative : self.alternative.value || make_node(AST_Undefined, self.alternative) + }).transform(compressor) + }).optimize(compressor); + } + if (self.body instanceof AST_If + && !self.body.alternative + && !self.alternative) { + self = make_node(AST_If, self, { + condition: make_node(AST_Binary, self.condition, { + operator: "&&", + left: self.condition, + right: self.body.condition + }), + body: self.body.body, + alternative: null + }); + } + if (aborts(self.body)) { + if (self.alternative) { + var alt = self.alternative; + self.alternative = null; + return make_node(AST_BlockStatement, self, { + body: [ self, alt ] + }).optimize(compressor); + } + } + if (aborts(self.alternative)) { + var body = self.body; + self.body = self.alternative; + self.condition = negated_is_best ? negated : self.condition.negate(compressor); + self.alternative = null; + return make_node(AST_BlockStatement, self, { + body: [ self, body ] + }).optimize(compressor); + } + return self; + }); + + OPT(AST_Switch, function(self, compressor){ + if (!compressor.option("switches")) return self; + var branch; + var value = self.expression.evaluate(compressor); + if (value !== self.expression) { + var expression = make_node_from_constant(value, self.expression).transform(compressor); + self.expression = best_of_expression(expression, self.expression); + } + if (!compressor.option("dead_code")) return self; + var decl = []; + var body = []; + var default_branch; + var exact_match; + for (var i = 0, len = self.body.length; i < len && !exact_match; i++) { + branch = self.body[i]; + if (branch instanceof AST_Default) { + if (!default_branch) { + default_branch = branch; + } else { + eliminate_branch(branch, body[body.length - 1]); + } + } else if (value !== self.expression) { + var exp = branch.expression.evaluate(compressor); + if (exp === value) { + exact_match = branch; + if (default_branch) { + var default_index = body.indexOf(default_branch); + body.splice(default_index, 1); + eliminate_branch(default_branch, body[default_index - 1]); + default_branch = null; + } + } else if (exp !== branch.expression) { + eliminate_branch(branch, body[body.length - 1]); + continue; + } + } + if (aborts(branch)) { + var prev = body[body.length - 1]; + if (aborts(prev) && prev.body.length == branch.body.length + && make_node(AST_BlockStatement, prev, prev).equivalent_to(make_node(AST_BlockStatement, branch, branch))) { + prev.body = []; + } + } + body.push(branch); + } + while (i < len) eliminate_branch(self.body[i++], body[body.length - 1]); + if (body.length > 0) { + body[0].body = decl.concat(body[0].body); + } + self.body = body; + while (branch = body[body.length - 1]) { + var stat = branch.body[branch.body.length - 1]; + if (stat instanceof AST_Break && compressor.loopcontrol_target(stat) === self) + branch.body.pop(); + if (branch.body.length || branch instanceof AST_Case + && (default_branch || branch.expression.has_side_effects(compressor))) break; + if (body.pop() === default_branch) default_branch = null; + } + if (body.length == 0) { + return make_node(AST_BlockStatement, self, { + body: decl.concat(make_node(AST_SimpleStatement, self.expression, { + body: self.expression + })) + }).optimize(compressor); + } + if (body.length == 1 && (body[0] === exact_match || body[0] === default_branch)) { + var has_break = false; + var tw = new TreeWalker(function(node) { + if (has_break + || node instanceof AST_Lambda + || node instanceof AST_SimpleStatement) return true; + if (node instanceof AST_Break && tw.loopcontrol_target(node) === self) + has_break = true; + }); + self.walk(tw); + if (!has_break) { + body = body[0].body.slice(); + body.unshift(make_node(AST_SimpleStatement, self.expression, { + body: self.expression + })); + return make_node(AST_BlockStatement, self, { + body: body + }).optimize(compressor); + } + } + return self; + + function eliminate_branch(branch, prev) { + if (prev && !aborts(prev)) { + prev.body = prev.body.concat(branch.body); + } else { + extract_declarations_from_unreachable_code(compressor, branch, decl); + } + } + }); + + OPT(AST_Try, function(self, compressor){ + self.body = tighten_body(self.body, compressor); + if (self.bcatch && self.bfinally && all(self.bfinally.body, is_empty)) self.bfinally = null; + if (all(self.body, is_empty)) { + var body = []; + if (self.bcatch) extract_declarations_from_unreachable_code(compressor, self.bcatch, body); + if (self.bfinally) body = body.concat(self.bfinally.body); + return make_node(AST_BlockStatement, self, { + body: body + }).optimize(compressor); + } + return self; + }); + + AST_Definitions.DEFMETHOD("remove_initializers", function(){ + this.definitions.forEach(function(def){ def.value = null }); + }); + + AST_Definitions.DEFMETHOD("to_assignments", function(compressor){ + var reduce_vars = compressor.option("reduce_vars"); + var assignments = this.definitions.reduce(function(a, def){ + if (def.value) { + var name = make_node(AST_SymbolRef, def.name, def.name); + a.push(make_node(AST_Assign, def, { + operator : "=", + left : name, + right : def.value + })); + if (reduce_vars) name.definition().fixed = false; + } + return a; + }, []); + if (assignments.length == 0) return null; + return AST_Seq.from_array(assignments); + }); + + OPT(AST_Definitions, function(self, compressor){ + if (self.definitions.length == 0) + return make_node(AST_EmptyStatement, self); + return self; + }); + + OPT(AST_Call, function(self, compressor){ + var exp = self.expression; + if (compressor.option("reduce_vars") + && exp instanceof AST_SymbolRef) { + var def = exp.definition(); + var fixed = exp.fixed_value(); + if (fixed instanceof AST_Defun) { + def.fixed = fixed = make_node(AST_Function, fixed, fixed).clone(true); + } + if (fixed instanceof AST_Function) { + exp = fixed; + if (compressor.option("unused") + && def.references.length == 1 + && !(def.scope.uses_arguments + && def.orig[0] instanceof AST_SymbolFunarg) + && !def.scope.uses_eval + && compressor.find_parent(AST_Scope) === def.scope) { + self.expression = exp; + } + } + } + if (compressor.option("unused") + && exp instanceof AST_Function + && !exp.uses_arguments + && !exp.uses_eval) { + var pos = 0, last = 0; + for (var i = 0, len = self.args.length; i < len; i++) { + var trim = i >= exp.argnames.length; + if (trim || exp.argnames[i].__unused) { + var node = self.args[i].drop_side_effect_free(compressor); + if (node) { + self.args[pos++] = node; + } else if (!trim) { + self.args[pos++] = make_node(AST_Number, self.args[i], { + value: 0 + }); + continue; + } + } else { + self.args[pos++] = self.args[i]; + } + last = pos; + } + self.args.length = last; + } + if (compressor.option("unsafe")) { + if (exp instanceof AST_SymbolRef && exp.undeclared()) { + switch (exp.name) { + case "Array": + if (self.args.length != 1) { + return make_node(AST_Array, self, { + elements: self.args + }).optimize(compressor); + } + break; + case "Object": + if (self.args.length == 0) { + return make_node(AST_Object, self, { + properties: [] + }); + } + break; + case "String": + if (self.args.length == 0) return make_node(AST_String, self, { + value: "" + }); + if (self.args.length <= 1) return make_node(AST_Binary, self, { + left: self.args[0], + operator: "+", + right: make_node(AST_String, self, { value: "" }) + }).optimize(compressor); + break; + case "Number": + if (self.args.length == 0) return make_node(AST_Number, self, { + value: 0 + }); + if (self.args.length == 1) return make_node(AST_UnaryPrefix, self, { + expression: self.args[0], + operator: "+" + }).optimize(compressor); + case "Boolean": + if (self.args.length == 0) return make_node(AST_False, self); + if (self.args.length == 1) return make_node(AST_UnaryPrefix, self, { + expression: make_node(AST_UnaryPrefix, self, { + expression: self.args[0], + operator: "!" + }), + operator: "!" + }).optimize(compressor); + break; + case "Function": + // new Function() => function(){} + if (self.args.length == 0) return make_node(AST_Function, self, { + argnames: [], + body: [] + }); + if (all(self.args, function(x){ return x instanceof AST_String })) { + // quite a corner-case, but we can handle it: + // https://github.com/mishoo/UglifyJS2/issues/203 + // if the code argument is a constant, then we can minify it. + try { + var code = "(function(" + self.args.slice(0, -1).map(function(arg){ + return arg.value; + }).join(",") + "){" + self.args[self.args.length - 1].value + "})()"; + var ast = parse(code); + ast.figure_out_scope({ screw_ie8: compressor.option("screw_ie8") }); + var comp = new Compressor(compressor.options); + ast = ast.transform(comp); + ast.figure_out_scope({ screw_ie8: compressor.option("screw_ie8") }); + ast.mangle_names(); + var fun; + try { + ast.walk(new TreeWalker(function(node){ + if (node instanceof AST_Lambda) { + fun = node; + throw ast; + } + })); + } catch(ex) { + if (ex !== ast) throw ex; + }; + if (!fun) return self; + var args = fun.argnames.map(function(arg, i){ + return make_node(AST_String, self.args[i], { + value: arg.print_to_string() + }); + }); + var code = OutputStream(); + AST_BlockStatement.prototype._codegen.call(fun, fun, code); + code = code.toString().replace(/^\{|\}$/g, ""); + args.push(make_node(AST_String, self.args[self.args.length - 1], { + value: code + })); + self.args = args; + return self; + } catch(ex) { + if (ex instanceof JS_Parse_Error) { + compressor.warn("Error parsing code passed to new Function [{file}:{line},{col}]", self.args[self.args.length - 1].start); + compressor.warn(ex.toString()); + } else { + console.log(ex); + throw ex; + } + } + } + break; + } + } + else if (exp instanceof AST_Dot && exp.property == "toString" && self.args.length == 0) { + return make_node(AST_Binary, self, { + left: make_node(AST_String, self, { value: "" }), + operator: "+", + right: exp.expression + }).optimize(compressor); + } + else if (exp instanceof AST_Dot && exp.expression instanceof AST_Array && exp.property == "join") EXIT: { + var separator; + if (self.args.length > 0) { + separator = self.args[0].evaluate(compressor); + if (separator === self.args[0]) break EXIT; // not a constant + } + var elements = []; + var consts = []; + exp.expression.elements.forEach(function(el) { + var value = el.evaluate(compressor); + if (value !== el) { + consts.push(value); + } else { + if (consts.length > 0) { + elements.push(make_node(AST_String, self, { + value: consts.join(separator) + })); + consts.length = 0; + } + elements.push(el); + } + }); + if (consts.length > 0) { + elements.push(make_node(AST_String, self, { + value: consts.join(separator) + })); + } + if (elements.length == 0) return make_node(AST_String, self, { value: "" }); + if (elements.length == 1) { + if (elements[0].is_string(compressor)) { + return elements[0]; + } + return make_node(AST_Binary, elements[0], { + operator : "+", + left : make_node(AST_String, self, { value: "" }), + right : elements[0] + }); + } + if (separator == "") { + var first; + if (elements[0].is_string(compressor) + || elements[1].is_string(compressor)) { + first = elements.shift(); + } else { + first = make_node(AST_String, self, { value: "" }); + } + return elements.reduce(function(prev, el){ + return make_node(AST_Binary, el, { + operator : "+", + left : prev, + right : el + }); + }, first).optimize(compressor); + } + // need this awkward cloning to not affect original element + // best_of will decide which one to get through. + var node = self.clone(); + node.expression = node.expression.clone(); + node.expression.expression = node.expression.expression.clone(); + node.expression.expression.elements = elements; + return best_of(compressor, self, node); + } + else if (exp instanceof AST_Dot && exp.expression.is_string(compressor) && exp.property == "charAt") { + var arg = self.args[0]; + var index = arg ? arg.evaluate(compressor) : 0; + if (index !== arg) { + return make_node(AST_Sub, exp, { + expression: exp.expression, + property: make_node_from_constant(index | 0, arg || exp) + }).optimize(compressor); + } + } + } + if (exp instanceof AST_Function) { + if (exp.body[0] instanceof AST_Return) { + var value = exp.body[0].value; + if (!value || value.is_constant()) { + var args = self.args.concat(value || make_node(AST_Undefined, self)); + return AST_Seq.from_array(args).transform(compressor); + } + } + if (compressor.option("side_effects") && all(exp.body, is_empty)) { + var args = self.args.concat(make_node(AST_Undefined, self)); + return AST_Seq.from_array(args).transform(compressor); + } + } + if (compressor.option("drop_console")) { + if (exp instanceof AST_PropAccess) { + var name = exp.expression; + while (name.expression) { + name = name.expression; + } + if (name instanceof AST_SymbolRef + && name.name == "console" + && name.undeclared()) { + return make_node(AST_Undefined, self).optimize(compressor); + } + } + } + if (compressor.option("negate_iife") + && compressor.parent() instanceof AST_SimpleStatement + && is_iife_call(self)) { + return self.negate(compressor, true); + } + return self; + }); + + OPT(AST_New, function(self, compressor){ + if (compressor.option("unsafe")) { + var exp = self.expression; + if (exp instanceof AST_SymbolRef && exp.undeclared()) { + switch (exp.name) { + case "Object": + case "RegExp": + case "Function": + case "Error": + case "Array": + return make_node(AST_Call, self, self).transform(compressor); + } + } + } + return self; + }); + + OPT(AST_Seq, function(self, compressor){ + if (!compressor.option("side_effects")) + return self; + self.car = self.car.drop_side_effect_free(compressor, first_in_statement(compressor)); + if (!self.car) return maintain_this_binding(compressor.parent(), self, self.cdr); + if (compressor.option("cascade")) { + var left; + if (self.car instanceof AST_Assign + && !self.car.left.has_side_effects(compressor)) { + left = self.car.left; + } else if (self.car instanceof AST_Unary + && (self.car.operator == "++" || self.car.operator == "--")) { + left = self.car.expression; + } + if (left + && !(left instanceof AST_SymbolRef + && (left.definition().orig[0] instanceof AST_SymbolLambda + || is_reference_const(left)))) { + var parent, field; + var cdr = self.cdr; + while (true) { + if (cdr.equivalent_to(left)) { + var car = self.car instanceof AST_UnaryPostfix ? make_node(AST_UnaryPrefix, self.car, { + operator: self.car.operator, + expression: left + }) : self.car; + if (parent) { + parent[field] = car; + return self.cdr; + } + return car; + } + if (cdr instanceof AST_Binary && !(cdr instanceof AST_Assign)) { + if (cdr.left.is_constant()) { + if (cdr.operator == "||" || cdr.operator == "&&") break; + field = "right"; + } else { + field = "left"; + } + } else if (cdr instanceof AST_Call + || cdr instanceof AST_Unary && !unary_side_effects(cdr.operator)) { + field = "expression"; + } else break; + parent = cdr; + cdr = cdr[field]; + } + } + } + if (is_undefined(self.cdr, compressor)) { + return make_node(AST_UnaryPrefix, self, { + operator : "void", + expression : self.car + }); + } + return self; + }); + + AST_Unary.DEFMETHOD("lift_sequences", function(compressor){ + if (compressor.option("sequences")) { + if (this.expression instanceof AST_Seq) { + var seq = this.expression; + var x = seq.to_array(); + var e = this.clone(); + e.expression = x.pop(); + x.push(e); + seq = AST_Seq.from_array(x).transform(compressor); + return seq; + } + } + return this; + }); + + OPT(AST_UnaryPostfix, function(self, compressor){ + return self.lift_sequences(compressor); + }); + + OPT(AST_UnaryPrefix, function(self, compressor){ + var e = self.expression; + if (self.operator == "delete" + && !(e instanceof AST_SymbolRef + || e instanceof AST_PropAccess + || e instanceof AST_NaN + || e instanceof AST_Infinity + || e instanceof AST_Undefined)) { + if (e instanceof AST_Seq) { + e = e.to_array(); + e.push(make_node(AST_True, self)); + return AST_Seq.from_array(e).optimize(compressor); + } + return make_node(AST_Seq, self, { + car: e, + cdr: make_node(AST_True, self) + }).optimize(compressor); + } + var seq = self.lift_sequences(compressor); + if (seq !== self) { + return seq; + } + if (compressor.option("side_effects") && self.operator == "void") { + e = e.drop_side_effect_free(compressor); + if (e) { + self.expression = e; + return self; + } else { + return make_node(AST_Undefined, self).optimize(compressor); + } + } + if (compressor.option("booleans") && compressor.in_boolean_context()) { + switch (self.operator) { + case "!": + if (e instanceof AST_UnaryPrefix && e.operator == "!") { + // !!foo ==> foo, if we're in boolean context + return e.expression; + } + if (e instanceof AST_Binary) { + self = best_of(compressor, self, e.negate(compressor, first_in_statement(compressor))); + } + break; + case "typeof": + // typeof always returns a non-empty string, thus it's + // always true in booleans + compressor.warn("Boolean expression always true [{file}:{line},{col}]", self.start); + return (e instanceof AST_SymbolRef ? make_node(AST_True, self) : make_node(AST_Seq, self, { + car: e, + cdr: make_node(AST_True, self) + })).optimize(compressor); + } + } + if (self.operator == "-" && e instanceof AST_Infinity) { + e = e.transform(compressor); + } + if (e instanceof AST_Binary + && (self.operator == "+" || self.operator == "-") + && (e.operator == "*" || e.operator == "/" || e.operator == "%")) { + return make_node(AST_Binary, self, { + operator: e.operator, + left: make_node(AST_UnaryPrefix, e.left, { + operator: self.operator, + expression: e.left + }), + right: e.right + }); + } + // avoids infinite recursion of numerals + if (self.operator != "-" + || !(e instanceof AST_Number || e instanceof AST_Infinity)) { + var ev = self.evaluate(compressor); + if (ev !== self) { + ev = make_node_from_constant(ev, self).optimize(compressor); + return best_of(compressor, ev, self); + } + } + return self; + }); + + AST_Binary.DEFMETHOD("lift_sequences", function(compressor){ + if (compressor.option("sequences")) { + if (this.left instanceof AST_Seq) { + var seq = this.left; + var x = seq.to_array(); + var e = this.clone(); + e.left = x.pop(); + x.push(e); + return AST_Seq.from_array(x).optimize(compressor); + } + if (this.right instanceof AST_Seq && !this.left.has_side_effects(compressor)) { + var assign = this.operator == "=" && this.left instanceof AST_SymbolRef; + var root = this.right.clone(); + var cursor, seq = root; + while (assign || !seq.car.has_side_effects(compressor)) { + cursor = seq; + if (seq.cdr instanceof AST_Seq) { + seq = seq.cdr = seq.cdr.clone(); + } else break; + } + if (cursor) { + var e = this.clone(); + e.right = cursor.cdr; + cursor.cdr = e; + return root.optimize(compressor); + } + } + } + return this; + }); + + var commutativeOperators = makePredicate("== === != !== * & | ^"); + + OPT(AST_Binary, function(self, compressor){ + function reversible() { + return self.left.is_constant() + || self.right.is_constant() + || !self.left.has_side_effects(compressor) + && !self.right.has_side_effects(compressor); + } + function reverse(op) { + if (reversible()) { + if (op) self.operator = op; + var tmp = self.left; + self.left = self.right; + self.right = tmp; + } + } + if (commutativeOperators(self.operator)) { + if (self.right.is_constant() + && !self.left.is_constant()) { + // if right is a constant, whatever side effects the + // left side might have could not influence the + // result. hence, force switch. + + if (!(self.left instanceof AST_Binary + && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) { + reverse(); + } + } + } + self = self.lift_sequences(compressor); + if (compressor.option("comparisons")) switch (self.operator) { + case "===": + case "!==": + if ((self.left.is_string(compressor) && self.right.is_string(compressor)) || + (self.left.is_number(compressor) && self.right.is_number(compressor)) || + (self.left.is_boolean() && self.right.is_boolean())) { + self.operator = self.operator.substr(0, 2); + } + // XXX: intentionally falling down to the next case + case "==": + case "!=": + // "undefined" == typeof x => undefined === x + if (self.left instanceof AST_String + && self.left.value == "undefined" + && self.right instanceof AST_UnaryPrefix + && self.right.operator == "typeof") { + var expr = self.right.expression; + if (expr instanceof AST_SymbolRef ? !expr.undeclared() + : !(expr instanceof AST_PropAccess) || compressor.option("screw_ie8")) { + self.right = expr; + self.left = make_node(AST_Undefined, self.left).optimize(compressor); + if (self.operator.length == 2) self.operator += "="; + } + } + break; + } + if (compressor.option("booleans") && self.operator == "+" && compressor.in_boolean_context()) { + var ll = self.left.evaluate(compressor); + var rr = self.right.evaluate(compressor); + if (ll && typeof ll == "string") { + compressor.warn("+ in boolean context always true [{file}:{line},{col}]", self.start); + return make_node(AST_Seq, self, { + car: self.right, + cdr: make_node(AST_True, self) + }).optimize(compressor); + } + if (rr && typeof rr == "string") { + compressor.warn("+ in boolean context always true [{file}:{line},{col}]", self.start); + return make_node(AST_Seq, self, { + car: self.left, + cdr: make_node(AST_True, self) + }).optimize(compressor); + } + } + if (compressor.option("comparisons") && self.is_boolean()) { + if (!(compressor.parent() instanceof AST_Binary) + || compressor.parent() instanceof AST_Assign) { + var negated = make_node(AST_UnaryPrefix, self, { + operator: "!", + expression: self.negate(compressor, first_in_statement(compressor)) + }); + self = best_of(compressor, self, negated); + } + if (compressor.option("unsafe_comps")) { + switch (self.operator) { + case "<": reverse(">"); break; + case "<=": reverse(">="); break; + } + } + } + if (self.operator == "+") { + if (self.right instanceof AST_String + && self.right.getValue() == "" + && self.left.is_string(compressor)) { + return self.left; + } + if (self.left instanceof AST_String + && self.left.getValue() == "" + && self.right.is_string(compressor)) { + return self.right; + } + if (self.left instanceof AST_Binary + && self.left.operator == "+" + && self.left.left instanceof AST_String + && self.left.left.getValue() == "" + && self.right.is_string(compressor)) { + self.left = self.left.right; + return self.transform(compressor); + } + } + if (compressor.option("evaluate")) { + switch (self.operator) { + case "&&": + var ll = self.left.evaluate(compressor); + if (!ll) { + compressor.warn("Condition left of && always false [{file}:{line},{col}]", self.start); + return maintain_this_binding(compressor.parent(), self, self.left).optimize(compressor); + } else if (ll !== self.left) { + compressor.warn("Condition left of && always true [{file}:{line},{col}]", self.start); + return maintain_this_binding(compressor.parent(), self, self.right).optimize(compressor); + } + if (compressor.option("booleans") && compressor.in_boolean_context()) { + var rr = self.right.evaluate(compressor); + if (!rr) { + compressor.warn("Boolean && always false [{file}:{line},{col}]", self.start); + return make_node(AST_Seq, self, { + car: self.left, + cdr: make_node(AST_False, self) + }).optimize(compressor); + } else if (rr !== self.right) { + compressor.warn("Dropping side-effect-free && in boolean context [{file}:{line},{col}]", self.start); + return self.left.optimize(compressor); + } + } + break; + case "||": + var ll = self.left.evaluate(compressor); + if (!ll) { + compressor.warn("Condition left of || always false [{file}:{line},{col}]", self.start); + return maintain_this_binding(compressor.parent(), self, self.right).optimize(compressor); + } else if (ll !== self.left) { + compressor.warn("Condition left of || always true [{file}:{line},{col}]", self.start); + return maintain_this_binding(compressor.parent(), self, self.left).optimize(compressor); + } + if (compressor.option("booleans") && compressor.in_boolean_context()) { + var rr = self.right.evaluate(compressor); + if (!rr) { + compressor.warn("Dropping side-effect-free || in boolean context [{file}:{line},{col}]", self.start); + return self.left.optimize(compressor); + } else if (rr !== self.right) { + compressor.warn("Boolean || always true [{file}:{line},{col}]", self.start); + return make_node(AST_Seq, self, { + car: self.left, + cdr: make_node(AST_True, self) + }).optimize(compressor); + } + } + break; + } + var associative = true; + switch (self.operator) { + case "+": + // "foo" + ("bar" + x) => "foobar" + x + if (self.left instanceof AST_Constant + && self.right instanceof AST_Binary + && self.right.operator == "+" + && self.right.left instanceof AST_Constant + && self.right.is_string(compressor)) { + self = make_node(AST_Binary, self, { + operator: "+", + left: make_node(AST_String, self.left, { + value: "" + self.left.getValue() + self.right.left.getValue(), + start: self.left.start, + end: self.right.left.end + }), + right: self.right.right + }); + } + // (x + "foo") + "bar" => x + "foobar" + if (self.right instanceof AST_Constant + && self.left instanceof AST_Binary + && self.left.operator == "+" + && self.left.right instanceof AST_Constant + && self.left.is_string(compressor)) { + self = make_node(AST_Binary, self, { + operator: "+", + left: self.left.left, + right: make_node(AST_String, self.right, { + value: "" + self.left.right.getValue() + self.right.getValue(), + start: self.left.right.start, + end: self.right.end + }) + }); + } + // (x + "foo") + ("bar" + y) => (x + "foobar") + y + if (self.left instanceof AST_Binary + && self.left.operator == "+" + && self.left.is_string(compressor) + && self.left.right instanceof AST_Constant + && self.right instanceof AST_Binary + && self.right.operator == "+" + && self.right.left instanceof AST_Constant + && self.right.is_string(compressor)) { + self = make_node(AST_Binary, self, { + operator: "+", + left: make_node(AST_Binary, self.left, { + operator: "+", + left: self.left.left, + right: make_node(AST_String, self.left.right, { + value: "" + self.left.right.getValue() + self.right.left.getValue(), + start: self.left.right.start, + end: self.right.left.end + }) + }), + right: self.right.right + }); + } + // a + -b => a - b + if (self.right instanceof AST_UnaryPrefix + && self.right.operator == "-" + && self.left.is_number(compressor)) { + self = make_node(AST_Binary, self, { + operator: "-", + left: self.left, + right: self.right.expression + }); + break; + } + // -a + b => b - a + if (self.left instanceof AST_UnaryPrefix + && self.left.operator == "-" + && reversible() + && self.right.is_number(compressor)) { + self = make_node(AST_Binary, self, { + operator: "-", + left: self.right, + right: self.left.expression + }); + break; + } + case "*": + associative = compressor.option("unsafe_math"); + case "&": + case "|": + case "^": + // a + +b => +b + a + if (self.left.is_number(compressor) + && self.right.is_number(compressor) + && reversible() + && !(self.left instanceof AST_Binary + && self.left.operator != self.operator + && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) { + var reversed = make_node(AST_Binary, self, { + operator: self.operator, + left: self.right, + right: self.left + }); + if (self.right instanceof AST_Constant + && !(self.left instanceof AST_Constant)) { + self = best_of(compressor, reversed, self); + } else { + self = best_of(compressor, self, reversed); + } + } + if (associative && self.is_number(compressor)) { + // a + (b + c) => (a + b) + c + if (self.right instanceof AST_Binary + && self.right.operator == self.operator) { + self = make_node(AST_Binary, self, { + operator: self.operator, + left: make_node(AST_Binary, self.left, { + operator: self.operator, + left: self.left, + right: self.right.left, + start: self.left.start, + end: self.right.left.end + }), + right: self.right.right + }); + } + // (n + 2) + 3 => 5 + n + // (2 * n) * 3 => 6 + n + if (self.right instanceof AST_Constant + && self.left instanceof AST_Binary + && self.left.operator == self.operator) { + if (self.left.left instanceof AST_Constant) { + self = make_node(AST_Binary, self, { + operator: self.operator, + left: make_node(AST_Binary, self.left, { + operator: self.operator, + left: self.left.left, + right: self.right, + start: self.left.left.start, + end: self.right.end + }), + right: self.left.right + }); + } else if (self.left.right instanceof AST_Constant) { + self = make_node(AST_Binary, self, { + operator: self.operator, + left: make_node(AST_Binary, self.left, { + operator: self.operator, + left: self.left.right, + right: self.right, + start: self.left.right.start, + end: self.right.end + }), + right: self.left.left + }); + } + } + // (a | 1) | (2 | d) => (3 | a) | b + if (self.left instanceof AST_Binary + && self.left.operator == self.operator + && self.left.right instanceof AST_Constant + && self.right instanceof AST_Binary + && self.right.operator == self.operator + && self.right.left instanceof AST_Constant) { + self = make_node(AST_Binary, self, { + operator: self.operator, + left: make_node(AST_Binary, self.left, { + operator: self.operator, + left: make_node(AST_Binary, self.left.left, { + operator: self.operator, + left: self.left.right, + right: self.right.left, + start: self.left.right.start, + end: self.right.left.end + }), + right: self.left.left + }), + right: self.right.right + }); + } + } + } + } + // x && (y && z) ==> x && y && z + // x || (y || z) ==> x || y || z + // x + ("y" + z) ==> x + "y" + z + // "x" + (y + "z")==> "x" + y + "z" + if (self.right instanceof AST_Binary + && self.right.operator == self.operator + && (self.operator == "&&" + || self.operator == "||" + || (self.operator == "+" + && (self.right.left.is_string(compressor) + || (self.left.is_string(compressor) + && self.right.right.is_string(compressor)))))) + { + self.left = make_node(AST_Binary, self.left, { + operator : self.operator, + left : self.left, + right : self.right.left + }); + self.right = self.right.right; + return self.transform(compressor); + } + var ev = self.evaluate(compressor); + if (ev !== self) { + ev = make_node_from_constant(ev, self).optimize(compressor); + return best_of(compressor, ev, self); + } + return self; + }); + + OPT(AST_SymbolRef, function(self, compressor){ + var def = self.resolve_defines(compressor); + if (def) { + return def.optimize(compressor); + } + // testing against !self.scope.uses_with first is an optimization + if (compressor.option("screw_ie8") + && self.undeclared() + && (!self.scope.uses_with || !compressor.find_parent(AST_With))) { + switch (self.name) { + case "undefined": + return make_node(AST_Undefined, self).optimize(compressor); + case "NaN": + return make_node(AST_NaN, self).optimize(compressor); + case "Infinity": + return make_node(AST_Infinity, self).optimize(compressor); + } + } + if (compressor.option("evaluate") + && compressor.option("reduce_vars") + && is_lhs(self, compressor.parent()) !== self) { + var d = self.definition(); + var fixed = self.fixed_value(); + if (fixed) { + if (d.should_replace === undefined) { + var init = fixed.evaluate(compressor); + if (init !== fixed && (compressor.option("unsafe_regexp") || !(init instanceof RegExp))) { + init = make_node_from_constant(init, fixed); + var value = init.optimize(compressor).print_to_string().length; + var fn; + if (has_symbol_ref(fixed)) { + fn = function() { + var result = init.optimize(compressor); + return result === init ? result.clone(true) : result; + }; + } else { + value = Math.min(value, fixed.print_to_string().length); + fn = function() { + var result = best_of_expression(init.optimize(compressor), fixed); + return result === init || result === fixed ? result.clone(true) : result; + }; + } + var name = d.name.length; + var overhead = 0; + if (compressor.option("unused") && (!d.global || compressor.option("toplevel"))) { + overhead = (name + 2 + value) / d.references.length; + } + d.should_replace = value <= name + overhead ? fn : false; + } else { + d.should_replace = false; + } + } + if (d.should_replace) { + return d.should_replace(); + } + } + } + return self; + + function has_symbol_ref(value) { + var found; + value.walk(new TreeWalker(function(node) { + if (node instanceof AST_SymbolRef) found = true; + if (found) return true; + })); + return found; + } + }); + + function is_atomic(lhs, self) { + return lhs instanceof AST_SymbolRef || lhs.TYPE === self.TYPE; + } + + OPT(AST_Undefined, function(self, compressor){ + if (compressor.option("unsafe")) { + var undef = find_variable(compressor, "undefined"); + if (undef) { + var ref = make_node(AST_SymbolRef, self, { + name : "undefined", + scope : undef.scope, + thedef : undef + }); + ref.is_undefined = true; + return ref; + } + } + var lhs = is_lhs(compressor.self(), compressor.parent()); + if (lhs && is_atomic(lhs, self)) return self; + return make_node(AST_UnaryPrefix, self, { + operator: "void", + expression: make_node(AST_Number, self, { + value: 0 + }) + }); + }); + + OPT(AST_Infinity, function(self, compressor){ + var lhs = is_lhs(compressor.self(), compressor.parent()); + if (lhs && is_atomic(lhs, self)) return self; + if (compressor.option("keep_infinity") + && !(lhs && !is_atomic(lhs, self)) + && !find_variable(compressor, "Infinity")) + return self; + return make_node(AST_Binary, self, { + operator: "/", + left: make_node(AST_Number, self, { + value: 1 + }), + right: make_node(AST_Number, self, { + value: 0 + }) + }); + }); + + OPT(AST_NaN, function(self, compressor){ + var lhs = is_lhs(compressor.self(), compressor.parent()); + if (lhs && !is_atomic(lhs, self) + || find_variable(compressor, "NaN")) { + return make_node(AST_Binary, self, { + operator: "/", + left: make_node(AST_Number, self, { + value: 0 + }), + right: make_node(AST_Number, self, { + value: 0 + }) + }); + } + return self; + }); + + var ASSIGN_OPS = [ '+', '-', '/', '*', '%', '>>', '<<', '>>>', '|', '^', '&' ]; + var ASSIGN_OPS_COMMUTATIVE = [ '*', '|', '^', '&' ]; + OPT(AST_Assign, function(self, compressor){ + self = self.lift_sequences(compressor); + if (self.operator == "=" && self.left instanceof AST_SymbolRef && self.right instanceof AST_Binary) { + // x = expr1 OP expr2 + if (self.right.left instanceof AST_SymbolRef + && self.right.left.name == self.left.name + && member(self.right.operator, ASSIGN_OPS)) { + // x = x - 2 ---> x -= 2 + self.operator = self.right.operator + "="; + self.right = self.right.right; + } + else if (self.right.right instanceof AST_SymbolRef + && self.right.right.name == self.left.name + && member(self.right.operator, ASSIGN_OPS_COMMUTATIVE) + && !self.right.left.has_side_effects(compressor)) { + // x = 2 & x ---> x &= 2 + self.operator = self.right.operator + "="; + self.right = self.right.left; + } + } + return self; + }); + + OPT(AST_Conditional, function(self, compressor){ + if (!compressor.option("conditionals")) return self; + if (self.condition instanceof AST_Seq) { + var car = self.condition.car; + self.condition = self.condition.cdr; + return AST_Seq.cons(car, self); + } + var cond = self.condition.evaluate(compressor); + if (cond !== self.condition) { + if (cond) { + compressor.warn("Condition always true [{file}:{line},{col}]", self.start); + return maintain_this_binding(compressor.parent(), self, self.consequent); + } else { + compressor.warn("Condition always false [{file}:{line},{col}]", self.start); + return maintain_this_binding(compressor.parent(), self, self.alternative); + } + } + var negated = cond.negate(compressor, first_in_statement(compressor)); + if (best_of(compressor, cond, negated) === negated) { + self = make_node(AST_Conditional, self, { + condition: negated, + consequent: self.alternative, + alternative: self.consequent + }); + } + var condition = self.condition; + var consequent = self.consequent; + var alternative = self.alternative; + // x?x:y --> x||y + if (condition instanceof AST_SymbolRef + && consequent instanceof AST_SymbolRef + && condition.definition() === consequent.definition()) { + return make_node(AST_Binary, self, { + operator: "||", + left: condition, + right: alternative + }); + } + // if (foo) exp = something; else exp = something_else; + // | + // v + // exp = foo ? something : something_else; + if (consequent instanceof AST_Assign + && alternative instanceof AST_Assign + && consequent.operator == alternative.operator + && consequent.left.equivalent_to(alternative.left) + && (!self.condition.has_side_effects(compressor) + || consequent.operator == "=" + && !consequent.left.has_side_effects(compressor))) { + return make_node(AST_Assign, self, { + operator: consequent.operator, + left: consequent.left, + right: make_node(AST_Conditional, self, { + condition: self.condition, + consequent: consequent.right, + alternative: alternative.right + }) + }); + } + // x ? y(a) : y(b) --> y(x ? a : b) + if (consequent instanceof AST_Call + && alternative.TYPE === consequent.TYPE + && consequent.args.length == 1 + && alternative.args.length == 1 + && consequent.expression.equivalent_to(alternative.expression) + && !consequent.expression.has_side_effects(compressor)) { + consequent.args[0] = make_node(AST_Conditional, self, { + condition: self.condition, + consequent: consequent.args[0], + alternative: alternative.args[0] + }); + return consequent; + } + // x?y?z:a:a --> x&&y?z:a + if (consequent instanceof AST_Conditional + && consequent.alternative.equivalent_to(alternative)) { + return make_node(AST_Conditional, self, { + condition: make_node(AST_Binary, self, { + left: self.condition, + operator: "&&", + right: consequent.condition + }), + consequent: consequent.consequent, + alternative: alternative + }); + } + // x ? y : y --> x, y + if (consequent.equivalent_to(alternative)) { + return make_node(AST_Seq, self, { + car: self.condition, + cdr: consequent + }).optimize(compressor); + } + + if (is_true(self.consequent)) { + if (is_false(self.alternative)) { + // c ? true : false ---> !!c + return booleanize(self.condition); + } + // c ? true : x ---> !!c || x + return make_node(AST_Binary, self, { + operator: "||", + left: booleanize(self.condition), + right: self.alternative + }); + } + if (is_false(self.consequent)) { + if (is_true(self.alternative)) { + // c ? false : true ---> !c + return booleanize(self.condition.negate(compressor)); + } + // c ? false : x ---> !c && x + return make_node(AST_Binary, self, { + operator: "&&", + left: booleanize(self.condition.negate(compressor)), + right: self.alternative + }); + } + if (is_true(self.alternative)) { + // c ? x : true ---> !c || x + return make_node(AST_Binary, self, { + operator: "||", + left: booleanize(self.condition.negate(compressor)), + right: self.consequent + }); + } + if (is_false(self.alternative)) { + // c ? x : false ---> !!c && x + return make_node(AST_Binary, self, { + operator: "&&", + left: booleanize(self.condition), + right: self.consequent + }); + } + + return self; + + function booleanize(node) { + if (node.is_boolean()) return node; + // !!expression + return make_node(AST_UnaryPrefix, node, { + operator: "!", + expression: node.negate(compressor) + }); + } + + // AST_True or !0 + function is_true(node) { + return node instanceof AST_True + || (node instanceof AST_UnaryPrefix + && node.operator == "!" + && node.expression instanceof AST_Constant + && !node.expression.value); + } + // AST_False or !1 + function is_false(node) { + return node instanceof AST_False + || (node instanceof AST_UnaryPrefix + && node.operator == "!" + && node.expression instanceof AST_Constant + && !!node.expression.value); + } + }); + + OPT(AST_Boolean, function(self, compressor){ + if (compressor.option("booleans")) { + var p = compressor.parent(); + if (p instanceof AST_Binary && (p.operator == "==" + || p.operator == "!=")) { + compressor.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]", { + operator : p.operator, + value : self.value, + file : p.start.file, + line : p.start.line, + col : p.start.col, + }); + return make_node(AST_Number, self, { + value: +self.value + }); + } + return make_node(AST_UnaryPrefix, self, { + operator: "!", + expression: make_node(AST_Number, self, { + value: 1 - self.value + }) + }); + } + return self; + }); + + OPT(AST_Sub, function(self, compressor){ + var prop = self.property; + if (prop instanceof AST_String && compressor.option("properties")) { + prop = prop.getValue(); + if (RESERVED_WORDS(prop) ? compressor.option("screw_ie8") : is_identifier_string(prop)) { + return make_node(AST_Dot, self, { + expression : self.expression, + property : prop + }).optimize(compressor); + } + var v = parseFloat(prop); + if (!isNaN(v) && v.toString() == prop) { + self.property = make_node(AST_Number, self.property, { + value: v + }); + } + } + var ev = self.evaluate(compressor); + if (ev !== self) { + ev = make_node_from_constant(ev, self).optimize(compressor); + return best_of(compressor, ev, self); + } + return self; + }); + + OPT(AST_Dot, function(self, compressor){ + var def = self.resolve_defines(compressor); + if (def) { + return def.optimize(compressor); + } + var prop = self.property; + if (RESERVED_WORDS(prop) && !compressor.option("screw_ie8")) { + return make_node(AST_Sub, self, { + expression : self.expression, + property : make_node(AST_String, self, { + value: prop + }) + }).optimize(compressor); + } + if (compressor.option("unsafe_proto") + && self.expression instanceof AST_Dot + && self.expression.property == "prototype") { + var exp = self.expression.expression; + if (exp instanceof AST_SymbolRef && exp.undeclared()) switch (exp.name) { + case "Array": + self.expression = make_node(AST_Array, self.expression, { + elements: [] + }); + break; + case "Object": + self.expression = make_node(AST_Object, self.expression, { + properties: [] + }); + break; + case "String": + self.expression = make_node(AST_String, self.expression, { + value: "" + }); + break; + } + } + var ev = self.evaluate(compressor); + if (ev !== self) { + ev = make_node_from_constant(ev, self).optimize(compressor); + return best_of(compressor, ev, self); + } + return self; + }); + + function literals_in_boolean_context(self, compressor) { + if (compressor.option("booleans") && compressor.in_boolean_context()) { + return best_of(compressor, self, make_node(AST_Seq, self, { + car: self, + cdr: make_node(AST_True, self) + }).optimize(compressor)); + } + return self; + }; + OPT(AST_Array, literals_in_boolean_context); + OPT(AST_Object, literals_in_boolean_context); + OPT(AST_RegExp, literals_in_boolean_context); + + OPT(AST_Return, function(self, compressor){ + if (self.value && is_undefined(self.value, compressor)) { + self.value = null; + } + return self; + }); + + OPT(AST_VarDef, function(self, compressor){ + var defines = compressor.option("global_defs"); + if (defines && HOP(defines, self.name.name)) { + compressor.warn('global_defs ' + self.name.name + ' redefined [{file}:{line},{col}]', self.start); + } + return self; + }); + +})(); diff --git a/node_modules/uglify-js/lib/mozilla-ast.js b/node_modules/uglify-js/lib/mozilla-ast.js new file mode 100644 index 000000000..88a2eb59f --- /dev/null +++ b/node_modules/uglify-js/lib/mozilla-ast.js @@ -0,0 +1,611 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS2 + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + 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 HOLDER “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 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"; + +(function(){ + + var normalize_directives = function(body) { + var in_directive = true; + + for (var i = 0; i < body.length; i++) { + if (in_directive && body[i] instanceof AST_Statement && body[i].body instanceof AST_String) { + body[i] = new AST_Directive({ + start: body[i].start, + end: body[i].end, + value: body[i].body.value + }); + } else if (in_directive && !(body[i] instanceof AST_Statement && body[i].body instanceof AST_String)) { + in_directive = false; + } + } + + return body; + }; + + var MOZ_TO_ME = { + Program: function(M) { + return new AST_Toplevel({ + start: my_start_token(M), + end: my_end_token(M), + body: normalize_directives(M.body.map(from_moz)) + }); + }, + FunctionDeclaration: function(M) { + return new AST_Defun({ + start: my_start_token(M), + end: my_end_token(M), + name: from_moz(M.id), + argnames: M.params.map(from_moz), + body: normalize_directives(from_moz(M.body).body) + }); + }, + FunctionExpression: function(M) { + return new AST_Function({ + start: my_start_token(M), + end: my_end_token(M), + name: from_moz(M.id), + argnames: M.params.map(from_moz), + body: normalize_directives(from_moz(M.body).body) + }); + }, + ExpressionStatement: function(M) { + return new AST_SimpleStatement({ + start: my_start_token(M), + end: my_end_token(M), + body: from_moz(M.expression) + }); + }, + TryStatement: function(M) { + var handlers = M.handlers || [M.handler]; + if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) { + throw new Error("Multiple catch clauses are not supported."); + } + return new AST_Try({ + start : my_start_token(M), + end : my_end_token(M), + body : from_moz(M.block).body, + bcatch : from_moz(handlers[0]), + bfinally : M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null + }); + }, + Property: function(M) { + var key = M.key; + var args = { + start : my_start_token(key), + end : my_end_token(M.value), + key : key.type == "Identifier" ? key.name : key.value, + value : from_moz(M.value) + }; + if (M.kind == "init") return new AST_ObjectKeyVal(args); + args.key = new AST_SymbolAccessor({ + name: args.key + }); + args.value = new AST_Accessor(args.value); + if (M.kind == "get") return new AST_ObjectGetter(args); + if (M.kind == "set") return new AST_ObjectSetter(args); + }, + ArrayExpression: function(M) { + return new AST_Array({ + start : my_start_token(M), + end : my_end_token(M), + elements : M.elements.map(function(elem){ + return elem === null ? new AST_Hole() : from_moz(elem); + }) + }); + }, + ObjectExpression: function(M) { + return new AST_Object({ + start : my_start_token(M), + end : my_end_token(M), + properties : M.properties.map(function(prop){ + prop.type = "Property"; + return from_moz(prop) + }) + }); + }, + SequenceExpression: function(M) { + return AST_Seq.from_array(M.expressions.map(from_moz)); + }, + MemberExpression: function(M) { + return new (M.computed ? AST_Sub : AST_Dot)({ + start : my_start_token(M), + end : my_end_token(M), + property : M.computed ? from_moz(M.property) : M.property.name, + expression : from_moz(M.object) + }); + }, + SwitchCase: function(M) { + return new (M.test ? AST_Case : AST_Default)({ + start : my_start_token(M), + end : my_end_token(M), + expression : from_moz(M.test), + body : M.consequent.map(from_moz) + }); + }, + VariableDeclaration: function(M) { + return new (M.kind === "const" ? AST_Const : AST_Var)({ + start : my_start_token(M), + end : my_end_token(M), + definitions : M.declarations.map(from_moz) + }); + }, + Literal: function(M) { + var val = M.value, args = { + start : my_start_token(M), + end : my_end_token(M) + }; + if (val === null) return new AST_Null(args); + switch (typeof val) { + case "string": + args.value = val; + return new AST_String(args); + case "number": + args.value = val; + return new AST_Number(args); + case "boolean": + return new (val ? AST_True : AST_False)(args); + default: + var rx = M.regex; + if (rx && rx.pattern) { + // RegExpLiteral as per ESTree AST spec + args.value = new RegExp(rx.pattern, rx.flags).toString(); + } else { + // support legacy RegExp + args.value = M.regex && M.raw ? M.raw : val; + } + return new AST_RegExp(args); + } + }, + Identifier: function(M) { + var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2]; + return new ( p.type == "LabeledStatement" ? AST_Label + : p.type == "VariableDeclarator" && p.id === M ? (p.kind == "const" ? AST_SymbolConst : AST_SymbolVar) + : p.type == "FunctionExpression" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg) + : p.type == "FunctionDeclaration" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg) + : p.type == "CatchClause" ? AST_SymbolCatch + : p.type == "BreakStatement" || p.type == "ContinueStatement" ? AST_LabelRef + : AST_SymbolRef)({ + start : my_start_token(M), + end : my_end_token(M), + name : M.name + }); + } + }; + + MOZ_TO_ME.UpdateExpression = + MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) { + var prefix = "prefix" in M ? M.prefix + : M.type == "UnaryExpression" ? true : false; + return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({ + start : my_start_token(M), + end : my_end_token(M), + operator : M.operator, + expression : from_moz(M.argument) + }); + }; + + map("EmptyStatement", AST_EmptyStatement); + map("BlockStatement", AST_BlockStatement, "body@body"); + map("IfStatement", AST_If, "test>condition, consequent>body, alternate>alternative"); + map("LabeledStatement", AST_LabeledStatement, "label>label, body>body"); + map("BreakStatement", AST_Break, "label>label"); + map("ContinueStatement", AST_Continue, "label>label"); + map("WithStatement", AST_With, "object>expression, body>body"); + map("SwitchStatement", AST_Switch, "discriminant>expression, cases@body"); + map("ReturnStatement", AST_Return, "argument>value"); + map("ThrowStatement", AST_Throw, "argument>value"); + map("WhileStatement", AST_While, "test>condition, body>body"); + map("DoWhileStatement", AST_Do, "test>condition, body>body"); + map("ForStatement", AST_For, "init>init, test>condition, update>step, body>body"); + map("ForInStatement", AST_ForIn, "left>init, right>object, body>body"); + map("DebuggerStatement", AST_Debugger); + map("VariableDeclarator", AST_VarDef, "id>name, init>value"); + map("CatchClause", AST_Catch, "param>argname, body%body"); + + map("ThisExpression", AST_This); + map("BinaryExpression", AST_Binary, "operator=operator, left>left, right>right"); + map("LogicalExpression", AST_Binary, "operator=operator, left>left, right>right"); + map("AssignmentExpression", AST_Assign, "operator=operator, left>left, right>right"); + map("ConditionalExpression", AST_Conditional, "test>condition, consequent>consequent, alternate>alternative"); + map("NewExpression", AST_New, "callee>expression, arguments@args"); + map("CallExpression", AST_Call, "callee>expression, arguments@args"); + + def_to_moz(AST_Toplevel, function To_Moz_Program(M) { + return to_moz_scope("Program", M); + }); + + def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) { + return { + type: "FunctionDeclaration", + id: to_moz(M.name), + params: M.argnames.map(to_moz), + body: to_moz_scope("BlockStatement", M) + } + }); + + def_to_moz(AST_Function, function To_Moz_FunctionExpression(M) { + return { + type: "FunctionExpression", + id: to_moz(M.name), + params: M.argnames.map(to_moz), + body: to_moz_scope("BlockStatement", M) + } + }); + + def_to_moz(AST_Directive, function To_Moz_Directive(M) { + return { + type: "ExpressionStatement", + expression: { + type: "Literal", + value: M.value + } + }; + }); + + def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) { + return { + type: "ExpressionStatement", + expression: to_moz(M.body) + }; + }); + + def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) { + return { + type: "SwitchCase", + test: to_moz(M.expression), + consequent: M.body.map(to_moz) + }; + }); + + def_to_moz(AST_Try, function To_Moz_TryStatement(M) { + return { + type: "TryStatement", + block: to_moz_block(M), + handler: to_moz(M.bcatch), + guardedHandlers: [], + finalizer: to_moz(M.bfinally) + }; + }); + + def_to_moz(AST_Catch, function To_Moz_CatchClause(M) { + return { + type: "CatchClause", + param: to_moz(M.argname), + guard: null, + body: to_moz_block(M) + }; + }); + + def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) { + return { + type: "VariableDeclaration", + kind: M instanceof AST_Const ? "const" : "var", + declarations: M.definitions.map(to_moz) + }; + }); + + def_to_moz(AST_Seq, function To_Moz_SequenceExpression(M) { + return { + type: "SequenceExpression", + expressions: M.to_array().map(to_moz) + }; + }); + + def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) { + var isComputed = M instanceof AST_Sub; + return { + type: "MemberExpression", + object: to_moz(M.expression), + computed: isComputed, + property: isComputed ? to_moz(M.property) : {type: "Identifier", name: M.property} + }; + }); + + def_to_moz(AST_Unary, function To_Moz_Unary(M) { + return { + type: M.operator == "++" || M.operator == "--" ? "UpdateExpression" : "UnaryExpression", + operator: M.operator, + prefix: M instanceof AST_UnaryPrefix, + argument: to_moz(M.expression) + }; + }); + + def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) { + return { + type: M.operator == "&&" || M.operator == "||" ? "LogicalExpression" : "BinaryExpression", + left: to_moz(M.left), + operator: M.operator, + right: to_moz(M.right) + }; + }); + + def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) { + return { + type: "ArrayExpression", + elements: M.elements.map(to_moz) + }; + }); + + def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) { + return { + type: "ObjectExpression", + properties: M.properties.map(to_moz) + }; + }); + + def_to_moz(AST_ObjectProperty, function To_Moz_Property(M) { + var key = { + type: "Literal", + value: M.key instanceof AST_SymbolAccessor ? M.key.name : M.key + }; + var kind; + if (M instanceof AST_ObjectKeyVal) { + kind = "init"; + } else + if (M instanceof AST_ObjectGetter) { + kind = "get"; + } else + if (M instanceof AST_ObjectSetter) { + kind = "set"; + } + return { + type: "Property", + kind: kind, + key: key, + value: to_moz(M.value) + }; + }); + + def_to_moz(AST_Symbol, function To_Moz_Identifier(M) { + var def = M.definition(); + return { + type: "Identifier", + name: def ? def.mangled_name || def.name : M.name + }; + }); + + def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) { + var value = M.value; + return { + type: "Literal", + value: value, + raw: value.toString(), + regex: { + pattern: value.source, + flags: value.toString().match(/[gimuy]*$/)[0] + } + }; + }); + + def_to_moz(AST_Constant, function To_Moz_Literal(M) { + var value = M.value; + if (typeof value === 'number' && (value < 0 || (value === 0 && 1 / value < 0))) { + return { + type: "UnaryExpression", + operator: "-", + prefix: true, + argument: { + type: "Literal", + value: -value, + raw: M.start.raw + } + }; + } + return { + type: "Literal", + value: value, + raw: M.start.raw + }; + }); + + def_to_moz(AST_Atom, function To_Moz_Atom(M) { + return { + type: "Identifier", + name: String(M.value) + }; + }); + + AST_Boolean.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast); + AST_Null.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast); + AST_Hole.DEFMETHOD("to_mozilla_ast", function To_Moz_ArrayHole() { return null }); + + AST_Block.DEFMETHOD("to_mozilla_ast", AST_BlockStatement.prototype.to_mozilla_ast); + AST_Lambda.DEFMETHOD("to_mozilla_ast", AST_Function.prototype.to_mozilla_ast); + + /* -----[ tools ]----- */ + + function raw_token(moznode) { + if (moznode.type == "Literal") { + return moznode.raw != null ? moznode.raw : moznode.value + ""; + } + } + + function my_start_token(moznode) { + var loc = moznode.loc, start = loc && loc.start; + var range = moznode.range; + return new AST_Token({ + file : loc && loc.source, + line : start && start.line, + col : start && start.column, + pos : range ? range[0] : moznode.start, + endline : start && start.line, + endcol : start && start.column, + endpos : range ? range[0] : moznode.start, + raw : raw_token(moznode), + }); + }; + + function my_end_token(moznode) { + var loc = moznode.loc, end = loc && loc.end; + var range = moznode.range; + return new AST_Token({ + file : loc && loc.source, + line : end && end.line, + col : end && end.column, + pos : range ? range[1] : moznode.end, + endline : end && end.line, + endcol : end && end.column, + endpos : range ? range[1] : moznode.end, + raw : raw_token(moznode), + }); + }; + + function map(moztype, mytype, propmap) { + var moz_to_me = "function From_Moz_" + moztype + "(M){\n"; + moz_to_me += "return new U2." + mytype.name + "({\n" + + "start: my_start_token(M),\n" + + "end: my_end_token(M)"; + + var me_to_moz = "function To_Moz_" + moztype + "(M){\n"; + me_to_moz += "return {\n" + + "type: " + JSON.stringify(moztype); + + if (propmap) propmap.split(/\s*,\s*/).forEach(function(prop){ + var m = /([a-z0-9$_]+)(=|@|>|%)([a-z0-9$_]+)/i.exec(prop); + if (!m) throw new Error("Can't understand property map: " + prop); + var moz = m[1], how = m[2], my = m[3]; + moz_to_me += ",\n" + my + ": "; + me_to_moz += ",\n" + moz + ": "; + switch (how) { + case "@": + moz_to_me += "M." + moz + ".map(from_moz)"; + me_to_moz += "M." + my + ".map(to_moz)"; + break; + case ">": + moz_to_me += "from_moz(M." + moz + ")"; + me_to_moz += "to_moz(M." + my + ")"; + break; + case "=": + moz_to_me += "M." + moz; + me_to_moz += "M." + my; + break; + case "%": + moz_to_me += "from_moz(M." + moz + ").body"; + me_to_moz += "to_moz_block(M)"; + break; + default: + throw new Error("Can't understand operator in propmap: " + prop); + } + }); + + moz_to_me += "\n})\n}"; + me_to_moz += "\n}\n}"; + + //moz_to_me = parse(moz_to_me).print_to_string({ beautify: true }); + //me_to_moz = parse(me_to_moz).print_to_string({ beautify: true }); + //console.log(moz_to_me); + + moz_to_me = new Function("U2", "my_start_token", "my_end_token", "from_moz", "return(" + moz_to_me + ")")( + exports, my_start_token, my_end_token, from_moz + ); + me_to_moz = new Function("to_moz", "to_moz_block", "to_moz_scope", "return(" + me_to_moz + ")")( + to_moz, to_moz_block, to_moz_scope + ); + MOZ_TO_ME[moztype] = moz_to_me; + def_to_moz(mytype, me_to_moz); + }; + + var FROM_MOZ_STACK = null; + + function from_moz(node) { + FROM_MOZ_STACK.push(node); + var ret = node != null ? MOZ_TO_ME[node.type](node) : null; + FROM_MOZ_STACK.pop(); + return ret; + }; + + AST_Node.from_mozilla_ast = function(node){ + var save_stack = FROM_MOZ_STACK; + FROM_MOZ_STACK = []; + var ast = from_moz(node); + FROM_MOZ_STACK = save_stack; + return ast; + }; + + function set_moz_loc(mynode, moznode, myparent) { + var start = mynode.start; + var end = mynode.end; + if (start.pos != null && end.endpos != null) { + moznode.range = [start.pos, end.endpos]; + } + if (start.line) { + moznode.loc = { + start: {line: start.line, column: start.col}, + end: end.endline ? {line: end.endline, column: end.endcol} : null + }; + if (start.file) { + moznode.loc.source = start.file; + } + } + return moznode; + }; + + function def_to_moz(mytype, handler) { + mytype.DEFMETHOD("to_mozilla_ast", function() { + return set_moz_loc(this, handler(this)); + }); + }; + + function to_moz(node) { + return node != null ? node.to_mozilla_ast() : null; + }; + + function to_moz_block(node) { + return { + type: "BlockStatement", + body: node.body.map(to_moz) + }; + }; + + function to_moz_scope(type, node) { + var body = node.body.map(to_moz); + if (node.body[0] instanceof AST_SimpleStatement && node.body[0].body instanceof AST_String) { + body.unshift(to_moz(new AST_EmptyStatement(node.body[0]))); + } + return { + type: type, + body: body + }; + }; +})(); diff --git a/node_modules/uglify-js/lib/output.js b/node_modules/uglify-js/lib/output.js new file mode 100644 index 000000000..78e24877d --- /dev/null +++ b/node_modules/uglify-js/lib/output.js @@ -0,0 +1,1423 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS2 + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + 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 HOLDER “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 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 EXPECT_DIRECTIVE = /^$|[;{][\s\n]*$/; + +function is_some_comments(comment) { + // multiline comment + return comment.type == "comment2" && /@preserve|@license|@cc_on/i.test(comment.value); +} + +function OutputStream(options) { + + options = defaults(options, { + ascii_only : false, + beautify : false, + bracketize : false, + comments : false, + indent_level : 4, + indent_start : 0, + inline_script : true, + keep_quoted_props: false, + max_line_len : false, + preamble : null, + preserve_line : false, + quote_keys : false, + quote_style : 0, + screw_ie8 : true, + semicolons : true, + shebang : true, + source_map : null, + space_colon : true, + unescape_regexps : false, + width : 80, + wrap_iife : false, + }, true); + + // Convert comment option to RegExp if neccessary and set up comments filter + var comment_filter = return_false; // Default case, throw all comments away + if (options.comments) { + var comments = options.comments; + if (typeof options.comments === "string" && /^\/.*\/[a-zA-Z]*$/.test(options.comments)) { + var regex_pos = options.comments.lastIndexOf("/"); + comments = new RegExp( + options.comments.substr(1, regex_pos - 1), + options.comments.substr(regex_pos + 1) + ); + } + if (comments instanceof RegExp) { + comment_filter = function(comment) { + return comment.type != "comment5" && comments.test(comment.value); + }; + } + else if (typeof comments === "function") { + comment_filter = function(comment) { + return comment.type != "comment5" && comments(this, comment); + }; + } + else if (comments === "some") { + comment_filter = is_some_comments; + } else { // NOTE includes "all" option + comment_filter = return_true; + } + } + + var indentation = 0; + var current_col = 0; + var current_line = 1; + var current_pos = 0; + var OUTPUT = ""; + + function to_ascii(str, identifier) { + return str.replace(/[\u0000-\u001f\u007f-\uffff]/g, function(ch) { + var code = ch.charCodeAt(0).toString(16); + if (code.length <= 2 && !identifier) { + while (code.length < 2) code = "0" + code; + return "\\x" + code; + } else { + while (code.length < 4) code = "0" + code; + return "\\u" + code; + } + }); + }; + + function make_string(str, quote) { + var dq = 0, sq = 0; + str = str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g, + function(s, i){ + switch (s) { + case '"': ++dq; return '"'; + case "'": ++sq; return "'"; + case "\\": return "\\\\"; + case "\n": return "\\n"; + case "\r": return "\\r"; + case "\t": return "\\t"; + case "\b": return "\\b"; + case "\f": return "\\f"; + case "\x0B": return options.screw_ie8 ? "\\v" : "\\x0B"; + case "\u2028": return "\\u2028"; + case "\u2029": return "\\u2029"; + case "\ufeff": return "\\ufeff"; + case "\0": + return /[0-7]/.test(str.charAt(i+1)) ? "\\x00" : "\\0"; + } + return s; + }); + function quote_single() { + return "'" + str.replace(/\x27/g, "\\'") + "'"; + } + function quote_double() { + return '"' + str.replace(/\x22/g, '\\"') + '"'; + } + if (options.ascii_only) str = to_ascii(str); + switch (options.quote_style) { + case 1: + return quote_single(); + case 2: + return quote_double(); + case 3: + return quote == "'" ? quote_single() : quote_double(); + default: + return dq > sq ? quote_single() : quote_double(); + } + }; + + function encode_string(str, quote) { + var ret = make_string(str, quote); + if (options.inline_script) { + ret = ret.replace(/<\x2fscript([>\/\t\n\f\r ])/gi, "<\\/script$1"); + ret = ret.replace(/\x3c!--/g, "\\x3c!--"); + ret = ret.replace(/--\x3e/g, "--\\x3e"); + } + return ret; + }; + + function make_name(name) { + name = name.toString(); + if (options.ascii_only) + name = to_ascii(name, true); + return name; + }; + + function make_indent(back) { + return repeat_string(" ", options.indent_start + indentation - back * options.indent_level); + }; + + /* -----[ beautification/minification ]----- */ + + var might_need_space = false; + var might_need_semicolon = false; + var might_add_newline = 0; + var last = ""; + + var ensure_line_len = options.max_line_len ? function() { + if (current_col > options.max_line_len) { + if (might_add_newline) { + var left = OUTPUT.slice(0, might_add_newline); + var right = OUTPUT.slice(might_add_newline); + OUTPUT = left + "\n" + right; + current_line++; + current_pos++; + current_col = right.length; + } + if (current_col > options.max_line_len) { + AST_Node.warn("Output exceeds {max_line_len} characters", options); + } + } + might_add_newline = 0; + } : noop; + + var requireSemicolonChars = makePredicate("( [ + * / - , ."); + + function print(str) { + str = String(str); + var ch = str.charAt(0); + var prev = last.charAt(last.length - 1); + if (might_need_semicolon) { + might_need_semicolon = false; + + if (prev == ":" && ch == "}" || (!ch || ";}".indexOf(ch) < 0) && prev != ";") { + if (options.semicolons || requireSemicolonChars(ch)) { + OUTPUT += ";"; + current_col++; + current_pos++; + } else { + ensure_line_len(); + OUTPUT += "\n"; + current_pos++; + current_line++; + current_col = 0; + + if (/^\s+$/.test(str)) { + // reset the semicolon flag, since we didn't print one + // now and might still have to later + might_need_semicolon = true; + } + } + + if (!options.beautify) + might_need_space = false; + } + } + + if (!options.beautify && options.preserve_line && stack[stack.length - 1]) { + var target_line = stack[stack.length - 1].start.line; + while (current_line < target_line) { + ensure_line_len(); + OUTPUT += "\n"; + current_pos++; + current_line++; + current_col = 0; + might_need_space = false; + } + } + + if (might_need_space) { + if ((is_identifier_char(prev) + && (is_identifier_char(ch) || ch == "\\")) + || (ch == "/" && ch == prev) + || ((ch == "+" || ch == "-") && ch == last)) + { + OUTPUT += " "; + current_col++; + current_pos++; + } + might_need_space = false; + } + OUTPUT += str; + current_pos += str.length; + var a = str.split(/\r?\n/), n = a.length - 1; + current_line += n; + current_col += a[0].length; + if (n > 0) { + ensure_line_len(); + current_col = a[n].length; + } + last = str; + }; + + var space = options.beautify ? function() { + print(" "); + } : function() { + might_need_space = true; + }; + + var indent = options.beautify ? function(half) { + if (options.beautify) { + print(make_indent(half ? 0.5 : 0)); + } + } : noop; + + var with_indent = options.beautify ? function(col, cont) { + if (col === true) col = next_indent(); + var save_indentation = indentation; + indentation = col; + var ret = cont(); + indentation = save_indentation; + return ret; + } : function(col, cont) { return cont() }; + + var newline = options.beautify ? function() { + print("\n"); + } : options.max_line_len ? function() { + ensure_line_len(); + might_add_newline = OUTPUT.length; + } : noop; + + var semicolon = options.beautify ? function() { + print(";"); + } : function() { + might_need_semicolon = true; + }; + + function force_semicolon() { + might_need_semicolon = false; + print(";"); + }; + + function next_indent() { + return indentation + options.indent_level; + }; + + function with_block(cont) { + var ret; + print("{"); + newline(); + with_indent(next_indent(), function(){ + ret = cont(); + }); + indent(); + print("}"); + return ret; + }; + + function with_parens(cont) { + print("("); + //XXX: still nice to have that for argument lists + //var ret = with_indent(current_col, cont); + var ret = cont(); + print(")"); + return ret; + }; + + function with_square(cont) { + print("["); + //var ret = with_indent(current_col, cont); + var ret = cont(); + print("]"); + return ret; + }; + + function comma() { + print(","); + space(); + }; + + function colon() { + print(":"); + if (options.space_colon) space(); + }; + + var add_mapping = options.source_map ? function(token, name) { + try { + if (token) options.source_map.add( + token.file || "?", + current_line, current_col, + token.line, token.col, + (!name && token.type == "name") ? token.value : name + ); + } catch(ex) { + AST_Node.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]", { + file: token.file, + line: token.line, + col: token.col, + cline: current_line, + ccol: current_col, + name: name || "" + }) + } + } : noop; + + function get() { + if (might_add_newline) { + ensure_line_len(); + } + return OUTPUT; + }; + + var stack = []; + return { + get : get, + toString : get, + indent : indent, + indentation : function() { return indentation }, + current_width : function() { return current_col - indentation }, + should_break : function() { return options.width && this.current_width() >= options.width }, + newline : newline, + print : print, + space : space, + comma : comma, + colon : colon, + last : function() { return last }, + semicolon : semicolon, + force_semicolon : force_semicolon, + to_ascii : to_ascii, + print_name : function(name) { print(make_name(name)) }, + print_string : function(str, quote, escape_directive) { + var encoded = encode_string(str, quote); + if (escape_directive === true && encoded.indexOf("\\") === -1) { + // Insert semicolons to break directive prologue + if (!EXPECT_DIRECTIVE.test(OUTPUT)) { + force_semicolon(); + } + force_semicolon(); + } + print(encoded); + }, + encode_string : encode_string, + next_indent : next_indent, + with_indent : with_indent, + with_block : with_block, + with_parens : with_parens, + with_square : with_square, + add_mapping : add_mapping, + option : function(opt) { return options[opt] }, + comment_filter : comment_filter, + line : function() { return current_line }, + col : function() { return current_col }, + pos : function() { return current_pos }, + push_node : function(node) { stack.push(node) }, + pop_node : function() { return stack.pop() }, + parent : function(n) { + return stack[stack.length - 2 - (n || 0)]; + } + }; + +}; + +/* -----[ code generators ]----- */ + +(function(){ + + /* -----[ utils ]----- */ + + function DEFPRINT(nodetype, generator) { + nodetype.DEFMETHOD("_codegen", generator); + }; + + var use_asm = false; + var in_directive = false; + + AST_Node.DEFMETHOD("print", function(stream, force_parens){ + var self = this, generator = self._codegen, prev_use_asm = use_asm; + if (self instanceof AST_Directive && self.value == "use asm" && stream.parent() instanceof AST_Scope) { + use_asm = true; + } + function doit() { + self.add_comments(stream); + self.add_source_map(stream); + generator(self, stream); + } + stream.push_node(self); + if (force_parens || self.needs_parens(stream)) { + stream.with_parens(doit); + } else { + doit(); + } + stream.pop_node(); + if (self instanceof AST_Scope) { + use_asm = prev_use_asm; + } + }); + + AST_Node.DEFMETHOD("print_to_string", function(options){ + var s = OutputStream(options); + if (!options) s._readonly = true; + this.print(s); + return s.get(); + }); + + /* -----[ comments ]----- */ + + AST_Node.DEFMETHOD("add_comments", function(output){ + if (output._readonly) return; + var self = this; + var start = self.start; + if (start && !start._comments_dumped) { + start._comments_dumped = true; + var comments = start.comments_before || []; + + // XXX: ugly fix for https://github.com/mishoo/UglifyJS2/issues/112 + // and https://github.com/mishoo/UglifyJS2/issues/372 + if (self instanceof AST_Exit && self.value) { + self.value.walk(new TreeWalker(function(node){ + if (node.start && node.start.comments_before) { + comments = comments.concat(node.start.comments_before); + node.start.comments_before = []; + } + if (node instanceof AST_Function || + node instanceof AST_Array || + node instanceof AST_Object) + { + return true; // don't go inside. + } + })); + } + + if (output.pos() == 0) { + if (comments.length > 0 && output.option("shebang") && comments[0].type == "comment5") { + output.print("#!" + comments.shift().value + "\n"); + output.indent(); + } + var preamble = output.option("preamble"); + if (preamble) { + output.print(preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g, "\n")); + } + } + + comments = comments.filter(output.comment_filter, self); + + // Keep single line comments after nlb, after nlb + if (!output.option("beautify") && comments.length > 0 && + /comment[134]/.test(comments[0].type) && + output.col() !== 0 && comments[0].nlb) + { + output.print("\n"); + } + + comments.forEach(function(c){ + if (/comment[134]/.test(c.type)) { + output.print("//" + c.value + "\n"); + output.indent(); + } + else if (c.type == "comment2") { + output.print("/*" + c.value + "*/"); + if (start.nlb) { + output.print("\n"); + output.indent(); + } else { + output.space(); + } + } + }); + } + }); + + /* -----[ PARENTHESES ]----- */ + + function PARENS(nodetype, func) { + if (Array.isArray(nodetype)) { + nodetype.forEach(function(nodetype){ + PARENS(nodetype, func); + }); + } else { + nodetype.DEFMETHOD("needs_parens", func); + } + }; + + PARENS(AST_Node, function(){ + return false; + }); + + // a function expression needs parens around it when it's provably + // the first token to appear in a statement. + PARENS(AST_Function, function(output){ + if (first_in_statement(output)) { + return true; + } + + if (output.option('wrap_iife')) { + var p = output.parent(); + return p instanceof AST_Call && p.expression === this; + } + + return false; + }); + + // same goes for an object literal, because otherwise it would be + // interpreted as a block of code. + PARENS(AST_Object, function(output){ + return first_in_statement(output); + }); + + PARENS(AST_Unary, function(output){ + var p = output.parent(); + return p instanceof AST_PropAccess && p.expression === this + || p instanceof AST_Call && p.expression === this; + }); + + PARENS(AST_Seq, function(output){ + var p = output.parent(); + return p instanceof AST_Call // (foo, bar)() or foo(1, (2, 3), 4) + || p instanceof AST_Unary // !(foo, bar, baz) + || p instanceof AST_Binary // 1 + (2, 3) + 4 ==> 8 + || p instanceof AST_VarDef // var a = (1, 2), b = a + a; ==> b == 4 + || p instanceof AST_PropAccess // (1, {foo:2}).foo or (1, {foo:2})["foo"] ==> 2 + || p instanceof AST_Array // [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ] + || p instanceof AST_ObjectProperty // { foo: (1, 2) }.foo ==> 2 + || p instanceof AST_Conditional /* (false, true) ? (a = 10, b = 20) : (c = 30) + * ==> 20 (side effect, set a := 10 and b := 20) */ + ; + }); + + PARENS(AST_Binary, function(output){ + var p = output.parent(); + // (foo && bar)() + if (p instanceof AST_Call && p.expression === this) + return true; + // typeof (foo && bar) + if (p instanceof AST_Unary) + return true; + // (foo && bar)["prop"], (foo && bar).prop + if (p instanceof AST_PropAccess && p.expression === this) + return true; + // this deals with precedence: 3 * (2 + 1) + if (p instanceof AST_Binary) { + var po = p.operator, pp = PRECEDENCE[po]; + var so = this.operator, sp = PRECEDENCE[so]; + if (pp > sp + || (pp == sp + && this === p.right)) { + return true; + } + } + }); + + PARENS(AST_PropAccess, function(output){ + var p = output.parent(); + if (p instanceof AST_New && p.expression === this) { + // i.e. new (foo.bar().baz) + // + // if there's one call into this subtree, then we need + // parens around it too, otherwise the call will be + // interpreted as passing the arguments to the upper New + // expression. + try { + this.walk(new TreeWalker(function(node){ + if (node instanceof AST_Call) throw p; + })); + } catch(ex) { + if (ex !== p) throw ex; + return true; + } + } + }); + + PARENS(AST_Call, function(output){ + var p = output.parent(), p1; + if (p instanceof AST_New && p.expression === this) + return true; + + // workaround for Safari bug. + // https://bugs.webkit.org/show_bug.cgi?id=123506 + return this.expression instanceof AST_Function + && p instanceof AST_PropAccess + && p.expression === this + && (p1 = output.parent(1)) instanceof AST_Assign + && p1.left === p; + }); + + PARENS(AST_New, function(output){ + var p = output.parent(); + if (!need_constructor_parens(this, output) + && (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)["getTime"]() + || p instanceof AST_Call && p.expression === this)) // (new foo)(bar) + return true; + }); + + PARENS(AST_Number, function(output){ + var p = output.parent(); + if (p instanceof AST_PropAccess && p.expression === this) { + var value = this.getValue(); + if (value < 0 || /^0/.test(make_num(value))) { + return true; + } + } + }); + + PARENS([ AST_Assign, AST_Conditional ], function (output){ + var p = output.parent(); + // !(a = false) → true + if (p instanceof AST_Unary) + return true; + // 1 + (a = 2) + 3 → 6, side effect setting a = 2 + if (p instanceof AST_Binary && !(p instanceof AST_Assign)) + return true; + // (a = func)() —or— new (a = Object)() + if (p instanceof AST_Call && p.expression === this) + return true; + // (a = foo) ? bar : baz + if (p instanceof AST_Conditional && p.condition === this) + return true; + // (a = foo)["prop"] —or— (a = foo).prop + if (p instanceof AST_PropAccess && p.expression === this) + return true; + }); + + /* -----[ PRINTERS ]----- */ + + DEFPRINT(AST_Directive, function(self, output){ + output.print_string(self.value, self.quote); + output.semicolon(); + }); + DEFPRINT(AST_Debugger, function(self, output){ + output.print("debugger"); + output.semicolon(); + }); + + /* -----[ statements ]----- */ + + function display_body(body, is_toplevel, output, allow_directives) { + var last = body.length - 1; + in_directive = allow_directives; + body.forEach(function(stmt, i){ + if (in_directive === true && !(stmt instanceof AST_Directive || + stmt instanceof AST_EmptyStatement || + (stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String) + )) { + in_directive = false; + } + if (!(stmt instanceof AST_EmptyStatement)) { + output.indent(); + stmt.print(output); + if (!(i == last && is_toplevel)) { + output.newline(); + if (is_toplevel) output.newline(); + } + } + if (in_directive === true && + stmt instanceof AST_SimpleStatement && + stmt.body instanceof AST_String + ) { + in_directive = false; + } + }); + in_directive = false; + }; + + AST_StatementWithBody.DEFMETHOD("_do_print_body", function(output){ + force_statement(this.body, output); + }); + + DEFPRINT(AST_Statement, function(self, output){ + self.body.print(output); + output.semicolon(); + }); + DEFPRINT(AST_Toplevel, function(self, output){ + display_body(self.body, true, output, true); + output.print(""); + }); + DEFPRINT(AST_LabeledStatement, function(self, output){ + self.label.print(output); + output.colon(); + self.body.print(output); + }); + DEFPRINT(AST_SimpleStatement, function(self, output){ + self.body.print(output); + output.semicolon(); + }); + function print_bracketed(body, output, allow_directives) { + if (body.length > 0) output.with_block(function(){ + display_body(body, false, output, allow_directives); + }); + else output.print("{}"); + }; + DEFPRINT(AST_BlockStatement, function(self, output){ + print_bracketed(self.body, output); + }); + DEFPRINT(AST_EmptyStatement, function(self, output){ + output.semicolon(); + }); + DEFPRINT(AST_Do, function(self, output){ + output.print("do"); + output.space(); + make_block(self.body, output); + output.space(); + output.print("while"); + output.space(); + output.with_parens(function(){ + self.condition.print(output); + }); + output.semicolon(); + }); + DEFPRINT(AST_While, function(self, output){ + output.print("while"); + output.space(); + output.with_parens(function(){ + self.condition.print(output); + }); + output.space(); + self._do_print_body(output); + }); + DEFPRINT(AST_For, function(self, output){ + output.print("for"); + output.space(); + output.with_parens(function(){ + if (self.init) { + if (self.init instanceof AST_Definitions) { + self.init.print(output); + } else { + parenthesize_for_noin(self.init, output, true); + } + output.print(";"); + output.space(); + } else { + output.print(";"); + } + if (self.condition) { + self.condition.print(output); + output.print(";"); + output.space(); + } else { + output.print(";"); + } + if (self.step) { + self.step.print(output); + } + }); + output.space(); + self._do_print_body(output); + }); + DEFPRINT(AST_ForIn, function(self, output){ + output.print("for"); + output.space(); + output.with_parens(function(){ + self.init.print(output); + output.space(); + output.print("in"); + output.space(); + self.object.print(output); + }); + output.space(); + self._do_print_body(output); + }); + DEFPRINT(AST_With, function(self, output){ + output.print("with"); + output.space(); + output.with_parens(function(){ + self.expression.print(output); + }); + output.space(); + self._do_print_body(output); + }); + + /* -----[ functions ]----- */ + AST_Lambda.DEFMETHOD("_do_print", function(output, nokeyword){ + var self = this; + if (!nokeyword) { + output.print("function"); + } + if (self.name) { + output.space(); + self.name.print(output); + } + output.with_parens(function(){ + self.argnames.forEach(function(arg, i){ + if (i) output.comma(); + arg.print(output); + }); + }); + output.space(); + print_bracketed(self.body, output, true); + }); + DEFPRINT(AST_Lambda, function(self, output){ + self._do_print(output); + }); + + /* -----[ exits ]----- */ + AST_Exit.DEFMETHOD("_do_print", function(output, kind){ + output.print(kind); + if (this.value) { + output.space(); + this.value.print(output); + } + output.semicolon(); + }); + DEFPRINT(AST_Return, function(self, output){ + self._do_print(output, "return"); + }); + DEFPRINT(AST_Throw, function(self, output){ + self._do_print(output, "throw"); + }); + + /* -----[ loop control ]----- */ + AST_LoopControl.DEFMETHOD("_do_print", function(output, kind){ + output.print(kind); + if (this.label) { + output.space(); + this.label.print(output); + } + output.semicolon(); + }); + DEFPRINT(AST_Break, function(self, output){ + self._do_print(output, "break"); + }); + DEFPRINT(AST_Continue, function(self, output){ + self._do_print(output, "continue"); + }); + + /* -----[ if ]----- */ + function make_then(self, output) { + var b = self.body; + if (output.option("bracketize") + || !output.option("screw_ie8") && b instanceof AST_Do) + return make_block(b, output); + // The squeezer replaces "block"-s that contain only a single + // statement with the statement itself; technically, the AST + // is correct, but this can create problems when we output an + // IF having an ELSE clause where the THEN clause ends in an + // IF *without* an ELSE block (then the outer ELSE would refer + // to the inner IF). This function checks for this case and + // adds the block brackets if needed. + if (!b) return output.force_semicolon(); + while (true) { + if (b instanceof AST_If) { + if (!b.alternative) { + make_block(self.body, output); + return; + } + b = b.alternative; + } + else if (b instanceof AST_StatementWithBody) { + b = b.body; + } + else break; + } + force_statement(self.body, output); + }; + DEFPRINT(AST_If, function(self, output){ + output.print("if"); + output.space(); + output.with_parens(function(){ + self.condition.print(output); + }); + output.space(); + if (self.alternative) { + make_then(self, output); + output.space(); + output.print("else"); + output.space(); + if (self.alternative instanceof AST_If) + self.alternative.print(output); + else + force_statement(self.alternative, output); + } else { + self._do_print_body(output); + } + }); + + /* -----[ switch ]----- */ + DEFPRINT(AST_Switch, function(self, output){ + output.print("switch"); + output.space(); + output.with_parens(function(){ + self.expression.print(output); + }); + output.space(); + var last = self.body.length - 1; + if (last < 0) output.print("{}"); + else output.with_block(function(){ + self.body.forEach(function(branch, i){ + output.indent(true); + branch.print(output); + if (i < last && branch.body.length > 0) + output.newline(); + }); + }); + }); + AST_SwitchBranch.DEFMETHOD("_do_print_body", function(output){ + output.newline(); + this.body.forEach(function(stmt){ + output.indent(); + stmt.print(output); + output.newline(); + }); + }); + DEFPRINT(AST_Default, function(self, output){ + output.print("default:"); + self._do_print_body(output); + }); + DEFPRINT(AST_Case, function(self, output){ + output.print("case"); + output.space(); + self.expression.print(output); + output.print(":"); + self._do_print_body(output); + }); + + /* -----[ exceptions ]----- */ + DEFPRINT(AST_Try, function(self, output){ + output.print("try"); + output.space(); + print_bracketed(self.body, output); + if (self.bcatch) { + output.space(); + self.bcatch.print(output); + } + if (self.bfinally) { + output.space(); + self.bfinally.print(output); + } + }); + DEFPRINT(AST_Catch, function(self, output){ + output.print("catch"); + output.space(); + output.with_parens(function(){ + self.argname.print(output); + }); + output.space(); + print_bracketed(self.body, output); + }); + DEFPRINT(AST_Finally, function(self, output){ + output.print("finally"); + output.space(); + print_bracketed(self.body, output); + }); + + /* -----[ var/const ]----- */ + AST_Definitions.DEFMETHOD("_do_print", function(output, kind){ + output.print(kind); + output.space(); + this.definitions.forEach(function(def, i){ + if (i) output.comma(); + def.print(output); + }); + var p = output.parent(); + var in_for = p instanceof AST_For || p instanceof AST_ForIn; + var avoid_semicolon = in_for && p.init === this; + if (!avoid_semicolon) + output.semicolon(); + }); + DEFPRINT(AST_Var, function(self, output){ + self._do_print(output, "var"); + }); + DEFPRINT(AST_Const, function(self, output){ + self._do_print(output, "const"); + }); + + function parenthesize_for_noin(node, output, noin) { + if (!noin) node.print(output); + else try { + // need to take some precautions here: + // https://github.com/mishoo/UglifyJS2/issues/60 + node.walk(new TreeWalker(function(node){ + if (node instanceof AST_Binary && node.operator == "in") + throw output; + })); + node.print(output); + } catch(ex) { + if (ex !== output) throw ex; + node.print(output, true); + } + }; + + DEFPRINT(AST_VarDef, function(self, output){ + self.name.print(output); + if (self.value) { + output.space(); + output.print("="); + output.space(); + var p = output.parent(1); + var noin = p instanceof AST_For || p instanceof AST_ForIn; + parenthesize_for_noin(self.value, output, noin); + } + }); + + /* -----[ other expressions ]----- */ + DEFPRINT(AST_Call, function(self, output){ + self.expression.print(output); + if (self instanceof AST_New && !need_constructor_parens(self, output)) + return; + output.with_parens(function(){ + self.args.forEach(function(expr, i){ + if (i) output.comma(); + expr.print(output); + }); + }); + }); + DEFPRINT(AST_New, function(self, output){ + output.print("new"); + output.space(); + AST_Call.prototype._codegen(self, output); + }); + + AST_Seq.DEFMETHOD("_do_print", function(output){ + this.car.print(output); + if (this.cdr) { + output.comma(); + if (output.should_break()) { + output.newline(); + output.indent(); + } + this.cdr.print(output); + } + }); + DEFPRINT(AST_Seq, function(self, output){ + self._do_print(output); + // var p = output.parent(); + // if (p instanceof AST_Statement) { + // output.with_indent(output.next_indent(), function(){ + // self._do_print(output); + // }); + // } else { + // self._do_print(output); + // } + }); + DEFPRINT(AST_Dot, function(self, output){ + var expr = self.expression; + expr.print(output); + if (expr instanceof AST_Number && expr.getValue() >= 0) { + if (!/[xa-f.)]/i.test(output.last())) { + output.print("."); + } + } + output.print("."); + // the name after dot would be mapped about here. + output.add_mapping(self.end); + output.print_name(self.property); + }); + DEFPRINT(AST_Sub, function(self, output){ + self.expression.print(output); + output.print("["); + self.property.print(output); + output.print("]"); + }); + DEFPRINT(AST_UnaryPrefix, function(self, output){ + var op = self.operator; + output.print(op); + if (/^[a-z]/i.test(op) + || (/[+-]$/.test(op) + && self.expression instanceof AST_UnaryPrefix + && /^[+-]/.test(self.expression.operator))) { + output.space(); + } + self.expression.print(output); + }); + DEFPRINT(AST_UnaryPostfix, function(self, output){ + self.expression.print(output); + output.print(self.operator); + }); + DEFPRINT(AST_Binary, function(self, output){ + var op = self.operator; + self.left.print(output); + if (op[0] == ">" /* ">>" ">>>" ">" ">=" */ + && self.left instanceof AST_UnaryPostfix + && self.left.operator == "--") { + // space is mandatory to avoid outputting --> + output.print(" "); + } else { + // the space is optional depending on "beautify" + output.space(); + } + output.print(op); + if ((op == "<" || op == "<<") + && self.right instanceof AST_UnaryPrefix + && self.right.operator == "!" + && self.right.expression instanceof AST_UnaryPrefix + && self.right.expression.operator == "--") { + // space is mandatory to avoid outputting ") && S.newline_before) { + forward(3); + skip_line_comment("comment4"); + continue; + } + } + var ch = peek(); + if (!ch) return token("eof"); + var code = ch.charCodeAt(0); + switch (code) { + case 34: case 39: return read_string(ch); + case 46: return handle_dot(); + case 47: { + var tok = handle_slash(); + if (tok === next_token) continue; + return tok; + } + } + if (is_digit(code)) return read_num(); + if (PUNC_CHARS(ch)) return token("punc", next()); + if (OPERATOR_CHARS(ch)) return read_operator(); + if (code == 92 || is_identifier_start(code)) return read_word(); + break; + } + parse_error("Unexpected character '" + ch + "'"); + }; + + next_token.context = function(nc) { + if (nc) S = nc; + return S; + }; + + next_token.add_directive = function(directive) { + S.directive_stack[S.directive_stack.length - 1].push(directive); + + if (S.directives[directive] === undefined) { + S.directives[directive] = 1; + } else { + S.directives[directive]++; + } + } + + next_token.push_directives_stack = function() { + S.directive_stack.push([]); + } + + next_token.pop_directives_stack = function() { + var directives = S.directive_stack[S.directive_stack.length - 1]; + + for (var i = 0; i < directives.length; i++) { + S.directives[directives[i]]--; + } + + S.directive_stack.pop(); + } + + next_token.has_directive = function(directive) { + return S.directives[directive] !== undefined && + S.directives[directive] > 0; + } + + return next_token; + +}; + +/* -----[ Parser (constants) ]----- */ + +var UNARY_PREFIX = makePredicate([ + "typeof", + "void", + "delete", + "--", + "++", + "!", + "~", + "-", + "+" +]); + +var UNARY_POSTFIX = makePredicate([ "--", "++" ]); + +var ASSIGNMENT = makePredicate([ "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]); + +var PRECEDENCE = (function(a, ret){ + for (var i = 0; i < a.length; ++i) { + var b = a[i]; + for (var j = 0; j < b.length; ++j) { + ret[b[j]] = i + 1; + } + } + return ret; +})( + [ + ["||"], + ["&&"], + ["|"], + ["^"], + ["&"], + ["==", "===", "!=", "!=="], + ["<", ">", "<=", ">=", "in", "instanceof"], + [">>", "<<", ">>>"], + ["+", "-"], + ["*", "/", "%"] + ], + {} +); + +var STATEMENTS_WITH_LABELS = array_to_hash([ "for", "do", "while", "switch" ]); + +var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]); + +/* -----[ Parser ]----- */ + +function parse($TEXT, options) { + + options = defaults(options, { + bare_returns : false, + cli : false, + expression : false, + filename : null, + html5_comments : true, + shebang : true, + strict : false, + toplevel : null, + }); + + var S = { + input : (typeof $TEXT == "string" + ? tokenizer($TEXT, options.filename, + options.html5_comments, options.shebang) + : $TEXT), + token : null, + prev : null, + peeked : null, + in_function : 0, + in_directives : true, + in_loop : 0, + labels : [] + }; + + S.token = next(); + + function is(type, value) { + return is_token(S.token, type, value); + }; + + function peek() { return S.peeked || (S.peeked = S.input()); }; + + function next() { + S.prev = S.token; + if (S.peeked) { + S.token = S.peeked; + S.peeked = null; + } else { + S.token = S.input(); + } + S.in_directives = S.in_directives && ( + S.token.type == "string" || is("punc", ";") + ); + return S.token; + }; + + function prev() { + return S.prev; + }; + + function croak(msg, line, col, pos) { + var ctx = S.input.context(); + js_error(msg, + ctx.filename, + line != null ? line : ctx.tokline, + col != null ? col : ctx.tokcol, + pos != null ? pos : ctx.tokpos); + }; + + function token_error(token, msg) { + croak(msg, token.line, token.col); + }; + + function unexpected(token) { + if (token == null) + token = S.token; + token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")"); + }; + + function expect_token(type, val) { + if (is(type, val)) { + return next(); + } + token_error(S.token, "Unexpected token " + S.token.type + " «" + S.token.value + "»" + ", expected " + type + " «" + val + "»"); + }; + + function expect(punc) { return expect_token("punc", punc); }; + + function can_insert_semicolon() { + return !options.strict && ( + S.token.nlb || is("eof") || is("punc", "}") + ); + }; + + function semicolon(optional) { + if (is("punc", ";")) next(); + else if (!optional && !can_insert_semicolon()) unexpected(); + }; + + function parenthesised() { + expect("("); + var exp = expression(true); + expect(")"); + return exp; + }; + + function embed_tokens(parser) { + return function() { + var start = S.token; + var expr = parser(); + var end = prev(); + expr.start = start; + expr.end = end; + return expr; + }; + }; + + function handle_regexp() { + if (is("operator", "/") || is("operator", "/=")) { + S.peeked = null; + S.token = S.input(S.token.value.substr(1)); // force regexp + } + }; + + var statement = embed_tokens(function() { + handle_regexp(); + switch (S.token.type) { + case "string": + if (S.in_directives) { + var token = peek(); + if (S.token.raw.indexOf("\\") == -1 + && (token.nlb + || is_token(token, "eof") + || is_token(token, "punc", ";") + || is_token(token, "punc", "}"))) { + S.input.add_directive(S.token.value); + } else { + S.in_directives = false; + } + } + var dir = S.in_directives, stat = simple_statement(); + return dir ? new AST_Directive(stat.body) : stat; + case "num": + case "regexp": + case "operator": + case "atom": + return simple_statement(); + + case "name": + return is_token(peek(), "punc", ":") + ? labeled_statement() + : simple_statement(); + + case "punc": + switch (S.token.value) { + case "{": + return new AST_BlockStatement({ + start : S.token, + body : block_(), + end : prev() + }); + case "[": + case "(": + return simple_statement(); + case ";": + S.in_directives = false; + next(); + return new AST_EmptyStatement(); + default: + unexpected(); + } + + case "keyword": + switch (S.token.value) { + case "break": + next(); + return break_cont(AST_Break); + + case "continue": + next(); + return break_cont(AST_Continue); + + case "debugger": + next(); + semicolon(); + return new AST_Debugger(); + + case "do": + next(); + var body = in_loop(statement); + expect_token("keyword", "while"); + var condition = parenthesised(); + semicolon(true); + return new AST_Do({ + body : body, + condition : condition + }); + + case "while": + next(); + return new AST_While({ + condition : parenthesised(), + body : in_loop(statement) + }); + + case "for": + next(); + return for_(); + + case "function": + next(); + return function_(AST_Defun); + + case "if": + next(); + return if_(); + + case "return": + if (S.in_function == 0 && !options.bare_returns) + croak("'return' outside of function"); + next(); + var value = null; + if (is("punc", ";")) { + next(); + } else if (!can_insert_semicolon()) { + value = expression(true); + semicolon(); + } + return new AST_Return({ + value: value + }); + + case "switch": + next(); + return new AST_Switch({ + expression : parenthesised(), + body : in_loop(switch_body_) + }); + + case "throw": + next(); + if (S.token.nlb) + croak("Illegal newline after 'throw'"); + var value = expression(true); + semicolon(); + return new AST_Throw({ + value: value + }); + + case "try": + next(); + return try_(); + + case "var": + next(); + var node = var_(); + semicolon(); + return node; + + case "const": + next(); + var node = const_(); + semicolon(); + return node; + + case "with": + if (S.input.has_directive("use strict")) { + croak("Strict mode may not include a with statement"); + } + next(); + return new AST_With({ + expression : parenthesised(), + body : statement() + }); + } + } + unexpected(); + }); + + function labeled_statement() { + var label = as_symbol(AST_Label); + if (find_if(function(l){ return l.name == label.name }, S.labels)) { + // ECMA-262, 12.12: An ECMAScript program is considered + // syntactically incorrect if it contains a + // LabelledStatement that is enclosed by a + // LabelledStatement with the same Identifier as label. + croak("Label " + label.name + " defined twice"); + } + expect(":"); + S.labels.push(label); + var stat = statement(); + S.labels.pop(); + if (!(stat instanceof AST_IterationStatement)) { + // check for `continue` that refers to this label. + // those should be reported as syntax errors. + // https://github.com/mishoo/UglifyJS2/issues/287 + label.references.forEach(function(ref){ + if (ref instanceof AST_Continue) { + ref = ref.label.start; + croak("Continue label `" + label.name + "` refers to non-IterationStatement.", + ref.line, ref.col, ref.pos); + } + }); + } + return new AST_LabeledStatement({ body: stat, label: label }); + }; + + function simple_statement(tmp) { + return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) }); + }; + + function break_cont(type) { + var label = null, ldef; + if (!can_insert_semicolon()) { + label = as_symbol(AST_LabelRef, true); + } + if (label != null) { + ldef = find_if(function(l){ return l.name == label.name }, S.labels); + if (!ldef) + croak("Undefined label " + label.name); + label.thedef = ldef; + } + else if (S.in_loop == 0) + croak(type.TYPE + " not inside a loop or switch"); + semicolon(); + var stat = new type({ label: label }); + if (ldef) ldef.references.push(stat); + return stat; + }; + + function for_() { + expect("("); + var init = null; + if (!is("punc", ";")) { + init = is("keyword", "var") + ? (next(), var_(true)) + : expression(true, true); + if (is("operator", "in")) { + if (init instanceof AST_Var && init.definitions.length > 1) + croak("Only one variable declaration allowed in for..in loop"); + next(); + return for_in(init); + } + } + return regular_for(init); + }; + + function regular_for(init) { + expect(";"); + var test = is("punc", ";") ? null : expression(true); + expect(";"); + var step = is("punc", ")") ? null : expression(true); + expect(")"); + return new AST_For({ + init : init, + condition : test, + step : step, + body : in_loop(statement) + }); + }; + + function for_in(init) { + var lhs = init instanceof AST_Var ? init.definitions[0].name : null; + var obj = expression(true); + expect(")"); + return new AST_ForIn({ + init : init, + name : lhs, + object : obj, + body : in_loop(statement) + }); + }; + + var function_ = function(ctor) { + var in_statement = ctor === AST_Defun; + var name = is("name") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null; + if (in_statement && !name) + unexpected(); + expect("("); + return new ctor({ + name: name, + argnames: (function(first, a){ + while (!is("punc", ")")) { + if (first) first = false; else expect(","); + a.push(as_symbol(AST_SymbolFunarg)); + } + next(); + return a; + })(true, []), + body: (function(loop, labels){ + ++S.in_function; + S.in_directives = true; + S.input.push_directives_stack(); + S.in_loop = 0; + S.labels = []; + var a = block_(); + S.input.pop_directives_stack(); + --S.in_function; + S.in_loop = loop; + S.labels = labels; + return a; + })(S.in_loop, S.labels) + }); + }; + + function if_() { + var cond = parenthesised(), body = statement(), belse = null; + if (is("keyword", "else")) { + next(); + belse = statement(); + } + return new AST_If({ + condition : cond, + body : body, + alternative : belse + }); + }; + + function block_() { + expect("{"); + var a = []; + while (!is("punc", "}")) { + if (is("eof")) unexpected(); + a.push(statement()); + } + next(); + return a; + }; + + function switch_body_() { + expect("{"); + var a = [], cur = null, branch = null, tmp; + while (!is("punc", "}")) { + if (is("eof")) unexpected(); + if (is("keyword", "case")) { + if (branch) branch.end = prev(); + cur = []; + branch = new AST_Case({ + start : (tmp = S.token, next(), tmp), + expression : expression(true), + body : cur + }); + a.push(branch); + expect(":"); + } + else if (is("keyword", "default")) { + if (branch) branch.end = prev(); + cur = []; + branch = new AST_Default({ + start : (tmp = S.token, next(), expect(":"), tmp), + body : cur + }); + a.push(branch); + } + else { + if (!cur) unexpected(); + cur.push(statement()); + } + } + if (branch) branch.end = prev(); + next(); + return a; + }; + + function try_() { + var body = block_(), bcatch = null, bfinally = null; + if (is("keyword", "catch")) { + var start = S.token; + next(); + expect("("); + var name = as_symbol(AST_SymbolCatch); + expect(")"); + bcatch = new AST_Catch({ + start : start, + argname : name, + body : block_(), + end : prev() + }); + } + if (is("keyword", "finally")) { + var start = S.token; + next(); + bfinally = new AST_Finally({ + start : start, + body : block_(), + end : prev() + }); + } + if (!bcatch && !bfinally) + croak("Missing catch/finally blocks"); + return new AST_Try({ + body : body, + bcatch : bcatch, + bfinally : bfinally + }); + }; + + function vardefs(no_in, in_const) { + var a = []; + for (;;) { + a.push(new AST_VarDef({ + start : S.token, + name : as_symbol(in_const ? AST_SymbolConst : AST_SymbolVar), + value : is("operator", "=") ? (next(), expression(false, no_in)) : null, + end : prev() + })); + if (!is("punc", ",")) + break; + next(); + } + return a; + }; + + var var_ = function(no_in) { + return new AST_Var({ + start : prev(), + definitions : vardefs(no_in, false), + end : prev() + }); + }; + + var const_ = function() { + return new AST_Const({ + start : prev(), + definitions : vardefs(false, true), + end : prev() + }); + }; + + var new_ = function(allow_calls) { + var start = S.token; + expect_token("operator", "new"); + var newexp = expr_atom(false), args; + if (is("punc", "(")) { + next(); + args = expr_list(")"); + } else { + args = []; + } + return subscripts(new AST_New({ + start : start, + expression : newexp, + args : args, + end : prev() + }), allow_calls); + }; + + function as_atom_node() { + var tok = S.token, ret; + switch (tok.type) { + case "name": + case "keyword": + ret = _make_symbol(AST_SymbolRef); + break; + case "num": + ret = new AST_Number({ start: tok, end: tok, value: tok.value }); + break; + case "string": + ret = new AST_String({ + start : tok, + end : tok, + value : tok.value, + quote : tok.quote + }); + break; + case "regexp": + ret = new AST_RegExp({ start: tok, end: tok, value: tok.value }); + break; + case "atom": + switch (tok.value) { + case "false": + ret = new AST_False({ start: tok, end: tok }); + break; + case "true": + ret = new AST_True({ start: tok, end: tok }); + break; + case "null": + ret = new AST_Null({ start: tok, end: tok }); + break; + } + break; + case "operator": + if (!is_identifier_string(tok.value)) { + croak("Invalid getter/setter name: " + tok.value, + tok.line, tok.col, tok.pos); + } + ret = _make_symbol(AST_SymbolRef); + break; + } + next(); + return ret; + }; + + var expr_atom = function(allow_calls) { + if (is("operator", "new")) { + return new_(allow_calls); + } + var start = S.token; + if (is("punc")) { + switch (start.value) { + case "(": + next(); + var ex = expression(true); + ex.start = start; + ex.end = S.token; + expect(")"); + return subscripts(ex, allow_calls); + case "[": + return subscripts(array_(), allow_calls); + case "{": + return subscripts(object_(), allow_calls); + } + unexpected(); + } + if (is("keyword", "function")) { + next(); + var func = function_(AST_Function); + func.start = start; + func.end = prev(); + return subscripts(func, allow_calls); + } + if (ATOMIC_START_TOKEN[S.token.type]) { + return subscripts(as_atom_node(), allow_calls); + } + unexpected(); + }; + + function expr_list(closing, allow_trailing_comma, allow_empty) { + var first = true, a = []; + while (!is("punc", closing)) { + if (first) first = false; else expect(","); + if (allow_trailing_comma && is("punc", closing)) break; + if (is("punc", ",") && allow_empty) { + a.push(new AST_Hole({ start: S.token, end: S.token })); + } else { + a.push(expression(false)); + } + } + next(); + return a; + }; + + var array_ = embed_tokens(function() { + expect("["); + return new AST_Array({ + elements: expr_list("]", !options.strict, true) + }); + }); + + var create_accessor = embed_tokens(function() { + return function_(AST_Accessor); + }); + + var object_ = embed_tokens(function() { + expect("{"); + var first = true, a = []; + while (!is("punc", "}")) { + if (first) first = false; else expect(","); + if (!options.strict && is("punc", "}")) + // allow trailing comma + break; + var start = S.token; + var type = start.type; + var name = as_property_name(); + if (type == "name" && !is("punc", ":")) { + var key = new AST_SymbolAccessor({ + start: S.token, + name: as_property_name(), + end: prev() + }); + if (name == "get") { + a.push(new AST_ObjectGetter({ + start : start, + key : key, + value : create_accessor(), + end : prev() + })); + continue; + } + if (name == "set") { + a.push(new AST_ObjectSetter({ + start : start, + key : key, + value : create_accessor(), + end : prev() + })); + continue; + } + } + expect(":"); + a.push(new AST_ObjectKeyVal({ + start : start, + quote : start.quote, + key : name, + value : expression(false), + end : prev() + })); + } + next(); + return new AST_Object({ properties: a }); + }); + + function as_property_name() { + var tmp = S.token; + switch (tmp.type) { + case "operator": + if (!KEYWORDS(tmp.value)) unexpected(); + case "num": + case "string": + case "name": + case "keyword": + case "atom": + next(); + return tmp.value; + default: + unexpected(); + } + }; + + function as_name() { + var tmp = S.token; + if (tmp.type != "name") unexpected(); + next(); + return tmp.value; + }; + + function _make_symbol(type) { + var name = S.token.value; + return new (name == "this" ? AST_This : type)({ + name : String(name), + start : S.token, + end : S.token + }); + }; + + function as_symbol(type, noerror) { + if (!is("name")) { + if (!noerror) croak("Name expected"); + return null; + } + var sym = _make_symbol(type); + next(); + return sym; + }; + + var subscripts = function(expr, allow_calls) { + var start = expr.start; + if (is("punc", ".")) { + next(); + return subscripts(new AST_Dot({ + start : start, + expression : expr, + property : as_name(), + end : prev() + }), allow_calls); + } + if (is("punc", "[")) { + next(); + var prop = expression(true); + expect("]"); + return subscripts(new AST_Sub({ + start : start, + expression : expr, + property : prop, + end : prev() + }), allow_calls); + } + if (allow_calls && is("punc", "(")) { + next(); + return subscripts(new AST_Call({ + start : start, + expression : expr, + args : expr_list(")"), + end : prev() + }), true); + } + return expr; + }; + + var maybe_unary = function(allow_calls) { + var start = S.token; + if (is("operator") && UNARY_PREFIX(start.value)) { + next(); + handle_regexp(); + var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(allow_calls)); + ex.start = start; + ex.end = prev(); + return ex; + } + var val = expr_atom(allow_calls); + while (is("operator") && UNARY_POSTFIX(S.token.value) && !S.token.nlb) { + val = make_unary(AST_UnaryPostfix, S.token, val); + val.start = start; + val.end = S.token; + next(); + } + return val; + }; + + function make_unary(ctor, token, expr) { + var op = token.value; + if ((op == "++" || op == "--") && !is_assignable(expr)) + croak("Invalid use of " + op + " operator", token.line, token.col, token.pos); + return new ctor({ operator: op, expression: expr }); + }; + + var expr_op = function(left, min_prec, no_in) { + var op = is("operator") ? S.token.value : null; + if (op == "in" && no_in) op = null; + var prec = op != null ? PRECEDENCE[op] : null; + if (prec != null && prec > min_prec) { + next(); + var right = expr_op(maybe_unary(true), prec, no_in); + return expr_op(new AST_Binary({ + start : left.start, + left : left, + operator : op, + right : right, + end : right.end + }), min_prec, no_in); + } + return left; + }; + + function expr_ops(no_in) { + return expr_op(maybe_unary(true), 0, no_in); + }; + + var maybe_conditional = function(no_in) { + var start = S.token; + var expr = expr_ops(no_in); + if (is("operator", "?")) { + next(); + var yes = expression(false); + expect(":"); + return new AST_Conditional({ + start : start, + condition : expr, + consequent : yes, + alternative : expression(false, no_in), + end : prev() + }); + } + return expr; + }; + + function is_assignable(expr) { + if (options.cli) return true; + return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef; + }; + + var maybe_assign = function(no_in) { + var start = S.token; + var left = maybe_conditional(no_in), val = S.token.value; + if (is("operator") && ASSIGNMENT(val)) { + if (is_assignable(left)) { + next(); + return new AST_Assign({ + start : start, + left : left, + operator : val, + right : maybe_assign(no_in), + end : prev() + }); + } + croak("Invalid assignment"); + } + return left; + }; + + var expression = function(commas, no_in) { + var start = S.token; + var expr = maybe_assign(no_in); + if (commas && is("punc", ",")) { + next(); + return new AST_Seq({ + start : start, + car : expr, + cdr : expression(true, no_in), + end : peek() + }); + } + return expr; + }; + + function in_loop(cont) { + ++S.in_loop; + var ret = cont(); + --S.in_loop; + return ret; + }; + + if (options.expression) { + return expression(true); + } + + return (function(){ + var start = S.token; + var body = []; + S.input.push_directives_stack(); + while (!is("eof")) + body.push(statement()); + S.input.pop_directives_stack(); + var end = prev(); + var toplevel = options.toplevel; + if (toplevel) { + toplevel.body = toplevel.body.concat(body); + toplevel.end = end; + } else { + toplevel = new AST_Toplevel({ start: start, body: body, end: end }); + } + return toplevel; + })(); + +}; diff --git a/node_modules/uglify-js/lib/propmangle.js b/node_modules/uglify-js/lib/propmangle.js new file mode 100644 index 000000000..b62229903 --- /dev/null +++ b/node_modules/uglify-js/lib/propmangle.js @@ -0,0 +1,264 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS2 + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + 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 HOLDER “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 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"; + +function find_builtins() { + // NaN will be included due to Number.NaN + var a = [ + "null", + "true", + "false", + "Infinity", + "-Infinity", + "undefined", + ]; + [ Object, Array, Function, Number, + String, Boolean, Error, Math, + Date, RegExp + ].forEach(function(ctor){ + Object.getOwnPropertyNames(ctor).map(add); + if (ctor.prototype) { + Object.getOwnPropertyNames(ctor.prototype).map(add); + } + }); + function add(name) { + push_uniq(a, name); + } + return a; +} + +function mangle_properties(ast, options) { + options = defaults(options, { + cache: null, + debug: false, + ignore_quoted: false, + only_cache: false, + regex: null, + reserved: null, + }); + + var reserved = options.reserved; + if (reserved == null) + reserved = find_builtins(); + + var cache = options.cache; + if (cache == null) { + cache = { + cname: -1, + props: new Dictionary() + }; + } + + var regex = options.regex; + var ignore_quoted = options.ignore_quoted; + + // note debug is either false (disabled), or a string of the debug suffix to use (enabled). + // note debug may be enabled as an empty string, which is falsey. Also treat passing 'true' + // the same as passing an empty string. + var debug = (options.debug !== false); + var debug_name_suffix; + if (debug) { + debug_name_suffix = (options.debug === true ? "" : options.debug); + } + + var names_to_mangle = []; + var unmangleable = []; + var ignored = {}; + + // step 1: find candidates to mangle + ast.walk(new TreeWalker(function(node){ + if (node instanceof AST_ObjectKeyVal) { + add(node.key, ignore_quoted && node.quote); + } + else if (node instanceof AST_ObjectProperty) { + // setter or getter, since KeyVal is handled above + add(node.key.name); + } + else if (node instanceof AST_Dot) { + add(node.property); + } + else if (node instanceof AST_Sub) { + addStrings(node.property, ignore_quoted); + } + })); + + // step 2: transform the tree, renaming properties + return ast.transform(new TreeTransformer(function(node){ + if (node instanceof AST_ObjectKeyVal) { + if (!(ignore_quoted && node.quote)) + node.key = mangle(node.key); + } + else if (node instanceof AST_ObjectProperty) { + // setter or getter + node.key.name = mangle(node.key.name); + } + else if (node instanceof AST_Dot) { + node.property = mangle(node.property); + } + else if (node instanceof AST_Sub) { + if (!ignore_quoted) + node.property = mangleStrings(node.property); + } + // else if (node instanceof AST_String) { + // if (should_mangle(node.value)) { + // AST_Node.warn( + // "Found \"{prop}\" property candidate for mangling in an arbitrary string [{file}:{line},{col}]", { + // file : node.start.file, + // line : node.start.line, + // col : node.start.col, + // prop : node.value + // } + // ); + // } + // } + })); + + // only function declarations after this line + + function can_mangle(name) { + if (unmangleable.indexOf(name) >= 0) return false; + if (reserved.indexOf(name) >= 0) return false; + if (options.only_cache) { + return cache.props.has(name); + } + if (/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false; + return true; + } + + function should_mangle(name) { + if (ignore_quoted && name in ignored) return false; + if (regex && !regex.test(name)) return false; + if (reserved.indexOf(name) >= 0) return false; + return cache.props.has(name) + || names_to_mangle.indexOf(name) >= 0; + } + + function add(name, ignore) { + if (ignore) { + ignored[name] = true; + return; + } + + if (can_mangle(name)) + push_uniq(names_to_mangle, name); + + if (!should_mangle(name)) { + push_uniq(unmangleable, name); + } + } + + function mangle(name) { + if (!should_mangle(name)) { + return name; + } + + var mangled = cache.props.get(name); + if (!mangled) { + if (debug) { + // debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_. + var debug_mangled = "_$" + name + "$" + debug_name_suffix + "_"; + + if (can_mangle(debug_mangled) && !(ignore_quoted && debug_mangled in ignored)) { + mangled = debug_mangled; + } + } + + // either debug mode is off, or it is on and we could not use the mangled name + if (!mangled) { + // note can_mangle() does not check if the name collides with the 'ignored' set + // (filled with quoted properties when ignore_quoted set). Make sure we add this + // check so we don't collide with a quoted name. + do { + mangled = base54(++cache.cname); + } while (!can_mangle(mangled) || (ignore_quoted && mangled in ignored)); + } + + cache.props.set(name, mangled); + } + return mangled; + } + + function addStrings(node, ignore) { + var out = {}; + try { + (function walk(node){ + node.walk(new TreeWalker(function(node){ + if (node instanceof AST_Seq) { + walk(node.cdr); + return true; + } + if (node instanceof AST_String) { + add(node.value, ignore); + return true; + } + if (node instanceof AST_Conditional) { + walk(node.consequent); + walk(node.alternative); + return true; + } + throw out; + })); + })(node); + } catch(ex) { + if (ex !== out) throw ex; + } + } + + function mangleStrings(node) { + return node.transform(new TreeTransformer(function(node){ + if (node instanceof AST_Seq) { + node.cdr = mangleStrings(node.cdr); + } + else if (node instanceof AST_String) { + node.value = mangle(node.value); + } + else if (node instanceof AST_Conditional) { + node.consequent = mangleStrings(node.consequent); + node.alternative = mangleStrings(node.alternative); + } + return node; + })); + } + +} diff --git a/node_modules/uglify-js/lib/scope.js b/node_modules/uglify-js/lib/scope.js new file mode 100644 index 000000000..bf6dbcbbf --- /dev/null +++ b/node_modules/uglify-js/lib/scope.js @@ -0,0 +1,656 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS2 + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + 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 HOLDER “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 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"; + +function SymbolDef(scope, index, orig) { + this.name = orig.name; + this.orig = [ orig ]; + this.scope = scope; + this.references = []; + this.global = false; + this.mangled_name = null; + this.undeclared = false; + this.index = index; + this.id = SymbolDef.next_id++; +}; + +SymbolDef.next_id = 1; + +SymbolDef.prototype = { + unmangleable: function(options) { + if (!options) options = {}; + + return (this.global && !options.toplevel) + || this.undeclared + || (!options.eval && (this.scope.uses_eval || this.scope.uses_with)) + || (options.keep_fnames + && (this.orig[0] instanceof AST_SymbolLambda + || this.orig[0] instanceof AST_SymbolDefun)); + }, + mangle: function(options) { + var cache = options.cache && options.cache.props; + if (this.global && cache && cache.has(this.name)) { + this.mangled_name = cache.get(this.name); + } + else if (!this.mangled_name && !this.unmangleable(options)) { + var s = this.scope; + var sym = this.orig[0]; + if (!options.screw_ie8 && sym instanceof AST_SymbolLambda) + s = s.parent_scope; + var def; + if (this.defun && (def = this.defun.variables.get(this.name))) { + this.mangled_name = def.mangled_name || def.name; + } else + this.mangled_name = s.next_mangled(options, this); + if (this.global && cache) { + cache.set(this.name, this.mangled_name); + } + } + } +}; + +AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ + options = defaults(options, { + cache: null, + screw_ie8: true, + }); + + // pass 1: setup scope chaining and handle definitions + var self = this; + var scope = self.parent_scope = null; + var labels = new Dictionary(); + var defun = null; + var tw = new TreeWalker(function(node, descend){ + if (node instanceof AST_Catch) { + var save_scope = scope; + scope = new AST_Scope(node); + scope.init_scope_vars(save_scope); + descend(); + scope = save_scope; + return true; + } + if (node instanceof AST_Scope) { + node.init_scope_vars(scope); + var save_scope = scope; + var save_defun = defun; + var save_labels = labels; + defun = scope = node; + labels = new Dictionary(); + descend(); + scope = save_scope; + defun = save_defun; + labels = save_labels; + return true; // don't descend again in TreeWalker + } + if (node instanceof AST_LabeledStatement) { + var l = node.label; + if (labels.has(l.name)) { + throw new Error(string_template("Label {name} defined twice", l)); + } + labels.set(l.name, l); + descend(); + labels.del(l.name); + return true; // no descend again + } + if (node instanceof AST_With) { + for (var s = scope; s; s = s.parent_scope) + s.uses_with = true; + return; + } + if (node instanceof AST_Symbol) { + node.scope = scope; + } + if (node instanceof AST_Label) { + node.thedef = node; + node.references = []; + } + if (node instanceof AST_SymbolLambda) { + defun.def_function(node); + } + else if (node instanceof AST_SymbolDefun) { + // Careful here, the scope where this should be defined is + // the parent scope. The reason is that we enter a new + // scope when we encounter the AST_Defun node (which is + // instanceof AST_Scope) but we get to the symbol a bit + // later. + (node.scope = defun.parent_scope).def_function(node); + } + else if (node instanceof AST_SymbolVar + || node instanceof AST_SymbolConst) { + defun.def_variable(node); + if (defun !== scope) { + node.mark_enclosed(options); + var def = scope.find_variable(node); + if (node.thedef !== def) { + node.thedef = def; + node.reference(options); + } + } + } + else if (node instanceof AST_SymbolCatch) { + scope.def_variable(node).defun = defun; + } + else if (node instanceof AST_LabelRef) { + var sym = labels.get(node.name); + if (!sym) throw new Error(string_template("Undefined label {name} [{line},{col}]", { + name: node.name, + line: node.start.line, + col: node.start.col + })); + node.thedef = sym; + } + }); + self.walk(tw); + + // pass 2: find back references and eval + var func = null; + var globals = self.globals = new Dictionary(); + var tw = new TreeWalker(function(node, descend){ + if (node instanceof AST_Lambda) { + var prev_func = func; + func = node; + descend(); + func = prev_func; + return true; + } + if (node instanceof AST_LoopControl && node.label) { + node.label.thedef.references.push(node); + return true; + } + if (node instanceof AST_SymbolRef) { + var name = node.name; + if (name == "eval" && tw.parent() instanceof AST_Call) { + for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) { + s.uses_eval = true; + } + } + var sym = node.scope.find_variable(name); + if (node.scope instanceof AST_Lambda && name == "arguments") { + node.scope.uses_arguments = true; + } + if (!sym) { + sym = self.def_global(node); + } + node.thedef = sym; + node.reference(options); + return true; + } + }); + self.walk(tw); + + // pass 3: fix up any scoping issue with IE8 + if (!options.screw_ie8) { + self.walk(new TreeWalker(function(node, descend) { + if (node instanceof AST_SymbolCatch) { + var name = node.name; + var refs = node.thedef.references; + var scope = node.thedef.defun; + var def = scope.find_variable(name) || self.globals.get(name) || scope.def_variable(node); + refs.forEach(function(ref) { + ref.thedef = def; + ref.reference(options); + }); + node.thedef = def; + return true; + } + })); + } + + if (options.cache) { + this.cname = options.cache.cname; + } +}); + +AST_Toplevel.DEFMETHOD("def_global", function(node){ + var globals = this.globals, name = node.name; + if (globals.has(name)) { + return globals.get(name); + } else { + var g = new SymbolDef(this, globals.size(), node); + g.undeclared = true; + g.global = true; + globals.set(name, g); + return g; + } +}); + +AST_Scope.DEFMETHOD("init_scope_vars", function(parent_scope){ + this.variables = new Dictionary(); // map name to AST_SymbolVar (variables defined in this scope; includes functions) + this.functions = new Dictionary(); // map name to AST_SymbolDefun (functions defined in this scope) + this.uses_with = false; // will be set to true if this or some nested scope uses the `with` statement + this.uses_eval = false; // will be set to true if this or nested scope uses the global `eval` + this.parent_scope = parent_scope; // the parent scope + this.enclosed = []; // a list of variables from this or outer scope(s) that are referenced from this or inner scopes + this.cname = -1; // the current index for mangling functions/variables +}); + +AST_Lambda.DEFMETHOD("init_scope_vars", function(){ + AST_Scope.prototype.init_scope_vars.apply(this, arguments); + this.uses_arguments = false; + this.def_variable(new AST_SymbolVar({ + name: "arguments", + start: this.start, + end: this.end + })); +}); + +AST_Symbol.DEFMETHOD("mark_enclosed", function(options) { + var def = this.definition(); + var s = this.scope; + while (s) { + push_uniq(s.enclosed, def); + if (options.keep_fnames) { + s.functions.each(function(d) { + push_uniq(def.scope.enclosed, d); + }); + } + if (s === def.scope) break; + s = s.parent_scope; + } +}); + +AST_Symbol.DEFMETHOD("reference", function(options) { + this.definition().references.push(this); + this.mark_enclosed(options); +}); + +AST_Scope.DEFMETHOD("find_variable", function(name){ + if (name instanceof AST_Symbol) name = name.name; + return this.variables.get(name) + || (this.parent_scope && this.parent_scope.find_variable(name)); +}); + +AST_Scope.DEFMETHOD("def_function", function(symbol){ + this.functions.set(symbol.name, this.def_variable(symbol)); +}); + +AST_Scope.DEFMETHOD("def_variable", function(symbol){ + var def; + if (!this.variables.has(symbol.name)) { + def = new SymbolDef(this, this.variables.size(), symbol); + this.variables.set(symbol.name, def); + def.global = !this.parent_scope; + } else { + def = this.variables.get(symbol.name); + def.orig.push(symbol); + } + return symbol.thedef = def; +}); + +AST_Scope.DEFMETHOD("next_mangled", function(options){ + var ext = this.enclosed; + out: while (true) { + var m = base54(++this.cname); + if (!is_identifier(m)) continue; // skip over "do" + + // https://github.com/mishoo/UglifyJS2/issues/242 -- do not + // shadow a name excepted from mangling. + if (options.except.indexOf(m) >= 0) continue; + + // we must ensure that the mangled name does not shadow a name + // from some parent scope that is referenced in this or in + // inner scopes. + for (var i = ext.length; --i >= 0;) { + var sym = ext[i]; + var name = sym.mangled_name || (sym.unmangleable(options) && sym.name); + if (m == name) continue out; + } + return m; + } +}); + +AST_Function.DEFMETHOD("next_mangled", function(options, def){ + // #179, #326 + // in Safari strict mode, something like (function x(x){...}) is a syntax error; + // a function expression's argument cannot shadow the function expression's name + + var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition(); + + // the function's mangled_name is null when keep_fnames is true + var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null; + + while (true) { + var name = AST_Lambda.prototype.next_mangled.call(this, options, def); + if (!tricky_name || tricky_name != name) + return name; + } +}); + +AST_Symbol.DEFMETHOD("unmangleable", function(options){ + return this.definition().unmangleable(options); +}); + +// labels are always mangleable +AST_Label.DEFMETHOD("unmangleable", function(){ + return false; +}); + +AST_Symbol.DEFMETHOD("unreferenced", function(){ + return this.definition().references.length == 0 + && !(this.scope.uses_eval || this.scope.uses_with); +}); + +AST_Symbol.DEFMETHOD("undeclared", function(){ + return this.definition().undeclared; +}); + +AST_LabelRef.DEFMETHOD("undeclared", function(){ + return false; +}); + +AST_Label.DEFMETHOD("undeclared", function(){ + return false; +}); + +AST_Symbol.DEFMETHOD("definition", function(){ + return this.thedef; +}); + +AST_Symbol.DEFMETHOD("global", function(){ + return this.definition().global; +}); + +AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){ + return defaults(options, { + eval : false, + except : [], + keep_fnames : false, + screw_ie8 : true, + sort : false, // Ignored. Flag retained for backwards compatibility. + toplevel : false, + }); +}); + +AST_Toplevel.DEFMETHOD("mangle_names", function(options){ + options = this._default_mangler_options(options); + + // Never mangle arguments + options.except.push('arguments'); + + // We only need to mangle declaration nodes. Special logic wired + // into the code generator will display the mangled name if it's + // present (and for AST_SymbolRef-s it'll use the mangled name of + // the AST_SymbolDeclaration that it points to). + var lname = -1; + var to_mangle = []; + + if (options.cache) { + this.globals.each(function(symbol){ + if (options.except.indexOf(symbol.name) < 0) { + to_mangle.push(symbol); + } + }); + } + + var tw = new TreeWalker(function(node, descend){ + if (node instanceof AST_LabeledStatement) { + // lname is incremented when we get to the AST_Label + var save_nesting = lname; + descend(); + lname = save_nesting; + return true; // don't descend again in TreeWalker + } + if (node instanceof AST_Scope) { + var p = tw.parent(), a = []; + node.variables.each(function(symbol){ + if (options.except.indexOf(symbol.name) < 0) { + a.push(symbol); + } + }); + to_mangle.push.apply(to_mangle, a); + return; + } + if (node instanceof AST_Label) { + var name; + do name = base54(++lname); while (!is_identifier(name)); + node.mangled_name = name; + return true; + } + if (options.screw_ie8 && node instanceof AST_SymbolCatch) { + to_mangle.push(node.definition()); + return; + } + }); + this.walk(tw); + to_mangle.forEach(function(def){ def.mangle(options) }); + + if (options.cache) { + options.cache.cname = this.cname; + } +}); + +AST_Toplevel.DEFMETHOD("compute_char_frequency", function(options){ + options = this._default_mangler_options(options); + var tw = new TreeWalker(function(node){ + if (node instanceof AST_Constant) + base54.consider(node.print_to_string()); + else if (node instanceof AST_Return) + base54.consider("return"); + else if (node instanceof AST_Throw) + base54.consider("throw"); + else if (node instanceof AST_Continue) + base54.consider("continue"); + else if (node instanceof AST_Break) + base54.consider("break"); + else if (node instanceof AST_Debugger) + base54.consider("debugger"); + else if (node instanceof AST_Directive) + base54.consider(node.value); + else if (node instanceof AST_While) + base54.consider("while"); + else if (node instanceof AST_Do) + base54.consider("do while"); + else if (node instanceof AST_If) { + base54.consider("if"); + if (node.alternative) base54.consider("else"); + } + else if (node instanceof AST_Var) + base54.consider("var"); + else if (node instanceof AST_Const) + base54.consider("const"); + else if (node instanceof AST_Lambda) + base54.consider("function"); + else if (node instanceof AST_For) + base54.consider("for"); + else if (node instanceof AST_ForIn) + base54.consider("for in"); + else if (node instanceof AST_Switch) + base54.consider("switch"); + else if (node instanceof AST_Case) + base54.consider("case"); + else if (node instanceof AST_Default) + base54.consider("default"); + else if (node instanceof AST_With) + base54.consider("with"); + else if (node instanceof AST_ObjectSetter) + base54.consider("set" + node.key); + else if (node instanceof AST_ObjectGetter) + base54.consider("get" + node.key); + else if (node instanceof AST_ObjectKeyVal) + base54.consider(node.key); + else if (node instanceof AST_New) + base54.consider("new"); + else if (node instanceof AST_This) + base54.consider("this"); + else if (node instanceof AST_Try) + base54.consider("try"); + else if (node instanceof AST_Catch) + base54.consider("catch"); + else if (node instanceof AST_Finally) + base54.consider("finally"); + else if (node instanceof AST_Symbol && node.unmangleable(options)) + base54.consider(node.name); + else if (node instanceof AST_Unary || node instanceof AST_Binary) + base54.consider(node.operator); + else if (node instanceof AST_Dot) + base54.consider(node.property); + }); + this.walk(tw); + base54.sort(); +}); + +var base54 = (function() { + var string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789"; + var chars, frequency; + function reset() { + frequency = Object.create(null); + chars = string.split("").map(function(ch){ return ch.charCodeAt(0) }); + chars.forEach(function(ch){ frequency[ch] = 0 }); + } + base54.consider = function(str){ + for (var i = str.length; --i >= 0;) { + var code = str.charCodeAt(i); + if (code in frequency) ++frequency[code]; + } + }; + base54.sort = function() { + chars = mergeSort(chars, function(a, b){ + if (is_digit(a) && !is_digit(b)) return 1; + if (is_digit(b) && !is_digit(a)) return -1; + return frequency[b] - frequency[a]; + }); + }; + base54.reset = reset; + reset(); + base54.get = function(){ return chars }; + base54.freq = function(){ return frequency }; + function base54(num) { + var ret = "", base = 54; + num++; + do { + num--; + ret += String.fromCharCode(chars[num % base]); + num = Math.floor(num / base); + base = 64; + } while (num > 0); + return ret; + }; + return base54; +})(); + +AST_Toplevel.DEFMETHOD("scope_warnings", function(options){ + options = defaults(options, { + assign_to_global : true, + eval : true, + func_arguments : true, + nested_defuns : true, + undeclared : false, // this makes a lot of noise + unreferenced : true, + }); + var tw = new TreeWalker(function(node){ + if (options.undeclared + && node instanceof AST_SymbolRef + && node.undeclared()) + { + // XXX: this also warns about JS standard names, + // i.e. Object, Array, parseInt etc. Should add a list of + // exceptions. + AST_Node.warn("Undeclared symbol: {name} [{file}:{line},{col}]", { + name: node.name, + file: node.start.file, + line: node.start.line, + col: node.start.col + }); + } + if (options.assign_to_global) + { + var sym = null; + if (node instanceof AST_Assign && node.left instanceof AST_SymbolRef) + sym = node.left; + else if (node instanceof AST_ForIn && node.init instanceof AST_SymbolRef) + sym = node.init; + if (sym + && (sym.undeclared() + || (sym.global() && sym.scope !== sym.definition().scope))) { + AST_Node.warn("{msg}: {name} [{file}:{line},{col}]", { + msg: sym.undeclared() ? "Accidental global?" : "Assignment to global", + name: sym.name, + file: sym.start.file, + line: sym.start.line, + col: sym.start.col + }); + } + } + if (options.eval + && node instanceof AST_SymbolRef + && node.undeclared() + && node.name == "eval") { + AST_Node.warn("Eval is used [{file}:{line},{col}]", node.start); + } + if (options.unreferenced + && (node instanceof AST_SymbolDeclaration || node instanceof AST_Label) + && !(node instanceof AST_SymbolCatch) + && node.unreferenced()) { + AST_Node.warn("{type} {name} is declared but not referenced [{file}:{line},{col}]", { + type: node instanceof AST_Label ? "Label" : "Symbol", + name: node.name, + file: node.start.file, + line: node.start.line, + col: node.start.col + }); + } + if (options.func_arguments + && node instanceof AST_Lambda + && node.uses_arguments) { + AST_Node.warn("arguments used in function {name} [{file}:{line},{col}]", { + name: node.name ? node.name.name : "anonymous", + file: node.start.file, + line: node.start.line, + col: node.start.col + }); + } + if (options.nested_defuns + && node instanceof AST_Defun + && !(tw.parent() instanceof AST_Scope)) { + AST_Node.warn("Function {name} declared in nested statement \"{type}\" [{file}:{line},{col}]", { + name: node.name.name, + type: tw.parent().TYPE, + file: node.start.file, + line: node.start.line, + col: node.start.col + }); + } + }); + this.walk(tw); +}); diff --git a/node_modules/uglify-js/lib/sourcemap.js b/node_modules/uglify-js/lib/sourcemap.js new file mode 100644 index 000000000..0be16bfc7 --- /dev/null +++ b/node_modules/uglify-js/lib/sourcemap.js @@ -0,0 +1,97 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS2 + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + 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 HOLDER “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 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"; + +// a small wrapper around fitzgen's source-map library +function SourceMap(options) { + options = defaults(options, { + file : null, + root : null, + orig : null, + + orig_line_diff : 0, + dest_line_diff : 0, + }); + var generator = new MOZ_SourceMap.SourceMapGenerator({ + file : options.file, + sourceRoot : options.root + }); + var orig_map = options.orig && new MOZ_SourceMap.SourceMapConsumer(options.orig); + + if (orig_map && Array.isArray(options.orig.sources)) { + orig_map._sources.toArray().forEach(function(source) { + var sourceContent = orig_map.sourceContentFor(source, true); + if (sourceContent) { + generator.setSourceContent(source, sourceContent); + } + }); + } + + function add(source, gen_line, gen_col, orig_line, orig_col, name) { + if (orig_map) { + var info = orig_map.originalPositionFor({ + line: orig_line, + column: orig_col + }); + if (info.source === null) { + return; + } + source = info.source; + orig_line = info.line; + orig_col = info.column; + name = info.name || name; + } + generator.addMapping({ + generated : { line: gen_line + options.dest_line_diff, column: gen_col }, + original : { line: orig_line + options.orig_line_diff, column: orig_col }, + source : source, + name : name + }); + }; + return { + add : add, + get : function() { return generator }, + toString : function() { return JSON.stringify(generator.toJSON()); } + }; +}; diff --git a/node_modules/uglify-js/lib/transform.js b/node_modules/uglify-js/lib/transform.js new file mode 100644 index 000000000..3018e8ff0 --- /dev/null +++ b/node_modules/uglify-js/lib/transform.js @@ -0,0 +1,218 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS2 + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + 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 HOLDER “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 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"; + +// Tree transformer helpers. + +function TreeTransformer(before, after) { + TreeWalker.call(this); + this.before = before; + this.after = after; +} +TreeTransformer.prototype = new TreeWalker; + +(function(undefined){ + + function _(node, descend) { + node.DEFMETHOD("transform", function(tw, in_list){ + var x, y; + tw.push(this); + if (tw.before) x = tw.before(this, descend, in_list); + if (x === undefined) { + if (!tw.after) { + x = this; + descend(x, tw); + } else { + tw.stack[tw.stack.length - 1] = x = this; + descend(x, tw); + y = tw.after(x, in_list); + if (y !== undefined) x = y; + } + } + tw.pop(this); + return x; + }); + }; + + function do_list(list, tw) { + return MAP(list, function(node){ + return node.transform(tw, true); + }); + }; + + _(AST_Node, noop); + + _(AST_LabeledStatement, function(self, tw){ + self.label = self.label.transform(tw); + self.body = self.body.transform(tw); + }); + + _(AST_SimpleStatement, function(self, tw){ + self.body = self.body.transform(tw); + }); + + _(AST_Block, function(self, tw){ + self.body = do_list(self.body, tw); + }); + + _(AST_DWLoop, function(self, tw){ + self.condition = self.condition.transform(tw); + self.body = self.body.transform(tw); + }); + + _(AST_For, function(self, tw){ + if (self.init) self.init = self.init.transform(tw); + if (self.condition) self.condition = self.condition.transform(tw); + if (self.step) self.step = self.step.transform(tw); + self.body = self.body.transform(tw); + }); + + _(AST_ForIn, function(self, tw){ + self.init = self.init.transform(tw); + self.object = self.object.transform(tw); + self.body = self.body.transform(tw); + }); + + _(AST_With, function(self, tw){ + self.expression = self.expression.transform(tw); + self.body = self.body.transform(tw); + }); + + _(AST_Exit, function(self, tw){ + if (self.value) self.value = self.value.transform(tw); + }); + + _(AST_LoopControl, function(self, tw){ + if (self.label) self.label = self.label.transform(tw); + }); + + _(AST_If, function(self, tw){ + self.condition = self.condition.transform(tw); + self.body = self.body.transform(tw); + if (self.alternative) self.alternative = self.alternative.transform(tw); + }); + + _(AST_Switch, function(self, tw){ + self.expression = self.expression.transform(tw); + self.body = do_list(self.body, tw); + }); + + _(AST_Case, function(self, tw){ + self.expression = self.expression.transform(tw); + self.body = do_list(self.body, tw); + }); + + _(AST_Try, function(self, tw){ + self.body = do_list(self.body, tw); + if (self.bcatch) self.bcatch = self.bcatch.transform(tw); + if (self.bfinally) self.bfinally = self.bfinally.transform(tw); + }); + + _(AST_Catch, function(self, tw){ + self.argname = self.argname.transform(tw); + self.body = do_list(self.body, tw); + }); + + _(AST_Definitions, function(self, tw){ + self.definitions = do_list(self.definitions, tw); + }); + + _(AST_VarDef, function(self, tw){ + self.name = self.name.transform(tw); + if (self.value) self.value = self.value.transform(tw); + }); + + _(AST_Lambda, function(self, tw){ + if (self.name) self.name = self.name.transform(tw); + self.argnames = do_list(self.argnames, tw); + self.body = do_list(self.body, tw); + }); + + _(AST_Call, function(self, tw){ + self.expression = self.expression.transform(tw); + self.args = do_list(self.args, tw); + }); + + _(AST_Seq, function(self, tw){ + self.car = self.car.transform(tw); + self.cdr = self.cdr.transform(tw); + }); + + _(AST_Dot, function(self, tw){ + self.expression = self.expression.transform(tw); + }); + + _(AST_Sub, function(self, tw){ + self.expression = self.expression.transform(tw); + self.property = self.property.transform(tw); + }); + + _(AST_Unary, function(self, tw){ + self.expression = self.expression.transform(tw); + }); + + _(AST_Binary, function(self, tw){ + self.left = self.left.transform(tw); + self.right = self.right.transform(tw); + }); + + _(AST_Conditional, function(self, tw){ + self.condition = self.condition.transform(tw); + self.consequent = self.consequent.transform(tw); + self.alternative = self.alternative.transform(tw); + }); + + _(AST_Array, function(self, tw){ + self.elements = do_list(self.elements, tw); + }); + + _(AST_Object, function(self, tw){ + self.properties = do_list(self.properties, tw); + }); + + _(AST_ObjectProperty, function(self, tw){ + self.value = self.value.transform(tw); + }); + +})(); diff --git a/node_modules/uglify-js/lib/utils.js b/node_modules/uglify-js/lib/utils.js new file mode 100644 index 000000000..fdb204719 --- /dev/null +++ b/node_modules/uglify-js/lib/utils.js @@ -0,0 +1,362 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS2 + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + 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 HOLDER “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 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"; + +function array_to_hash(a) { + var ret = Object.create(null); + for (var i = 0; i < a.length; ++i) + ret[a[i]] = true; + return ret; +}; + +function slice(a, start) { + return Array.prototype.slice.call(a, start || 0); +}; + +function characters(str) { + return str.split(""); +}; + +function member(name, array) { + return array.indexOf(name) >= 0; +}; + +function find_if(func, array) { + for (var i = 0, n = array.length; i < n; ++i) { + if (func(array[i])) + return array[i]; + } +}; + +function repeat_string(str, i) { + if (i <= 0) return ""; + if (i == 1) return str; + var d = repeat_string(str, i >> 1); + d += d; + if (i & 1) d += str; + return d; +}; + +function configure_error_stack(fn) { + Object.defineProperty(fn.prototype, "stack", { + get: function() { + var err = new Error(this.message); + err.name = this.name; + try { + throw err; + } catch(e) { + return e.stack; + } + } + }); +} + +function DefaultsError(msg, defs) { + this.message = msg; + this.defs = defs; +}; +DefaultsError.prototype = Object.create(Error.prototype); +DefaultsError.prototype.constructor = DefaultsError; +DefaultsError.prototype.name = "DefaultsError"; +configure_error_stack(DefaultsError); + +DefaultsError.croak = function(msg, defs) { + throw new DefaultsError(msg, defs); +}; + +function defaults(args, defs, croak) { + if (args === true) + args = {}; + var ret = args || {}; + if (croak) for (var i in ret) if (HOP(ret, i) && !HOP(defs, i)) + DefaultsError.croak("`" + i + "` is not a supported option", defs); + for (var i in defs) if (HOP(defs, i)) { + ret[i] = (args && HOP(args, i)) ? args[i] : defs[i]; + } + return ret; +}; + +function merge(obj, ext) { + var count = 0; + for (var i in ext) if (HOP(ext, i)) { + obj[i] = ext[i]; + count++; + } + return count; +}; + +function noop() {} +function return_false() { return false; } +function return_true() { return true; } +function return_this() { return this; } +function return_null() { return null; } + +var MAP = (function(){ + function MAP(a, f, backwards) { + var ret = [], top = [], i; + function doit() { + var val = f(a[i], i); + var is_last = val instanceof Last; + if (is_last) val = val.v; + if (val instanceof AtTop) { + val = val.v; + if (val instanceof Splice) { + top.push.apply(top, backwards ? val.v.slice().reverse() : val.v); + } else { + top.push(val); + } + } + else if (val !== skip) { + if (val instanceof Splice) { + ret.push.apply(ret, backwards ? val.v.slice().reverse() : val.v); + } else { + ret.push(val); + } + } + return is_last; + }; + if (a instanceof Array) { + if (backwards) { + for (i = a.length; --i >= 0;) if (doit()) break; + ret.reverse(); + top.reverse(); + } else { + for (i = 0; i < a.length; ++i) if (doit()) break; + } + } + else { + for (i in a) if (HOP(a, i)) if (doit()) break; + } + return top.concat(ret); + }; + MAP.at_top = function(val) { return new AtTop(val) }; + MAP.splice = function(val) { return new Splice(val) }; + MAP.last = function(val) { return new Last(val) }; + var skip = MAP.skip = {}; + function AtTop(val) { this.v = val }; + function Splice(val) { this.v = val }; + function Last(val) { this.v = val }; + return MAP; +})(); + +function push_uniq(array, el) { + if (array.indexOf(el) < 0) + array.push(el); +}; + +function string_template(text, props) { + return text.replace(/\{(.+?)\}/g, function(str, p){ + return props && props[p]; + }); +}; + +function remove(array, el) { + for (var i = array.length; --i >= 0;) { + if (array[i] === el) array.splice(i, 1); + } +}; + +function mergeSort(array, cmp) { + if (array.length < 2) return array.slice(); + function merge(a, b) { + var r = [], ai = 0, bi = 0, i = 0; + while (ai < a.length && bi < b.length) { + cmp(a[ai], b[bi]) <= 0 + ? r[i++] = a[ai++] + : r[i++] = b[bi++]; + } + if (ai < a.length) r.push.apply(r, a.slice(ai)); + if (bi < b.length) r.push.apply(r, b.slice(bi)); + return r; + }; + function _ms(a) { + if (a.length <= 1) + return a; + var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m); + left = _ms(left); + right = _ms(right); + return merge(left, right); + }; + return _ms(array); +}; + +function set_difference(a, b) { + return a.filter(function(el){ + return b.indexOf(el) < 0; + }); +}; + +function set_intersection(a, b) { + return a.filter(function(el){ + return b.indexOf(el) >= 0; + }); +}; + +// this function is taken from Acorn [1], written by Marijn Haverbeke +// [1] https://github.com/marijnh/acorn +function makePredicate(words) { + if (!(words instanceof Array)) words = words.split(" "); + var f = "", cats = []; + out: for (var i = 0; i < words.length; ++i) { + for (var j = 0; j < cats.length; ++j) + if (cats[j][0].length == words[i].length) { + cats[j].push(words[i]); + continue out; + } + cats.push([words[i]]); + } + function quote(word) { + return JSON.stringify(word).replace(/[\u2028\u2029]/g, function(s) { + switch (s) { + case "\u2028": return "\\u2028"; + case "\u2029": return "\\u2029"; + } + return s; + }); + } + function compareTo(arr) { + if (arr.length == 1) return f += "return str === " + quote(arr[0]) + ";"; + f += "switch(str){"; + for (var i = 0; i < arr.length; ++i) f += "case " + quote(arr[i]) + ":"; + f += "return true}return false;"; + } + // When there are more than three length categories, an outer + // switch first dispatches on the lengths, to save on comparisons. + if (cats.length > 3) { + cats.sort(function(a, b) {return b.length - a.length;}); + f += "switch(str.length){"; + for (var i = 0; i < cats.length; ++i) { + var cat = cats[i]; + f += "case " + cat[0].length + ":"; + compareTo(cat); + } + f += "}"; + // Otherwise, simply generate a flat `switch` statement. + } else { + compareTo(words); + } + return new Function("str", f); +}; + +function all(array, predicate) { + for (var i = array.length; --i >= 0;) + if (!predicate(array[i])) + return false; + return true; +}; + +function Dictionary() { + this._values = Object.create(null); + this._size = 0; +}; +Dictionary.prototype = { + set: function(key, val) { + if (!this.has(key)) ++this._size; + this._values["$" + key] = val; + return this; + }, + add: function(key, val) { + if (this.has(key)) { + this.get(key).push(val); + } else { + this.set(key, [ val ]); + } + return this; + }, + get: function(key) { return this._values["$" + key] }, + del: function(key) { + if (this.has(key)) { + --this._size; + delete this._values["$" + key]; + } + return this; + }, + has: function(key) { return ("$" + key) in this._values }, + each: function(f) { + for (var i in this._values) + f(this._values[i], i.substr(1)); + }, + size: function() { + return this._size; + }, + map: function(f) { + var ret = []; + for (var i in this._values) + ret.push(f(this._values[i], i.substr(1))); + return ret; + }, + toObject: function() { return this._values } +}; +Dictionary.fromObject = function(obj) { + var dict = new Dictionary(); + dict._size = merge(dict._values, obj); + return dict; +}; + +function HOP(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +// return true if the node at the top of the stack (that means the +// innermost node in the current output) is lexically the first in +// a statement. +function first_in_statement(stack) { + var node = stack.parent(-1); + for (var i = 0, p; p = stack.parent(i); i++) { + if (p instanceof AST_Statement && p.body === node) + return true; + if ((p instanceof AST_Seq && p.car === node ) || + (p instanceof AST_Call && p.expression === node && !(p instanceof AST_New) ) || + (p instanceof AST_Dot && p.expression === node ) || + (p instanceof AST_Sub && p.expression === node ) || + (p instanceof AST_Conditional && p.condition === node ) || + (p instanceof AST_Binary && p.left === node ) || + (p instanceof AST_UnaryPostfix && p.expression === node )) + { + node = p; + } else { + return false; + } + } +} diff --git a/node_modules/uglify-js/node_modules/yargs/CHANGELOG.md b/node_modules/uglify-js/node_modules/yargs/CHANGELOG.md new file mode 100644 index 000000000..9c3607831 --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/CHANGELOG.md @@ -0,0 +1,374 @@ +## Change Log + +### v3.10.0 (2015/05/29 04:25 +00:00) + +- [#165](https://github.com/bcoe/yargs/pull/165) expose yargs.terminalWidth() thanks @ensonic (@bcoe) +- [#164](https://github.com/bcoe/yargs/pull/164) better array handling thanks @getify (@bcoe) + +### v3.9.1 (2015/05/20 05:14 +00:00) +- [b6662b6](https://github.com/bcoe/yargs/commit/b6662b6774cfeab4876f41ec5e2f67b7698f4e2f) clarify .config() docs (@linclark) +- [0291360](https://github.com/bcoe/yargs/commit/02913606285ce31ce81d7f12c48d8a3029776ec7) fixed tests, switched to nyc for coverage, fixed security issue, added Lin as collaborator (@bcoe) + +### v3.9.0 (2015/05/10 18:32 +00:00) +- [#157](https://github.com/bcoe/yargs/pull/157) Merge pull request #157 from bcoe/command-yargs. allows handling of command specific arguments. Thanks for the suggestion @ohjames (@bcoe) +- [#158](https://github.com/bcoe/yargs/pull/158) Merge pull request #158 from kemitchell/spdx-license. Update license format (@kemitchell) + +### v3.8.0 (2015/04/24 23:10 +00:00) +- [#154](https://github.com/bcoe/yargs/pull/154) showHelp's method signature was misleading fixes #153 (@bcoe) +- [#151](https://github.com/bcoe/yargs/pull/151) refactor yargs' table layout logic to use new helper library (@bcoe) +- [#150](https://github.com/bcoe/yargs/pull/150) Fix README example in argument requirements (@annonymouse) + +### v3.7.2 (2015/04/13 11:52 -07:00) + +* [679fbbf](https://github.com/bcoe/yargs/commit/679fbbf55904030ccee8a2635e8e5f46551ab2f0) updated yargs to use the [standard](https://github.com/feross/standard) style guide (agokjr) +* [22382ee](https://github.com/bcoe/yargs/commit/22382ee9f5b495bc2586c1758cd1091cec3647f9 various bug fixes for $0 (@nylen) + +### v3.7.1 (2015/04/10 11:06 -07:00) + +* [89e1992](https://github.com/bcoe/yargs/commit/89e1992a004ba73609b5f9ee6890c4060857aba4) detect iojs bin along with node bin. (@bcoe) +* [755509e](https://github.com/bcoe/yargs/commit/755509ea90041e5f7833bba3b8c5deffe56f0aab) improvements to example documentation in README.md (@rstacruz) +* [0d2dfc8](https://github.com/bcoe/yargs/commit/0d2dfc822a43418242908ad97ddd5291a1b35dc6) showHelp() no longer requires that .argv has been called (@bcoe) + +### v3.7.0 (2015/04/04 02:29 -07:00) + +* [56cbe2d](https://github.com/bcoe/yargs/commit/56cbe2ddd33dc176dcbf97ba40559864a9f114e4) make .requiresArg() work with type hints. (@bcoe). +* [2f5d562](https://github.com/bcoe/yargs/commit/2f5d5624f736741deeedf6a664d57bc4d857bdd0) serialize arrays and objects in usage strings. (@bcoe). +* [5126304](https://github.com/bcoe/yargs/commit/5126304dd18351fc28f10530616fdd9361e0af98) be more lenient about alias/primary key ordering in chaining API. (@bcoe) + +### v3.6.0 (2015/03/21 01:00 +00:00) +- [4e24e22](https://github.com/bcoe/yargs/commit/4e24e22e6a195e55ab943ede704a0231ac33b99c) support for .js configuration files. (@pirxpilot) + +### v3.5.4 (2015/03/12 05:56 +00:00) +- [c16cc08](https://github.com/bcoe/yargs/commit/c16cc085501155cf7fd853ccdf8584b05ab92b78) message for non-option arguments is now optional, thanks to (@raine) + +### v3.5.3 (2015/03/09 06:14 +00:00) +- [870b428](https://github.com/bcoe/yargs/commit/870b428cf515d560926ca392555b7ad57dba9e3d) completion script was missing in package.json (@bcoe) + +### v3.5.2 (2015/03/09 06:11 +00:00) +- [58a4b24](https://github.com/bcoe/yargs/commit/58a4b2473ebbb326713d522be53e32d3aabb08d2) parse was being called multiple times, resulting in strange behavior (@bcoe) + +### v3.5.1 (2015/03/09 04:55 +00:00) +- [4e588e0](https://github.com/bcoe/yargs/commit/4e588e055afbeb9336533095f051496e3977f515) accidentally left testing logic in (@bcoe) + +### v3.5.0 (2015/03/09 04:49 +00:00) +- [718bacd](https://github.com/bcoe/yargs/commit/718bacd81b9b44f786af76b2afe491fe06274f19) added support for bash completions see #4 (@bcoe) +- [a192882](https://github.com/bcoe/yargs/commit/a19288270fc431396c42af01125eeb4443664528) downgrade to mocha 2.1.0 until https://github.com/mochajs/mocha/issues/1585 can be sorted out (@bcoe) + +### v3.4.7 (2015/03/09 04:09 +00:00) +- [9845e5c](https://github.com/bcoe/yargs/commit/9845e5c1a9c684ba0be3f0bfb40e7b62ab49d9c8) the Argv singleton was not being updated when manually parsing arguments, fixes #114 (@bcoe) + +### v3.4.6 (2015/03/09 04:01 +00:00) +- [45b4c80](https://github.com/bcoe/yargs/commit/45b4c80b890d02770b0a94f326695a8a566e8fe9) set placeholders for all keys fixes #115 (@bcoe) + +### v3.4.5 (2015/03/01 20:31 +00:00) +- [a758e0b](https://github.com/bcoe/yargs/commit/a758e0b2556184f067cf3d9c4ef886d39817ebd2) fix for count consuming too many arguments (@bcoe) + +### v3.4.4 (2015/02/28 04:52 +00:00) +- [0476af7](https://github.com/bcoe/yargs/commit/0476af757966acf980d998b45108221d4888cfcb) added nargs feature, allowing you to specify the number of arguments after an option (@bcoe) +- [092477d](https://github.com/bcoe/yargs/commit/092477d7ab3efbf0ba11cede57f7d8cfc70b024f) updated README with full example of v3.0 API (@bcoe) + +### v3.3.3 (2015/02/28 04:23 +00:00) +- [0c4b769](https://github.com/bcoe/yargs/commit/0c4b769516cd8d93a7c4e5e675628ae0049aa9a8) remove string dependency, which conflicted with other libraries see #106 (@bcoe) + +### v3.3.2 (2015/02/28 04:11 +00:00) +- [2a98906](https://github.com/bcoe/yargs/commit/2a9890675821c0e7a12f146ce008b0562cb8ec9a) add $0 to epilog (@schnittstabil) + +### v3.3.1 (2015/02/24 03:28 +00:00) +- [ad485ce](https://github.com/bcoe/yargs/commit/ad485ce748ebdfce25b88ef9d6e83d97a2f68987) fix for applying defaults to camel-case args (@bcoe) + +### v3.3.0 (2015/02/24 00:49 +00:00) +- [8bfe36d](https://github.com/bcoe/yargs/commit/8bfe36d7fb0f93a799ea3f4c756a7467c320f8c0) fix and document restart() command, as a tool for building nested CLIs (@bcoe) + +### v3.2.1 (2015/02/22 05:45 +00:00) +- [49a6d18](https://github.com/bcoe/yargs/commit/49a6d1822a4ef9b1ea6f90cc366be60912628885) you can now provide a function that generates a default value (@bcoe) + +### v3.2.0 (2015/02/22 05:24 +00:00) +- [7a55886](https://github.com/bcoe/yargs/commit/7a55886c9343cf71a20744ca5cdd56d2ea7412d5) improvements to yargs two-column text layout (@bcoe) +- [b6ab513](https://github.com/bcoe/yargs/commit/b6ab5136a4c3fa6aa496f6b6360382e403183989) Tweak NPM version badge (@nylen) + +### v3.1.0 (2015/02/19 19:37 +00:00) +- [9bd2379](https://github.com/bcoe/yargs/commit/9bd237921cf1b61fd9f32c0e6d23f572fc225861) version now accepts a function, making it easy to load version #s from a package.json (@bcoe) + +### v3.0.4 (2015/02/14 01:40 +00:00) +- [0b7c19b](https://github.com/bcoe/yargs/commit/0b7c19beaecb747267ca4cc10e5cb2a8550bc4b7) various fixes for dot-notation handling (@bcoe) + +### v3.0.3 (2015/02/14 00:59 +00:00) +- [c3f35e9](https://github.com/bcoe/yargs/commit/c3f35e99bd5a0d278073fcadd95e2d778616cc17) make sure dot-notation is applied to aliases (@bcoe) + +### 3.0.2 (2015/02/13 16:50 +00:00) +- [74c8967](https://github.com/bcoe/yargs/commit/74c8967c340c204a0a7edf8a702b6f46c2705435) document epilog shorthand of epilogue. (@bcoe) +- [670110f](https://github.com/bcoe/yargs/commit/670110fc01bedc4831b6fec6afac54517d5a71bc) any non-truthy value now causes check to fail see #76 (@bcoe) +- [0d8f791](https://github.com/bcoe/yargs/commit/0d8f791a33c11ced4cd431ea8d3d3a337d456b56) finished implementing my wish-list of fetures for yargs 3.0. see #88 (@bcoe) +- [5768447](https://github.com/bcoe/yargs/commit/5768447447c4c8e8304f178846206ce86540f063) fix coverage. (@bcoe) +- [82e793f](https://github.com/bcoe/yargs/commit/82e793f3f61c41259eaacb67f0796aea2cf2aaa0) detect console width and perform word-wrapping. (@bcoe) +- [67476b3](https://github.com/bcoe/yargs/commit/67476b37eea07fee55f23f35b9e0c7d76682b86d) refactor two-column table layout so that we can use it for examples and usage (@bcoe) +- [4724cdf](https://github.com/bcoe/yargs/commit/4724cdfcc8e37ae1ca3dcce9d762f476e9ef4bb4) major refactor of index.js, in prep for 3.x release. (@bcoe) + +### v2.3.0 (2015/02/08 20:41 +00:00) +- [d824620](https://github.com/bcoe/yargs/commit/d824620493df4e63664af1fe320764dd1a9244e6) allow for undefined boolean defaults (@ashi009) + +### v2.2.0 (2015/02/08 20:07 +00:00) +- [d6edd98](https://github.com/bcoe/yargs/commit/d6edd9848826e7389ed1393858c45d03961365fd) in-prep for further refactoring, and a 3.x release I've shuffled some things around and gotten test-coverage to 100%. (@bcoe) + +### v2.1.2 (2015/02/08 06:05 +00:00) +- [d640745](https://github.com/bcoe/yargs/commit/d640745a7b9f8d476e0223879d056d18d9c265c4) switch to path.relative (@bcoe) +- [3bfd41f](https://github.com/bcoe/yargs/commit/3bfd41ff262a041f29d828b88936a79c63cad594) remove mocha.opts. (@bcoe) +- [47a2f35](https://github.com/bcoe/yargs/commit/47a2f357091db70903a402d6765501c1d63f15fe) document using .string('_') for string ids. see #56 (@bcoe) +- [#57](https://github.com/bcoe/yargs/pull/57) Merge pull request #57 from eush77/option-readme (@eush77) + +### v2.1.1 (2015/02/06 08:08 +00:00) +- [01c6c61](https://github.com/bcoe/yargs/commit/01c6c61d67b4ebf88f41f0b32a345ec67f0ac17d) fix for #71, 'newAliases' of undefined (@bcoe) + +### v2.1.0 (2015/02/06 07:59 +00:00) +- [6a1a3fa](https://github.com/bcoe/yargs/commit/6a1a3fa731958e26ccd56885f183dd8985cc828f) try to guess argument types, and apply sensible defaults see #73 (@bcoe) + +### v2.0.1 (2015/02/06 07:54 +00:00) +- [96a06b2](https://github.com/bcoe/yargs/commit/96a06b2650ff1d085a52b7328d8bba614c20cc12) Fix for strange behavior with --sort option, see #51 (@bcoe) + +### v2.0.0 (2015/02/06 07:45 +00:00) +- [0250517](https://github.com/bcoe/yargs/commit/0250517c9643e53f431b824e8ccfa54937414011) - [108fb84](https://github.com/bcoe/yargs/commit/108fb8409a3a63dcaf99d917fe4dfcfaa1de236d) fixed bug with boolean parsing, when bools separated by = see #66 (@bcoe) +- [a465a59](https://github.com/bcoe/yargs/commit/a465a5915f912715738de890982e4f8395958b10) Add `files` field to the package.json (@shinnn) +- [31043de](https://github.com/bcoe/yargs/commit/31043de7a38a17c4c97711f1099f5fb164334db3) fix for yargs.argv having the same keys added multiple times see #63 (@bcoe) +- [2d68c5b](https://github.com/bcoe/yargs/commit/2d68c5b91c976431001c4863ce47c9297850f1ad) Disable process.exit calls using .exitProcess(false) (@cianclarke) +- [45da9ec](https://github.com/bcoe/yargs/commit/45da9ec4c55a7bd394721bc6a1db0dabad7bc52a) Mention .option in README (@eush77) + +### v1.3.2 (2014/10/06 21:56 +00:00) +- [b8d3472](https://github.com/bcoe/yargs/commit/b8d34725482e5821a3cc809c0df71378f282f526) 1.3.2 (@chevex) + +### list (2014/08/30 18:41 +00:00) +- [fbc777f](https://github.com/bcoe/yargs/commit/fbc777f416eeefd37c84e44d27d7dfc7c1925721) Now that yargs is the successor to optimist, I'm changing the README language to be more universal. Pirate speak isn't very accessible to non-native speakers. (@chevex) +- [a54d068](https://github.com/bcoe/yargs/commit/a54d0682ae2efc2394d407ab171cc8a8bbd135ea) version output will not print extra newline (@boneskull) +- [1cef5d6](https://github.com/bcoe/yargs/commit/1cef5d62a9d6d61a3948a49574892e01932cc6ae) Added contributors section to package.json (@chrisn) +- [cc295c0](https://github.com/bcoe/yargs/commit/cc295c0a80a2de267e0155b60d315fc4b6f7c709) Added 'require' and 'required' as synonyms for 'demand' (@chrisn) +- [d0bf951](https://github.com/bcoe/yargs/commit/d0bf951d949066b6280101ed606593d079ee15c8) Updating minimist. (@chevex) +- [c15f8e7](https://github.com/bcoe/yargs/commit/c15f8e7f245b261e542cf205ce4f4313630cbdb4) Fix #31 (bad interaction between camelCase options and strict mode) (@nylen) +- [d991b9b](https://github.com/bcoe/yargs/commit/d991b9be687a68812dee1e3b185ba64b7778b82d) Added .help() and .version() methods (@chrisn) +- [e8c8aa4](https://github.com/bcoe/yargs/commit/e8c8aa46268379357cb11e9fc34b8c403037724b) Added .showHelpOnFail() method (@chrisn) +- [e855af4](https://github.com/bcoe/yargs/commit/e855af4a933ea966b5bbdd3c4c6397a4bac1a053) Allow boolean flag with .demand() (@chrisn) +- [14dbec2](https://github.com/bcoe/yargs/commit/14dbec24fb7380683198e2b20c4deb8423e64bea) Fixes issue #22. Arguments are no longer printed to the console when using .config. (@chevex) +- [bef74fc](https://github.com/bcoe/yargs/commit/bef74fcddc1544598a804f80d0a3728459f196bf) Informing users that Yargs is the official optimist successor. (@chevex) +- [#24](https://github.com/bcoe/yargs/pull/24) Merge pull request #24 from chrisn/strict (@chrisn) +- [889a2b2](https://github.com/bcoe/yargs/commit/889a2b28eb9768801b05163360a470d0fd6c8b79) Added requiresArg option, for options that require values (@chrisn) +- [eb16369](https://github.com/bcoe/yargs/commit/eb163692262be1fe80b992fd8803d5923c5a9b18) Added .strict() method, to report error if unknown arguments are given (@chrisn) +- [0471c3f](https://github.com/bcoe/yargs/commit/0471c3fd999e1ad4e6cded88b8aa02013b66d14f) Changed optimist to yargs in usage-options.js example (@chrisn) +- [5c88f74](https://github.com/bcoe/yargs/commit/5c88f74e3cf031b17c54b4b6606c83e485ff520e) Change optimist to yargs in examples (@chrisn) +- [66f12c8](https://github.com/bcoe/yargs/commit/66f12c82ba3c943e4de8ca862980e835da8ecb3a) Fix a couple of bad interactions between aliases and defaults (@nylen) +- [8fa1d80](https://github.com/bcoe/yargs/commit/8fa1d80f14b03eb1f2898863a61f1d1615bceb50) Document second argument of usage(message, opts) (@Gobie) +- [56e6528](https://github.com/bcoe/yargs/commit/56e6528cf674ff70d63083fb044ff240f608448e) For "--some-option", also set argv.someOption (@nylen) +- [ed5f6d3](https://github.com/bcoe/yargs/commit/ed5f6d33f57ad1086b11c91b51100f7c6c7fa8ee) Finished porting unit tests to Mocha. (@chevex) + +### v1.0.15 (2014/02/05 23:18 +00:00) +- [e2b1fc0](https://github.com/bcoe/yargs/commit/e2b1fc0c4a59cf532ae9b01b275e1ef57eeb64d2) 1.0.15 update to badges (@chevex) + +### v1.0.14 (2014/02/05 23:17 +00:00) +- [f33bbb0](https://github.com/bcoe/yargs/commit/f33bbb0f00fe18960f849cc8e15a7428a4cd59b8) Revert "Fixed issue which caused .demand function not to work correctly." (@chevex) + +### v1.0.13 (2014/02/05 22:13 +00:00) +- [6509e5e](https://github.com/bcoe/yargs/commit/6509e5e7dee6ef1a1f60eea104be0faa1a045075) Fixed issue which caused .demand function not to work correctly. (@chevex) + +### v1.0.12 (2013/12/13 00:09 +00:00) +- [05eb267](https://github.com/bcoe/yargs/commit/05eb26741c9ce446b33ff006e5d33221f53eaceb) 1.0.12 (@chevex) + +### v1.0.11 (2013/12/13 00:07 +00:00) +- [c1bde46](https://github.com/bcoe/yargs/commit/c1bde46e37318a68b87d17a50c130c861d6ce4a9) 1.0.11 (@chevex) + +### v1.0.10 (2013/12/12 23:57 +00:00) +- [dfebf81](https://github.com/bcoe/yargs/commit/dfebf8164c25c650701528ee581ca483a99dc21c) Fixed formatting in README (@chevex) + +### v1.0.9 (2013/12/12 23:47 +00:00) +- [0b4e34a](https://github.com/bcoe/yargs/commit/0b4e34af5e6d84a9dbb3bb6d02cd87588031c182) Update README.md (@chevex) + +### v1.0.8 (2013/12/06 16:36 +00:00) +- [#1](https://github.com/bcoe/yargs/pull/1) fix error caused by check() see #1 (@martinheidegger) + +### v1.0.7 (2013/11/24 18:01 +00:00) +- [a247d88](https://github.com/bcoe/yargs/commit/a247d88d6e46644cbb7303c18b1bb678fc132d72) Modified Pirate Joe image. (@chevex) + +### v1.0.6 (2013/11/23 19:21 +00:00) +- [d7f69e1](https://github.com/bcoe/yargs/commit/d7f69e1d34bc929736a8bdccdc724583e21b7eab) Updated Pirate Joe image. (@chevex) + +### v1.0.5 (2013/11/23 19:09 +00:00) +- [ece809c](https://github.com/bcoe/yargs/commit/ece809cf317cc659175e1d66d87f3ca68c2760be) Updated readme notice again. (@chevex) + +### v1.0.4 (2013/11/23 19:05 +00:00) +- [9e81e81](https://github.com/bcoe/yargs/commit/9e81e81654028f83ba86ffc3ac772a0476084e5e) Updated README with a notice about yargs being a fork of optimist and what that implies. (@chevex) + +### v1.0.3 (2013/11/23 17:43 +00:00) +- [65e7a78](https://github.com/bcoe/yargs/commit/65e7a782c86764944d63d084416aba9ee6019c5f) Changed some small wording in README.md. (@chevex) +- [459e20e](https://github.com/bcoe/yargs/commit/459e20e539b366b85128dd281ccd42221e96c7da) Fix a bug in the options function, when string and boolean options weren't applied to aliases. (@shockone) + +### v1.0.2 (2013/11/23 09:46 +00:00) +- [3d80ebe](https://github.com/bcoe/yargs/commit/3d80ebed866d3799224b6f7d596247186a3898a9) 1.0.2 (@chevex) + +### v1.0.1 (2013/11/23 09:39 +00:00) +- [f80ff36](https://github.com/bcoe/yargs/commit/f80ff3642d580d4b68bf9f5a94277481bd027142) Updated image. (@chevex) + +### v1.0.0 (2013/11/23 09:33 +00:00) +- [54e31d5](https://github.com/bcoe/yargs/commit/54e31d505f820b80af13644e460894b320bf25a3) Rebranded from optimist to yargs in the spirit of the fork :D (@chevex) +- [4ebb6c5](https://github.com/bcoe/yargs/commit/4ebb6c59f44787db7c24c5b8fe2680f01a23f498) Added documentation for demandCount(). (@chevex) +- [4561ce6](https://github.com/bcoe/yargs/commit/4561ce66dcffa95f49e8b4449b25b94cd68acb25) Simplified the error messages returned by .check(). (@chevex) +- [661c678](https://github.com/bcoe/yargs/commit/661c67886f479b16254a830b7e1db3be29e6b7a6) Fixed an issue with demand not accepting a zero value. (@chevex) +- [731dd3c](https://github.com/bcoe/yargs/commit/731dd3c37624790490bd6df4d5f1da8f4348279e) Add .fail(fn) so death isn't the only option. Should fix issue #39. (@chevex) +- [fa15417](https://github.com/bcoe/yargs/commit/fa15417ff9e70dace0d726627a5818654824c1d8) Added a few missing 'return self' (@chevex) +- [e655e4d](https://github.com/bcoe/yargs/commit/e655e4d99d1ae1d3695ef755d51c2de08d669761) Fix showing help in certain JS environments. (@chevex) +- [a746a31](https://github.com/bcoe/yargs/commit/a746a31cd47c87327028e6ea33762d6187ec5c87) Better string representation of default values. (@chevex) +- [6134619](https://github.com/bcoe/yargs/commit/6134619a7e90b911d5443230b644c5d447c1a68c) Implies: conditional demands (@chevex) +- [046b93b](https://github.com/bcoe/yargs/commit/046b93b5d40a27367af4cb29726e4d781d934639) Added support for JSON config files. (@chevex) +- [a677ec0](https://github.com/bcoe/yargs/commit/a677ec0a0ecccd99c75e571d03323f950688da03) Add .example(cmd, desc) feature. (@chevex) +- [1bd4375](https://github.com/bcoe/yargs/commit/1bd4375e11327ba1687d4bb6e5e9f3c30c1be2af) Added 'defaults' as alias to 'default' so as to avoid usage of a reserved keyword. (@chevex) +- [6b753c1](https://github.com/bcoe/yargs/commit/6b753c16ca09e723060e70b773b430323b29c45c) add .normalize(args..) support for normalizing paths (@chevex) +- [33d7d59](https://github.com/bcoe/yargs/commit/33d7d59341d364f03d3a25f0a55cb99004dbbe4b) Customize error messages with demand(key, msg) (@chevex) +- [647d37f](https://github.com/bcoe/yargs/commit/647d37f164c20f4bafbf67dd9db6cd6e2cd3b49f) Merge branch 'rewrite-duplicate-test' of github.com:isbadawi/node-optimist (@chevex) +- [9059d1a](https://github.com/bcoe/yargs/commit/9059d1ad5e8aea686c2a01c89a23efdf929fff2e) Pass aliases object to check functions for greater versatility. (@chevex) +- [623dc26](https://github.com/bcoe/yargs/commit/623dc26c7331abff2465ef8532e3418996d42fe6) Added ability to count boolean options and rolled minimist library back into project. (@chevex) +- [49f0dce](https://github.com/bcoe/yargs/commit/49f0dcef35de4db544c3966350d36eb5838703f6) Fixed small typo. (@chevex) +- [79ec980](https://github.com/bcoe/yargs/commit/79ec9806d9ca6eb0014cfa4b6d1849f4f004baf2) Removed dependency on wordwrap module. (@chevex) +- [ea14630](https://github.com/bcoe/yargs/commit/ea14630feddd69d1de99dd8c0e08948f4c91f00a) Merge branch 'master' of github.com:chbrown/node-optimist (@chevex) +- [2b75da2](https://github.com/bcoe/yargs/commit/2b75da2624061e0f4f3107d20303c06ec9054906) Merge branch 'master' of github.com:seanzhou1023/node-optimist (@chevex) +- [d9bda11](https://github.com/bcoe/yargs/commit/d9bda1116e26f3b40e833ca9ca19263afea53565) Merge branch 'patch-1' of github.com:thefourtheye/node-optimist (@chevex) +- [d6cc606](https://github.com/bcoe/yargs/commit/d6cc6064a4f1bea38a16a4430b8a1334832fbeff) Renamed README. (@chevex) +- [9498d3f](https://github.com/bcoe/yargs/commit/9498d3f59acfb5e102826503e681623c3a64b178) Renamed readme and added .gitignore. (@chevex) +- [bbd1fe3](https://github.com/bcoe/yargs/commit/bbd1fe37fefa366dde0fb3dc44d91fe8b28f57f5) Included examples for ```help``` and ```showHelp``` functions and fixed few formatting issues (@thefourtheye) +- [37fea04](https://github.com/bcoe/yargs/commit/37fea0470a5796a0294c1dcfff68d8041650e622) .alias({}) behaves differently based on mapping direction when generating descriptions (@chbrown) +- [855b20d](https://github.com/bcoe/yargs/commit/855b20d0be567ca121d06b30bea64001b74f3d6d) Documented function signatures are useful for dynamically typed languages. (@chbrown) + +### 0.6.0 (2013/06/25 08:48 +00:00) +- [d37bfe0](https://github.com/bcoe/yargs/commit/d37bfe05ae6d295a0ab481efe4881222412791f4) all tests passing using minimist (@substack) +- [76f1352](https://github.com/bcoe/yargs/commit/76f135270399d01f2bbc621e524a5966e5c422fd) all parse tests now passing (@substack) +- [a7b6754](https://github.com/bcoe/yargs/commit/a7b6754276c38d1565479a5685c3781aeb947816) using minimist, some tests passing (@substack) +- [6655688](https://github.com/bcoe/yargs/commit/66556882aa731cbbbe16cc4d42c85740a2e98099) Give credit where its due (@DeadAlready) +- [602a2a9](https://github.com/bcoe/yargs/commit/602a2a92a459f93704794ad51b115bbb08b535ce) v0.5.3 - Remove wordwrap as dependency (@DeadAlready) + +### 0.5.2 (2013/05/31 03:46 +00:00) +- [4497ca5](https://github.com/bcoe/yargs/commit/4497ca55e332760a37b866ec119ded347ca27a87) fixed the whitespace bug without breaking anything else (@substack) +- [5a3dd1a](https://github.com/bcoe/yargs/commit/5a3dd1a4e0211a38613c6e02f61328e1031953fa) failing test for whitespace arg (@substack) + +### 0.5.1 (2013/05/30 07:17 +00:00) +- [a20228f](https://github.com/bcoe/yargs/commit/a20228f62a454755dd07f628a7c5759113918327) fix parse() to work with functions before it (@substack) +- [b13bd4c](https://github.com/bcoe/yargs/commit/b13bd4cac856a9821d42fa173bdb58f089365a7d) failing test for parse() with modifiers (@substack) + +### 0.5.0 (2013/05/18 21:59 +00:00) +- [c474a64](https://github.com/bcoe/yargs/commit/c474a649231527915c222156e3b40806d365a87c) fixes for dash (@substack) + +### 0.4.0 (2013/04/13 19:03 +00:00) +- [dafe3e1](https://github.com/bcoe/yargs/commit/dafe3e18d7c6e7c2d68e06559df0e5cbea3adb14) failing short test (@substack) + +### 0.3.7 (2013/04/04 04:07 +00:00) +- [6c7a0ec](https://github.com/bcoe/yargs/commit/6c7a0ec94ce4199a505f0518b4d6635d4e47cc81) Fix for windows. On windows there is no _ in environment. (@hdf) + +### 0.3.6 (2013/04/04 04:04 +00:00) +- [e72346a](https://github.com/bcoe/yargs/commit/e72346a727b7267af5aa008b418db89970873f05) Add support for newlines in -a="" arguments (@danielbeardsley) +- [71e1fb5](https://github.com/bcoe/yargs/commit/71e1fb55ea9987110a669ac6ec12338cfff3821c) drop 0.4, add 0.8 to travis (@substack) + +### 0.3.5 (2012/10/10 11:09 +00:00) +- [ee692b3](https://github.com/bcoe/yargs/commit/ee692b37554c70a0bb16389a50a26b66745cbbea) Fix parsing booleans (@vojtajina) +- [5045122](https://github.com/bcoe/yargs/commit/5045122664c3f5b4805addf1be2148d5856f7ce8) set $0 properly in the tests (@substack) + +### 0.3.4 (2012/04/30 06:54 +00:00) +- [f28c0e6](https://github.com/bcoe/yargs/commit/f28c0e62ca94f6e0bb2e6d82fc3d91a55e69b903) bump for string "true" params (@substack) +- [8f44aeb](https://github.com/bcoe/yargs/commit/8f44aeb74121ddd689580e2bf74ef86a605e9bf2) Fix failing test for aliased booleans. (@coderarity) +- [b9f7b61](https://github.com/bcoe/yargs/commit/b9f7b613b1e68e11e6c23fbda9e555a517dcc976) Add failing test for short aliased booleans. (@coderarity) + +### 0.3.3 (2012/04/30 06:45 +00:00) +- [541bac8](https://github.com/bcoe/yargs/commit/541bac8dd787a5f1a5d28f6d8deb1627871705e7) Fixes #37. + +### 0.3.2 (2012/04/12 20:28 +00:00) +- [3a0f014](https://github.com/bcoe/yargs/commit/3a0f014c1451280ac1c9caa1f639d31675586eec) travis badge (@substack) +- [4fb60bf](https://github.com/bcoe/yargs/commit/4fb60bf17845f4ce3293f8ca49c9a1a7c736cfce) Fix boolean aliases. (@coderarity) +- [f14dda5](https://github.com/bcoe/yargs/commit/f14dda546efc4fe06ace04d36919bfbb7634f79b) Adjusted package.json to use tap (@jfhbrook) +- [88e5d32](https://github.com/bcoe/yargs/commit/88e5d32295be6e544c8d355ff84e355af38a1c74) test/usage.js no longer hangs (@jfhbrook) +- [e1e740c](https://github.com/bcoe/yargs/commit/e1e740c27082f3ce84deca2093d9db2ef735d0e5) two tests for combined boolean/alias opts parsing (@jfhbrook) + +### 0.3.1 (2011/12/31 08:44 +00:00) +- [d09b719](https://github.com/bcoe/yargs/commit/d09b71980ef711b6cf3918cd19beec8257e40e82) If "default" is set to false it was not passed on, fixed. (@wolframkriesing) + +### 0.3.0 (2011/12/09 06:03 +00:00) +- [6e74aa7](https://github.com/bcoe/yargs/commit/6e74aa7b46a65773e20c0cb68d2d336d4a0d553d) bump and documented dot notation (@substack) + +### 0.2.7 (2011/10/20 02:25 +00:00) +- [94adee2](https://github.com/bcoe/yargs/commit/94adee20e17b58d0836f80e8b9cdbe9813800916) argv._ can be told 'Hey! argv._! Don't be messing with my args.', and it WILL obey (@colinta) +- [c46fdd5](https://github.com/bcoe/yargs/commit/c46fdd56a05410ae4a1e724a4820c82e77ff5469) optimistic critter image (@substack) +- [5c95c73](https://github.com/bcoe/yargs/commit/5c95c73aedf4c7482bd423e10c545e86d7c8a125) alias options() to option() (@substack) +- [f7692ea](https://github.com/bcoe/yargs/commit/f7692ea8da342850af819367833abb685fde41d8) [fix] Fix for parsing boolean edge case (@indexzero) +- [d1f92d1](https://github.com/bcoe/yargs/commit/d1f92d1425bd7f356055e78621b30cdf9741a3c2) +- [b01bda8](https://github.com/bcoe/yargs/commit/b01bda8d86e455bbf74ce497864cb8ab5b9fb847) [fix test] Update to ensure optimist is aware of default booleans. Associated tests included (@indexzero) +- [aa753e7](https://github.com/bcoe/yargs/commit/aa753e7c54fb3a12f513769a0ff6d54aa0f63943) [dist test] Update devDependencies in package.json. Update test pathing to be more npm and require.paths future-proof (@indexzero) +- [7bfce2f](https://github.com/bcoe/yargs/commit/7bfce2f3b3c98e6539e7549d35fbabced7e9341e) s/sys/util/ (@substack) +- [d420a7a](https://github.com/bcoe/yargs/commit/d420a7a9c890d2cdb11acfaf3ea3f43bc3e39f41) update usage output (@substack) +- [cf86eed](https://github.com/bcoe/yargs/commit/cf86eede2e5fc7495b6ec15e6d137d9ac814f075) some sage readme protips about parsing rules (@substack) +- [5da9f7a](https://github.com/bcoe/yargs/commit/5da9f7a5c0e1758ec7c5801fb3e94d3f6e970513) documented all the methods finally (@substack) +- [8ca6879](https://github.com/bcoe/yargs/commit/8ca6879311224b25933642987300f6a29de5c21b) fenced syntax highlighting (@substack) +- [b72bacf](https://github.com/bcoe/yargs/commit/b72bacf1d02594778c1935405bc8137eb61761dc) right-alignment of wrapped extra params (@substack) +- [2b980bf](https://github.com/bcoe/yargs/commit/2b980bf2656b4ee8fc5134dc5f56a48855c35198) now with .wrap() (@substack) +- [d614f63](https://github.com/bcoe/yargs/commit/d614f639654057d1b7e35e3f5a306e88ec2ad1e4) don't show 'Options:' when there aren't any (@substack) +- [691eda3](https://github.com/bcoe/yargs/commit/691eda354df97b5a86168317abcbcaabdc08a0fb) failing test for multi-aliasing (@substack) +- [0826c9f](https://github.com/bcoe/yargs/commit/0826c9f462109feab2bc7a99346d22e72bf774b7) "Options:" > "options:" (@substack) +- [72f7490](https://github.com/bcoe/yargs/commit/72f749025d01b7f295738ed370a669d885fbada0) [minor] Update formatting for `.showHelp()` (@indexzero) +- [75aecce](https://github.com/bcoe/yargs/commit/75aeccea74329094072f95800e02c275e7d999aa) options works again, too lazy to write a proper test right now (@substack) +- [f742e54](https://github.com/bcoe/yargs/commit/f742e5439817c662dc3bd8734ddd6467e6018cfd) line_count_options example, which breaks (@substack) +- [4ca06b8](https://github.com/bcoe/yargs/commit/4ca06b8b4ea99b5d5714b315a2a8576bee6e5537) line count example (@substack) +- [eeb8423](https://github.com/bcoe/yargs/commit/eeb8423e0a5ecc9dc3eb1e6df9f3f8c1c88f920b) remove self.argv setting in boolean (@substack) +- [6903412](https://github.com/bcoe/yargs/commit/69034126804660af9cc20ea7f4457b50338ee3d7) removed camel case for now (@substack) +- [5a0d88b](https://github.com/bcoe/yargs/commit/5a0d88bf23e9fa79635dd034e2a1aa992acc83cd) remove dead longest checking code (@substack) +- [d782170](https://github.com/bcoe/yargs/commit/d782170babf7284b1aa34f5350df0dd49c373fa8) .help() too (@substack) +- [622ec17](https://github.com/bcoe/yargs/commit/622ec17379bb5374fdbb190404c82bc600975791) rm old help generator (@substack) +- [7c8baac](https://github.com/bcoe/yargs/commit/7c8baac4d66195e9f5158503ea9ebfb61153dab7) nub keys (@substack) +- [8197785](https://github.com/bcoe/yargs/commit/8197785ad4762465084485b041abd722f69bf344) generate help message based on the previous calls, todo: nub (@substack) +- [3ffbdc3](https://github.com/bcoe/yargs/commit/3ffbdc33c8f5e83d4ea2ac60575ce119570c7ede) stub out new showHelp, better checks (@substack) +- [d4e21f5](https://github.com/bcoe/yargs/commit/d4e21f56a4830f7de841900d3c79756fb9886184) let .options() take single options too (@substack) +- [3c4cf29](https://github.com/bcoe/yargs/commit/3c4cf2901a29bac119cca8e983028d8669230ec6) .options() is now heaps simpler (@substack) +- [89f0d04](https://github.com/bcoe/yargs/commit/89f0d043cbccd302f10ab30c2069e05d2bf817c9) defaults work again, all tests pass (@substack) +- [dd87333](https://github.com/bcoe/yargs/commit/dd8733365423006a6e4156372ebb55f98323af58) update test error messages, down to 2 failing tests (@substack) +- [53f7bc6](https://github.com/bcoe/yargs/commit/53f7bc626b9875f2abdfc5dd7a80bde7f14143a3) fix for bools doubling up, passes the parse test again, others fail (@substack) +- [2213e2d](https://github.com/bcoe/yargs/commit/2213e2ddc7263226fba717fb041dc3fde9bc2ee4) refactored for an argv getter, failing several tests (@substack) +- [d1e7379](https://github.com/bcoe/yargs/commit/d1e737970f15c6c006bebdd8917706827ff2f0f2) just rescan for now, alias test passes (@substack) +- [b2f8c99](https://github.com/bcoe/yargs/commit/b2f8c99cc477a8eb0fdf4cf178e1785b63185cfd) failing alias test (@substack) +- [d0c0174](https://github.com/bcoe/yargs/commit/d0c0174daa144bfb6dc7290fdc448c393c475e15) .alias() (@substack) +- [d85f431](https://github.com/bcoe/yargs/commit/d85f431ad7d07b058af3f2a57daa51495576c164) [api] Remove `.describe()` in favor of building upon the existing `.usage()` API (@indexzero) +- [edbd527](https://github.com/bcoe/yargs/commit/edbd5272a8e213e71acd802782135c7f9699913a) [doc api] Add `.describe()`, `.options()`, and `.showHelp()` methods along with example. (@indexzero) +- [be4902f](https://github.com/bcoe/yargs/commit/be4902ff0961ae8feb9093f2c0a4066463ded2cf) updates for coffee since it now does argv the node way (@substack) +- [e24cb23](https://github.com/bcoe/yargs/commit/e24cb23798ee64e53b60815e7fda78b87f42390c) more general coffeescript detection (@substack) +- [78ac753](https://github.com/bcoe/yargs/commit/78ac753e5d0ec32a96d39d893272afe989e42a4d) Don't trigger the CoffeeScript hack when running under node_g. (@papandreou) +- [bcfe973](https://github.com/bcoe/yargs/commit/bcfe9731d7f90d4632281b8a52e8d76eb0195ae6) .string() but failing test (@substack) +- [1987aca](https://github.com/bcoe/yargs/commit/1987aca28c7ba4e8796c07bbc547cb984804c826) test hex strings (@substack) +- [ef36db3](https://github.com/bcoe/yargs/commit/ef36db32259b0b0d62448dc907c760e5554fb7e7) more keywords (@substack) +- [cc53c56](https://github.com/bcoe/yargs/commit/cc53c56329960bed6ab077a79798e991711ba01d) Added camelCase function that converts --multi-word-option to camel case (so it becomes argv.multiWordOption). (@papandreou) +- [60b57da](https://github.com/bcoe/yargs/commit/60b57da36797716e5783a633c6d5c79099016d45) fixed boolean bug by rescanning (@substack) +- [dff6d07](https://github.com/bcoe/yargs/commit/dff6d078d97f8ac503c7d18dcc7b7a8c364c2883) boolean examples (@substack) +- [0e380b9](https://github.com/bcoe/yargs/commit/0e380b92c4ef4e3c8dac1da18b5c31d85b1d02c9) boolean() with passing test (@substack) +- [62644d4](https://github.com/bcoe/yargs/commit/62644d4bffbb8d1bbf0c2baf58a1d14a6359ef07) coffee compatibility with node regex for versions too (@substack) +- [430fafc](https://github.com/bcoe/yargs/commit/430fafcf1683d23774772826581acff84b456827) argv._ fixed by fixing the coffee detection (@substack) +- [343b8af](https://github.com/bcoe/yargs/commit/343b8afefd98af274ebe21b5a16b3a949ec5429f) whichNodeArgs test fails too (@substack) +- [63df2f3](https://github.com/bcoe/yargs/commit/63df2f371f31e63d7f1dec2cbf0022a5f08da9d2) replicated mnot's bug in whichNodeEmpty test (@substack) +- [35473a4](https://github.com/bcoe/yargs/commit/35473a4d93a45e5e7e512af8bb54ebb532997ae1) test for ./bin usage (@substack) +- [13df151](https://github.com/bcoe/yargs/commit/13df151e44228eed10e5441c7cd163e086c458a4) don't coerce booleans to numbers (@substack) +- [85f8007](https://github.com/bcoe/yargs/commit/85f8007e93b8be7124feea64b1f1916d8ba1894a) package bump for automatic number conversion (@substack) +- [8f17014](https://github.com/bcoe/yargs/commit/8f170141cded4ccc0c6d67a849c5bf996aa29643) updated readme and examples with new auto-numberification goodness (@substack) +- [73dc901](https://github.com/bcoe/yargs/commit/73dc9011ac968e39b55e19e916084a839391b506) auto number conversion works yay (@substack) +- [bcec56b](https://github.com/bcoe/yargs/commit/bcec56b3d031e018064cbb691539ccc4f28c14ad) failing test for not-implemented auto numification (@substack) +- [ebd2844](https://github.com/bcoe/yargs/commit/ebd2844d683feeac583df79af0e5124a7a7db04e) odd that eql doesn't check types careflly (@substack) +- [fd854b0](https://github.com/bcoe/yargs/commit/fd854b02e512ce854b76386d395672a7969c1bc4) package author + keywords (@substack) +- [656a1d5](https://github.com/bcoe/yargs/commit/656a1d5a1b7c0e49d72e80cb13f20671d56f76c6) updated readme with .default() stuff (@substack) +- [cd7f8c5](https://github.com/bcoe/yargs/commit/cd7f8c55f0b82b79b690d14c5f806851236998a1) passing tests for new .default() behavior (@substack) +- [932725e](https://github.com/bcoe/yargs/commit/932725e39ce65bc91a0385a5fab659a5fa976ac2) new default() thing for setting default key/values (@substack) +- [4e6c7ab](https://github.com/bcoe/yargs/commit/4e6c7aba6374ac9ebc6259ecf91f13af7bce40e3) test for coffee usage (@substack) +- [d54ffcc](https://github.com/bcoe/yargs/commit/d54ffccf2a5a905f51ed5108f7c647f35d64ae23) new --key value style with passing tests. NOTE: changes existing behavior (@substack) +- [ed2a2d5](https://github.com/bcoe/yargs/commit/ed2a2d5d828100ebeef6385c0fb88d146a5cfe9b) package bump for summatix's coffee script fix (@substack) +- [75a975e](https://github.com/bcoe/yargs/commit/75a975eed8430d28e2a79dc9e6d819ad545f4587) Added support for CoffeeScript (@summatix) +- [56b2b1d](https://github.com/bcoe/yargs/commit/56b2b1de8d11f8a2b91979d8ae2d6db02d8fe64d) test coverage for the falsy check() usage (@substack) +- [a4843a9](https://github.com/bcoe/yargs/commit/a4843a9f0e69ffb4afdf6a671d89eb6f218be35d) check bug fixed plus a handy string (@substack) +- [857bd2d](https://github.com/bcoe/yargs/commit/857bd2db933a5aaa9cfecba0ced2dc9b415f8111) tests for demandCount, back up to 100% coverage (@substack) +- [073b776](https://github.com/bcoe/yargs/commit/073b7768ebd781668ef05c13f9003aceca2f5c35) call demandCount from demand (@substack) +- [4bd4b7a](https://github.com/bcoe/yargs/commit/4bd4b7a085c8b6ce1d885a0f486cc9865cee2db1) add demandCount to check for the number of arguments in the _ list (@marshall) +- [b8689ac](https://github.com/bcoe/yargs/commit/b8689ac68dacf248119d242bba39a41cb0adfa07) Rebase checks. That will be its own module eventually. (@substack) +- [e688370](https://github.com/bcoe/yargs/commit/e688370b576f0aa733c3f46183df69e1b561668e) a $0 like in perl (@substack) +- [2e5e196](https://github.com/bcoe/yargs/commit/2e5e1960fc19afb21fb3293752316eaa8bcd3609) usage test hacking around process and console (@substack) +- [fcc3521](https://github.com/bcoe/yargs/commit/fcc352163fbec6a1dfe8caf47a0df39de24fe016) description pun (@substack) +- [87a1fe2](https://github.com/bcoe/yargs/commit/87a1fe29037ca2ca5fefda85141aaeb13e8ce761) mit/x11 license (@substack) +- [8d089d2](https://github.com/bcoe/yargs/commit/8d089d24cd687c0bde3640a96c09b78f884900dd) bool example is more consistent and also shows off short option grouping (@substack) +- [448d747](https://github.com/bcoe/yargs/commit/448d7473ac68e8e03d8befc9457b0d9e21725be0) start of the readme and examples (@substack) +- [da74dea](https://github.com/bcoe/yargs/commit/da74dea799a9b59dbf022cbb8001bfdb0d52eec9) more tests for long and short captures (@substack) +- [ab6387e](https://github.com/bcoe/yargs/commit/ab6387e6769ca4af82ca94c4c67c7319f0d9fcfa) silly bug in the tests with s/not/no/, all tests pass now (@substack) +- [102496a](https://github.com/bcoe/yargs/commit/102496a319e8e06f6550d828fc2f72992c7d9ecc) hack an instance for process.argv onto Argv so the export can be called to create an instance or used for argv, which is the most common case (@substack) +- [a01caeb](https://github.com/bcoe/yargs/commit/a01caeb532546d19f68f2b2b87f7036cfe1aaedd) divide example (@substack) +- [443da55](https://github.com/bcoe/yargs/commit/443da55736acbaf8ff8b04d1b9ce19ab016ddda2) start of the lib with a package.json (@substack) diff --git a/node_modules/uglify-js/node_modules/yargs/LICENSE b/node_modules/uglify-js/node_modules/yargs/LICENSE new file mode 100644 index 000000000..432d1aeb0 --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/LICENSE @@ -0,0 +1,21 @@ +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/node_modules/uglify-js/node_modules/yargs/README.md b/node_modules/uglify-js/node_modules/yargs/README.md new file mode 100644 index 000000000..99086e6e9 --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/README.md @@ -0,0 +1,926 @@ +yargs +======== + +Yargs be a node.js library fer hearties tryin' ter parse optstrings. + +With yargs, ye be havin' a map that leads straight to yer treasure! Treasure of course, being a simple option hash. + +[![Build Status](https://travis-ci.org/bcoe/yargs.png)](https://travis-ci.org/bcoe/yargs) +[![Dependency Status](https://gemnasium.com/bcoe/yargs.png)](https://gemnasium.com/bcoe/yargs) +[![Coverage Status](https://coveralls.io/repos/bcoe/yargs/badge.svg?branch=)](https://coveralls.io/r/bcoe/yargs?branch=) +[![NPM version](https://img.shields.io/npm/v/yargs.svg)](https://www.npmjs.com/package/yargs) + +> Yargs is the official successor to optimist. Please feel free to submit issues and pull requests. If you'd like to contribute and don't know where to start, have a look at [the issue list](https://github.com/bcoe/yargs/issues) :) + +examples +======== + +With yargs, the options be just a hash! +------------------------------------------------------------------- + +plunder.js: + +````javascript +#!/usr/bin/env node +var argv = require('yargs').argv; + +if (argv.ships > 3 && argv.distance < 53.5) { + console.log('Plunder more riffiwobbles!'); +} +else { + console.log('Retreat from the xupptumblers!'); +} +```` + +*** + + $ ./plunder.js --ships=4 --distance=22 + Plunder more riffiwobbles! + + $ ./plunder.js --ships 12 --distance 98.7 + Retreat from the xupptumblers! + +![Joe was one optimistic pirate.](http://i.imgur.com/4WFGVJ9.png) + +But don't walk the plank just yet! There be more! You can do short options: +------------------------------------------------- + +short.js: + +````javascript +#!/usr/bin/env node +var argv = require('yargs').argv; +console.log('(%d,%d)', argv.x, argv.y); +```` + +*** + + $ ./short.js -x 10 -y 21 + (10,21) + +And booleans, both long, short, and even grouped: +---------------------------------- + +bool.js: + +````javascript +#!/usr/bin/env node +var util = require('util'); +var argv = require('yargs').argv; + +if (argv.s) { + util.print(argv.fr ? 'Le perroquet dit: ' : 'The parrot says: '); +} +console.log( + (argv.fr ? 'couac' : 'squawk') + (argv.p ? '!' : '') +); +```` + +*** + + $ ./bool.js -s + The parrot says: squawk + + $ ./bool.js -sp + The parrot says: squawk! + + $ ./bool.js -sp --fr + Le perroquet dit: couac! + +And non-hyphenated options too! Just use `argv._`! +------------------------------------------------- + +nonopt.js: + +````javascript +#!/usr/bin/env node +var argv = require('yargs').argv; +console.log('(%d,%d)', argv.x, argv.y); +console.log(argv._); +```` + +*** + + $ ./nonopt.js -x 6.82 -y 3.35 rum + (6.82,3.35) + [ 'rum' ] + + $ ./nonopt.js "me hearties" -x 0.54 yo -y 1.12 ho + (0.54,1.12) + [ 'me hearties', 'yo', 'ho' ] + +Yargs even counts your booleans! +---------------------------------------------------------------------- + +count.js + +````javascript +#!/usr/bin/env node +var argv = require('yargs') + .count('verbose') + .alias('v', 'verbose') + .argv; + +VERBOSE_LEVEL = argv.verbose; + +function WARN() { VERBOSE_LEVEL >= 0 && console.log.apply(console, arguments); } +function INFO() { VERBOSE_LEVEL >= 1 && console.log.apply(console, arguments); } +function DEBUG() { VERBOSE_LEVEL >= 2 && console.log.apply(console, arguments); } + +WARN("Showing only important stuff"); +INFO("Showing semi-mportant stuff too"); +DEBUG("Extra chatty mode"); +```` + +*** + $ node count.js + Showing only important stuff + + $ node count.js -v + Showing only important stuff + Showing semi-important stuff too + + $ node count.js -vv + Showing only important stuff + Showing semi-important stuff too + Extra chatty mode + + $ node count.js -v --verbose + Showing only important stuff + Showing semi-important stuff too + Extra chatty mode + +Tell users how to use yer options and make demands. +------------------------------------------------- + +area.js: + +````javascript +#!/usr/bin/env node +var argv = require('yargs') + .usage('Usage: $0 -w [num] -yh[num]') + .demand(['w','h']) + .argv; + +console.log("The area is:", argv.w * argv.h); +```` + +*** + + $ ./area.js -w 55 -h 11 + 605 + + $ node ./area.js -w 4.91 -w 2.51 + Usage: node ./area.js -w [num] -h [num] + + Options: + -w [required] + -h [required] + + Missing required arguments: h + +After yer demands have been met, demand more! Ask for non-hypenated arguments! +----------------------------------------- + +demand_count.js: + +````javascript +#!/usr/bin/env node +var argv = require('yargs') + .demand(2) + .argv; +console.dir(argv) +```` + +*** + + $ ./demand_count.js a + Not enough arguments, expected 2, but only found 1 + $ ./demand_count.js a b + { _: [ 'a', 'b' ], '$0': 'node ./demand_count.js' } + $ ./demand_count.js a b c + { _: [ 'a', 'b', 'c' ], '$0': 'node ./demand_count.js' } + +EVEN MORE SHIVER ME TIMBERS! +------------------ + +default_singles.js: + +````javascript +#!/usr/bin/env node +var argv = require('yargs') + .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('yargs') + .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('yargs') + .boolean('v') + .argv +; +console.dir(argv.v); +console.dir(argv._); +```` + +*** + + $ ./boolean_single.js -v "me hearties" yo ho + true + [ 'me hearties', 'yo', 'ho' ] + + +boolean_double.js + +````javascript +#!/usr/bin/env node +var argv = require('yargs') + .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' ] + +Yargs is here to help you... +--------------------------- + +Ye can describe parameters fer help messages and set aliases. Yargs figures +out how ter format a handy help string automatically. + +line_count.js + +````javascript +#!/usr/bin/env node +var argv = require('yargs') + .usage('Usage: $0 [options]') + .command('count', 'Count the lines in a file') + .demand(1) + .example('$0 count -f foo.js', 'count the lines in the given file') + .demand('f') + .alias('f', 'file') + .nargs('f', 1) + .describe('f', 'Load a file') + .help('h') + .alias('h', 'help') + .epilog('copyright 2015') + .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 + Usage: node test.js [options] + + Commands: + count Count the lines in a file + + Options: + -f, --file Load a file [required] + -h, --help Show help + + Examples: + node test.js count -f foo.js count the lines in the given file + + copyright 2015 + + Missing required arguments: f + + $ node line_count.js count --file line_count.js + 20 + + $ node line_count.js count -f line_count.js + 20 + +methods +======= + +By itself, + +````javascript +require('yargs').argv +````` + +will use `process.argv` array to construct the `argv` object. + +You can pass in the `process.argv` yourself: + +````javascript +require('yargs')([ '-x', '1', '-y', '2' ]).argv +```` + +or use .parse() to do the same thing: + +````javascript +require('yargs').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. +Each key of this object should be the canonical version of the option, and each +value should be a string or an array of strings. + +.default(key, value, [description]) +-------------------- + +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. + +But wait, there's more! the default value can be a `function` which returns +a value. The name of the function will be used in the usage string: + +```js +var argv = require('yargs') + .default('random', function randomValue() { + return Math.random() * 256; + }).argv; +``` + +Optionally, `description` can also be provided and will take precedence over +displaying the value in the usage instructions: + +```js +.default('timeout', 60000, '(one-minute)'); +``` + +.demand(key, [msg | boolean]) +----------------------------- +.require(key, [msg | boolean]) +------------------------------ +.required(key, [msg | boolean]) +------------------------------- + +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. + +If a `msg` string is given, it will be printed when the argument is missing, +instead of the standard error message. This is especially helpful for the non-option arguments in `argv._`. + +If a `boolean` value is given, it controls whether the option is demanded; +this is useful when using `.options()` to specify command line parameters. + +.requiresArg(key) +----------------- + +Specifies either a single option key (string), or an array of options that +must be followed by option values. If any option value is missing, show the +usage information and exit. + +The default behaviour is to set the value of any key not followed by an +option value to `true`. + +.implies(x, y) +-------------- + +Given the key `x` is set, it is required that the key `y` is set. + +implies can also accept an object specifying multiple implications. + +.describe(key, desc) +-------------------- + +Describe a `key` for the generated usage information. + +Optionally `.describe()` can take an object that maps keys to descriptions. + +.option(key, opt) +----------------- +.options(key, opt) +------------------ + +Instead of chaining together `.alias().demand().default().describe().string()`, you can specify +keys in `opt` for each of the chainable methods. + +For example: + +````javascript +var argv = require('yargs') + .option('f', { + alias : 'file', + demand: true, + default: '/etc/passwd', + describe: 'x marks the spot', + type: 'string' + }) + .argv +; +```` + +is the same as + +````javascript +var argv = require('yargs') + .alias('f', 'file') + .default('f', '/etc/passwd') + .argv +; +```` + +Optionally `.options()` can take an object that maps keys to `opt` parameters. + +````javascript +var argv = require('yargs') + .options({ + 'f': { + alias: 'file', + demand: true, + default: '/etc/passwd', + describe: 'x marks the spot', + type: 'string' + } + }) + .argv +; +```` + +.usage(message, opts) +--------------------- + +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. + +`opts` is optional and acts like calling `.options(opts)`. + +.command(cmd, desc, [fn]) +------------------- + +Document the commands exposed by your application. + +use `desc` to provide a description for each command your application accepts (the +values stored in `argv._`). + +Optionally, you can provide a handler `fn` which will be executed when +a given command is provided. The handler will be executed with an instance +of `yargs`, which can be used to compose nested commands. + +Here's an example of top-level and nested commands in action: + +```js +var argv = require('yargs') + .usage('npm ') + .command('install', 'tis a mighty fine package to install') + .command('publish', 'shiver me timbers, should you be sharing all that', function (yargs) { + argv = yargs.option('f', { + alias: 'force', + description: 'yar, it usually be a bad idea' + }) + .help('help') + .argv + }) + .help('help') + .argv; +``` + +.example(cmd, desc) +------------------- + +Give some example invocations of your program. Inside `cmd`, 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. +Examples will be printed out as part of the help message. + + +.epilogue(str) +-------------- +.epilog(str) +------------ + +A message to print at the end of the usage instructions, e.g., + +```js +var argv = require('yargs') + .epilogue('for more information, find our manual at http://example.com'); +``` + +.check(fn) +---------- + +Check that certain conditions are met in the provided arguments. + +`fn` is called with two arguments, the parsed `argv` hash and an array of options and their aliases. + +If `fn` throws or returns a non-truthy value, show the thrown error, usage information, and +exit. + +.fail(fn) +--------- + +Method to execute when a failure occurs, rather then printing the failure message. + +`fn` is called with the failure message that would have been printed. + +.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`. + +`key` will default to `false`, unless an `default(key, undefined)` is +explicitly set. + +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. + +`.string('_')` will result in non-hyphenated arguments being interpreted as strings, +regardless of whether they resemble numbers. + +.array(key) +---------- + +Tell the parser to interpret `key` as an array. If `.array('foo')` is set, +`--foo foo bar` will be parsed as `['foo', 'bar']` rather than as `'bar'`. + +.nargs(key, count) +----------- + +The number of arguments that should be consumed after a key. This can be a +useful hint to prevent parsing ambiguity: + +```js +var argv = require('yargs') + .nargs('token', 1) + .parse(['--token', '-my-token']); +``` + +parses as: + +`{ _: [], token: '-my-token', '$0': 'node test' }` + +Optionally `.nargs()` can take an object of `key`/`narg` pairs. + +.config(key) +------------ + +Tells the parser that if the option specified by `key` is passed in, it +should be interpreted as a path to a JSON config file. The file is loaded +and parsed, and its properties are set as arguments. + +.wrap(columns) +-------------- + +Format usage output to wrap at `columns` many columns. + +By default wrap will be set to `Math.min(80, windowWidth)`. Use `.wrap(null)` to +specify no column limit. + +`yargs.wrap(yargs.terminalWidth())` can be used to maximize the width +of yargs' usage instructions. + +.strict() +--------- + +Any command-line argument given that is not demanded, or does not have a +corresponding description, will be reported as an error. + +.help([option, [description]]) +------------------------------ + +Add an option (e.g., `--help`) that displays the usage string and exits the +process. If present, the `description` parameter customises the description of +the help option in the usage string. + +If invoked without parameters, `.help` returns the generated usage string. + +Example: + +``` +var yargs = require("yargs") + .usage("$0 -operand1 number -operand2 number -operation [add|subtract]"); +console.log(yargs.help()); +``` + +Later on, ```argv``` can be retrived with ```yargs.argv``` + +.version(version, [option], [description]) +---------------------------------------- + +Add an option (e.g., `--version`) that displays the version number (given by the +`version` parameter) and exits the process. If present, the `description` +parameter customizes the description of the version option in the usage string. + +You can provide a `function` for version, rather than a string. +This is useful if you want to use the version from your package.json: + +```js +var argv = require('yargs') + .version(function() { + return require('../package').version; + }) + .argv; +``` + +.showHelpOnFail(enable, [message]) +---------------------------------- + +By default, yargs outputs a usage string if any error is detected. Use the +`.showHelpOnFail` method to customize this behaviour. if `enable` is `false`, +the usage string is not output. If the `message` parameter is present, this +message is output after the error message. + +line_count.js + +````javascript +#!/usr/bin/env node +var argv = require('yargs') + .usage('Count the lines in a file.\nUsage: $0') + .demand('f') + .alias('f', 'file') + .describe('f', 'Load a file') + .showHelpOnFail(false, "Specify --help for available options") + .argv; + +// etc. +```` + +*** + + $ node line_count.js --file + Missing argument value: f + + Specify --help for available options + +.showHelp(consoleLevel='error') +--------------------------- + +Print the usage data using the [`console`](https://nodejs.org/api/console.html) function `consoleLevel` for printing. + +Example: + +``` +var yargs = require("yargs") + .usage("$0 -operand1 number -operand2 number -operation [add|subtract]"); +yargs.showHelp(); +``` + +Or, to print the usage data to `stdout` instead, you can specify the use of `console.log`: + +``` +yargs.showHelp("log"); +``` + +Later on, ```argv``` can be retrived with ```yargs.argv``` + +.completion(cmd, [description], [fn]); +------------- + +Enable bash-completion shortcuts for commands and options. + +`cmd`: when present in `argv._`, will result in the `.bashrc` completion script +being outputted. To enable bash completions, concat the generated script to your +`.bashrc`, or `.bash_profile`. + +`description`: provide a description in your usage instructions for the command +that generates bash completion scripts. + +`fn`, rather than relying on yargs' default completion functionlity, which +shiver me timbers is pretty awesome, you can provide your own completion +method. + +```js +var argv = require('yargs') + .completion('completion', function(current, argv) { + // 'current' is the current command being completed. + // 'argv' is the parsed arguments so far. + // simply return an array of completions. + return [ + 'foo', + 'bar' + ]; + }) + .argv; +``` + +But wait, there's more! you can provide asynchronous completions. + +```js +var argv = require('yargs') + .completion('completion', function(current, argv, done) { + setTimeout(function() { + done([ + 'apple', + 'banana' + ]); + }, 500); + }) + .argv; +``` + +.showCompletionScript() +---------------------- + +Generate a bash completion script. Users of your application can install this +script in their `.bashrc`, and yargs will provide completion shortcuts for +commands and options. + +.exitProcess(enable) +---------------------------------- + +By default, yargs exits the process when the user passes a help flag, uses the `.version` functionality or when validation fails. Calling `.exitProcess(false)` disables this behavior, enabling further actions after yargs have been validated. + +.parse(args) +------------ + +Parse `args` instead of `process.argv`. Returns the `argv` object. + +.reset() +-------- + +Reset the argument object built up so far. This is useful for +creating nested command line interfaces. + +```js +var yargs = require('./yargs') + .usage('$0 command') + .command('hello', 'hello command') + .command('world', 'world command') + .demand(1, 'must provide a valid command'), + argv = yargs.argv, + command = argv._[0]; + +if (command === 'hello') { + yargs.reset() + .usage('$0 hello') + .help('h') + .example('$0 hello', 'print the hello message!') + .argv + + console.log('hello!'); +} else if (command === 'world'){ + yargs.reset() + .usage('$0 world') + .help('h') + .example('$0 world', 'print the world message!') + .argv + + console.log('world!'); +} else { + yargs.showHelp(); +} +``` + +.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 yargs + +or clone this project on github: + + git clone http://github.com/bcoe/yargs.git + +To run the tests with npm, just do: + + npm test + +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/node_modules/uglify-js/node_modules/yargs/completion.sh.hbs b/node_modules/uglify-js/node_modules/yargs/completion.sh.hbs new file mode 100644 index 000000000..c52e49914 --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/completion.sh.hbs @@ -0,0 +1,22 @@ +###-begin-{{app_name}}-completions-### +# +# yargs command completion script +# +# Installation: {{app_path}} completion >> ~/.bashrc +# or {{app_path}} completion >> ~/.bash_profile on OSX. +# +_yargs_completions() +{ + local cur_word args type_list + + cur_word="${COMP_WORDS[COMP_CWORD]}" + args=$(printf "%s " "${COMP_WORDS[@]}") + + # ask yargs to generate completions. + type_list=`{{app_path}} --get-yargs-completions $args` + + COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) ) + return 0 +} +complete -F _yargs_completions {{app_name}} +###-end-{{app_name}}-completions-### diff --git a/node_modules/uglify-js/node_modules/yargs/index.js b/node_modules/uglify-js/node_modules/yargs/index.js new file mode 100644 index 000000000..96539b08d --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/index.js @@ -0,0 +1,504 @@ +var assert = require('assert'), + path = require('path'), + Completion = require('./lib/completion'), + Parser = require('./lib/parser'), + Usage = require('./lib/usage'), + Validation = require('./lib/validation') + +Argv(process.argv.slice(2)) + +var exports = module.exports = Argv +function Argv (processArgs, cwd) { + processArgs = processArgs || [] // handle calling yargs(). + + var self = {} + var completion = null + var usage = null + var validation = null + + if (!cwd) cwd = process.cwd() + + self.$0 = process.argv + .slice(0, 2) + .map(function (x, i) { + // ignore the node bin, specify this in your + // bin file with #!/usr/bin/env node + if (i === 0 && /\b(node|iojs)$/.test(x)) return + var b = rebase(cwd, x) + return x.match(/^\//) && b.length < x.length + ? b : x + }) + .join(' ').trim() + + if (process.env._ !== undefined && process.argv[1] === process.env._) { + self.$0 = process.env._.replace( + path.dirname(process.execPath) + '/', '' + ) + } + + var options + self.resetOptions = self.reset = function () { + // put yargs back into its initial + // state, this is useful for creating a + // nested CLI. + options = { + array: [], + boolean: [], + string: [], + narg: {}, + key: {}, + alias: {}, + default: {}, + defaultDescription: {}, + requiresArg: [], + count: [], + normalize: [], + config: [] + } + + usage = Usage(self) // handle usage output. + validation = Validation(self, usage) // handle arg validation. + completion = Completion(self, usage) + + demanded = {} + + exitProcess = true + strict = false + helpOpt = null + versionOpt = null + completionOpt = null + commandHandlers = {} + self.parsed = false + + return self + } + self.resetOptions() + + self.boolean = function (bools) { + options.boolean.push.apply(options.boolean, [].concat(bools)) + return self + } + + self.array = function (arrays) { + options.array.push.apply(options.array, [].concat(arrays)) + return self + } + + self.nargs = function (key, n) { + if (typeof key === 'object') { + Object.keys(key).forEach(function (k) { + self.nargs(k, key[k]) + }) + } else { + options.narg[key] = n + } + return self + } + + self.normalize = function (strings) { + options.normalize.push.apply(options.normalize, [].concat(strings)) + return self + } + + self.config = function (configs) { + options.config.push.apply(options.config, [].concat(configs)) + return self + } + + self.example = function (cmd, description) { + usage.example(cmd, description) + return self + } + + self.command = function (cmd, description, fn) { + usage.command(cmd, description) + if (fn) commandHandlers[cmd] = fn + return self + } + + var commandHandlers = {} + self.getCommandHandlers = function () { + return commandHandlers + } + + self.string = function (strings) { + options.string.push.apply(options.string, [].concat(strings)) + return self + } + + self.default = function (key, value, defaultDescription) { + if (typeof key === 'object') { + Object.keys(key).forEach(function (k) { + self.default(k, key[k]) + }) + } else { + if (typeof value === 'function') { + defaultDescription = usage.functionDescription(value, defaultDescription) + value = value.call() + } + options.defaultDescription[key] = defaultDescription + 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 + } + + self.count = function (counts) { + options.count.push.apply(options.count, [].concat(counts)) + return self + } + + var demanded = {} + self.demand = self.required = self.require = function (keys, msg) { + if (typeof keys === 'number') { + if (!demanded._) demanded._ = { count: 0, msg: null } + demanded._.count += keys + demanded._.msg = msg + } else if (Array.isArray(keys)) { + keys.forEach(function (key) { + self.demand(key, msg) + }) + } else { + if (typeof msg === 'string') { + demanded[keys] = { msg: msg } + } else if (msg === true || typeof msg === 'undefined') { + demanded[keys] = { msg: undefined } + } + } + + return self + } + self.getDemanded = function () { + return demanded + } + + self.requiresArg = function (requiresArgs) { + options.requiresArg.push.apply(options.requiresArg, [].concat(requiresArgs)) + return self + } + + self.implies = function (key, value) { + validation.implies(key, value) + return self + } + + self.usage = function (msg, opts) { + if (!opts && typeof msg === 'object') { + opts = msg + msg = null + } + + usage.usage(msg) + + if (opts) self.options(opts) + + return self + } + + self.epilogue = self.epilog = function (msg) { + usage.epilog(msg) + return self + } + + self.fail = function (f) { + usage.failFn(f) + return self + } + + self.check = function (f) { + validation.check(f) + return self + } + + self.defaults = self.default + + self.describe = function (key, desc) { + options.key[key] = true + usage.describe(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 { + assert(typeof opt === 'object', 'second argument to option must be an object') + + options.key[key] = true // track manually set keys. + + if (opt.alias) self.alias(key, opt.alias) + + var demand = opt.demand || opt.required || opt.require + + if (demand) { + self.demand(key, demand) + } if ('default' in opt) { + self.default(key, opt.default) + } if ('nargs' in opt) { + self.nargs(key, opt.nargs) + } if (opt.boolean || opt.type === 'boolean') { + self.boolean(key) + if (opt.alias) self.boolean(opt.alias) + } if (opt.array || opt.type === 'array') { + self.array(key) + if (opt.alias) self.array(opt.alias) + } if (opt.string || opt.type === 'string') { + self.string(key) + if (opt.alias) self.string(opt.alias) + } if (opt.count || opt.type === 'count') { + self.count(key) + } + + var desc = opt.describe || opt.description || opt.desc + if (desc) { + self.describe(key, desc) + } + + if (opt.requiresArg) { + self.requiresArg(key) + } + } + + return self + } + self.getOptions = function () { + return options + } + + self.wrap = function (cols) { + usage.wrap(cols) + return self + } + + var strict = false + self.strict = function () { + strict = true + return self + } + self.getStrict = function () { + return strict + } + + self.showHelp = function (level) { + if (!self.parsed) parseArgs(processArgs) // run parser, if it has not already been executed. + usage.showHelp(level) + return self + } + + var versionOpt = null + self.version = function (ver, opt, msg) { + versionOpt = opt || 'version' + usage.version(ver) + self.boolean(versionOpt) + self.describe(versionOpt, msg || 'Show version number') + return self + } + + var helpOpt = null + self.addHelpOpt = function (opt, msg) { + helpOpt = opt + self.boolean(opt) + self.describe(opt, msg || 'Show help') + return self + } + + self.showHelpOnFail = function (enabled, message) { + usage.showHelpOnFail(enabled, message) + return self + } + + var exitProcess = true + self.exitProcess = function (enabled) { + if (typeof enabled !== 'boolean') { + enabled = true + } + exitProcess = enabled + return self + } + self.getExitProcess = function () { + return exitProcess + } + + self.help = function () { + if (arguments.length > 0) return self.addHelpOpt.apply(self, arguments) + + if (!self.parsed) parseArgs(processArgs) // run parser, if it has not already been executed. + + return usage.help() + } + + var completionOpt = null, + completionCommand = null + self.completion = function (cmd, desc, fn) { + // a function to execute when generating + // completions can be provided as the second + // or third argument to completion. + if (typeof desc === 'function') { + fn = desc + desc = null + } + + // register the completion command. + completionCommand = cmd + completionOpt = completion.completionKey + self.command(completionCommand, desc || 'generate bash completion script') + + // a function can be provided + if (fn) completion.registerFunction(fn) + + return self + } + + self.showCompletionScript = function ($0) { + $0 = $0 || self.$0 + console.log(completion.generateCompletionScript($0)) + return self + } + + self.getUsageInstance = function () { + return usage + } + + self.getValidationInstance = function () { + return validation + } + + self.terminalWidth = function () { + return require('window-size').width + } + + Object.defineProperty(self, 'argv', { + get: function () { + var args = null + + try { + args = parseArgs(processArgs) + } catch (err) { + usage.fail(err.message) + } + + return args + }, + enumerable: true + }) + + function parseArgs (args) { + var parsed = Parser(args, options), + argv = parsed.argv, + aliases = parsed.aliases + + argv.$0 = self.$0 + + self.parsed = parsed + + // generate a completion script for adding to ~/.bashrc. + if (completionCommand && ~argv._.indexOf(completionCommand)) { + self.showCompletionScript() + if (exitProcess) { + process.exit(0) + } + } + + // if there's a handler associated with a + // command defer processing to it. + var handlerKeys = Object.keys(self.getCommandHandlers()) + for (var i = 0, command; (command = handlerKeys[i]) !== undefined; i++) { + if (~argv._.indexOf(command)) { + self.getCommandHandlers()[command](self.reset()) + return self.argv + } + } + + Object.keys(argv).forEach(function (key) { + if (key === helpOpt && argv[key]) { + self.showHelp('log') + if (exitProcess) { + process.exit(0) + } + } else if (key === versionOpt && argv[key]) { + usage.showVersion() + if (exitProcess) { + process.exit(0) + } + } else if (key === completionOpt) { + // we allow for asynchronous completions, + // e.g., loading in a list of commands from an API. + completion.getCompletion(function (completions) { + ;(completions || []).forEach(function (completion) { + console.log(completion) + }) + + if (exitProcess) { + process.exit(0) + } + }) + return + } + }) + + validation.nonOptionCount(argv) + validation.missingArgumentValue(argv) + validation.requiredArguments(argv) + + if (strict) { + validation.unknownArguments(argv, aliases) + } + + validation.customChecks(argv, aliases) + validation.implications(argv) + setPlaceholderKeys(argv) + + return argv + } + + function setPlaceholderKeys (argv) { + Object.keys(options.key).forEach(function (key) { + if (typeof argv[key] === 'undefined') argv[key] = undefined + }) + } + + sigletonify(self) + 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) { + return path.relative(base, dir) +} + +/* Hack an instance of Argv with process.argv into Argv + so people can do + require('yargs')(['--beeble=1','-z','zizzle']).argv + to parse a list of args and + require('yargs').argv + to get a parsed version of process.argv. +*/ +function sigletonify (inst) { + Object.keys(inst).forEach(function (key) { + if (key === 'argv') { + Argv.__defineGetter__(key, inst.__lookupGetter__(key)) + } else { + Argv[key] = typeof inst[key] === 'function' + ? inst[key].bind(inst) + : inst[key] + } + }) +} diff --git a/node_modules/uglify-js/node_modules/yargs/lib/completion.js b/node_modules/uglify-js/node_modules/yargs/lib/completion.js new file mode 100644 index 000000000..32387be27 --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/lib/completion.js @@ -0,0 +1,71 @@ +var fs = require('fs'), + path = require('path') + +// add bash completions to your +// yargs-powered applications. +module.exports = function (yargs, usage) { + var self = { + completionKey: 'get-yargs-completions' + } + + // get a list of completion commands. + self.getCompletion = function (done) { + var completions = [], + current = process.argv[process.argv.length - 1], + previous = process.argv.slice(process.argv.indexOf('--' + self.completionKey) + 1), + argv = yargs.parse(previous) + + // a custom completion function can be provided + // to completion(). + if (completionFunction) { + if (completionFunction.length < 3) { + // synchronous completion function. + return done(completionFunction(current, argv)) + } else { + // asynchronous completion function + return completionFunction(current, argv, function (completions) { + done(completions) + }) + } + } + + if (!current.match(/^-/)) { + usage.getCommands().forEach(function (command) { + completions.push(command[0]) + }) + } + + if (current.match(/^-/)) { + Object.keys(yargs.getOptions().key).forEach(function (key) { + completions.push('--' + key) + }) + } + + done(completions) + } + + // generate the completion script to add to your .bashrc. + self.generateCompletionScript = function ($0) { + var script = fs.readFileSync( + path.resolve(__dirname, '../completion.sh.hbs'), + 'utf-8' + ), + name = path.basename($0) + + // add ./to applications not yet installed as bin. + if ($0.match(/\.js$/)) $0 = './' + $0 + + script = script.replace(/{{app_name}}/g, name) + return script.replace(/{{app_path}}/g, $0) + } + + // register a function to perform your own custom + // completions., this function can be either + // synchrnous or asynchronous. + var completionFunction = null + self.registerFunction = function (fn) { + completionFunction = fn + } + + return self +} diff --git a/node_modules/uglify-js/node_modules/yargs/lib/parser.js b/node_modules/uglify-js/node_modules/yargs/lib/parser.js new file mode 100644 index 000000000..5e4618cb5 --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/lib/parser.js @@ -0,0 +1,448 @@ +// fancy-pants parsing of argv, originally forked +// from minimist: https://www.npmjs.com/package/minimist +var camelCase = require('camelcase'), + path = require('path') + +function increment (orig) { + return orig !== undefined ? orig + 1 : 0 +} + +module.exports = function (args, opts) { + if (!opts) opts = {} + var flags = { arrays: {}, bools: {}, strings: {}, counts: {}, normalize: {}, configs: {} } + + ;[].concat(opts['array']).filter(Boolean).forEach(function (key) { + flags.arrays[key] = true + }) + + ;[].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true + }) + + ;[].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true + }) + + ;[].concat(opts.count).filter(Boolean).forEach(function (key) { + flags.counts[key] = true + }) + + ;[].concat(opts.normalize).filter(Boolean).forEach(function (key) { + flags.normalize[key] = true + }) + + ;[].concat(opts.config).filter(Boolean).forEach(function (key) { + flags.configs[key] = true + }) + + var aliases = {}, + newAliases = {} + + extendAliases(opts.key) + extendAliases(opts.alias) + + var defaults = opts['default'] || {} + Object.keys(defaults).forEach(function (key) { + if (/-/.test(key) && !opts.alias[key]) { + aliases[key] = aliases[key] || [] + } + (aliases[key] || []).forEach(function (alias) { + defaults[alias] = defaults[key] + }) + }) + + var argv = { _: [] } + + Object.keys(flags.bools).forEach(function (key) { + setArg(key, !(key in defaults) ? false : defaults[key]) + }) + + var notFlags = [] + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--') + 1) + args = args.slice(0, args.indexOf('--')) + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i], + broken, + key, + letters, + m, + next, + value + + // -- seperated by = + if (arg.match(/^--.+=/)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + m = arg.match(/^--([^=]+)=([\s\S]*)$/) + + // nargs format = '--f=monkey washing cat' + if (checkAllAliases(m[1], opts.narg)) { + args.splice(i + 1, m[1], m[2]) + i = eatNargs(i, m[1], args) + // arrays format = '--f=a b c' + } else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) { + args.splice(i + 1, m[1], m[2]) + i = eatArray(i, m[1], args) + } else { + setArg(m[1], m[2]) + } + } else if (arg.match(/^--no-.+/)) { + key = arg.match(/^--no-(.+)/)[1] + setArg(key, false) + + // -- seperated by space. + } else if (arg.match(/^--.+/)) { + key = arg.match(/^--(.+)/)[1] + + // nargs format = '--foo a b c' + if (checkAllAliases(key, opts.narg)) { + i = eatNargs(i, key, args) + // array format = '--foo a b c' + } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { + i = eatArray(i, key, args) + } else { + next = args[i + 1] + + if (next !== undefined && !next.match(/^-/) + && !checkAllAliases(key, flags.bools) + && !checkAllAliases(key, flags.counts)) { + setArg(key, next) + i++ + } else if (/^(true|false)$/.test(next)) { + setArg(key, next) + i++ + } else { + setArg(key, defaultForType(guessType(key, flags))) + } + } + + // dot-notation flag seperated by '='. + } else if (arg.match(/^-.\..+=/)) { + m = arg.match(/^-([^=]+)=([\s\S]*)$/) + setArg(m[1], m[2]) + + // dot-notation flag seperated by space. + } else if (arg.match(/^-.\..+/)) { + next = args[i + 1] + key = arg.match(/^-(.\..+)/)[1] + + if (next !== undefined && !next.match(/^-/) + && !checkAllAliases(key, flags.bools) + && !checkAllAliases(key, flags.counts)) { + setArg(key, next) + i++ + } else { + setArg(key, defaultForType(guessType(key, flags))) + } + } else if (arg.match(/^-[^-]+/)) { + letters = arg.slice(1, -1).split('') + broken = false + + for (var j = 0; j < letters.length; j++) { + next = arg.slice(j + 2) + + if (letters[j + 1] && letters[j + 1] === '=') { + value = arg.slice(j + 3) + key = letters[j] + + // nargs format = '-f=monkey washing cat' + if (checkAllAliases(letters[j], opts.narg)) { + args.splice(i + 1, 0, value) + i = eatNargs(i, key, args) + // array format = '-f=a b c' + } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { + args.splice(i + 1, 0, value) + i = eatArray(i, key, args) + } else { + setArg(key, value) + } + + broken = true + break + } + + 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], defaultForType(guessType(letters[j], flags))) + } + } + + key = arg.slice(-1)[0] + + if (!broken && key !== '-') { + // nargs format = '-f a b c' + if (checkAllAliases(key, opts.narg)) { + i = eatNargs(i, key, args) + // array format = '-f a b c' + } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { + i = eatArray(i, key, args) + } else { + if (args[i + 1] && !/^(-|--)[^-]/.test(args[i + 1]) + && !checkAllAliases(key, flags.bools) + && !checkAllAliases(key, flags.counts)) { + setArg(key, args[i + 1]) + i++ + } else if (args[i + 1] && /true|false/.test(args[i + 1])) { + setArg(key, args[i + 1]) + i++ + } else { + setArg(key, defaultForType(guessType(key, flags))) + } + } + } + } else { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ) + } + } + + setConfig(argv) + applyDefaultsAndAliases(argv, aliases, defaults) + + Object.keys(flags.counts).forEach(function (key) { + setArg(key, defaults[key]) + }) + + notFlags.forEach(function (key) { + argv._.push(key) + }) + + // how many arguments should we consume, based + // on the nargs option? + function eatNargs (i, key, args) { + var toEat = checkAllAliases(key, opts.narg) + + if (args.length - (i + 1) < toEat) throw Error('not enough arguments following: ' + key) + + for (var ii = i + 1; ii < (toEat + i + 1); ii++) { + setArg(key, args[ii]) + } + + return (i + toEat) + } + + // if an option is an array, eat all non-hyphenated arguments + // following it... YUM! + // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"] + function eatArray (i, key, args) { + for (var ii = i + 1; ii < args.length; ii++) { + if (/^-/.test(args[ii])) break + i = ii + setArg(key, args[ii]) + } + + return i + } + + function setArg (key, val) { + // handle parsing boolean arguments --foo=true --bar false. + if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) { + if (typeof val === 'string') val = val === 'true' + } + + if (/-/.test(key) && !(aliases[key] && aliases[key].length)) { + var c = camelCase(key) + aliases[key] = [c] + newAliases[c] = true + } + + var value = !checkAllAliases(key, flags.strings) && isNumber(val) ? Number(val) : val + + if (checkAllAliases(key, flags.counts)) { + value = increment + } + + var splitKey = key.split('.') + setKey(argv, splitKey, value) + + ;(aliases[splitKey[0]] || []).forEach(function (x) { + x = x.split('.') + + // handle populating dot notation for both + // the key and its aliases. + if (splitKey.length > 1) { + var a = [].concat(splitKey) + a.shift() // nuke the old key. + x = x.concat(a) + } + + setKey(argv, x, value) + }) + + var keys = [key].concat(aliases[key] || []) + for (var i = 0, l = keys.length; i < l; i++) { + if (flags.normalize[keys[i]]) { + keys.forEach(function (key) { + argv.__defineSetter__(key, function (v) { + val = path.normalize(v) + }) + + argv.__defineGetter__(key, function () { + return typeof val === 'string' ? + path.normalize(val) : val + }) + }) + break + } + } + } + + // set args from config.json file, this should be + // applied last so that defaults can be applied. + function setConfig (argv) { + var configLookup = {} + + // expand defaults/aliases, in-case any happen to reference + // the config.json file. + applyDefaultsAndAliases(configLookup, aliases, defaults) + + Object.keys(flags.configs).forEach(function (configKey) { + var configPath = argv[configKey] || configLookup[configKey] + if (configPath) { + try { + var config = require(path.resolve(process.cwd(), configPath)) + + Object.keys(config).forEach(function (key) { + // setting arguments via CLI takes precedence over + // values within the config file. + if (argv[key] === undefined) { + delete argv[key] + setArg(key, config[key]) + } + }) + } catch (ex) { + throw Error('invalid json config file: ' + configPath) + } + } + }) + } + + function applyDefaultsAndAliases (obj, aliases, defaults) { + Object.keys(defaults).forEach(function (key) { + if (!hasKey(obj, key.split('.'))) { + setKey(obj, key.split('.'), defaults[key]) + + ;(aliases[key] || []).forEach(function (x) { + setKey(obj, x.split('.'), defaults[key]) + }) + } + }) + } + + 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 (value === increment) { + o[key] = increment(o[key]) + } else if (o[key] === undefined && checkAllAliases(key, flags.arrays)) { + o[key] = Array.isArray(value) ? value : [value] + } else 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 ] + } + } + + // extend the aliases list with inferred aliases. + function extendAliases (obj) { + Object.keys(obj || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key] || []) + // For "--option-name", also set argv.optionName + aliases[key].concat(key).forEach(function (x) { + if (/-/.test(x)) { + var c = camelCase(x) + aliases[key].push(c) + newAliases[c] = true + } + }) + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y + })) + }) + }) + } + + // check if a flag is set for any of a key's aliases. + function checkAllAliases (key, flag) { + var isSet = false, + toCheck = [].concat(aliases[key] || [], key) + + toCheck.forEach(function (key) { + if (flag[key]) isSet = flag[key] + }) + + return isSet + } + + // return a default value, given the type of a flag., + // e.g., key of type 'string' will default to '', rather than 'true'. + function defaultForType (type) { + var def = { + boolean: true, + string: '', + array: [] + } + + return def[type] + } + + // given a flag, enforce a default type. + function guessType (key, flags) { + var type = 'boolean' + + if (flags.strings && flags.strings[key]) type = 'string' + else if (flags.arrays && flags.arrays[key]) type = 'array' + + return type + } + + 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) + } + + return { + argv: argv, + aliases: aliases, + newAliases: newAliases + } +} diff --git a/node_modules/uglify-js/node_modules/yargs/lib/usage.js b/node_modules/uglify-js/node_modules/yargs/lib/usage.js new file mode 100644 index 000000000..8cfe9dd0c --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/lib/usage.js @@ -0,0 +1,314 @@ +// this file handles outputting usage instructions, +// failures, etc. keeps logging in one place. +var cliui = require('cliui'), + decamelize = require('decamelize'), + wsize = require('window-size') + +module.exports = function (yargs) { + var self = {} + + // methods for ouputting/building failure message. + var fails = [] + self.failFn = function (f) { + fails.push(f) + } + + var failMessage = null + var showHelpOnFail = true + self.showHelpOnFail = function (enabled, message) { + if (typeof enabled === 'string') { + message = enabled + enabled = true + } else if (typeof enabled === 'undefined') { + enabled = true + } + failMessage = message + showHelpOnFail = enabled + return self + } + + self.fail = function (msg) { + if (fails.length) { + fails.forEach(function (f) { + f(msg) + }) + } else { + if (showHelpOnFail) yargs.showHelp('error') + if (msg) console.error(msg) + if (failMessage) { + if (msg) console.error('') + console.error(failMessage) + } + if (yargs.getExitProcess()) { + process.exit(1) + } else { + throw new Error(msg) + } + } + } + + // methods for ouputting/building help (usage) message. + var usage + self.usage = function (msg) { + usage = msg + } + + var examples = [] + self.example = function (cmd, description) { + examples.push([cmd, description || '']) + } + + var commands = [] + self.command = function (cmd, description) { + commands.push([cmd, description || '']) + } + self.getCommands = function () { + return commands + } + + 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 + } + } + self.getDescriptions = function () { + return descriptions + } + + var epilog + self.epilog = function (msg) { + epilog = msg + } + + var wrap = windowWidth() + self.wrap = function (cols) { + wrap = cols + } + + self.help = function () { + normalizeAliases() + + var demanded = yargs.getDemanded(), + options = yargs.getOptions(), + 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 + }, {}) + ), + ui = cliui({ + width: wrap, + wrap: !!wrap + }) + + // the usage string. + if (usage) { + var u = usage.replace(/\$0/g, yargs.$0) + ui.div(u + '\n') + } + + // your application's commands, i.e., non-option + // arguments populated in '_'. + if (commands.length) { + ui.div('Commands:') + + commands.forEach(function (command) { + ui.div( + {text: command[0], padding: [0, 2, 0, 2], width: maxWidth(commands) + 4}, + {text: command[1]} + ) + }) + + ui.div() + } + + // the options table. + var aliasKeys = (Object.keys(options.alias) || []) + .concat(Object.keys(yargs.parsed.newAliases) || []) + + keys = keys.filter(function (key) { + return !yargs.parsed.newAliases[key] && aliasKeys.every(function (alias) { + return (options.alias[alias] || []).indexOf(key) === -1 + }) + }) + + 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 + }, {}) + + if (keys.length) { + ui.div('Options:') + + keys.forEach(function (key) { + var kswitch = switches[key] + var desc = descriptions[key] || '' + var type = null + + if (~options.boolean.indexOf(key)) type = '[boolean]' + if (~options.count.indexOf(key)) type = '[count]' + if (~options.string.indexOf(key)) type = '[string]' + if (~options.normalize.indexOf(key)) type = '[string]' + if (~options.array.indexOf(key)) type = '[array]' + + var extra = [ + type, + demanded[key] ? '[required]' : null, + defaultString(options.default[key], options.defaultDescription[key]) + ].filter(Boolean).join(' ') + + ui.span( + {text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches) + 4}, + desc + ) + + if (extra) ui.div({text: extra, padding: [0, 0, 0, 2], align: 'right'}) + else ui.div() + }) + + ui.div() + } + + // describe some common use-cases for your application. + if (examples.length) { + ui.div('Examples:') + + examples.forEach(function (example) { + example[0] = example[0].replace(/\$0/g, yargs.$0) + }) + + examples.forEach(function (example) { + ui.div( + {text: example[0], padding: [0, 2, 0, 2], width: maxWidth(examples) + 4}, + example[1] + ) + }) + + ui.div() + } + + // the usage string. + if (epilog) { + var e = epilog.replace(/\$0/g, yargs.$0) + ui.div(e + '\n') + } + + return ui.toString() + } + + // return the maximum width of a string + // in the left-hand column of a table. + function maxWidth (table) { + var width = 0 + + // table might be of the form [leftColumn], + // or {key: leftColumn}} + if (!Array.isArray(table)) { + table = Object.keys(table).map(function (key) { + return [table[key]] + }) + } + + table.forEach(function (v) { + width = Math.max(v[0].length, width) + }) + + // if we've enabled 'wrap' we should limit + // the max-width of the left-column. + if (wrap) width = Math.min(width, parseInt(wrap * 0.5, 10)) + + return width + } + + // make sure any options set for aliases, + // are copied to the keys being aliased. + function normalizeAliases () { + var options = yargs.getOptions(), + demanded = yargs.getDemanded() + + ;(Object.keys(options.alias) || []).forEach(function (key) { + options.alias[key].forEach(function (alias) { + // copy descriptions. + if (descriptions[alias]) self.describe(key, descriptions[alias]) + // copy demanded. + if (demanded[alias]) yargs.demand(key, demanded[alias].msg) + + // type messages. + if (~options.boolean.indexOf(alias)) yargs.boolean(key) + if (~options.count.indexOf(alias)) yargs.count(key) + if (~options.string.indexOf(alias)) yargs.string(key) + if (~options.normalize.indexOf(alias)) yargs.normalize(key) + if (~options.array.indexOf(alias)) yargs.array(key) + }) + }) + } + + self.showHelp = function (level) { + level = level || 'error' + console[level](self.help()) + } + + self.functionDescription = function (fn, defaultDescription) { + if (defaultDescription) { + return defaultDescription + } + var description = fn.name ? decamelize(fn.name, '-') : 'generated-value' + return ['(', description, ')'].join('') + } + + // format the default-value-string displayed in + // the right-hand column. + function defaultString (value, defaultDescription) { + var string = '[default: ' + + if (value === undefined) return null + + if (defaultDescription) { + string += defaultDescription + } else { + switch (typeof value) { + case 'string': + string += JSON.stringify(value) + break + case 'object': + string += JSON.stringify(value) + break + default: + string += value + } + } + + return string + ']' + } + + // guess the width of the console window, max-width 80. + function windowWidth () { + return wsize.width ? Math.min(80, wsize.width) : null + } + + // logic for displaying application version. + var version = null + self.version = function (ver, opt, msg) { + version = ver + } + + self.showVersion = function () { + if (typeof version === 'function') console.log(version()) + else console.log(version) + } + + return self +} diff --git a/node_modules/uglify-js/node_modules/yargs/lib/validation.js b/node_modules/uglify-js/node_modules/yargs/lib/validation.js new file mode 100644 index 000000000..19afe9401 --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/lib/validation.js @@ -0,0 +1,196 @@ +// validation-type-stuff, missing params, +// bad implications, custom checks. +module.exports = function (yargs, usage) { + var self = {} + + // validate appropriate # of non-option + // arguments were provided, i.e., '_'. + self.nonOptionCount = function (argv) { + var demanded = yargs.getDemanded() + + if (demanded._ && argv._.length < demanded._.count) { + if (demanded._.msg !== undefined) { + usage.fail(demanded._.msg) + } else { + usage.fail('Not enough non-option arguments: got ' + + argv._.length + ', need at least ' + demanded._.count + ) + } + } + } + + // make sure that any args that require an + // value (--foo=bar), have a value. + self.missingArgumentValue = function (argv) { + var options = yargs.getOptions(), + defaultValues = [true, false, ''] + + if (options.requiresArg.length > 0) { + var missingRequiredArgs = [] + + options.requiresArg.forEach(function (key) { + var value = argv[key] + + // if a value is explicitly requested, + // flag argument as missing if it does not + // look like foo=bar was entered. + if (~defaultValues.indexOf(value) + || (Array.isArray(value) && !value.length)) { + missingRequiredArgs.push(key) + } + }) + + if (missingRequiredArgs.length === 1) { + usage.fail('Missing argument value: ' + missingRequiredArgs[0]) + } else if (missingRequiredArgs.length > 1) { + var message = 'Missing argument values: ' + missingRequiredArgs.join(', ') + usage.fail(message) + } + } + } + + // make sure all the required arguments are present. + self.requiredArguments = function (argv) { + var demanded = yargs.getDemanded(), + missing = null + + Object.keys(demanded).forEach(function (key) { + if (!argv.hasOwnProperty(key)) { + missing = missing || {} + missing[key] = demanded[key] + } + }) + + if (missing) { + var customMsgs = [] + Object.keys(missing).forEach(function (key) { + var msg = missing[key].msg + if (msg && customMsgs.indexOf(msg) < 0) { + customMsgs.push(msg) + } + }) + + var customMsg = customMsgs.length ? '\n' + customMsgs.join('\n') : '' + usage.fail('Missing required arguments: ' + Object.keys(missing).join(', ') + customMsg) + } + } + + // check for unknown arguments (strict-mode). + self.unknownArguments = function (argv, aliases) { + var descriptions = usage.getDescriptions(), + demanded = yargs.getDemanded(), + unknown = [], + aliasLookup = {} + + Object.keys(aliases).forEach(function (key) { + aliases[key].forEach(function (alias) { + aliasLookup[alias] = key + }) + }) + + Object.keys(argv).forEach(function (key) { + if (key !== '$0' && key !== '_' && + !descriptions.hasOwnProperty(key) && + !demanded.hasOwnProperty(key) && + !aliasLookup.hasOwnProperty(key)) { + unknown.push(key) + } + }) + + if (unknown.length === 1) { + usage.fail('Unknown argument: ' + unknown[0]) + } else if (unknown.length > 1) { + usage.fail('Unknown arguments: ' + unknown.join(', ')) + } + } + + // custom checks, added using the `check` option on yargs. + var checks = [] + self.check = function (f) { + checks.push(f) + } + + self.customChecks = function (argv, aliases) { + checks.forEach(function (f) { + try { + var result = f(argv, aliases) + if (!result) { + usage.fail('Argument check failed: ' + f.toString()) + } else if (typeof result === 'string') { + usage.fail(result) + } + } catch (err) { + usage.fail(err.message ? err.message : err) + } + }) + } + + // check implications, argument foo implies => argument bar. + var implied = {} + self.implies = function (key, value) { + if (typeof key === 'object') { + Object.keys(key).forEach(function (k) { + self.implies(k, key[k]) + }) + } else { + implied[key] = value + } + } + self.getImplied = function () { + return implied + } + + self.implications = function (argv) { + var implyFail = [] + + Object.keys(implied).forEach(function (key) { + var num, + origKey = key, + value = implied[key] + + // convert string '1' to number 1 + num = Number(key) + key = isNaN(num) ? key : num + + if (typeof key === 'number') { + // check length of argv._ + key = argv._.length >= key + } else if (key.match(/^--no-.+/)) { + // check if key doesn't exist + key = key.match(/^--no-(.+)/)[1] + key = !argv[key] + } else { + // check if key exists + key = argv[key] + } + + num = Number(value) + value = isNaN(num) ? value : num + + if (typeof value === 'number') { + value = argv._.length >= value + } else if (value.match(/^--no-.+/)) { + value = value.match(/^--no-(.+)/)[1] + value = !argv[value] + } else { + value = argv[value] + } + + if (key && !value) { + implyFail.push(origKey) + } + }) + + if (implyFail.length) { + var msg = 'Implications failed:\n' + + implyFail.forEach(function (key) { + msg += (' ' + key + ' -> ' + implied[key]) + }) + + usage.fail(msg) + } + } + + return self +} diff --git a/node_modules/uglify-js/node_modules/yargs/package.json b/node_modules/uglify-js/node_modules/yargs/package.json new file mode 100644 index 000000000..803cb3aae --- /dev/null +++ b/node_modules/uglify-js/node_modules/yargs/package.json @@ -0,0 +1,114 @@ +{ + "_from": "yargs@~3.10.0", + "_id": "yargs@3.10.0", + "_inBundle": false, + "_integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "_location": "/uglify-js/yargs", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "yargs@~3.10.0", + "name": "yargs", + "escapedName": "yargs", + "rawSpec": "~3.10.0", + "saveSpec": null, + "fetchSpec": "~3.10.0" + }, + "_requiredBy": [ + "/uglify-js" + ], + "_resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "_shasum": "f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1", + "_spec": "yargs@~3.10.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/uglify-js", + "author": { + "name": "Alex Ford", + "email": "Alex.Ford@CodeTunnel.com", + "url": "http://CodeTunnel.com" + }, + "bugs": { + "url": "https://github.com/bcoe/yargs/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Benjamin Coe", + "email": "ben@npmjs.com", + "url": "https://github.com/bcoe" + }, + { + "name": "Chris Needham", + "email": "chris@chrisneedham.com", + "url": "http://chrisneedham.com" + }, + { + "name": "James Nylen", + "email": "jnylen@gmail.com", + "url": "https://github.com/nylen" + }, + { + "name": "Benjamin Horsleben", + "url": "https://github.com/fizker" + }, + { + "name": "Lin Clark", + "url": "https://github.com/linclark" + } + ], + "dependencies": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + }, + "deprecated": false, + "description": "Light-weight option parsing with an argv hash. No optstrings attached.", + "devDependencies": { + "chai": "^2.2.0", + "coveralls": "^2.11.2", + "hashish": "0.0.4", + "mocha": "^2.2.1", + "nyc": "^2.2.1", + "standard": "^3.11.1" + }, + "engine": { + "node": ">=0.4" + }, + "files": [ + "index.js", + "lib", + "completion.sh.hbs", + "LICENSE" + ], + "homepage": "https://github.com/bcoe/yargs#readme", + "keywords": [ + "argument", + "args", + "option", + "parser", + "parsing", + "cli", + "command" + ], + "license": "MIT", + "main": "./index.js", + "name": "yargs", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/bcoe/yargs.git" + }, + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "test": "standard && nyc mocha --check-leaks && nyc report" + }, + "standard": { + "ignore": [ + "**/example/**" + ], + "globals": [ + "it" + ] + }, + "version": "3.10.0" +} diff --git a/node_modules/uglify-js/package.json b/node_modules/uglify-js/package.json new file mode 100644 index 000000000..1fdf4604b --- /dev/null +++ b/node_modules/uglify-js/package.json @@ -0,0 +1,95 @@ +{ + "_from": "uglify-js@^2.8.29", + "_id": "uglify-js@2.8.29", + "_inBundle": false, + "_integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "_location": "/uglify-js", + "_phantomChildren": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + }, + "_requested": { + "type": "range", + "registry": true, + "raw": "uglify-js@^2.8.29", + "name": "uglify-js", + "escapedName": "uglify-js", + "rawSpec": "^2.8.29", + "saveSpec": null, + "fetchSpec": "^2.8.29" + }, + "_requiredBy": [ + "/uglifyjs-webpack-plugin" + ], + "_resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "_shasum": "29c5733148057bb4e1f75df35b7a9cb72e6a59dd", + "_spec": "uglify-js@^2.8.29", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/uglifyjs-webpack-plugin", + "author": { + "name": "Mihai Bazon", + "email": "mihai.bazon@gmail.com", + "url": "http://lisperator.net/" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "browserify": { + "transform": [ + "uglify-to-browserify" + ] + }, + "bugs": { + "url": "https://github.com/mishoo/UglifyJS2/issues" + }, + "bundleDependencies": false, + "dependencies": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "deprecated": false, + "description": "JavaScript parser, mangler/compressor and beautifier toolkit", + "devDependencies": { + "acorn": "~5.0.3", + "mocha": "~2.3.4" + }, + "engines": { + "node": ">=0.8.0" + }, + "files": [ + "bin", + "lib", + "tools", + "LICENSE" + ], + "homepage": "http://lisperator.net/uglifyjs", + "keywords": [ + "uglify", + "uglify-js", + "minify", + "minifier" + ], + "license": "BSD-2-Clause", + "main": "tools/node.js", + "maintainers": [ + { + "name": "Mihai Bazon", + "email": "mihai.bazon@gmail.com", + "url": "http://lisperator.net/" + } + ], + "name": "uglify-js", + "optionalDependencies": { + "uglify-to-browserify": "~1.0.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/mishoo/UglifyJS2.git" + }, + "scripts": { + "test": "node test/run-tests.js" + }, + "version": "2.8.29" +} diff --git a/node_modules/uglify-js/tools/domprops.json b/node_modules/uglify-js/tools/domprops.json new file mode 100644 index 000000000..6f6c221db --- /dev/null +++ b/node_modules/uglify-js/tools/domprops.json @@ -0,0 +1,5603 @@ +{ + "props": [ + "$&", + "$'", + "$*", + "$+", + "$1", + "$2", + "$3", + "$4", + "$5", + "$6", + "$7", + "$8", + "$9", + "$_", + "$`", + "$input", + "@@iterator", + "ABORT_ERR", + "ACTIVE", + "ACTIVE_ATTRIBUTES", + "ACTIVE_TEXTURE", + "ACTIVE_UNIFORMS", + "ADDITION", + "ALIASED_LINE_WIDTH_RANGE", + "ALIASED_POINT_SIZE_RANGE", + "ALLOW_KEYBOARD_INPUT", + "ALLPASS", + "ALPHA", + "ALPHA_BITS", + "ALT_MASK", + "ALWAYS", + "ANY_TYPE", + "ANY_UNORDERED_NODE_TYPE", + "ARRAY_BUFFER", + "ARRAY_BUFFER_BINDING", + "ATTACHED_SHADERS", + "ATTRIBUTE_NODE", + "AT_TARGET", + "AddSearchProvider", + "AnalyserNode", + "AnimationEvent", + "AnonXMLHttpRequest", + "ApplicationCache", + "ApplicationCacheErrorEvent", + "Array", + "ArrayBuffer", + "Attr", + "Audio", + "AudioBuffer", + "AudioBufferSourceNode", + "AudioContext", + "AudioDestinationNode", + "AudioListener", + "AudioNode", + "AudioParam", + "AudioProcessingEvent", + "AudioStreamTrack", + "AutocompleteErrorEvent", + "BACK", + "BAD_BOUNDARYPOINTS_ERR", + "BANDPASS", + "BLEND", + "BLEND_COLOR", + "BLEND_DST_ALPHA", + "BLEND_DST_RGB", + "BLEND_EQUATION", + "BLEND_EQUATION_ALPHA", + "BLEND_EQUATION_RGB", + "BLEND_SRC_ALPHA", + "BLEND_SRC_RGB", + "BLUE_BITS", + "BLUR", + "BOOL", + "BOOLEAN_TYPE", + "BOOL_VEC2", + "BOOL_VEC3", + "BOOL_VEC4", + "BOTH", + "BROWSER_DEFAULT_WEBGL", + "BUBBLING_PHASE", + "BUFFER_SIZE", + "BUFFER_USAGE", + "BYTE", + "BYTES_PER_ELEMENT", + "BarProp", + "BaseHref", + "BatteryManager", + "BeforeLoadEvent", + "BeforeUnloadEvent", + "BiquadFilterNode", + "Blob", + "BlobEvent", + "Boolean", + "CAPTURING_PHASE", + "CCW", + "CDATASection", + "CDATA_SECTION_NODE", + "CHANGE", + "CHARSET_RULE", + "CHECKING", + "CLAMP_TO_EDGE", + "CLICK", + "CLOSED", + "CLOSING", + "COLOR_ATTACHMENT0", + "COLOR_BUFFER_BIT", + "COLOR_CLEAR_VALUE", + "COLOR_WRITEMASK", + "COMMENT_NODE", + "COMPILE_STATUS", + "COMPRESSED_RGBA_S3TC_DXT1_EXT", + "COMPRESSED_RGBA_S3TC_DXT3_EXT", + "COMPRESSED_RGBA_S3TC_DXT5_EXT", + "COMPRESSED_RGB_S3TC_DXT1_EXT", + "COMPRESSED_TEXTURE_FORMATS", + "CONNECTING", + "CONSTANT_ALPHA", + "CONSTANT_COLOR", + "CONSTRAINT_ERR", + "CONTEXT_LOST_WEBGL", + "CONTROL_MASK", + "COUNTER_STYLE_RULE", + "CSS", + "CSS2Properties", + "CSSCharsetRule", + "CSSConditionRule", + "CSSCounterStyleRule", + "CSSFontFaceRule", + "CSSFontFeatureValuesRule", + "CSSGroupingRule", + "CSSImportRule", + "CSSKeyframeRule", + "CSSKeyframesRule", + "CSSMediaRule", + "CSSMozDocumentRule", + "CSSNameSpaceRule", + "CSSPageRule", + "CSSPrimitiveValue", + "CSSRule", + "CSSRuleList", + "CSSStyleDeclaration", + "CSSStyleRule", + "CSSStyleSheet", + "CSSSupportsRule", + "CSSUnknownRule", + "CSSValue", + "CSSValueList", + "CSSVariablesDeclaration", + "CSSVariablesRule", + "CSSViewportRule", + "CSS_ATTR", + "CSS_CM", + "CSS_COUNTER", + "CSS_CUSTOM", + "CSS_DEG", + "CSS_DIMENSION", + "CSS_EMS", + "CSS_EXS", + "CSS_FILTER_BLUR", + "CSS_FILTER_BRIGHTNESS", + "CSS_FILTER_CONTRAST", + "CSS_FILTER_CUSTOM", + "CSS_FILTER_DROP_SHADOW", + "CSS_FILTER_GRAYSCALE", + "CSS_FILTER_HUE_ROTATE", + "CSS_FILTER_INVERT", + "CSS_FILTER_OPACITY", + "CSS_FILTER_REFERENCE", + "CSS_FILTER_SATURATE", + "CSS_FILTER_SEPIA", + "CSS_GRAD", + "CSS_HZ", + "CSS_IDENT", + "CSS_IN", + "CSS_INHERIT", + "CSS_KHZ", + "CSS_MATRIX", + "CSS_MATRIX3D", + "CSS_MM", + "CSS_MS", + "CSS_NUMBER", + "CSS_PC", + "CSS_PERCENTAGE", + "CSS_PERSPECTIVE", + "CSS_PRIMITIVE_VALUE", + "CSS_PT", + "CSS_PX", + "CSS_RAD", + "CSS_RECT", + "CSS_RGBCOLOR", + "CSS_ROTATE", + "CSS_ROTATE3D", + "CSS_ROTATEX", + "CSS_ROTATEY", + "CSS_ROTATEZ", + "CSS_S", + "CSS_SCALE", + "CSS_SCALE3D", + "CSS_SCALEX", + "CSS_SCALEY", + "CSS_SCALEZ", + "CSS_SKEW", + "CSS_SKEWX", + "CSS_SKEWY", + "CSS_STRING", + "CSS_TRANSLATE", + "CSS_TRANSLATE3D", + "CSS_TRANSLATEX", + "CSS_TRANSLATEY", + "CSS_TRANSLATEZ", + "CSS_UNKNOWN", + "CSS_URI", + "CSS_VALUE_LIST", + "CSS_VH", + "CSS_VMAX", + "CSS_VMIN", + "CSS_VW", + "CULL_FACE", + "CULL_FACE_MODE", + "CURRENT_PROGRAM", + "CURRENT_VERTEX_ATTRIB", + "CUSTOM", + "CW", + "CanvasGradient", + "CanvasPattern", + "CanvasRenderingContext2D", + "CaretPosition", + "ChannelMergerNode", + "ChannelSplitterNode", + "CharacterData", + "ClientRect", + "ClientRectList", + "Clipboard", + "ClipboardEvent", + "CloseEvent", + "Collator", + "CommandEvent", + "Comment", + "CompositionEvent", + "Console", + "Controllers", + "ConvolverNode", + "Counter", + "Crypto", + "CryptoKey", + "CustomEvent", + "DATABASE_ERR", + "DATA_CLONE_ERR", + "DATA_ERR", + "DBLCLICK", + "DECR", + "DECR_WRAP", + "DELETE_STATUS", + "DEPTH_ATTACHMENT", + "DEPTH_BITS", + "DEPTH_BUFFER_BIT", + "DEPTH_CLEAR_VALUE", + "DEPTH_COMPONENT", + "DEPTH_COMPONENT16", + "DEPTH_FUNC", + "DEPTH_RANGE", + "DEPTH_STENCIL", + "DEPTH_STENCIL_ATTACHMENT", + "DEPTH_TEST", + "DEPTH_WRITEMASK", + "DIRECTION_DOWN", + "DIRECTION_LEFT", + "DIRECTION_RIGHT", + "DIRECTION_UP", + "DISABLED", + "DISPATCH_REQUEST_ERR", + "DITHER", + "DOCUMENT_FRAGMENT_NODE", + "DOCUMENT_NODE", + "DOCUMENT_POSITION_CONTAINED_BY", + "DOCUMENT_POSITION_CONTAINS", + "DOCUMENT_POSITION_DISCONNECTED", + "DOCUMENT_POSITION_FOLLOWING", + "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", + "DOCUMENT_POSITION_PRECEDING", + "DOCUMENT_TYPE_NODE", + "DOMCursor", + "DOMError", + "DOMException", + "DOMImplementation", + "DOMImplementationLS", + "DOMMatrix", + "DOMMatrixReadOnly", + "DOMParser", + "DOMPoint", + "DOMPointReadOnly", + "DOMQuad", + "DOMRect", + "DOMRectList", + "DOMRectReadOnly", + "DOMRequest", + "DOMSTRING_SIZE_ERR", + "DOMSettableTokenList", + "DOMStringList", + "DOMStringMap", + "DOMTokenList", + "DOMTransactionEvent", + "DOM_DELTA_LINE", + "DOM_DELTA_PAGE", + "DOM_DELTA_PIXEL", + "DOM_INPUT_METHOD_DROP", + "DOM_INPUT_METHOD_HANDWRITING", + "DOM_INPUT_METHOD_IME", + "DOM_INPUT_METHOD_KEYBOARD", + "DOM_INPUT_METHOD_MULTIMODAL", + "DOM_INPUT_METHOD_OPTION", + "DOM_INPUT_METHOD_PASTE", + "DOM_INPUT_METHOD_SCRIPT", + "DOM_INPUT_METHOD_UNKNOWN", + "DOM_INPUT_METHOD_VOICE", + "DOM_KEY_LOCATION_JOYSTICK", + "DOM_KEY_LOCATION_LEFT", + "DOM_KEY_LOCATION_MOBILE", + "DOM_KEY_LOCATION_NUMPAD", + "DOM_KEY_LOCATION_RIGHT", + "DOM_KEY_LOCATION_STANDARD", + "DOM_VK_0", + "DOM_VK_1", + "DOM_VK_2", + "DOM_VK_3", + "DOM_VK_4", + "DOM_VK_5", + "DOM_VK_6", + "DOM_VK_7", + "DOM_VK_8", + "DOM_VK_9", + "DOM_VK_A", + "DOM_VK_ACCEPT", + "DOM_VK_ADD", + "DOM_VK_ALT", + "DOM_VK_ALTGR", + "DOM_VK_AMPERSAND", + "DOM_VK_ASTERISK", + "DOM_VK_AT", + "DOM_VK_ATTN", + "DOM_VK_B", + "DOM_VK_BACKSPACE", + "DOM_VK_BACK_QUOTE", + "DOM_VK_BACK_SLASH", + "DOM_VK_BACK_SPACE", + "DOM_VK_C", + "DOM_VK_CANCEL", + "DOM_VK_CAPS_LOCK", + "DOM_VK_CIRCUMFLEX", + "DOM_VK_CLEAR", + "DOM_VK_CLOSE_BRACKET", + "DOM_VK_CLOSE_CURLY_BRACKET", + "DOM_VK_CLOSE_PAREN", + "DOM_VK_COLON", + "DOM_VK_COMMA", + "DOM_VK_CONTEXT_MENU", + "DOM_VK_CONTROL", + "DOM_VK_CONVERT", + "DOM_VK_CRSEL", + "DOM_VK_CTRL", + "DOM_VK_D", + "DOM_VK_DECIMAL", + "DOM_VK_DELETE", + "DOM_VK_DIVIDE", + "DOM_VK_DOLLAR", + "DOM_VK_DOUBLE_QUOTE", + "DOM_VK_DOWN", + "DOM_VK_E", + "DOM_VK_EISU", + "DOM_VK_END", + "DOM_VK_ENTER", + "DOM_VK_EQUALS", + "DOM_VK_EREOF", + "DOM_VK_ESCAPE", + "DOM_VK_EXCLAMATION", + "DOM_VK_EXECUTE", + "DOM_VK_EXSEL", + "DOM_VK_F", + "DOM_VK_F1", + "DOM_VK_F10", + "DOM_VK_F11", + "DOM_VK_F12", + "DOM_VK_F13", + "DOM_VK_F14", + "DOM_VK_F15", + "DOM_VK_F16", + "DOM_VK_F17", + "DOM_VK_F18", + "DOM_VK_F19", + "DOM_VK_F2", + "DOM_VK_F20", + "DOM_VK_F21", + "DOM_VK_F22", + "DOM_VK_F23", + "DOM_VK_F24", + "DOM_VK_F25", + "DOM_VK_F26", + "DOM_VK_F27", + "DOM_VK_F28", + "DOM_VK_F29", + "DOM_VK_F3", + "DOM_VK_F30", + "DOM_VK_F31", + "DOM_VK_F32", + "DOM_VK_F33", + "DOM_VK_F34", + "DOM_VK_F35", + "DOM_VK_F36", + "DOM_VK_F4", + "DOM_VK_F5", + "DOM_VK_F6", + "DOM_VK_F7", + "DOM_VK_F8", + "DOM_VK_F9", + "DOM_VK_FINAL", + "DOM_VK_FRONT", + "DOM_VK_G", + "DOM_VK_GREATER_THAN", + "DOM_VK_H", + "DOM_VK_HANGUL", + "DOM_VK_HANJA", + "DOM_VK_HASH", + "DOM_VK_HELP", + "DOM_VK_HK_TOGGLE", + "DOM_VK_HOME", + "DOM_VK_HYPHEN_MINUS", + "DOM_VK_I", + "DOM_VK_INSERT", + "DOM_VK_J", + "DOM_VK_JUNJA", + "DOM_VK_K", + "DOM_VK_KANA", + "DOM_VK_KANJI", + "DOM_VK_L", + "DOM_VK_LEFT", + "DOM_VK_LEFT_TAB", + "DOM_VK_LESS_THAN", + "DOM_VK_M", + "DOM_VK_META", + "DOM_VK_MODECHANGE", + "DOM_VK_MULTIPLY", + "DOM_VK_N", + "DOM_VK_NONCONVERT", + "DOM_VK_NUMPAD0", + "DOM_VK_NUMPAD1", + "DOM_VK_NUMPAD2", + "DOM_VK_NUMPAD3", + "DOM_VK_NUMPAD4", + "DOM_VK_NUMPAD5", + "DOM_VK_NUMPAD6", + "DOM_VK_NUMPAD7", + "DOM_VK_NUMPAD8", + "DOM_VK_NUMPAD9", + "DOM_VK_NUM_LOCK", + "DOM_VK_O", + "DOM_VK_OEM_1", + "DOM_VK_OEM_102", + "DOM_VK_OEM_2", + "DOM_VK_OEM_3", + "DOM_VK_OEM_4", + "DOM_VK_OEM_5", + "DOM_VK_OEM_6", + "DOM_VK_OEM_7", + "DOM_VK_OEM_8", + "DOM_VK_OEM_COMMA", + "DOM_VK_OEM_MINUS", + "DOM_VK_OEM_PERIOD", + "DOM_VK_OEM_PLUS", + "DOM_VK_OPEN_BRACKET", + "DOM_VK_OPEN_CURLY_BRACKET", + "DOM_VK_OPEN_PAREN", + "DOM_VK_P", + "DOM_VK_PA1", + "DOM_VK_PAGEDOWN", + "DOM_VK_PAGEUP", + "DOM_VK_PAGE_DOWN", + "DOM_VK_PAGE_UP", + "DOM_VK_PAUSE", + "DOM_VK_PERCENT", + "DOM_VK_PERIOD", + "DOM_VK_PIPE", + "DOM_VK_PLAY", + "DOM_VK_PLUS", + "DOM_VK_PRINT", + "DOM_VK_PRINTSCREEN", + "DOM_VK_PROCESSKEY", + "DOM_VK_PROPERITES", + "DOM_VK_Q", + "DOM_VK_QUESTION_MARK", + "DOM_VK_QUOTE", + "DOM_VK_R", + "DOM_VK_REDO", + "DOM_VK_RETURN", + "DOM_VK_RIGHT", + "DOM_VK_S", + "DOM_VK_SCROLL_LOCK", + "DOM_VK_SELECT", + "DOM_VK_SEMICOLON", + "DOM_VK_SEPARATOR", + "DOM_VK_SHIFT", + "DOM_VK_SLASH", + "DOM_VK_SLEEP", + "DOM_VK_SPACE", + "DOM_VK_SUBTRACT", + "DOM_VK_T", + "DOM_VK_TAB", + "DOM_VK_TILDE", + "DOM_VK_U", + "DOM_VK_UNDERSCORE", + "DOM_VK_UNDO", + "DOM_VK_UNICODE", + "DOM_VK_UP", + "DOM_VK_V", + "DOM_VK_VOLUME_DOWN", + "DOM_VK_VOLUME_MUTE", + "DOM_VK_VOLUME_UP", + "DOM_VK_W", + "DOM_VK_WIN", + "DOM_VK_WINDOW", + "DOM_VK_WIN_ICO_00", + "DOM_VK_WIN_ICO_CLEAR", + "DOM_VK_WIN_ICO_HELP", + "DOM_VK_WIN_OEM_ATTN", + "DOM_VK_WIN_OEM_AUTO", + "DOM_VK_WIN_OEM_BACKTAB", + "DOM_VK_WIN_OEM_CLEAR", + "DOM_VK_WIN_OEM_COPY", + "DOM_VK_WIN_OEM_CUSEL", + "DOM_VK_WIN_OEM_ENLW", + "DOM_VK_WIN_OEM_FINISH", + "DOM_VK_WIN_OEM_FJ_JISHO", + "DOM_VK_WIN_OEM_FJ_LOYA", + "DOM_VK_WIN_OEM_FJ_MASSHOU", + "DOM_VK_WIN_OEM_FJ_ROYA", + "DOM_VK_WIN_OEM_FJ_TOUROKU", + "DOM_VK_WIN_OEM_JUMP", + "DOM_VK_WIN_OEM_PA1", + "DOM_VK_WIN_OEM_PA2", + "DOM_VK_WIN_OEM_PA3", + "DOM_VK_WIN_OEM_RESET", + "DOM_VK_WIN_OEM_WSCTRL", + "DOM_VK_X", + "DOM_VK_XF86XK_ADD_FAVORITE", + "DOM_VK_XF86XK_APPLICATION_LEFT", + "DOM_VK_XF86XK_APPLICATION_RIGHT", + "DOM_VK_XF86XK_AUDIO_CYCLE_TRACK", + "DOM_VK_XF86XK_AUDIO_FORWARD", + "DOM_VK_XF86XK_AUDIO_LOWER_VOLUME", + "DOM_VK_XF86XK_AUDIO_MEDIA", + "DOM_VK_XF86XK_AUDIO_MUTE", + "DOM_VK_XF86XK_AUDIO_NEXT", + "DOM_VK_XF86XK_AUDIO_PAUSE", + "DOM_VK_XF86XK_AUDIO_PLAY", + "DOM_VK_XF86XK_AUDIO_PREV", + "DOM_VK_XF86XK_AUDIO_RAISE_VOLUME", + "DOM_VK_XF86XK_AUDIO_RANDOM_PLAY", + "DOM_VK_XF86XK_AUDIO_RECORD", + "DOM_VK_XF86XK_AUDIO_REPEAT", + "DOM_VK_XF86XK_AUDIO_REWIND", + "DOM_VK_XF86XK_AUDIO_STOP", + "DOM_VK_XF86XK_AWAY", + "DOM_VK_XF86XK_BACK", + "DOM_VK_XF86XK_BACK_FORWARD", + "DOM_VK_XF86XK_BATTERY", + "DOM_VK_XF86XK_BLUE", + "DOM_VK_XF86XK_BLUETOOTH", + "DOM_VK_XF86XK_BOOK", + "DOM_VK_XF86XK_BRIGHTNESS_ADJUST", + "DOM_VK_XF86XK_CALCULATOR", + "DOM_VK_XF86XK_CALENDAR", + "DOM_VK_XF86XK_CD", + "DOM_VK_XF86XK_CLOSE", + "DOM_VK_XF86XK_COMMUNITY", + "DOM_VK_XF86XK_CONTRAST_ADJUST", + "DOM_VK_XF86XK_COPY", + "DOM_VK_XF86XK_CUT", + "DOM_VK_XF86XK_CYCLE_ANGLE", + "DOM_VK_XF86XK_DISPLAY", + "DOM_VK_XF86XK_DOCUMENTS", + "DOM_VK_XF86XK_DOS", + "DOM_VK_XF86XK_EJECT", + "DOM_VK_XF86XK_EXCEL", + "DOM_VK_XF86XK_EXPLORER", + "DOM_VK_XF86XK_FAVORITES", + "DOM_VK_XF86XK_FINANCE", + "DOM_VK_XF86XK_FORWARD", + "DOM_VK_XF86XK_FRAME_BACK", + "DOM_VK_XF86XK_FRAME_FORWARD", + "DOM_VK_XF86XK_GAME", + "DOM_VK_XF86XK_GO", + "DOM_VK_XF86XK_GREEN", + "DOM_VK_XF86XK_HIBERNATE", + "DOM_VK_XF86XK_HISTORY", + "DOM_VK_XF86XK_HOME_PAGE", + "DOM_VK_XF86XK_HOT_LINKS", + "DOM_VK_XF86XK_I_TOUCH", + "DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN", + "DOM_VK_XF86XK_KBD_BRIGHTNESS_UP", + "DOM_VK_XF86XK_KBD_LIGHT_ON_OFF", + "DOM_VK_XF86XK_LAUNCH0", + "DOM_VK_XF86XK_LAUNCH1", + "DOM_VK_XF86XK_LAUNCH2", + "DOM_VK_XF86XK_LAUNCH3", + "DOM_VK_XF86XK_LAUNCH4", + "DOM_VK_XF86XK_LAUNCH5", + "DOM_VK_XF86XK_LAUNCH6", + "DOM_VK_XF86XK_LAUNCH7", + "DOM_VK_XF86XK_LAUNCH8", + "DOM_VK_XF86XK_LAUNCH9", + "DOM_VK_XF86XK_LAUNCH_A", + "DOM_VK_XF86XK_LAUNCH_B", + "DOM_VK_XF86XK_LAUNCH_C", + "DOM_VK_XF86XK_LAUNCH_D", + "DOM_VK_XF86XK_LAUNCH_E", + "DOM_VK_XF86XK_LAUNCH_F", + "DOM_VK_XF86XK_LIGHT_BULB", + "DOM_VK_XF86XK_LOG_OFF", + "DOM_VK_XF86XK_MAIL", + "DOM_VK_XF86XK_MAIL_FORWARD", + "DOM_VK_XF86XK_MARKET", + "DOM_VK_XF86XK_MEETING", + "DOM_VK_XF86XK_MEMO", + "DOM_VK_XF86XK_MENU_KB", + "DOM_VK_XF86XK_MENU_PB", + "DOM_VK_XF86XK_MESSENGER", + "DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN", + "DOM_VK_XF86XK_MON_BRIGHTNESS_UP", + "DOM_VK_XF86XK_MUSIC", + "DOM_VK_XF86XK_MY_COMPUTER", + "DOM_VK_XF86XK_MY_SITES", + "DOM_VK_XF86XK_NEW", + "DOM_VK_XF86XK_NEWS", + "DOM_VK_XF86XK_OFFICE_HOME", + "DOM_VK_XF86XK_OPEN", + "DOM_VK_XF86XK_OPEN_URL", + "DOM_VK_XF86XK_OPTION", + "DOM_VK_XF86XK_PASTE", + "DOM_VK_XF86XK_PHONE", + "DOM_VK_XF86XK_PICTURES", + "DOM_VK_XF86XK_POWER_DOWN", + "DOM_VK_XF86XK_POWER_OFF", + "DOM_VK_XF86XK_RED", + "DOM_VK_XF86XK_REFRESH", + "DOM_VK_XF86XK_RELOAD", + "DOM_VK_XF86XK_REPLY", + "DOM_VK_XF86XK_ROCKER_DOWN", + "DOM_VK_XF86XK_ROCKER_ENTER", + "DOM_VK_XF86XK_ROCKER_UP", + "DOM_VK_XF86XK_ROTATE_WINDOWS", + "DOM_VK_XF86XK_ROTATION_KB", + "DOM_VK_XF86XK_ROTATION_PB", + "DOM_VK_XF86XK_SAVE", + "DOM_VK_XF86XK_SCREEN_SAVER", + "DOM_VK_XF86XK_SCROLL_CLICK", + "DOM_VK_XF86XK_SCROLL_DOWN", + "DOM_VK_XF86XK_SCROLL_UP", + "DOM_VK_XF86XK_SEARCH", + "DOM_VK_XF86XK_SEND", + "DOM_VK_XF86XK_SHOP", + "DOM_VK_XF86XK_SPELL", + "DOM_VK_XF86XK_SPLIT_SCREEN", + "DOM_VK_XF86XK_STANDBY", + "DOM_VK_XF86XK_START", + "DOM_VK_XF86XK_STOP", + "DOM_VK_XF86XK_SUBTITLE", + "DOM_VK_XF86XK_SUPPORT", + "DOM_VK_XF86XK_SUSPEND", + "DOM_VK_XF86XK_TASK_PANE", + "DOM_VK_XF86XK_TERMINAL", + "DOM_VK_XF86XK_TIME", + "DOM_VK_XF86XK_TOOLS", + "DOM_VK_XF86XK_TOP_MENU", + "DOM_VK_XF86XK_TO_DO_LIST", + "DOM_VK_XF86XK_TRAVEL", + "DOM_VK_XF86XK_USER1KB", + "DOM_VK_XF86XK_USER2KB", + "DOM_VK_XF86XK_USER_PB", + "DOM_VK_XF86XK_UWB", + "DOM_VK_XF86XK_VENDOR_HOME", + "DOM_VK_XF86XK_VIDEO", + "DOM_VK_XF86XK_VIEW", + "DOM_VK_XF86XK_WAKE_UP", + "DOM_VK_XF86XK_WEB_CAM", + "DOM_VK_XF86XK_WHEEL_BUTTON", + "DOM_VK_XF86XK_WLAN", + "DOM_VK_XF86XK_WORD", + "DOM_VK_XF86XK_WWW", + "DOM_VK_XF86XK_XFER", + "DOM_VK_XF86XK_YELLOW", + "DOM_VK_XF86XK_ZOOM_IN", + "DOM_VK_XF86XK_ZOOM_OUT", + "DOM_VK_Y", + "DOM_VK_Z", + "DOM_VK_ZOOM", + "DONE", + "DONT_CARE", + "DOWNLOADING", + "DRAGDROP", + "DST_ALPHA", + "DST_COLOR", + "DYNAMIC_DRAW", + "DataChannel", + "DataTransfer", + "DataTransferItem", + "DataTransferItemList", + "DataView", + "Date", + "DateTimeFormat", + "DelayNode", + "DesktopNotification", + "DesktopNotificationCenter", + "DeviceLightEvent", + "DeviceMotionEvent", + "DeviceOrientationEvent", + "DeviceProximityEvent", + "DeviceStorage", + "DeviceStorageChangeEvent", + "Document", + "DocumentFragment", + "DocumentType", + "DragEvent", + "DynamicsCompressorNode", + "E", + "ELEMENT_ARRAY_BUFFER", + "ELEMENT_ARRAY_BUFFER_BINDING", + "ELEMENT_NODE", + "EMPTY", + "ENCODING_ERR", + "ENDED", + "END_TO_END", + "END_TO_START", + "ENTITY_NODE", + "ENTITY_REFERENCE_NODE", + "EPSILON", + "EQUAL", + "EQUALPOWER", + "ERROR", + "EXPONENTIAL_DISTANCE", + "Element", + "ElementQuery", + "Entity", + "EntityReference", + "Error", + "ErrorEvent", + "EvalError", + "Event", + "EventException", + "EventSource", + "EventTarget", + "External", + "FASTEST", + "FIDOSDK", + "FILTER_ACCEPT", + "FILTER_INTERRUPT", + "FILTER_REJECT", + "FILTER_SKIP", + "FINISHED_STATE", + "FIRST_ORDERED_NODE_TYPE", + "FLOAT", + "FLOAT_MAT2", + "FLOAT_MAT3", + "FLOAT_MAT4", + "FLOAT_VEC2", + "FLOAT_VEC3", + "FLOAT_VEC4", + "FOCUS", + "FONT_FACE_RULE", + "FONT_FEATURE_VALUES_RULE", + "FRAGMENT_SHADER", + "FRAGMENT_SHADER_DERIVATIVE_HINT_OES", + "FRAMEBUFFER", + "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME", + "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", + "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE", + "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", + "FRAMEBUFFER_BINDING", + "FRAMEBUFFER_COMPLETE", + "FRAMEBUFFER_INCOMPLETE_ATTACHMENT", + "FRAMEBUFFER_INCOMPLETE_DIMENSIONS", + "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", + "FRAMEBUFFER_UNSUPPORTED", + "FRONT", + "FRONT_AND_BACK", + "FRONT_FACE", + "FUNC_ADD", + "FUNC_REVERSE_SUBTRACT", + "FUNC_SUBTRACT", + "Feed", + "FeedEntry", + "File", + "FileError", + "FileList", + "FileReader", + "FindInPage", + "Float32Array", + "Float64Array", + "FocusEvent", + "FontFace", + "FormData", + "Function", + "GENERATE_MIPMAP_HINT", + "GEQUAL", + "GREATER", + "GREEN_BITS", + "GainNode", + "Gamepad", + "GamepadButton", + "GamepadEvent", + "GestureEvent", + "HAVE_CURRENT_DATA", + "HAVE_ENOUGH_DATA", + "HAVE_FUTURE_DATA", + "HAVE_METADATA", + "HAVE_NOTHING", + "HEADERS_RECEIVED", + "HIDDEN", + "HIERARCHY_REQUEST_ERR", + "HIGHPASS", + "HIGHSHELF", + "HIGH_FLOAT", + "HIGH_INT", + "HORIZONTAL", + "HORIZONTAL_AXIS", + "HRTF", + "HTMLAllCollection", + "HTMLAnchorElement", + "HTMLAppletElement", + "HTMLAreaElement", + "HTMLAudioElement", + "HTMLBRElement", + "HTMLBaseElement", + "HTMLBaseFontElement", + "HTMLBlockquoteElement", + "HTMLBodyElement", + "HTMLButtonElement", + "HTMLCanvasElement", + "HTMLCollection", + "HTMLCommandElement", + "HTMLContentElement", + "HTMLDListElement", + "HTMLDataElement", + "HTMLDataListElement", + "HTMLDetailsElement", + "HTMLDialogElement", + "HTMLDirectoryElement", + "HTMLDivElement", + "HTMLDocument", + "HTMLElement", + "HTMLEmbedElement", + "HTMLFieldSetElement", + "HTMLFontElement", + "HTMLFormControlsCollection", + "HTMLFormElement", + "HTMLFrameElement", + "HTMLFrameSetElement", + "HTMLHRElement", + "HTMLHeadElement", + "HTMLHeadingElement", + "HTMLHtmlElement", + "HTMLIFrameElement", + "HTMLImageElement", + "HTMLInputElement", + "HTMLIsIndexElement", + "HTMLKeygenElement", + "HTMLLIElement", + "HTMLLabelElement", + "HTMLLegendElement", + "HTMLLinkElement", + "HTMLMapElement", + "HTMLMarqueeElement", + "HTMLMediaElement", + "HTMLMenuElement", + "HTMLMenuItemElement", + "HTMLMetaElement", + "HTMLMeterElement", + "HTMLModElement", + "HTMLOListElement", + "HTMLObjectElement", + "HTMLOptGroupElement", + "HTMLOptionElement", + "HTMLOptionsCollection", + "HTMLOutputElement", + "HTMLParagraphElement", + "HTMLParamElement", + "HTMLPictureElement", + "HTMLPreElement", + "HTMLProgressElement", + "HTMLPropertiesCollection", + "HTMLQuoteElement", + "HTMLScriptElement", + "HTMLSelectElement", + "HTMLShadowElement", + "HTMLSourceElement", + "HTMLSpanElement", + "HTMLStyleElement", + "HTMLTableCaptionElement", + "HTMLTableCellElement", + "HTMLTableColElement", + "HTMLTableElement", + "HTMLTableRowElement", + "HTMLTableSectionElement", + "HTMLTemplateElement", + "HTMLTextAreaElement", + "HTMLTimeElement", + "HTMLTitleElement", + "HTMLTrackElement", + "HTMLUListElement", + "HTMLUnknownElement", + "HTMLVideoElement", + "HashChangeEvent", + "Headers", + "History", + "ICE_CHECKING", + "ICE_CLOSED", + "ICE_COMPLETED", + "ICE_CONNECTED", + "ICE_FAILED", + "ICE_GATHERING", + "ICE_WAITING", + "IDBCursor", + "IDBCursorWithValue", + "IDBDatabase", + "IDBDatabaseException", + "IDBFactory", + "IDBFileHandle", + "IDBFileRequest", + "IDBIndex", + "IDBKeyRange", + "IDBMutableFile", + "IDBObjectStore", + "IDBOpenDBRequest", + "IDBRequest", + "IDBTransaction", + "IDBVersionChangeEvent", + "IDLE", + "IMPLEMENTATION_COLOR_READ_FORMAT", + "IMPLEMENTATION_COLOR_READ_TYPE", + "IMPORT_RULE", + "INCR", + "INCR_WRAP", + "INDEX_SIZE_ERR", + "INT", + "INT_VEC2", + "INT_VEC3", + "INT_VEC4", + "INUSE_ATTRIBUTE_ERR", + "INVALID_ACCESS_ERR", + "INVALID_CHARACTER_ERR", + "INVALID_ENUM", + "INVALID_EXPRESSION_ERR", + "INVALID_FRAMEBUFFER_OPERATION", + "INVALID_MODIFICATION_ERR", + "INVALID_NODE_TYPE_ERR", + "INVALID_OPERATION", + "INVALID_STATE_ERR", + "INVALID_VALUE", + "INVERSE_DISTANCE", + "INVERT", + "IceCandidate", + "Image", + "ImageBitmap", + "ImageData", + "Infinity", + "InputEvent", + "InputMethodContext", + "InstallTrigger", + "Int16Array", + "Int32Array", + "Int8Array", + "Intent", + "InternalError", + "Intl", + "IsSearchProviderInstalled", + "Iterator", + "JSON", + "KEEP", + "KEYDOWN", + "KEYFRAMES_RULE", + "KEYFRAME_RULE", + "KEYPRESS", + "KEYUP", + "KeyEvent", + "KeyboardEvent", + "LENGTHADJUST_SPACING", + "LENGTHADJUST_SPACINGANDGLYPHS", + "LENGTHADJUST_UNKNOWN", + "LEQUAL", + "LESS", + "LINEAR", + "LINEAR_DISTANCE", + "LINEAR_MIPMAP_LINEAR", + "LINEAR_MIPMAP_NEAREST", + "LINES", + "LINE_LOOP", + "LINE_STRIP", + "LINE_WIDTH", + "LINK_STATUS", + "LIVE", + "LN10", + "LN2", + "LOADED", + "LOADING", + "LOG10E", + "LOG2E", + "LOWPASS", + "LOWSHELF", + "LOW_FLOAT", + "LOW_INT", + "LSException", + "LSParserFilter", + "LUMINANCE", + "LUMINANCE_ALPHA", + "LocalMediaStream", + "Location", + "MAX_COMBINED_TEXTURE_IMAGE_UNITS", + "MAX_CUBE_MAP_TEXTURE_SIZE", + "MAX_FRAGMENT_UNIFORM_VECTORS", + "MAX_RENDERBUFFER_SIZE", + "MAX_SAFE_INTEGER", + "MAX_TEXTURE_IMAGE_UNITS", + "MAX_TEXTURE_MAX_ANISOTROPY_EXT", + "MAX_TEXTURE_SIZE", + "MAX_VALUE", + "MAX_VARYING_VECTORS", + "MAX_VERTEX_ATTRIBS", + "MAX_VERTEX_TEXTURE_IMAGE_UNITS", + "MAX_VERTEX_UNIFORM_VECTORS", + "MAX_VIEWPORT_DIMS", + "MEDIA_ERR_ABORTED", + "MEDIA_ERR_DECODE", + "MEDIA_ERR_ENCRYPTED", + "MEDIA_ERR_NETWORK", + "MEDIA_ERR_SRC_NOT_SUPPORTED", + "MEDIA_KEYERR_CLIENT", + "MEDIA_KEYERR_DOMAIN", + "MEDIA_KEYERR_HARDWARECHANGE", + "MEDIA_KEYERR_OUTPUT", + "MEDIA_KEYERR_SERVICE", + "MEDIA_KEYERR_UNKNOWN", + "MEDIA_RULE", + "MEDIUM_FLOAT", + "MEDIUM_INT", + "META_MASK", + "MIN_SAFE_INTEGER", + "MIN_VALUE", + "MIRRORED_REPEAT", + "MODE_ASYNCHRONOUS", + "MODE_SYNCHRONOUS", + "MODIFICATION", + "MOUSEDOWN", + "MOUSEDRAG", + "MOUSEMOVE", + "MOUSEOUT", + "MOUSEOVER", + "MOUSEUP", + "MOZ_KEYFRAMES_RULE", + "MOZ_KEYFRAME_RULE", + "MOZ_SOURCE_CURSOR", + "MOZ_SOURCE_ERASER", + "MOZ_SOURCE_KEYBOARD", + "MOZ_SOURCE_MOUSE", + "MOZ_SOURCE_PEN", + "MOZ_SOURCE_TOUCH", + "MOZ_SOURCE_UNKNOWN", + "MSGESTURE_FLAG_BEGIN", + "MSGESTURE_FLAG_CANCEL", + "MSGESTURE_FLAG_END", + "MSGESTURE_FLAG_INERTIA", + "MSGESTURE_FLAG_NONE", + "MSPOINTER_TYPE_MOUSE", + "MSPOINTER_TYPE_PEN", + "MSPOINTER_TYPE_TOUCH", + "MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE", + "MS_ASYNC_CALLBACK_STATUS_CANCEL", + "MS_ASYNC_CALLBACK_STATUS_CHOOSEANY", + "MS_ASYNC_CALLBACK_STATUS_ERROR", + "MS_ASYNC_CALLBACK_STATUS_JOIN", + "MS_ASYNC_OP_STATUS_CANCELED", + "MS_ASYNC_OP_STATUS_ERROR", + "MS_ASYNC_OP_STATUS_SUCCESS", + "MS_MANIPULATION_STATE_ACTIVE", + "MS_MANIPULATION_STATE_CANCELLED", + "MS_MANIPULATION_STATE_COMMITTED", + "MS_MANIPULATION_STATE_DRAGGING", + "MS_MANIPULATION_STATE_INERTIA", + "MS_MANIPULATION_STATE_PRESELECT", + "MS_MANIPULATION_STATE_SELECTING", + "MS_MANIPULATION_STATE_STOPPED", + "MS_MEDIA_ERR_ENCRYPTED", + "MS_MEDIA_KEYERR_CLIENT", + "MS_MEDIA_KEYERR_DOMAIN", + "MS_MEDIA_KEYERR_HARDWARECHANGE", + "MS_MEDIA_KEYERR_OUTPUT", + "MS_MEDIA_KEYERR_SERVICE", + "MS_MEDIA_KEYERR_UNKNOWN", + "Map", + "Math", + "MediaController", + "MediaDevices", + "MediaElementAudioSourceNode", + "MediaEncryptedEvent", + "MediaError", + "MediaKeyError", + "MediaKeyEvent", + "MediaKeyMessageEvent", + "MediaKeyNeededEvent", + "MediaKeySession", + "MediaKeyStatusMap", + "MediaKeySystemAccess", + "MediaKeys", + "MediaList", + "MediaQueryList", + "MediaQueryListEvent", + "MediaRecorder", + "MediaSource", + "MediaStream", + "MediaStreamAudioDestinationNode", + "MediaStreamAudioSourceNode", + "MediaStreamEvent", + "MediaStreamTrack", + "MediaStreamTrackEvent", + "MessageChannel", + "MessageEvent", + "MessagePort", + "Methods", + "MimeType", + "MimeTypeArray", + "MouseEvent", + "MouseScrollEvent", + "MozAnimation", + "MozAnimationDelay", + "MozAnimationDirection", + "MozAnimationDuration", + "MozAnimationFillMode", + "MozAnimationIterationCount", + "MozAnimationName", + "MozAnimationPlayState", + "MozAnimationTimingFunction", + "MozAppearance", + "MozBackfaceVisibility", + "MozBinding", + "MozBorderBottomColors", + "MozBorderEnd", + "MozBorderEndColor", + "MozBorderEndStyle", + "MozBorderEndWidth", + "MozBorderImage", + "MozBorderLeftColors", + "MozBorderRightColors", + "MozBorderStart", + "MozBorderStartColor", + "MozBorderStartStyle", + "MozBorderStartWidth", + "MozBorderTopColors", + "MozBoxAlign", + "MozBoxDirection", + "MozBoxFlex", + "MozBoxOrdinalGroup", + "MozBoxOrient", + "MozBoxPack", + "MozBoxSizing", + "MozCSSKeyframeRule", + "MozCSSKeyframesRule", + "MozColumnCount", + "MozColumnFill", + "MozColumnGap", + "MozColumnRule", + "MozColumnRuleColor", + "MozColumnRuleStyle", + "MozColumnRuleWidth", + "MozColumnWidth", + "MozColumns", + "MozContactChangeEvent", + "MozFloatEdge", + "MozFontFeatureSettings", + "MozFontLanguageOverride", + "MozForceBrokenImageIcon", + "MozHyphens", + "MozImageRegion", + "MozMarginEnd", + "MozMarginStart", + "MozMmsEvent", + "MozMmsMessage", + "MozMobileMessageThread", + "MozOSXFontSmoothing", + "MozOrient", + "MozOutlineRadius", + "MozOutlineRadiusBottomleft", + "MozOutlineRadiusBottomright", + "MozOutlineRadiusTopleft", + "MozOutlineRadiusTopright", + "MozPaddingEnd", + "MozPaddingStart", + "MozPerspective", + "MozPerspectiveOrigin", + "MozPowerManager", + "MozSettingsEvent", + "MozSmsEvent", + "MozSmsMessage", + "MozStackSizing", + "MozTabSize", + "MozTextAlignLast", + "MozTextDecorationColor", + "MozTextDecorationLine", + "MozTextDecorationStyle", + "MozTextSizeAdjust", + "MozTransform", + "MozTransformOrigin", + "MozTransformStyle", + "MozTransition", + "MozTransitionDelay", + "MozTransitionDuration", + "MozTransitionProperty", + "MozTransitionTimingFunction", + "MozUserFocus", + "MozUserInput", + "MozUserModify", + "MozUserSelect", + "MozWindowDragging", + "MozWindowShadow", + "MutationEvent", + "MutationObserver", + "MutationRecord", + "NAMESPACE_ERR", + "NAMESPACE_RULE", + "NEAREST", + "NEAREST_MIPMAP_LINEAR", + "NEAREST_MIPMAP_NEAREST", + "NEGATIVE_INFINITY", + "NETWORK_EMPTY", + "NETWORK_ERR", + "NETWORK_IDLE", + "NETWORK_LOADED", + "NETWORK_LOADING", + "NETWORK_NO_SOURCE", + "NEVER", + "NEW", + "NEXT", + "NEXT_NO_DUPLICATE", + "NICEST", + "NODE_AFTER", + "NODE_BEFORE", + "NODE_BEFORE_AND_AFTER", + "NODE_INSIDE", + "NONE", + "NON_TRANSIENT_ERR", + "NOTATION_NODE", + "NOTCH", + "NOTEQUAL", + "NOT_ALLOWED_ERR", + "NOT_FOUND_ERR", + "NOT_READABLE_ERR", + "NOT_SUPPORTED_ERR", + "NO_DATA_ALLOWED_ERR", + "NO_ERR", + "NO_ERROR", + "NO_MODIFICATION_ALLOWED_ERR", + "NUMBER_TYPE", + "NUM_COMPRESSED_TEXTURE_FORMATS", + "NaN", + "NamedNodeMap", + "Navigator", + "NearbyLinks", + "NetworkInformation", + "Node", + "NodeFilter", + "NodeIterator", + "NodeList", + "Notation", + "Notification", + "NotifyPaintEvent", + "Number", + "NumberFormat", + "OBSOLETE", + "ONE", + "ONE_MINUS_CONSTANT_ALPHA", + "ONE_MINUS_CONSTANT_COLOR", + "ONE_MINUS_DST_ALPHA", + "ONE_MINUS_DST_COLOR", + "ONE_MINUS_SRC_ALPHA", + "ONE_MINUS_SRC_COLOR", + "OPEN", + "OPENED", + "OPENING", + "ORDERED_NODE_ITERATOR_TYPE", + "ORDERED_NODE_SNAPSHOT_TYPE", + "OUT_OF_MEMORY", + "Object", + "OfflineAudioCompletionEvent", + "OfflineAudioContext", + "OfflineResourceList", + "Option", + "OscillatorNode", + "OverflowEvent", + "PACK_ALIGNMENT", + "PAGE_RULE", + "PARSE_ERR", + "PATHSEG_ARC_ABS", + "PATHSEG_ARC_REL", + "PATHSEG_CLOSEPATH", + "PATHSEG_CURVETO_CUBIC_ABS", + "PATHSEG_CURVETO_CUBIC_REL", + "PATHSEG_CURVETO_CUBIC_SMOOTH_ABS", + "PATHSEG_CURVETO_CUBIC_SMOOTH_REL", + "PATHSEG_CURVETO_QUADRATIC_ABS", + "PATHSEG_CURVETO_QUADRATIC_REL", + "PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS", + "PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL", + "PATHSEG_LINETO_ABS", + "PATHSEG_LINETO_HORIZONTAL_ABS", + "PATHSEG_LINETO_HORIZONTAL_REL", + "PATHSEG_LINETO_REL", + "PATHSEG_LINETO_VERTICAL_ABS", + "PATHSEG_LINETO_VERTICAL_REL", + "PATHSEG_MOVETO_ABS", + "PATHSEG_MOVETO_REL", + "PATHSEG_UNKNOWN", + "PATH_EXISTS_ERR", + "PEAKING", + "PERMISSION_DENIED", + "PERSISTENT", + "PI", + "PLAYING_STATE", + "POINTS", + "POLYGON_OFFSET_FACTOR", + "POLYGON_OFFSET_FILL", + "POLYGON_OFFSET_UNITS", + "POSITION_UNAVAILABLE", + "POSITIVE_INFINITY", + "PREV", + "PREV_NO_DUPLICATE", + "PROCESSING_INSTRUCTION_NODE", + "PageChangeEvent", + "PageTransitionEvent", + "PaintRequest", + "PaintRequestList", + "PannerNode", + "Path2D", + "Performance", + "PerformanceEntry", + "PerformanceMark", + "PerformanceMeasure", + "PerformanceNavigation", + "PerformanceResourceTiming", + "PerformanceTiming", + "PeriodicWave", + "Plugin", + "PluginArray", + "PopStateEvent", + "PopupBlockedEvent", + "ProcessingInstruction", + "ProgressEvent", + "Promise", + "PropertyNodeList", + "Proxy", + "PushManager", + "PushSubscription", + "Q", + "QUOTA_ERR", + "QUOTA_EXCEEDED_ERR", + "QueryInterface", + "READ_ONLY", + "READ_ONLY_ERR", + "READ_WRITE", + "RED_BITS", + "REMOVAL", + "RENDERBUFFER", + "RENDERBUFFER_ALPHA_SIZE", + "RENDERBUFFER_BINDING", + "RENDERBUFFER_BLUE_SIZE", + "RENDERBUFFER_DEPTH_SIZE", + "RENDERBUFFER_GREEN_SIZE", + "RENDERBUFFER_HEIGHT", + "RENDERBUFFER_INTERNAL_FORMAT", + "RENDERBUFFER_RED_SIZE", + "RENDERBUFFER_STENCIL_SIZE", + "RENDERBUFFER_WIDTH", + "RENDERER", + "RENDERING_INTENT_ABSOLUTE_COLORIMETRIC", + "RENDERING_INTENT_AUTO", + "RENDERING_INTENT_PERCEPTUAL", + "RENDERING_INTENT_RELATIVE_COLORIMETRIC", + "RENDERING_INTENT_SATURATION", + "RENDERING_INTENT_UNKNOWN", + "REPEAT", + "REPLACE", + "RGB", + "RGB565", + "RGB5_A1", + "RGBA", + "RGBA4", + "RGBColor", + "ROTATION_CLOCKWISE", + "ROTATION_COUNTERCLOCKWISE", + "RTCDataChannelEvent", + "RTCIceCandidate", + "RTCPeerConnectionIceEvent", + "RTCRtpReceiver", + "RTCRtpSender", + "RTCSessionDescription", + "RTCStatsReport", + "RadioNodeList", + "Range", + "RangeError", + "RangeException", + "RecordErrorEvent", + "Rect", + "ReferenceError", + "RegExp", + "Request", + "Response", + "SAMPLER_2D", + "SAMPLER_CUBE", + "SAMPLES", + "SAMPLE_ALPHA_TO_COVERAGE", + "SAMPLE_BUFFERS", + "SAMPLE_COVERAGE", + "SAMPLE_COVERAGE_INVERT", + "SAMPLE_COVERAGE_VALUE", + "SAWTOOTH", + "SCHEDULED_STATE", + "SCISSOR_BOX", + "SCISSOR_TEST", + "SCROLL_PAGE_DOWN", + "SCROLL_PAGE_UP", + "SDP_ANSWER", + "SDP_OFFER", + "SDP_PRANSWER", + "SECURITY_ERR", + "SELECT", + "SERIALIZE_ERR", + "SEVERITY_ERROR", + "SEVERITY_FATAL_ERROR", + "SEVERITY_WARNING", + "SHADER_COMPILER", + "SHADER_TYPE", + "SHADING_LANGUAGE_VERSION", + "SHIFT_MASK", + "SHORT", + "SHOWING", + "SHOW_ALL", + "SHOW_ATTRIBUTE", + "SHOW_CDATA_SECTION", + "SHOW_COMMENT", + "SHOW_DOCUMENT", + "SHOW_DOCUMENT_FRAGMENT", + "SHOW_DOCUMENT_TYPE", + "SHOW_ELEMENT", + "SHOW_ENTITY", + "SHOW_ENTITY_REFERENCE", + "SHOW_NOTATION", + "SHOW_PROCESSING_INSTRUCTION", + "SHOW_TEXT", + "SINE", + "SOUNDFIELD", + "SQLException", + "SQRT1_2", + "SQRT2", + "SQUARE", + "SRC_ALPHA", + "SRC_ALPHA_SATURATE", + "SRC_COLOR", + "START_TO_END", + "START_TO_START", + "STATIC_DRAW", + "STENCIL_ATTACHMENT", + "STENCIL_BACK_FAIL", + "STENCIL_BACK_FUNC", + "STENCIL_BACK_PASS_DEPTH_FAIL", + "STENCIL_BACK_PASS_DEPTH_PASS", + "STENCIL_BACK_REF", + "STENCIL_BACK_VALUE_MASK", + "STENCIL_BACK_WRITEMASK", + "STENCIL_BITS", + "STENCIL_BUFFER_BIT", + "STENCIL_CLEAR_VALUE", + "STENCIL_FAIL", + "STENCIL_FUNC", + "STENCIL_INDEX", + "STENCIL_INDEX8", + "STENCIL_PASS_DEPTH_FAIL", + "STENCIL_PASS_DEPTH_PASS", + "STENCIL_REF", + "STENCIL_TEST", + "STENCIL_VALUE_MASK", + "STENCIL_WRITEMASK", + "STREAM_DRAW", + "STRING_TYPE", + "STYLE_RULE", + "SUBPIXEL_BITS", + "SUPPORTS_RULE", + "SVGAElement", + "SVGAltGlyphDefElement", + "SVGAltGlyphElement", + "SVGAltGlyphItemElement", + "SVGAngle", + "SVGAnimateColorElement", + "SVGAnimateElement", + "SVGAnimateMotionElement", + "SVGAnimateTransformElement", + "SVGAnimatedAngle", + "SVGAnimatedBoolean", + "SVGAnimatedEnumeration", + "SVGAnimatedInteger", + "SVGAnimatedLength", + "SVGAnimatedLengthList", + "SVGAnimatedNumber", + "SVGAnimatedNumberList", + "SVGAnimatedPreserveAspectRatio", + "SVGAnimatedRect", + "SVGAnimatedString", + "SVGAnimatedTransformList", + "SVGAnimationElement", + "SVGCircleElement", + "SVGClipPathElement", + "SVGColor", + "SVGComponentTransferFunctionElement", + "SVGCursorElement", + "SVGDefsElement", + "SVGDescElement", + "SVGDiscardElement", + "SVGDocument", + "SVGElement", + "SVGElementInstance", + "SVGElementInstanceList", + "SVGEllipseElement", + "SVGException", + "SVGFEBlendElement", + "SVGFEColorMatrixElement", + "SVGFEComponentTransferElement", + "SVGFECompositeElement", + "SVGFEConvolveMatrixElement", + "SVGFEDiffuseLightingElement", + "SVGFEDisplacementMapElement", + "SVGFEDistantLightElement", + "SVGFEDropShadowElement", + "SVGFEFloodElement", + "SVGFEFuncAElement", + "SVGFEFuncBElement", + "SVGFEFuncGElement", + "SVGFEFuncRElement", + "SVGFEGaussianBlurElement", + "SVGFEImageElement", + "SVGFEMergeElement", + "SVGFEMergeNodeElement", + "SVGFEMorphologyElement", + "SVGFEOffsetElement", + "SVGFEPointLightElement", + "SVGFESpecularLightingElement", + "SVGFESpotLightElement", + "SVGFETileElement", + "SVGFETurbulenceElement", + "SVGFilterElement", + "SVGFontElement", + "SVGFontFaceElement", + "SVGFontFaceFormatElement", + "SVGFontFaceNameElement", + "SVGFontFaceSrcElement", + "SVGFontFaceUriElement", + "SVGForeignObjectElement", + "SVGGElement", + "SVGGeometryElement", + "SVGGlyphElement", + "SVGGlyphRefElement", + "SVGGradientElement", + "SVGGraphicsElement", + "SVGHKernElement", + "SVGImageElement", + "SVGLength", + "SVGLengthList", + "SVGLineElement", + "SVGLinearGradientElement", + "SVGMPathElement", + "SVGMarkerElement", + "SVGMaskElement", + "SVGMatrix", + "SVGMetadataElement", + "SVGMissingGlyphElement", + "SVGNumber", + "SVGNumberList", + "SVGPaint", + "SVGPathElement", + "SVGPathSeg", + "SVGPathSegArcAbs", + "SVGPathSegArcRel", + "SVGPathSegClosePath", + "SVGPathSegCurvetoCubicAbs", + "SVGPathSegCurvetoCubicRel", + "SVGPathSegCurvetoCubicSmoothAbs", + "SVGPathSegCurvetoCubicSmoothRel", + "SVGPathSegCurvetoQuadraticAbs", + "SVGPathSegCurvetoQuadraticRel", + "SVGPathSegCurvetoQuadraticSmoothAbs", + "SVGPathSegCurvetoQuadraticSmoothRel", + "SVGPathSegLinetoAbs", + "SVGPathSegLinetoHorizontalAbs", + "SVGPathSegLinetoHorizontalRel", + "SVGPathSegLinetoRel", + "SVGPathSegLinetoVerticalAbs", + "SVGPathSegLinetoVerticalRel", + "SVGPathSegList", + "SVGPathSegMovetoAbs", + "SVGPathSegMovetoRel", + "SVGPatternElement", + "SVGPoint", + "SVGPointList", + "SVGPolygonElement", + "SVGPolylineElement", + "SVGPreserveAspectRatio", + "SVGRadialGradientElement", + "SVGRect", + "SVGRectElement", + "SVGRenderingIntent", + "SVGSVGElement", + "SVGScriptElement", + "SVGSetElement", + "SVGStopElement", + "SVGStringList", + "SVGStyleElement", + "SVGSwitchElement", + "SVGSymbolElement", + "SVGTRefElement", + "SVGTSpanElement", + "SVGTextContentElement", + "SVGTextElement", + "SVGTextPathElement", + "SVGTextPositioningElement", + "SVGTitleElement", + "SVGTransform", + "SVGTransformList", + "SVGUnitTypes", + "SVGUseElement", + "SVGVKernElement", + "SVGViewElement", + "SVGViewSpec", + "SVGZoomAndPan", + "SVGZoomEvent", + "SVG_ANGLETYPE_DEG", + "SVG_ANGLETYPE_GRAD", + "SVG_ANGLETYPE_RAD", + "SVG_ANGLETYPE_UNKNOWN", + "SVG_ANGLETYPE_UNSPECIFIED", + "SVG_CHANNEL_A", + "SVG_CHANNEL_B", + "SVG_CHANNEL_G", + "SVG_CHANNEL_R", + "SVG_CHANNEL_UNKNOWN", + "SVG_COLORTYPE_CURRENTCOLOR", + "SVG_COLORTYPE_RGBCOLOR", + "SVG_COLORTYPE_RGBCOLOR_ICCCOLOR", + "SVG_COLORTYPE_UNKNOWN", + "SVG_EDGEMODE_DUPLICATE", + "SVG_EDGEMODE_NONE", + "SVG_EDGEMODE_UNKNOWN", + "SVG_EDGEMODE_WRAP", + "SVG_FEBLEND_MODE_COLOR", + "SVG_FEBLEND_MODE_COLOR_BURN", + "SVG_FEBLEND_MODE_COLOR_DODGE", + "SVG_FEBLEND_MODE_DARKEN", + "SVG_FEBLEND_MODE_DIFFERENCE", + "SVG_FEBLEND_MODE_EXCLUSION", + "SVG_FEBLEND_MODE_HARD_LIGHT", + "SVG_FEBLEND_MODE_HUE", + "SVG_FEBLEND_MODE_LIGHTEN", + "SVG_FEBLEND_MODE_LUMINOSITY", + "SVG_FEBLEND_MODE_MULTIPLY", + "SVG_FEBLEND_MODE_NORMAL", + "SVG_FEBLEND_MODE_OVERLAY", + "SVG_FEBLEND_MODE_SATURATION", + "SVG_FEBLEND_MODE_SCREEN", + "SVG_FEBLEND_MODE_SOFT_LIGHT", + "SVG_FEBLEND_MODE_UNKNOWN", + "SVG_FECOLORMATRIX_TYPE_HUEROTATE", + "SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA", + "SVG_FECOLORMATRIX_TYPE_MATRIX", + "SVG_FECOLORMATRIX_TYPE_SATURATE", + "SVG_FECOLORMATRIX_TYPE_UNKNOWN", + "SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE", + "SVG_FECOMPONENTTRANSFER_TYPE_GAMMA", + "SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY", + "SVG_FECOMPONENTTRANSFER_TYPE_LINEAR", + "SVG_FECOMPONENTTRANSFER_TYPE_TABLE", + "SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN", + "SVG_FECOMPOSITE_OPERATOR_ARITHMETIC", + "SVG_FECOMPOSITE_OPERATOR_ATOP", + "SVG_FECOMPOSITE_OPERATOR_IN", + "SVG_FECOMPOSITE_OPERATOR_OUT", + "SVG_FECOMPOSITE_OPERATOR_OVER", + "SVG_FECOMPOSITE_OPERATOR_UNKNOWN", + "SVG_FECOMPOSITE_OPERATOR_XOR", + "SVG_INVALID_VALUE_ERR", + "SVG_LENGTHTYPE_CM", + "SVG_LENGTHTYPE_EMS", + "SVG_LENGTHTYPE_EXS", + "SVG_LENGTHTYPE_IN", + "SVG_LENGTHTYPE_MM", + "SVG_LENGTHTYPE_NUMBER", + "SVG_LENGTHTYPE_PC", + "SVG_LENGTHTYPE_PERCENTAGE", + "SVG_LENGTHTYPE_PT", + "SVG_LENGTHTYPE_PX", + "SVG_LENGTHTYPE_UNKNOWN", + "SVG_MARKERUNITS_STROKEWIDTH", + "SVG_MARKERUNITS_UNKNOWN", + "SVG_MARKERUNITS_USERSPACEONUSE", + "SVG_MARKER_ORIENT_ANGLE", + "SVG_MARKER_ORIENT_AUTO", + "SVG_MARKER_ORIENT_UNKNOWN", + "SVG_MASKTYPE_ALPHA", + "SVG_MASKTYPE_LUMINANCE", + "SVG_MATRIX_NOT_INVERTABLE", + "SVG_MEETORSLICE_MEET", + "SVG_MEETORSLICE_SLICE", + "SVG_MEETORSLICE_UNKNOWN", + "SVG_MORPHOLOGY_OPERATOR_DILATE", + "SVG_MORPHOLOGY_OPERATOR_ERODE", + "SVG_MORPHOLOGY_OPERATOR_UNKNOWN", + "SVG_PAINTTYPE_CURRENTCOLOR", + "SVG_PAINTTYPE_NONE", + "SVG_PAINTTYPE_RGBCOLOR", + "SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR", + "SVG_PAINTTYPE_UNKNOWN", + "SVG_PAINTTYPE_URI", + "SVG_PAINTTYPE_URI_CURRENTCOLOR", + "SVG_PAINTTYPE_URI_NONE", + "SVG_PAINTTYPE_URI_RGBCOLOR", + "SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR", + "SVG_PRESERVEASPECTRATIO_NONE", + "SVG_PRESERVEASPECTRATIO_UNKNOWN", + "SVG_PRESERVEASPECTRATIO_XMAXYMAX", + "SVG_PRESERVEASPECTRATIO_XMAXYMID", + "SVG_PRESERVEASPECTRATIO_XMAXYMIN", + "SVG_PRESERVEASPECTRATIO_XMIDYMAX", + "SVG_PRESERVEASPECTRATIO_XMIDYMID", + "SVG_PRESERVEASPECTRATIO_XMIDYMIN", + "SVG_PRESERVEASPECTRATIO_XMINYMAX", + "SVG_PRESERVEASPECTRATIO_XMINYMID", + "SVG_PRESERVEASPECTRATIO_XMINYMIN", + "SVG_SPREADMETHOD_PAD", + "SVG_SPREADMETHOD_REFLECT", + "SVG_SPREADMETHOD_REPEAT", + "SVG_SPREADMETHOD_UNKNOWN", + "SVG_STITCHTYPE_NOSTITCH", + "SVG_STITCHTYPE_STITCH", + "SVG_STITCHTYPE_UNKNOWN", + "SVG_TRANSFORM_MATRIX", + "SVG_TRANSFORM_ROTATE", + "SVG_TRANSFORM_SCALE", + "SVG_TRANSFORM_SKEWX", + "SVG_TRANSFORM_SKEWY", + "SVG_TRANSFORM_TRANSLATE", + "SVG_TRANSFORM_UNKNOWN", + "SVG_TURBULENCE_TYPE_FRACTALNOISE", + "SVG_TURBULENCE_TYPE_TURBULENCE", + "SVG_TURBULENCE_TYPE_UNKNOWN", + "SVG_UNIT_TYPE_OBJECTBOUNDINGBOX", + "SVG_UNIT_TYPE_UNKNOWN", + "SVG_UNIT_TYPE_USERSPACEONUSE", + "SVG_WRONG_TYPE_ERR", + "SVG_ZOOMANDPAN_DISABLE", + "SVG_ZOOMANDPAN_MAGNIFY", + "SVG_ZOOMANDPAN_UNKNOWN", + "SYNTAX_ERR", + "SavedPages", + "Screen", + "ScreenOrientation", + "Script", + "ScriptProcessorNode", + "ScrollAreaEvent", + "SecurityPolicyViolationEvent", + "Selection", + "ServiceWorker", + "ServiceWorkerContainer", + "ServiceWorkerRegistration", + "SessionDescription", + "Set", + "ShadowRoot", + "SharedWorker", + "SimpleGestureEvent", + "SpeechSynthesisEvent", + "SpeechSynthesisUtterance", + "StopIteration", + "Storage", + "StorageEvent", + "String", + "StyleSheet", + "StyleSheetList", + "SubtleCrypto", + "Symbol", + "SyntaxError", + "TEMPORARY", + "TEXTPATH_METHODTYPE_ALIGN", + "TEXTPATH_METHODTYPE_STRETCH", + "TEXTPATH_METHODTYPE_UNKNOWN", + "TEXTPATH_SPACINGTYPE_AUTO", + "TEXTPATH_SPACINGTYPE_EXACT", + "TEXTPATH_SPACINGTYPE_UNKNOWN", + "TEXTURE", + "TEXTURE0", + "TEXTURE1", + "TEXTURE10", + "TEXTURE11", + "TEXTURE12", + "TEXTURE13", + "TEXTURE14", + "TEXTURE15", + "TEXTURE16", + "TEXTURE17", + "TEXTURE18", + "TEXTURE19", + "TEXTURE2", + "TEXTURE20", + "TEXTURE21", + "TEXTURE22", + "TEXTURE23", + "TEXTURE24", + "TEXTURE25", + "TEXTURE26", + "TEXTURE27", + "TEXTURE28", + "TEXTURE29", + "TEXTURE3", + "TEXTURE30", + "TEXTURE31", + "TEXTURE4", + "TEXTURE5", + "TEXTURE6", + "TEXTURE7", + "TEXTURE8", + "TEXTURE9", + "TEXTURE_2D", + "TEXTURE_BINDING_2D", + "TEXTURE_BINDING_CUBE_MAP", + "TEXTURE_CUBE_MAP", + "TEXTURE_CUBE_MAP_NEGATIVE_X", + "TEXTURE_CUBE_MAP_NEGATIVE_Y", + "TEXTURE_CUBE_MAP_NEGATIVE_Z", + "TEXTURE_CUBE_MAP_POSITIVE_X", + "TEXTURE_CUBE_MAP_POSITIVE_Y", + "TEXTURE_CUBE_MAP_POSITIVE_Z", + "TEXTURE_MAG_FILTER", + "TEXTURE_MAX_ANISOTROPY_EXT", + "TEXTURE_MIN_FILTER", + "TEXTURE_WRAP_S", + "TEXTURE_WRAP_T", + "TEXT_NODE", + "TIMEOUT", + "TIMEOUT_ERR", + "TOO_LARGE_ERR", + "TRANSACTION_INACTIVE_ERR", + "TRIANGLE", + "TRIANGLES", + "TRIANGLE_FAN", + "TRIANGLE_STRIP", + "TYPE_BACK_FORWARD", + "TYPE_ERR", + "TYPE_MISMATCH_ERR", + "TYPE_NAVIGATE", + "TYPE_RELOAD", + "TYPE_RESERVED", + "Text", + "TextDecoder", + "TextEncoder", + "TextEvent", + "TextMetrics", + "TextTrack", + "TextTrackCue", + "TextTrackCueList", + "TextTrackList", + "TimeEvent", + "TimeRanges", + "Touch", + "TouchEvent", + "TouchList", + "TrackEvent", + "TransitionEvent", + "TreeWalker", + "TypeError", + "UIEvent", + "UNCACHED", + "UNKNOWN_ERR", + "UNKNOWN_RULE", + "UNMASKED_RENDERER_WEBGL", + "UNMASKED_VENDOR_WEBGL", + "UNORDERED_NODE_ITERATOR_TYPE", + "UNORDERED_NODE_SNAPSHOT_TYPE", + "UNPACK_ALIGNMENT", + "UNPACK_COLORSPACE_CONVERSION_WEBGL", + "UNPACK_FLIP_Y_WEBGL", + "UNPACK_PREMULTIPLY_ALPHA_WEBGL", + "UNSCHEDULED_STATE", + "UNSENT", + "UNSIGNED_BYTE", + "UNSIGNED_INT", + "UNSIGNED_SHORT", + "UNSIGNED_SHORT_4_4_4_4", + "UNSIGNED_SHORT_5_5_5_1", + "UNSIGNED_SHORT_5_6_5", + "UNSPECIFIED_EVENT_TYPE_ERR", + "UPDATEREADY", + "URIError", + "URL", + "URLSearchParams", + "URLUnencoded", + "URL_MISMATCH_ERR", + "UTC", + "Uint16Array", + "Uint32Array", + "Uint8Array", + "Uint8ClampedArray", + "UserMessageHandler", + "UserMessageHandlersNamespace", + "UserProximityEvent", + "VALIDATE_STATUS", + "VALIDATION_ERR", + "VARIABLES_RULE", + "VENDOR", + "VERSION", + "VERSION_CHANGE", + "VERSION_ERR", + "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", + "VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE", + "VERTEX_ATTRIB_ARRAY_ENABLED", + "VERTEX_ATTRIB_ARRAY_NORMALIZED", + "VERTEX_ATTRIB_ARRAY_POINTER", + "VERTEX_ATTRIB_ARRAY_SIZE", + "VERTEX_ATTRIB_ARRAY_STRIDE", + "VERTEX_ATTRIB_ARRAY_TYPE", + "VERTEX_SHADER", + "VERTICAL", + "VERTICAL_AXIS", + "VER_ERR", + "VIEWPORT", + "VIEWPORT_RULE", + "VTTCue", + "VTTRegion", + "ValidityState", + "VideoStreamTrack", + "WEBKIT_FILTER_RULE", + "WEBKIT_KEYFRAMES_RULE", + "WEBKIT_KEYFRAME_RULE", + "WEBKIT_REGION_RULE", + "WRONG_DOCUMENT_ERR", + "WaveShaperNode", + "WeakMap", + "WeakSet", + "WebGLActiveInfo", + "WebGLBuffer", + "WebGLContextEvent", + "WebGLFramebuffer", + "WebGLProgram", + "WebGLRenderbuffer", + "WebGLRenderingContext", + "WebGLShader", + "WebGLShaderPrecisionFormat", + "WebGLTexture", + "WebGLUniformLocation", + "WebGLVertexArray", + "WebKitAnimationEvent", + "WebKitBlobBuilder", + "WebKitCSSFilterRule", + "WebKitCSSFilterValue", + "WebKitCSSKeyframeRule", + "WebKitCSSKeyframesRule", + "WebKitCSSMatrix", + "WebKitCSSRegionRule", + "WebKitCSSTransformValue", + "WebKitDataCue", + "WebKitGamepad", + "WebKitMediaKeyError", + "WebKitMediaKeyMessageEvent", + "WebKitMediaKeySession", + "WebKitMediaKeys", + "WebKitMediaSource", + "WebKitMutationObserver", + "WebKitNamespace", + "WebKitPlaybackTargetAvailabilityEvent", + "WebKitPoint", + "WebKitShadowRoot", + "WebKitSourceBuffer", + "WebKitSourceBufferList", + "WebKitTransitionEvent", + "WebSocket", + "WheelEvent", + "Window", + "Worker", + "XMLDocument", + "XMLHttpRequest", + "XMLHttpRequestEventTarget", + "XMLHttpRequestException", + "XMLHttpRequestProgressEvent", + "XMLHttpRequestUpload", + "XMLSerializer", + "XMLStylesheetProcessingInstruction", + "XPathEvaluator", + "XPathException", + "XPathExpression", + "XPathNSResolver", + "XPathResult", + "XSLTProcessor", + "ZERO", + "_XD0M_", + "_YD0M_", + "__defineGetter__", + "__defineSetter__", + "__lookupGetter__", + "__lookupSetter__", + "__opera", + "__proto__", + "_browserjsran", + "a", + "aLink", + "abbr", + "abort", + "abs", + "absolute", + "acceleration", + "accelerationIncludingGravity", + "accelerator", + "accept", + "acceptCharset", + "acceptNode", + "accessKey", + "accessKeyLabel", + "accuracy", + "acos", + "acosh", + "action", + "actionURL", + "active", + "activeCues", + "activeElement", + "activeSourceBuffers", + "activeSourceCount", + "activeTexture", + "add", + "addBehavior", + "addCandidate", + "addColorStop", + "addCue", + "addElement", + "addEventListener", + "addFilter", + "addFromString", + "addFromUri", + "addIceCandidate", + "addImport", + "addListener", + "addNamed", + "addPageRule", + "addPath", + "addPointer", + "addRange", + "addRegion", + "addRule", + "addSearchEngine", + "addSourceBuffer", + "addStream", + "addTextTrack", + "addTrack", + "addWakeLockListener", + "addedNodes", + "additionalName", + "additiveSymbols", + "addons", + "adoptNode", + "adr", + "advance", + "alert", + "algorithm", + "align", + "align-content", + "align-items", + "align-self", + "alignContent", + "alignItems", + "alignSelf", + "alignmentBaseline", + "alinkColor", + "all", + "allowFullscreen", + "allowedDirections", + "alpha", + "alt", + "altGraphKey", + "altHtml", + "altKey", + "altLeft", + "altitude", + "altitudeAccuracy", + "amplitude", + "ancestorOrigins", + "anchor", + "anchorNode", + "anchorOffset", + "anchors", + "angle", + "animVal", + "animate", + "animatedInstanceRoot", + "animatedNormalizedPathSegList", + "animatedPathSegList", + "animatedPoints", + "animation", + "animation-delay", + "animation-direction", + "animation-duration", + "animation-fill-mode", + "animation-iteration-count", + "animation-name", + "animation-play-state", + "animation-timing-function", + "animationDelay", + "animationDirection", + "animationDuration", + "animationFillMode", + "animationIterationCount", + "animationName", + "animationPlayState", + "animationStartTime", + "animationTimingFunction", + "animationsPaused", + "anniversary", + "app", + "appCodeName", + "appMinorVersion", + "appName", + "appNotifications", + "appVersion", + "append", + "appendBuffer", + "appendChild", + "appendData", + "appendItem", + "appendMedium", + "appendNamed", + "appendRule", + "appendStream", + "appendWindowEnd", + "appendWindowStart", + "applets", + "applicationCache", + "apply", + "applyElement", + "arc", + "arcTo", + "archive", + "areas", + "arguments", + "arrayBuffer", + "asin", + "asinh", + "assert", + "assign", + "async", + "atEnd", + "atan", + "atan2", + "atanh", + "atob", + "attachEvent", + "attachShader", + "attachments", + "attack", + "attrChange", + "attrName", + "attributeName", + "attributeNamespace", + "attributes", + "audioTracks", + "autoIncrement", + "autobuffer", + "autocapitalize", + "autocomplete", + "autocorrect", + "autofocus", + "autoplay", + "availHeight", + "availLeft", + "availTop", + "availWidth", + "availability", + "available", + "aversion", + "axes", + "axis", + "azimuth", + "b", + "back", + "backface-visibility", + "backfaceVisibility", + "background", + "background-attachment", + "background-blend-mode", + "background-clip", + "background-color", + "background-image", + "background-origin", + "background-position", + "background-repeat", + "background-size", + "backgroundAttachment", + "backgroundBlendMode", + "backgroundClip", + "backgroundColor", + "backgroundImage", + "backgroundOrigin", + "backgroundPosition", + "backgroundPositionX", + "backgroundPositionY", + "backgroundRepeat", + "backgroundSize", + "badInput", + "balance", + "baseFrequencyX", + "baseFrequencyY", + "baseNode", + "baseOffset", + "baseURI", + "baseVal", + "baselineShift", + "battery", + "bday", + "beginElement", + "beginElementAt", + "beginPath", + "behavior", + "behaviorCookie", + "behaviorPart", + "behaviorUrns", + "beta", + "bezierCurveTo", + "bgColor", + "bgProperties", + "bias", + "big", + "binaryType", + "bind", + "bindAttribLocation", + "bindBuffer", + "bindFramebuffer", + "bindRenderbuffer", + "bindTexture", + "blendColor", + "blendEquation", + "blendEquationSeparate", + "blendFunc", + "blendFuncSeparate", + "blink", + "blob", + "blockDirection", + "blue", + "blur", + "body", + "bodyUsed", + "bold", + "bookmarks", + "booleanValue", + "border", + "border-bottom", + "border-bottom-color", + "border-bottom-left-radius", + "border-bottom-right-radius", + "border-bottom-style", + "border-bottom-width", + "border-collapse", + "border-color", + "border-image", + "border-image-outset", + "border-image-repeat", + "border-image-slice", + "border-image-source", + "border-image-width", + "border-left", + "border-left-color", + "border-left-style", + "border-left-width", + "border-radius", + "border-right", + "border-right-color", + "border-right-style", + "border-right-width", + "border-spacing", + "border-style", + "border-top", + "border-top-color", + "border-top-left-radius", + "border-top-right-radius", + "border-top-style", + "border-top-width", + "border-width", + "borderBottom", + "borderBottomColor", + "borderBottomLeftRadius", + "borderBottomRightRadius", + "borderBottomStyle", + "borderBottomWidth", + "borderCollapse", + "borderColor", + "borderColorDark", + "borderColorLight", + "borderImage", + "borderImageOutset", + "borderImageRepeat", + "borderImageSlice", + "borderImageSource", + "borderImageWidth", + "borderLeft", + "borderLeftColor", + "borderLeftStyle", + "borderLeftWidth", + "borderRadius", + "borderRight", + "borderRightColor", + "borderRightStyle", + "borderRightWidth", + "borderSpacing", + "borderStyle", + "borderTop", + "borderTopColor", + "borderTopLeftRadius", + "borderTopRightRadius", + "borderTopStyle", + "borderTopWidth", + "borderWidth", + "bottom", + "bottomMargin", + "bound", + "boundElements", + "boundingClientRect", + "boundingHeight", + "boundingLeft", + "boundingTop", + "boundingWidth", + "bounds", + "box-decoration-break", + "box-shadow", + "box-sizing", + "boxDecorationBreak", + "boxShadow", + "boxSizing", + "breakAfter", + "breakBefore", + "breakInside", + "browserLanguage", + "btoa", + "bubbles", + "buffer", + "bufferData", + "bufferDepth", + "bufferSize", + "bufferSubData", + "buffered", + "bufferedAmount", + "buildID", + "buildNumber", + "button", + "buttonID", + "buttons", + "byteLength", + "byteOffset", + "c", + "call", + "caller", + "canBeFormatted", + "canBeMounted", + "canBeShared", + "canHaveChildren", + "canHaveHTML", + "canPlayType", + "cancel", + "cancelAnimationFrame", + "cancelBubble", + "cancelScheduledValues", + "cancelable", + "candidate", + "canvas", + "caption", + "caption-side", + "captionSide", + "captureEvents", + "captureStackTrace", + "caretPositionFromPoint", + "caretRangeFromPoint", + "cast", + "catch", + "category", + "cbrt", + "cd", + "ceil", + "cellIndex", + "cellPadding", + "cellSpacing", + "cells", + "ch", + "chOff", + "chain", + "challenge", + "changedTouches", + "channel", + "channelCount", + "channelCountMode", + "channelInterpretation", + "char", + "charAt", + "charCode", + "charCodeAt", + "charIndex", + "characterSet", + "charging", + "chargingTime", + "charset", + "checkEnclosure", + "checkFramebufferStatus", + "checkIntersection", + "checkValidity", + "checked", + "childElementCount", + "childNodes", + "children", + "chrome", + "ciphertext", + "cite", + "classList", + "className", + "classid", + "clear", + "clearAttributes", + "clearColor", + "clearData", + "clearDepth", + "clearImmediate", + "clearInterval", + "clearMarks", + "clearMeasures", + "clearParameters", + "clearRect", + "clearResourceTimings", + "clearShadow", + "clearStencil", + "clearTimeout", + "clearWatch", + "click", + "clickCount", + "clientHeight", + "clientInformation", + "clientLeft", + "clientRect", + "clientRects", + "clientTop", + "clientWidth", + "clientX", + "clientY", + "clip", + "clip-path", + "clip-rule", + "clipBottom", + "clipLeft", + "clipPath", + "clipPathUnits", + "clipRight", + "clipRule", + "clipTop", + "clipboardData", + "clone", + "cloneContents", + "cloneNode", + "cloneRange", + "close", + "closePath", + "closed", + "closest", + "clz", + "clz32", + "cmp", + "code", + "codeBase", + "codePointAt", + "codeType", + "colSpan", + "collapse", + "collapseToEnd", + "collapseToStart", + "collapsed", + "collect", + "colno", + "color", + "color-interpolation", + "color-interpolation-filters", + "colorDepth", + "colorInterpolation", + "colorInterpolationFilters", + "colorMask", + "colorType", + "cols", + "columnCount", + "columnFill", + "columnGap", + "columnNumber", + "columnRule", + "columnRuleColor", + "columnRuleStyle", + "columnRuleWidth", + "columnSpan", + "columnWidth", + "columns", + "command", + "commitPreferences", + "commonAncestorContainer", + "compact", + "compareBoundaryPoints", + "compareDocumentPosition", + "compareEndPoints", + "compareNode", + "comparePoint", + "compatMode", + "compatible", + "compile", + "compileShader", + "complete", + "componentFromPoint", + "compositionEndOffset", + "compositionStartOffset", + "compressedTexImage2D", + "compressedTexSubImage2D", + "concat", + "conditionText", + "coneInnerAngle", + "coneOuterAngle", + "coneOuterGain", + "confirm", + "confirmComposition", + "confirmSiteSpecificTrackingException", + "confirmWebWideTrackingException", + "connect", + "connectEnd", + "connectStart", + "connected", + "connection", + "connectionSpeed", + "console", + "consolidate", + "constrictionActive", + "constructor", + "contactID", + "contains", + "containsNode", + "content", + "contentDocument", + "contentEditable", + "contentOverflow", + "contentScriptType", + "contentStyleType", + "contentType", + "contentWindow", + "context", + "contextMenu", + "contextmenu", + "continue", + "continuous", + "control", + "controller", + "controls", + "convertToSpecifiedUnits", + "cookie", + "cookieEnabled", + "coords", + "copyFromChannel", + "copyTexImage2D", + "copyTexSubImage2D", + "copyToChannel", + "copyWithin", + "correspondingElement", + "correspondingUseElement", + "cos", + "cosh", + "count", + "counter-increment", + "counter-reset", + "counterIncrement", + "counterReset", + "cpuClass", + "cpuSleepAllowed", + "create", + "createAnalyser", + "createAnswer", + "createAttribute", + "createAttributeNS", + "createBiquadFilter", + "createBuffer", + "createBufferSource", + "createCDATASection", + "createCSSStyleSheet", + "createCaption", + "createChannelMerger", + "createChannelSplitter", + "createComment", + "createContextualFragment", + "createControlRange", + "createConvolver", + "createDTMFSender", + "createDataChannel", + "createDelay", + "createDelayNode", + "createDocument", + "createDocumentFragment", + "createDocumentType", + "createDynamicsCompressor", + "createElement", + "createElementNS", + "createEntityReference", + "createEvent", + "createEventObject", + "createExpression", + "createFramebuffer", + "createFunction", + "createGain", + "createGainNode", + "createHTMLDocument", + "createImageBitmap", + "createImageData", + "createIndex", + "createJavaScriptNode", + "createLinearGradient", + "createMediaElementSource", + "createMediaKeys", + "createMediaStreamDestination", + "createMediaStreamSource", + "createMutableFile", + "createNSResolver", + "createNodeIterator", + "createNotification", + "createObjectStore", + "createObjectURL", + "createOffer", + "createOscillator", + "createPanner", + "createPattern", + "createPeriodicWave", + "createPopup", + "createProcessingInstruction", + "createProgram", + "createRadialGradient", + "createRange", + "createRangeCollection", + "createRenderbuffer", + "createSVGAngle", + "createSVGLength", + "createSVGMatrix", + "createSVGNumber", + "createSVGPathSegArcAbs", + "createSVGPathSegArcRel", + "createSVGPathSegClosePath", + "createSVGPathSegCurvetoCubicAbs", + "createSVGPathSegCurvetoCubicRel", + "createSVGPathSegCurvetoCubicSmoothAbs", + "createSVGPathSegCurvetoCubicSmoothRel", + "createSVGPathSegCurvetoQuadraticAbs", + "createSVGPathSegCurvetoQuadraticRel", + "createSVGPathSegCurvetoQuadraticSmoothAbs", + "createSVGPathSegCurvetoQuadraticSmoothRel", + "createSVGPathSegLinetoAbs", + "createSVGPathSegLinetoHorizontalAbs", + "createSVGPathSegLinetoHorizontalRel", + "createSVGPathSegLinetoRel", + "createSVGPathSegLinetoVerticalAbs", + "createSVGPathSegLinetoVerticalRel", + "createSVGPathSegMovetoAbs", + "createSVGPathSegMovetoRel", + "createSVGPoint", + "createSVGRect", + "createSVGTransform", + "createSVGTransformFromMatrix", + "createScriptProcessor", + "createSession", + "createShader", + "createShadowRoot", + "createStereoPanner", + "createStyleSheet", + "createTBody", + "createTFoot", + "createTHead", + "createTextNode", + "createTextRange", + "createTexture", + "createTouch", + "createTouchList", + "createTreeWalker", + "createWaveShaper", + "creationTime", + "crossOrigin", + "crypto", + "csi", + "cssFloat", + "cssRules", + "cssText", + "cssValueType", + "ctrlKey", + "ctrlLeft", + "cues", + "cullFace", + "currentNode", + "currentPage", + "currentScale", + "currentScript", + "currentSrc", + "currentState", + "currentStyle", + "currentTarget", + "currentTime", + "currentTranslate", + "currentView", + "cursor", + "curve", + "customError", + "cx", + "cy", + "d", + "data", + "dataFld", + "dataFormatAs", + "dataPageSize", + "dataSrc", + "dataTransfer", + "database", + "dataset", + "dateTime", + "db", + "debug", + "debuggerEnabled", + "declare", + "decode", + "decodeAudioData", + "decodeURI", + "decodeURIComponent", + "decrypt", + "default", + "defaultCharset", + "defaultChecked", + "defaultMuted", + "defaultPlaybackRate", + "defaultPrevented", + "defaultSelected", + "defaultStatus", + "defaultURL", + "defaultValue", + "defaultView", + "defaultstatus", + "defer", + "defineMagicFunction", + "defineMagicVariable", + "defineProperties", + "defineProperty", + "delayTime", + "delete", + "deleteBuffer", + "deleteCaption", + "deleteCell", + "deleteContents", + "deleteData", + "deleteDatabase", + "deleteFramebuffer", + "deleteFromDocument", + "deleteIndex", + "deleteMedium", + "deleteObjectStore", + "deleteProgram", + "deleteRenderbuffer", + "deleteRow", + "deleteRule", + "deleteShader", + "deleteTFoot", + "deleteTHead", + "deleteTexture", + "deliverChangeRecords", + "delivery", + "deliveryInfo", + "deliveryStatus", + "deliveryTimestamp", + "delta", + "deltaMode", + "deltaX", + "deltaY", + "deltaZ", + "depthFunc", + "depthMask", + "depthRange", + "deriveBits", + "deriveKey", + "description", + "deselectAll", + "designMode", + "destination", + "destinationURL", + "detach", + "detachEvent", + "detachShader", + "detail", + "detune", + "devicePixelRatio", + "deviceXDPI", + "deviceYDPI", + "diffuseConstant", + "digest", + "dimensions", + "dir", + "dirName", + "direction", + "dirxml", + "disable", + "disableVertexAttribArray", + "disabled", + "dischargingTime", + "disconnect", + "dispatchEvent", + "display", + "distanceModel", + "divisor", + "djsapi", + "djsproxy", + "doImport", + "doNotTrack", + "doScroll", + "doctype", + "document", + "documentElement", + "documentMode", + "documentURI", + "dolphin", + "dolphinGameCenter", + "dolphininfo", + "dolphinmeta", + "domComplete", + "domContentLoadedEventEnd", + "domContentLoadedEventStart", + "domInteractive", + "domLoading", + "domain", + "domainLookupEnd", + "domainLookupStart", + "dominant-baseline", + "dominantBaseline", + "done", + "dopplerFactor", + "download", + "dragDrop", + "draggable", + "drawArrays", + "drawArraysInstancedANGLE", + "drawCustomFocusRing", + "drawElements", + "drawElementsInstancedANGLE", + "drawFocusIfNeeded", + "drawImage", + "drawImageFromRect", + "drawSystemFocusRing", + "drawingBufferHeight", + "drawingBufferWidth", + "dropEffect", + "droppedVideoFrames", + "dropzone", + "dump", + "duplicate", + "duration", + "dvname", + "dvnum", + "dx", + "dy", + "dynsrc", + "e", + "edgeMode", + "effectAllowed", + "elapsedTime", + "elementFromPoint", + "elements", + "elevation", + "ellipse", + "email", + "embeds", + "empty", + "empty-cells", + "emptyCells", + "enable", + "enableBackground", + "enableStyleSheetsForSet", + "enableVertexAttribArray", + "enabled", + "enabledPlugin", + "encode", + "encodeURI", + "encodeURIComponent", + "encoding", + "encrypt", + "enctype", + "end", + "endContainer", + "endElement", + "endElementAt", + "endOfStream", + "endOffset", + "endTime", + "ended", + "endsWith", + "entities", + "entries", + "entryType", + "enumerate", + "enumerateEditable", + "error", + "errorCode", + "escape", + "eval", + "evaluate", + "event", + "eventPhase", + "every", + "exception", + "exec", + "execCommand", + "execCommandShowHelp", + "execScript", + "exitFullscreen", + "exitPointerLock", + "exp", + "expand", + "expandEntityReferences", + "expando", + "expansion", + "expiryDate", + "explicitOriginalTarget", + "expm1", + "exponent", + "exponentialRampToValueAtTime", + "exportKey", + "extend", + "extensions", + "extentNode", + "extentOffset", + "external", + "externalResourcesRequired", + "extractContents", + "extractable", + "f", + "face", + "factoryReset", + "fallback", + "familyName", + "farthestViewportElement", + "fastSeek", + "fatal", + "fetch", + "fetchStart", + "fftSize", + "fgColor", + "fileCreatedDate", + "fileHandle", + "fileModifiedDate", + "fileName", + "fileSize", + "fileUpdatedDate", + "filename", + "files", + "fill", + "fill-opacity", + "fill-rule", + "fillOpacity", + "fillRect", + "fillRule", + "fillStyle", + "fillText", + "filter", + "filterResX", + "filterResY", + "filterUnits", + "filters", + "find", + "findIndex", + "findRule", + "findText", + "finish", + "fireEvent", + "firstChild", + "firstElementChild", + "firstPage", + "fixed", + "flex", + "flex-basis", + "flex-direction", + "flex-flow", + "flex-grow", + "flex-shrink", + "flex-wrap", + "flexBasis", + "flexDirection", + "flexFlow", + "flexGrow", + "flexShrink", + "flexWrap", + "flipX", + "flipY", + "float", + "flood-color", + "flood-opacity", + "floodColor", + "floodOpacity", + "floor", + "flush", + "focus", + "focusNode", + "focusOffset", + "font", + "font-family", + "font-feature-settings", + "font-kerning", + "font-language-override", + "font-size", + "font-size-adjust", + "font-stretch", + "font-style", + "font-synthesis", + "font-variant", + "font-variant-alternates", + "font-variant-caps", + "font-variant-east-asian", + "font-variant-ligatures", + "font-variant-numeric", + "font-variant-position", + "font-weight", + "fontFamily", + "fontFeatureSettings", + "fontKerning", + "fontLanguageOverride", + "fontSize", + "fontSizeAdjust", + "fontSmoothingEnabled", + "fontStretch", + "fontStyle", + "fontSynthesis", + "fontVariant", + "fontVariantAlternates", + "fontVariantCaps", + "fontVariantEastAsian", + "fontVariantLigatures", + "fontVariantNumeric", + "fontVariantPosition", + "fontWeight", + "fontcolor", + "fonts", + "fontsize", + "for", + "forEach", + "forceRedraw", + "form", + "formAction", + "formEnctype", + "formMethod", + "formNoValidate", + "formTarget", + "format", + "forms", + "forward", + "fr", + "frame", + "frameBorder", + "frameElement", + "frameSpacing", + "framebufferRenderbuffer", + "framebufferTexture2D", + "frames", + "freeSpace", + "freeze", + "frequency", + "frequencyBinCount", + "from", + "fromCharCode", + "fromCodePoint", + "fromElement", + "frontFace", + "fround", + "fullScreen", + "fullscreenElement", + "fullscreenEnabled", + "fx", + "fy", + "gain", + "gamepad", + "gamma", + "genderIdentity", + "generateKey", + "generateMipmap", + "generateRequest", + "geolocation", + "gestureObject", + "get", + "getActiveAttrib", + "getActiveUniform", + "getAdjacentText", + "getAll", + "getAllResponseHeaders", + "getAsFile", + "getAsString", + "getAttachedShaders", + "getAttribLocation", + "getAttribute", + "getAttributeNS", + "getAttributeNode", + "getAttributeNodeNS", + "getAudioTracks", + "getBBox", + "getBattery", + "getBlob", + "getBookmark", + "getBoundingClientRect", + "getBufferParameter", + "getByteFrequencyData", + "getByteTimeDomainData", + "getCSSCanvasContext", + "getCTM", + "getCandidateWindowClientRect", + "getChannelData", + "getCharNumAtPosition", + "getClientRect", + "getClientRects", + "getCompositionAlternatives", + "getComputedStyle", + "getComputedTextLength", + "getConfiguration", + "getContext", + "getContextAttributes", + "getCounterValue", + "getCueAsHTML", + "getCueById", + "getCurrentPosition", + "getCurrentTime", + "getData", + "getDatabaseNames", + "getDate", + "getDay", + "getDefaultComputedStyle", + "getDestinationInsertionPoints", + "getDistributedNodes", + "getEditable", + "getElementById", + "getElementsByClassName", + "getElementsByName", + "getElementsByTagName", + "getElementsByTagNameNS", + "getEnclosureList", + "getEndPositionOfChar", + "getEntries", + "getEntriesByName", + "getEntriesByType", + "getError", + "getExtension", + "getExtentOfChar", + "getFeature", + "getFile", + "getFloat32", + "getFloat64", + "getFloatFrequencyData", + "getFloatTimeDomainData", + "getFloatValue", + "getFramebufferAttachmentParameter", + "getFrequencyResponse", + "getFullYear", + "getGamepads", + "getHours", + "getImageData", + "getInt16", + "getInt32", + "getInt8", + "getIntersectionList", + "getItem", + "getItems", + "getKey", + "getLineDash", + "getLocalStreams", + "getMarks", + "getMatchedCSSRules", + "getMeasures", + "getMetadata", + "getMilliseconds", + "getMinutes", + "getModifierState", + "getMonth", + "getNamedItem", + "getNamedItemNS", + "getNotifier", + "getNumberOfChars", + "getOverrideHistoryNavigationMode", + "getOverrideStyle", + "getOwnPropertyDescriptor", + "getOwnPropertyNames", + "getOwnPropertySymbols", + "getParameter", + "getPathSegAtLength", + "getPointAtLength", + "getPreference", + "getPreferenceDefault", + "getPresentationAttribute", + "getPreventDefault", + "getProgramInfoLog", + "getProgramParameter", + "getPropertyCSSValue", + "getPropertyPriority", + "getPropertyShorthand", + "getPropertyValue", + "getPrototypeOf", + "getRGBColorValue", + "getRandomValues", + "getRangeAt", + "getReceivers", + "getRectValue", + "getRegistration", + "getRemoteStreams", + "getRenderbufferParameter", + "getResponseHeader", + "getRoot", + "getRotationOfChar", + "getSVGDocument", + "getScreenCTM", + "getSeconds", + "getSelection", + "getSenders", + "getShaderInfoLog", + "getShaderParameter", + "getShaderPrecisionFormat", + "getShaderSource", + "getSimpleDuration", + "getSiteIcons", + "getSources", + "getSpeculativeParserUrls", + "getStartPositionOfChar", + "getStartTime", + "getStats", + "getStorageUpdates", + "getStreamById", + "getStringValue", + "getSubStringLength", + "getSubscription", + "getSupportedExtensions", + "getTexParameter", + "getTime", + "getTimezoneOffset", + "getTotalLength", + "getTrackById", + "getTracks", + "getTransformToElement", + "getUTCDate", + "getUTCDay", + "getUTCFullYear", + "getUTCHours", + "getUTCMilliseconds", + "getUTCMinutes", + "getUTCMonth", + "getUTCSeconds", + "getUint16", + "getUint32", + "getUint8", + "getUniform", + "getUniformLocation", + "getUserMedia", + "getValues", + "getVarDate", + "getVariableValue", + "getVertexAttrib", + "getVertexAttribOffset", + "getVideoPlaybackQuality", + "getVideoTracks", + "getWakeLockState", + "getYear", + "givenName", + "global", + "globalAlpha", + "globalCompositeOperation", + "glyphOrientationHorizontal", + "glyphOrientationVertical", + "glyphRef", + "go", + "gradientTransform", + "gradientUnits", + "grammars", + "green", + "group", + "groupCollapsed", + "groupEnd", + "hardwareConcurrency", + "has", + "hasAttribute", + "hasAttributeNS", + "hasAttributes", + "hasChildNodes", + "hasComposition", + "hasExtension", + "hasFeature", + "hasFocus", + "hasLayout", + "hasOwnProperty", + "hash", + "head", + "headers", + "heading", + "height", + "hidden", + "hide", + "hideFocus", + "high", + "hint", + "history", + "honorificPrefix", + "honorificSuffix", + "horizontalOverflow", + "host", + "hostname", + "href", + "hreflang", + "hspace", + "html5TagCheckInerface", + "htmlFor", + "htmlText", + "httpEquiv", + "hwTimestamp", + "hypot", + "iccId", + "iceConnectionState", + "iceGatheringState", + "icon", + "id", + "identifier", + "identity", + "ignoreBOM", + "ignoreCase", + "image-orientation", + "image-rendering", + "imageOrientation", + "imageRendering", + "images", + "ime-mode", + "imeMode", + "implementation", + "importKey", + "importNode", + "importStylesheet", + "imports", + "impp", + "imul", + "in1", + "in2", + "inBandMetadataTrackDispatchType", + "inRange", + "includes", + "incremental", + "indeterminate", + "index", + "indexNames", + "indexOf", + "indexedDB", + "inertiaDestinationX", + "inertiaDestinationY", + "info", + "init", + "initAnimationEvent", + "initBeforeLoadEvent", + "initClipboardEvent", + "initCloseEvent", + "initCommandEvent", + "initCompositionEvent", + "initCustomEvent", + "initData", + "initDeviceMotionEvent", + "initDeviceOrientationEvent", + "initDragEvent", + "initErrorEvent", + "initEvent", + "initFocusEvent", + "initGestureEvent", + "initHashChangeEvent", + "initKeyEvent", + "initKeyboardEvent", + "initMSManipulationEvent", + "initMessageEvent", + "initMouseEvent", + "initMouseScrollEvent", + "initMouseWheelEvent", + "initMutationEvent", + "initNSMouseEvent", + "initOverflowEvent", + "initPageEvent", + "initPageTransitionEvent", + "initPointerEvent", + "initPopStateEvent", + "initProgressEvent", + "initScrollAreaEvent", + "initSimpleGestureEvent", + "initStorageEvent", + "initTextEvent", + "initTimeEvent", + "initTouchEvent", + "initTransitionEvent", + "initUIEvent", + "initWebKitAnimationEvent", + "initWebKitTransitionEvent", + "initWebKitWheelEvent", + "initWheelEvent", + "initialTime", + "initialize", + "initiatorType", + "inner", + "innerHTML", + "innerHeight", + "innerText", + "innerWidth", + "input", + "inputBuffer", + "inputEncoding", + "inputMethod", + "insertAdjacentElement", + "insertAdjacentHTML", + "insertAdjacentText", + "insertBefore", + "insertCell", + "insertData", + "insertItemBefore", + "insertNode", + "insertRow", + "insertRule", + "instanceRoot", + "intercept", + "interimResults", + "internalSubset", + "intersectsNode", + "interval", + "invalidIteratorState", + "inverse", + "invertSelf", + "is", + "is2D", + "isAlternate", + "isArray", + "isBingCurrentSearchDefault", + "isBuffer", + "isCandidateWindowVisible", + "isChar", + "isCollapsed", + "isComposing", + "isContentEditable", + "isContentHandlerRegistered", + "isContextLost", + "isDefaultNamespace", + "isDisabled", + "isEnabled", + "isEqual", + "isEqualNode", + "isExtensible", + "isFinite", + "isFramebuffer", + "isFrozen", + "isGenerator", + "isId", + "isInjected", + "isInteger", + "isMap", + "isMultiLine", + "isNaN", + "isOpen", + "isPointInFill", + "isPointInPath", + "isPointInRange", + "isPointInStroke", + "isPrefAlternate", + "isPrimary", + "isProgram", + "isPropertyImplicit", + "isProtocolHandlerRegistered", + "isPrototypeOf", + "isRenderbuffer", + "isSafeInteger", + "isSameNode", + "isSealed", + "isShader", + "isSupported", + "isTextEdit", + "isTexture", + "isTrusted", + "isTypeSupported", + "isView", + "isolation", + "italics", + "item", + "itemId", + "itemProp", + "itemRef", + "itemScope", + "itemType", + "itemValue", + "iterateNext", + "iterator", + "javaEnabled", + "jobTitle", + "join", + "json", + "justify-content", + "justifyContent", + "k1", + "k2", + "k3", + "k4", + "kernelMatrix", + "kernelUnitLengthX", + "kernelUnitLengthY", + "kerning", + "key", + "keyCode", + "keyFor", + "keyIdentifier", + "keyLightEnabled", + "keyLocation", + "keyPath", + "keySystem", + "keyText", + "keyUsage", + "keys", + "keytype", + "kind", + "knee", + "label", + "labels", + "lang", + "language", + "languages", + "largeArcFlag", + "lastChild", + "lastElementChild", + "lastEventId", + "lastIndex", + "lastIndexOf", + "lastMatch", + "lastMessageSubject", + "lastMessageType", + "lastModified", + "lastModifiedDate", + "lastPage", + "lastParen", + "lastState", + "lastStyleSheetSet", + "latitude", + "layerX", + "layerY", + "layoutFlow", + "layoutGrid", + "layoutGridChar", + "layoutGridLine", + "layoutGridMode", + "layoutGridType", + "lbound", + "left", + "leftContext", + "leftMargin", + "length", + "lengthAdjust", + "lengthComputable", + "letter-spacing", + "letterSpacing", + "level", + "lighting-color", + "lightingColor", + "limitingConeAngle", + "line", + "line-height", + "lineAlign", + "lineBreak", + "lineCap", + "lineDashOffset", + "lineHeight", + "lineJoin", + "lineNumber", + "lineTo", + "lineWidth", + "linearRampToValueAtTime", + "lineno", + "link", + "linkColor", + "linkProgram", + "links", + "list", + "list-style", + "list-style-image", + "list-style-position", + "list-style-type", + "listStyle", + "listStyleImage", + "listStylePosition", + "listStyleType", + "listener", + "load", + "loadEventEnd", + "loadEventStart", + "loadTimes", + "loaded", + "localDescription", + "localName", + "localStorage", + "locale", + "localeCompare", + "location", + "locationbar", + "lock", + "lockedFile", + "log", + "log10", + "log1p", + "log2", + "logicalXDPI", + "logicalYDPI", + "longDesc", + "longitude", + "lookupNamespaceURI", + "lookupPrefix", + "loop", + "loopEnd", + "loopStart", + "looping", + "low", + "lower", + "lowerBound", + "lowerOpen", + "lowsrc", + "m11", + "m12", + "m13", + "m14", + "m21", + "m22", + "m23", + "m24", + "m31", + "m32", + "m33", + "m34", + "m41", + "m42", + "m43", + "m44", + "manifest", + "map", + "mapping", + "margin", + "margin-bottom", + "margin-left", + "margin-right", + "margin-top", + "marginBottom", + "marginHeight", + "marginLeft", + "marginRight", + "marginTop", + "marginWidth", + "mark", + "marker", + "marker-end", + "marker-mid", + "marker-offset", + "marker-start", + "markerEnd", + "markerHeight", + "markerMid", + "markerOffset", + "markerStart", + "markerUnits", + "markerWidth", + "marks", + "mask", + "mask-type", + "maskContentUnits", + "maskType", + "maskUnits", + "match", + "matchMedia", + "matchMedium", + "matches", + "matrix", + "matrixTransform", + "max", + "max-height", + "max-width", + "maxAlternatives", + "maxChannelCount", + "maxConnectionsPerServer", + "maxDecibels", + "maxDistance", + "maxHeight", + "maxLength", + "maxTouchPoints", + "maxValue", + "maxWidth", + "measure", + "measureText", + "media", + "mediaDevices", + "mediaElement", + "mediaGroup", + "mediaKeys", + "mediaText", + "meetOrSlice", + "memory", + "menubar", + "mergeAttributes", + "message", + "messageClass", + "messageHandlers", + "metaKey", + "method", + "mimeType", + "mimeTypes", + "min", + "min-height", + "min-width", + "minDecibels", + "minHeight", + "minValue", + "minWidth", + "miterLimit", + "mix-blend-mode", + "mixBlendMode", + "mode", + "modify", + "mount", + "move", + "moveBy", + "moveEnd", + "moveFirst", + "moveFocusDown", + "moveFocusLeft", + "moveFocusRight", + "moveFocusUp", + "moveNext", + "moveRow", + "moveStart", + "moveTo", + "moveToBookmark", + "moveToElementText", + "moveToPoint", + "mozAdd", + "mozAnimationStartTime", + "mozAnon", + "mozApps", + "mozAudioCaptured", + "mozAudioChannelType", + "mozAutoplayEnabled", + "mozCancelAnimationFrame", + "mozCancelFullScreen", + "mozCancelRequestAnimationFrame", + "mozCaptureStream", + "mozCaptureStreamUntilEnded", + "mozClearDataAt", + "mozContact", + "mozContacts", + "mozCreateFileHandle", + "mozCurrentTransform", + "mozCurrentTransformInverse", + "mozCursor", + "mozDash", + "mozDashOffset", + "mozDecodedFrames", + "mozExitPointerLock", + "mozFillRule", + "mozFragmentEnd", + "mozFrameDelay", + "mozFullScreen", + "mozFullScreenElement", + "mozFullScreenEnabled", + "mozGetAll", + "mozGetAllKeys", + "mozGetAsFile", + "mozGetDataAt", + "mozGetMetadata", + "mozGetUserMedia", + "mozHasAudio", + "mozHasItem", + "mozHidden", + "mozImageSmoothingEnabled", + "mozIndexedDB", + "mozInnerScreenX", + "mozInnerScreenY", + "mozInputSource", + "mozIsTextField", + "mozItem", + "mozItemCount", + "mozItems", + "mozLength", + "mozLockOrientation", + "mozMatchesSelector", + "mozMovementX", + "mozMovementY", + "mozOpaque", + "mozOrientation", + "mozPaintCount", + "mozPaintedFrames", + "mozParsedFrames", + "mozPay", + "mozPointerLockElement", + "mozPresentedFrames", + "mozPreservesPitch", + "mozPressure", + "mozPrintCallback", + "mozRTCIceCandidate", + "mozRTCPeerConnection", + "mozRTCSessionDescription", + "mozRemove", + "mozRequestAnimationFrame", + "mozRequestFullScreen", + "mozRequestPointerLock", + "mozSetDataAt", + "mozSetImageElement", + "mozSourceNode", + "mozSrcObject", + "mozSystem", + "mozTCPSocket", + "mozTextStyle", + "mozTypesAt", + "mozUnlockOrientation", + "mozUserCancelled", + "mozVisibilityState", + "msAnimation", + "msAnimationDelay", + "msAnimationDirection", + "msAnimationDuration", + "msAnimationFillMode", + "msAnimationIterationCount", + "msAnimationName", + "msAnimationPlayState", + "msAnimationStartTime", + "msAnimationTimingFunction", + "msBackfaceVisibility", + "msBlockProgression", + "msCSSOMElementFloatMetrics", + "msCaching", + "msCachingEnabled", + "msCancelRequestAnimationFrame", + "msCapsLockWarningOff", + "msClearImmediate", + "msClose", + "msContentZoomChaining", + "msContentZoomFactor", + "msContentZoomLimit", + "msContentZoomLimitMax", + "msContentZoomLimitMin", + "msContentZoomSnap", + "msContentZoomSnapPoints", + "msContentZoomSnapType", + "msContentZooming", + "msConvertURL", + "msCrypto", + "msDoNotTrack", + "msElementsFromPoint", + "msElementsFromRect", + "msExitFullscreen", + "msExtendedCode", + "msFillRule", + "msFirstPaint", + "msFlex", + "msFlexAlign", + "msFlexDirection", + "msFlexFlow", + "msFlexItemAlign", + "msFlexLinePack", + "msFlexNegative", + "msFlexOrder", + "msFlexPack", + "msFlexPositive", + "msFlexPreferredSize", + "msFlexWrap", + "msFlowFrom", + "msFlowInto", + "msFontFeatureSettings", + "msFullscreenElement", + "msFullscreenEnabled", + "msGetInputContext", + "msGetRegionContent", + "msGetUntransformedBounds", + "msGraphicsTrustStatus", + "msGridColumn", + "msGridColumnAlign", + "msGridColumnSpan", + "msGridColumns", + "msGridRow", + "msGridRowAlign", + "msGridRowSpan", + "msGridRows", + "msHidden", + "msHighContrastAdjust", + "msHyphenateLimitChars", + "msHyphenateLimitLines", + "msHyphenateLimitZone", + "msHyphens", + "msImageSmoothingEnabled", + "msImeAlign", + "msIndexedDB", + "msInterpolationMode", + "msIsStaticHTML", + "msKeySystem", + "msKeys", + "msLaunchUri", + "msLockOrientation", + "msManipulationViewsEnabled", + "msMatchMedia", + "msMatchesSelector", + "msMaxTouchPoints", + "msOrientation", + "msOverflowStyle", + "msPerspective", + "msPerspectiveOrigin", + "msPlayToDisabled", + "msPlayToPreferredSourceUri", + "msPlayToPrimary", + "msPointerEnabled", + "msRegionOverflow", + "msReleasePointerCapture", + "msRequestAnimationFrame", + "msRequestFullscreen", + "msSaveBlob", + "msSaveOrOpenBlob", + "msScrollChaining", + "msScrollLimit", + "msScrollLimitXMax", + "msScrollLimitXMin", + "msScrollLimitYMax", + "msScrollLimitYMin", + "msScrollRails", + "msScrollSnapPointsX", + "msScrollSnapPointsY", + "msScrollSnapType", + "msScrollSnapX", + "msScrollSnapY", + "msScrollTranslation", + "msSetImmediate", + "msSetMediaKeys", + "msSetPointerCapture", + "msTextCombineHorizontal", + "msTextSizeAdjust", + "msToBlob", + "msTouchAction", + "msTouchSelect", + "msTraceAsyncCallbackCompleted", + "msTraceAsyncCallbackStarting", + "msTraceAsyncOperationCompleted", + "msTraceAsyncOperationStarting", + "msTransform", + "msTransformOrigin", + "msTransformStyle", + "msTransition", + "msTransitionDelay", + "msTransitionDuration", + "msTransitionProperty", + "msTransitionTimingFunction", + "msUnlockOrientation", + "msUpdateAsyncCallbackRelation", + "msUserSelect", + "msVisibilityState", + "msWrapFlow", + "msWrapMargin", + "msWrapThrough", + "msWriteProfilerMark", + "msZoom", + "msZoomTo", + "mt", + "multiEntry", + "multiSelectionObj", + "multiline", + "multiple", + "multiply", + "multiplySelf", + "mutableFile", + "muted", + "n", + "name", + "nameProp", + "namedItem", + "namedRecordset", + "names", + "namespaceURI", + "namespaces", + "naturalHeight", + "naturalWidth", + "navigate", + "navigation", + "navigationMode", + "navigationStart", + "navigator", + "near", + "nearestViewportElement", + "negative", + "netscape", + "networkState", + "newScale", + "newTranslate", + "newURL", + "newValue", + "newValueSpecifiedUnits", + "newVersion", + "newhome", + "next", + "nextElementSibling", + "nextNode", + "nextPage", + "nextSibling", + "nickname", + "noHref", + "noResize", + "noShade", + "noValidate", + "noWrap", + "nodeName", + "nodeType", + "nodeValue", + "normalize", + "normalizedPathSegList", + "notationName", + "notations", + "note", + "noteGrainOn", + "noteOff", + "noteOn", + "now", + "numOctaves", + "number", + "numberOfChannels", + "numberOfInputs", + "numberOfItems", + "numberOfOutputs", + "numberValue", + "oMatchesSelector", + "object", + "object-fit", + "object-position", + "objectFit", + "objectPosition", + "objectStore", + "objectStoreNames", + "observe", + "of", + "offscreenBuffering", + "offset", + "offsetHeight", + "offsetLeft", + "offsetNode", + "offsetParent", + "offsetTop", + "offsetWidth", + "offsetX", + "offsetY", + "ok", + "oldURL", + "oldValue", + "oldVersion", + "olderShadowRoot", + "onLine", + "onabort", + "onactivate", + "onactive", + "onaddstream", + "onaddtrack", + "onafterprint", + "onafterscriptexecute", + "onafterupdate", + "onaudioend", + "onaudioprocess", + "onaudiostart", + "onautocomplete", + "onautocompleteerror", + "onbeforeactivate", + "onbeforecopy", + "onbeforecut", + "onbeforedeactivate", + "onbeforeeditfocus", + "onbeforepaste", + "onbeforeprint", + "onbeforescriptexecute", + "onbeforeunload", + "onbeforeupdate", + "onblocked", + "onblur", + "onbounce", + "onboundary", + "oncached", + "oncancel", + "oncandidatewindowhide", + "oncandidatewindowshow", + "oncandidatewindowupdate", + "oncanplay", + "oncanplaythrough", + "oncellchange", + "onchange", + "onchargingchange", + "onchargingtimechange", + "onchecking", + "onclick", + "onclose", + "oncompassneedscalibration", + "oncomplete", + "oncontextmenu", + "oncontrolselect", + "oncopy", + "oncuechange", + "oncut", + "ondataavailable", + "ondatachannel", + "ondatasetchanged", + "ondatasetcomplete", + "ondblclick", + "ondeactivate", + "ondevicelight", + "ondevicemotion", + "ondeviceorientation", + "ondeviceproximity", + "ondischargingtimechange", + "ondisplay", + "ondownloading", + "ondrag", + "ondragend", + "ondragenter", + "ondragleave", + "ondragover", + "ondragstart", + "ondrop", + "ondurationchange", + "onemptied", + "onencrypted", + "onend", + "onended", + "onenter", + "onerror", + "onerrorupdate", + "onexit", + "onfilterchange", + "onfinish", + "onfocus", + "onfocusin", + "onfocusout", + "onfullscreenchange", + "onfullscreenerror", + "ongesturechange", + "ongestureend", + "ongesturestart", + "ongotpointercapture", + "onhashchange", + "onhelp", + "onicecandidate", + "oniceconnectionstatechange", + "oninactive", + "oninput", + "oninvalid", + "onkeydown", + "onkeypress", + "onkeyup", + "onlanguagechange", + "onlayoutcomplete", + "onlevelchange", + "onload", + "onloadeddata", + "onloadedmetadata", + "onloadend", + "onloadstart", + "onlosecapture", + "onlostpointercapture", + "only", + "onmark", + "onmessage", + "onmousedown", + "onmouseenter", + "onmouseleave", + "onmousemove", + "onmouseout", + "onmouseover", + "onmouseup", + "onmousewheel", + "onmove", + "onmoveend", + "onmovestart", + "onmozfullscreenchange", + "onmozfullscreenerror", + "onmozorientationchange", + "onmozpointerlockchange", + "onmozpointerlockerror", + "onmscontentzoom", + "onmsfullscreenchange", + "onmsfullscreenerror", + "onmsgesturechange", + "onmsgesturedoubletap", + "onmsgestureend", + "onmsgesturehold", + "onmsgesturestart", + "onmsgesturetap", + "onmsgotpointercapture", + "onmsinertiastart", + "onmslostpointercapture", + "onmsmanipulationstatechanged", + "onmsneedkey", + "onmsorientationchange", + "onmspointercancel", + "onmspointerdown", + "onmspointerenter", + "onmspointerhover", + "onmspointerleave", + "onmspointermove", + "onmspointerout", + "onmspointerover", + "onmspointerup", + "onmssitemodejumplistitemremoved", + "onmsthumbnailclick", + "onnegotiationneeded", + "onnomatch", + "onnoupdate", + "onobsolete", + "onoffline", + "ononline", + "onopen", + "onorientationchange", + "onpagechange", + "onpagehide", + "onpageshow", + "onpaste", + "onpause", + "onplay", + "onplaying", + "onpluginstreamstart", + "onpointercancel", + "onpointerdown", + "onpointerenter", + "onpointerleave", + "onpointerlockchange", + "onpointerlockerror", + "onpointermove", + "onpointerout", + "onpointerover", + "onpointerup", + "onpopstate", + "onprogress", + "onpropertychange", + "onratechange", + "onreadystatechange", + "onremovestream", + "onremovetrack", + "onreset", + "onresize", + "onresizeend", + "onresizestart", + "onresourcetimingbufferfull", + "onresult", + "onresume", + "onrowenter", + "onrowexit", + "onrowsdelete", + "onrowsinserted", + "onscroll", + "onsearch", + "onseeked", + "onseeking", + "onselect", + "onselectionchange", + "onselectstart", + "onshow", + "onsignalingstatechange", + "onsoundend", + "onsoundstart", + "onspeechend", + "onspeechstart", + "onstalled", + "onstart", + "onstatechange", + "onstop", + "onstorage", + "onstoragecommit", + "onsubmit", + "onsuccess", + "onsuspend", + "ontextinput", + "ontimeout", + "ontimeupdate", + "ontoggle", + "ontouchcancel", + "ontouchend", + "ontouchmove", + "ontouchstart", + "ontransitionend", + "onunload", + "onupdateready", + "onupgradeneeded", + "onuserproximity", + "onversionchange", + "onvoiceschanged", + "onvolumechange", + "onwaiting", + "onwarning", + "onwebkitanimationend", + "onwebkitanimationiteration", + "onwebkitanimationstart", + "onwebkitcurrentplaybacktargetiswirelesschanged", + "onwebkitfullscreenchange", + "onwebkitfullscreenerror", + "onwebkitkeyadded", + "onwebkitkeyerror", + "onwebkitkeymessage", + "onwebkitneedkey", + "onwebkitorientationchange", + "onwebkitplaybacktargetavailabilitychanged", + "onwebkitpointerlockchange", + "onwebkitpointerlockerror", + "onwebkitresourcetimingbufferfull", + "onwebkittransitionend", + "onwheel", + "onzoom", + "opacity", + "open", + "openCursor", + "openDatabase", + "openKeyCursor", + "opener", + "opera", + "operationType", + "operator", + "opr", + "optimum", + "options", + "order", + "orderX", + "orderY", + "ordered", + "org", + "orient", + "orientAngle", + "orientType", + "orientation", + "origin", + "originalTarget", + "orphans", + "oscpu", + "outerHTML", + "outerHeight", + "outerText", + "outerWidth", + "outline", + "outline-color", + "outline-offset", + "outline-style", + "outline-width", + "outlineColor", + "outlineOffset", + "outlineStyle", + "outlineWidth", + "outputBuffer", + "overflow", + "overflow-x", + "overflow-y", + "overflowX", + "overflowY", + "overrideMimeType", + "oversample", + "ownerDocument", + "ownerElement", + "ownerNode", + "ownerRule", + "ownerSVGElement", + "owningElement", + "p1", + "p2", + "p3", + "p4", + "pad", + "padding", + "padding-bottom", + "padding-left", + "padding-right", + "padding-top", + "paddingBottom", + "paddingLeft", + "paddingRight", + "paddingTop", + "page", + "page-break-after", + "page-break-before", + "page-break-inside", + "pageBreakAfter", + "pageBreakBefore", + "pageBreakInside", + "pageCount", + "pageX", + "pageXOffset", + "pageY", + "pageYOffset", + "pages", + "paint-order", + "paintOrder", + "paintRequests", + "paintType", + "palette", + "panningModel", + "parent", + "parentElement", + "parentNode", + "parentRule", + "parentStyleSheet", + "parentTextEdit", + "parentWindow", + "parse", + "parseFloat", + "parseFromString", + "parseInt", + "participants", + "password", + "pasteHTML", + "path", + "pathLength", + "pathSegList", + "pathSegType", + "pathSegTypeAsLetter", + "pathname", + "pattern", + "patternContentUnits", + "patternMismatch", + "patternTransform", + "patternUnits", + "pause", + "pauseAnimations", + "pauseOnExit", + "paused", + "pending", + "performance", + "permission", + "persisted", + "personalbar", + "perspective", + "perspective-origin", + "perspectiveOrigin", + "phoneticFamilyName", + "phoneticGivenName", + "photo", + "ping", + "pitch", + "pixelBottom", + "pixelDepth", + "pixelHeight", + "pixelLeft", + "pixelRight", + "pixelStorei", + "pixelTop", + "pixelUnitToMillimeterX", + "pixelUnitToMillimeterY", + "pixelWidth", + "placeholder", + "platform", + "play", + "playbackRate", + "playbackState", + "playbackTime", + "played", + "plugins", + "pluginspage", + "pname", + "pointer-events", + "pointerBeforeReferenceNode", + "pointerEnabled", + "pointerEvents", + "pointerId", + "pointerLockElement", + "pointerType", + "points", + "pointsAtX", + "pointsAtY", + "pointsAtZ", + "polygonOffset", + "pop", + "popupWindowFeatures", + "popupWindowName", + "popupWindowURI", + "port", + "port1", + "port2", + "ports", + "posBottom", + "posHeight", + "posLeft", + "posRight", + "posTop", + "posWidth", + "position", + "positionAlign", + "postError", + "postMessage", + "poster", + "pow", + "powerOff", + "preMultiplySelf", + "precision", + "preferredStyleSheetSet", + "preferredStylesheetSet", + "prefix", + "preload", + "preserveAlpha", + "preserveAspectRatio", + "preserveAspectRatioString", + "pressed", + "pressure", + "prevValue", + "preventDefault", + "preventExtensions", + "previousElementSibling", + "previousNode", + "previousPage", + "previousScale", + "previousSibling", + "previousTranslate", + "primaryKey", + "primitiveType", + "primitiveUnits", + "principals", + "print", + "privateKey", + "probablySupportsContext", + "process", + "processIceMessage", + "product", + "productSub", + "profile", + "profileEnd", + "profiles", + "prompt", + "properties", + "propertyIsEnumerable", + "propertyName", + "protocol", + "protocolLong", + "prototype", + "pseudoClass", + "pseudoElement", + "publicId", + "publicKey", + "published", + "push", + "pushNotification", + "pushState", + "put", + "putImageData", + "quadraticCurveTo", + "qualifier", + "queryCommandEnabled", + "queryCommandIndeterm", + "queryCommandState", + "queryCommandSupported", + "queryCommandText", + "queryCommandValue", + "querySelector", + "querySelectorAll", + "quote", + "quotes", + "r", + "r1", + "r2", + "race", + "radiogroup", + "radiusX", + "radiusY", + "random", + "range", + "rangeCount", + "rangeMax", + "rangeMin", + "rangeOffset", + "rangeOverflow", + "rangeParent", + "rangeUnderflow", + "rate", + "ratio", + "raw", + "read", + "readAsArrayBuffer", + "readAsBinaryString", + "readAsBlob", + "readAsDataURL", + "readAsText", + "readOnly", + "readPixels", + "readReportRequested", + "readyState", + "reason", + "reboot", + "receiver", + "receivers", + "recordNumber", + "recordset", + "rect", + "red", + "redirectCount", + "redirectEnd", + "redirectStart", + "reduce", + "reduceRight", + "reduction", + "refDistance", + "refX", + "refY", + "referenceNode", + "referrer", + "refresh", + "region", + "regionAnchorX", + "regionAnchorY", + "regionId", + "regions", + "register", + "registerContentHandler", + "registerElement", + "registerProtocolHandler", + "reject", + "rel", + "relList", + "relatedNode", + "relatedTarget", + "release", + "releaseCapture", + "releaseEvents", + "releasePointerCapture", + "releaseShaderCompiler", + "reliable", + "reload", + "remainingSpace", + "remoteDescription", + "remove", + "removeAllRanges", + "removeAttribute", + "removeAttributeNS", + "removeAttributeNode", + "removeBehavior", + "removeChild", + "removeCue", + "removeEventListener", + "removeFilter", + "removeImport", + "removeItem", + "removeListener", + "removeNamedItem", + "removeNamedItemNS", + "removeNode", + "removeParameter", + "removeProperty", + "removeRange", + "removeRegion", + "removeRule", + "removeSiteSpecificTrackingException", + "removeSourceBuffer", + "removeStream", + "removeTrack", + "removeVariable", + "removeWakeLockListener", + "removeWebWideTrackingException", + "removedNodes", + "renderbufferStorage", + "renderedBuffer", + "renderingMode", + "repeat", + "replace", + "replaceAdjacentText", + "replaceChild", + "replaceData", + "replaceId", + "replaceItem", + "replaceNode", + "replaceState", + "replaceTrack", + "replaceWholeText", + "reportValidity", + "requestAnimationFrame", + "requestAutocomplete", + "requestData", + "requestFullscreen", + "requestMediaKeySystemAccess", + "requestPermission", + "requestPointerLock", + "requestStart", + "requestingWindow", + "required", + "requiredExtensions", + "requiredFeatures", + "reset", + "resetTransform", + "resize", + "resizeBy", + "resizeTo", + "resolve", + "response", + "responseBody", + "responseEnd", + "responseStart", + "responseText", + "responseType", + "responseURL", + "responseXML", + "restore", + "result", + "resultType", + "resume", + "returnValue", + "rev", + "reverse", + "reversed", + "revocable", + "revokeObjectURL", + "rgbColor", + "right", + "rightContext", + "rightMargin", + "rolloffFactor", + "root", + "rootElement", + "rotate", + "rotateAxisAngle", + "rotateAxisAngleSelf", + "rotateFromVector", + "rotateFromVectorSelf", + "rotateSelf", + "rotation", + "rotationRate", + "round", + "rowIndex", + "rowSpan", + "rows", + "rubyAlign", + "rubyOverhang", + "rubyPosition", + "rules", + "runtime", + "runtimeStyle", + "rx", + "ry", + "safari", + "sampleCoverage", + "sampleRate", + "sandbox", + "save", + "scale", + "scale3d", + "scale3dSelf", + "scaleNonUniform", + "scaleNonUniformSelf", + "scaleSelf", + "scheme", + "scissor", + "scope", + "scopeName", + "scoped", + "screen", + "screenBrightness", + "screenEnabled", + "screenLeft", + "screenPixelToMillimeterX", + "screenPixelToMillimeterY", + "screenTop", + "screenX", + "screenY", + "scripts", + "scroll", + "scroll-behavior", + "scrollAmount", + "scrollBehavior", + "scrollBy", + "scrollByLines", + "scrollByPages", + "scrollDelay", + "scrollHeight", + "scrollIntoView", + "scrollIntoViewIfNeeded", + "scrollLeft", + "scrollLeftMax", + "scrollMaxX", + "scrollMaxY", + "scrollTo", + "scrollTop", + "scrollTopMax", + "scrollWidth", + "scrollX", + "scrollY", + "scrollbar3dLightColor", + "scrollbarArrowColor", + "scrollbarBaseColor", + "scrollbarDarkShadowColor", + "scrollbarFaceColor", + "scrollbarHighlightColor", + "scrollbarShadowColor", + "scrollbarTrackColor", + "scrollbars", + "scrolling", + "sdp", + "sdpMLineIndex", + "sdpMid", + "seal", + "search", + "searchBox", + "searchBoxJavaBridge_", + "searchParams", + "sectionRowIndex", + "secureConnectionStart", + "security", + "seed", + "seekable", + "seeking", + "select", + "selectAllChildren", + "selectNode", + "selectNodeContents", + "selectNodes", + "selectSingleNode", + "selectSubString", + "selected", + "selectedIndex", + "selectedOptions", + "selectedStyleSheetSet", + "selectedStylesheetSet", + "selection", + "selectionDirection", + "selectionEnd", + "selectionStart", + "selector", + "selectorText", + "self", + "send", + "sendAsBinary", + "sendBeacon", + "sender", + "sentTimestamp", + "separator", + "serializeToString", + "serviceWorker", + "sessionId", + "sessionStorage", + "set", + "setActive", + "setAlpha", + "setAttribute", + "setAttributeNS", + "setAttributeNode", + "setAttributeNodeNS", + "setBaseAndExtent", + "setBingCurrentSearchDefault", + "setCapture", + "setColor", + "setCompositeOperation", + "setCurrentTime", + "setCustomValidity", + "setData", + "setDate", + "setDragImage", + "setEnd", + "setEndAfter", + "setEndBefore", + "setEndPoint", + "setFillColor", + "setFilterRes", + "setFloat32", + "setFloat64", + "setFloatValue", + "setFullYear", + "setHours", + "setImmediate", + "setInt16", + "setInt32", + "setInt8", + "setInterval", + "setItem", + "setLineCap", + "setLineDash", + "setLineJoin", + "setLineWidth", + "setLocalDescription", + "setMatrix", + "setMatrixValue", + "setMediaKeys", + "setMilliseconds", + "setMinutes", + "setMiterLimit", + "setMonth", + "setNamedItem", + "setNamedItemNS", + "setNonUserCodeExceptions", + "setOrientToAngle", + "setOrientToAuto", + "setOrientation", + "setOverrideHistoryNavigationMode", + "setPaint", + "setParameter", + "setPeriodicWave", + "setPointerCapture", + "setPosition", + "setPreference", + "setProperty", + "setPrototypeOf", + "setRGBColor", + "setRGBColorICCColor", + "setRadius", + "setRangeText", + "setRemoteDescription", + "setRequestHeader", + "setResizable", + "setResourceTimingBufferSize", + "setRotate", + "setScale", + "setSeconds", + "setSelectionRange", + "setServerCertificate", + "setShadow", + "setSkewX", + "setSkewY", + "setStart", + "setStartAfter", + "setStartBefore", + "setStdDeviation", + "setStringValue", + "setStrokeColor", + "setSuggestResult", + "setTargetAtTime", + "setTargetValueAtTime", + "setTime", + "setTimeout", + "setTransform", + "setTranslate", + "setUTCDate", + "setUTCFullYear", + "setUTCHours", + "setUTCMilliseconds", + "setUTCMinutes", + "setUTCMonth", + "setUTCSeconds", + "setUint16", + "setUint32", + "setUint8", + "setUri", + "setValueAtTime", + "setValueCurveAtTime", + "setVariable", + "setVelocity", + "setVersion", + "setYear", + "settingName", + "settingValue", + "sex", + "shaderSource", + "shadowBlur", + "shadowColor", + "shadowOffsetX", + "shadowOffsetY", + "shadowRoot", + "shape", + "shape-rendering", + "shapeRendering", + "sheet", + "shift", + "shiftKey", + "shiftLeft", + "show", + "showHelp", + "showModal", + "showModalDialog", + "showModelessDialog", + "showNotification", + "sidebar", + "sign", + "signalingState", + "sin", + "singleNodeValue", + "sinh", + "size", + "sizeToContent", + "sizes", + "skewX", + "skewXSelf", + "skewY", + "skewYSelf", + "slice", + "slope", + "small", + "smil", + "smoothingTimeConstant", + "snapToLines", + "snapshotItem", + "snapshotLength", + "some", + "sort", + "source", + "sourceBuffer", + "sourceBuffers", + "sourceIndex", + "spacing", + "span", + "speakAs", + "speaking", + "specified", + "specularConstant", + "specularExponent", + "speechSynthesis", + "speed", + "speedOfSound", + "spellcheck", + "splice", + "split", + "splitText", + "spreadMethod", + "sqrt", + "src", + "srcElement", + "srcFilter", + "srcUrn", + "srcdoc", + "srclang", + "srcset", + "stack", + "stackTraceLimit", + "stacktrace", + "standalone", + "standby", + "start", + "startContainer", + "startIce", + "startOffset", + "startRendering", + "startTime", + "startsWith", + "state", + "status", + "statusMessage", + "statusText", + "statusbar", + "stdDeviationX", + "stdDeviationY", + "stencilFunc", + "stencilFuncSeparate", + "stencilMask", + "stencilMaskSeparate", + "stencilOp", + "stencilOpSeparate", + "step", + "stepDown", + "stepMismatch", + "stepUp", + "sticky", + "stitchTiles", + "stop", + "stop-color", + "stop-opacity", + "stopColor", + "stopImmediatePropagation", + "stopOpacity", + "stopPropagation", + "storageArea", + "storageName", + "storageStatus", + "storeSiteSpecificTrackingException", + "storeWebWideTrackingException", + "stpVersion", + "stream", + "strike", + "stringValue", + "stringify", + "stroke", + "stroke-dasharray", + "stroke-dashoffset", + "stroke-linecap", + "stroke-linejoin", + "stroke-miterlimit", + "stroke-opacity", + "stroke-width", + "strokeDasharray", + "strokeDashoffset", + "strokeLinecap", + "strokeLinejoin", + "strokeMiterlimit", + "strokeOpacity", + "strokeRect", + "strokeStyle", + "strokeText", + "strokeWidth", + "style", + "styleFloat", + "styleMedia", + "styleSheet", + "styleSheetSets", + "styleSheets", + "sub", + "subarray", + "subject", + "submit", + "subscribe", + "substr", + "substring", + "substringData", + "subtle", + "suffix", + "suffixes", + "summary", + "sup", + "supports", + "surfaceScale", + "surroundContents", + "suspend", + "suspendRedraw", + "swapCache", + "swapNode", + "sweepFlag", + "symbols", + "system", + "systemCode", + "systemId", + "systemLanguage", + "systemXDPI", + "systemYDPI", + "tBodies", + "tFoot", + "tHead", + "tabIndex", + "table", + "table-layout", + "tableLayout", + "tableValues", + "tag", + "tagName", + "tagUrn", + "tags", + "taintEnabled", + "takeRecords", + "tan", + "tanh", + "target", + "targetElement", + "targetTouches", + "targetX", + "targetY", + "tel", + "terminate", + "test", + "texImage2D", + "texParameterf", + "texParameteri", + "texSubImage2D", + "text", + "text-align", + "text-anchor", + "text-decoration", + "text-decoration-color", + "text-decoration-line", + "text-decoration-style", + "text-indent", + "text-overflow", + "text-rendering", + "text-shadow", + "text-transform", + "textAlign", + "textAlignLast", + "textAnchor", + "textAutospace", + "textBaseline", + "textContent", + "textDecoration", + "textDecorationBlink", + "textDecorationColor", + "textDecorationLine", + "textDecorationLineThrough", + "textDecorationNone", + "textDecorationOverline", + "textDecorationStyle", + "textDecorationUnderline", + "textIndent", + "textJustify", + "textJustifyTrim", + "textKashida", + "textKashidaSpace", + "textLength", + "textOverflow", + "textRendering", + "textShadow", + "textTracks", + "textTransform", + "textUnderlinePosition", + "then", + "threadId", + "threshold", + "tiltX", + "tiltY", + "time", + "timeEnd", + "timeStamp", + "timeout", + "timestamp", + "timestampOffset", + "timing", + "title", + "toArray", + "toBlob", + "toDataURL", + "toDateString", + "toElement", + "toExponential", + "toFixed", + "toFloat32Array", + "toFloat64Array", + "toGMTString", + "toISOString", + "toJSON", + "toLocaleDateString", + "toLocaleFormat", + "toLocaleLowerCase", + "toLocaleString", + "toLocaleTimeString", + "toLocaleUpperCase", + "toLowerCase", + "toMethod", + "toPrecision", + "toSdp", + "toSource", + "toStaticHTML", + "toString", + "toStringTag", + "toTimeString", + "toUTCString", + "toUpperCase", + "toggle", + "toggleLongPressEnabled", + "tooLong", + "toolbar", + "top", + "topMargin", + "total", + "totalFrameDelay", + "totalVideoFrames", + "touchAction", + "touches", + "trace", + "track", + "transaction", + "transactions", + "transform", + "transform-origin", + "transform-style", + "transformOrigin", + "transformPoint", + "transformString", + "transformStyle", + "transformToDocument", + "transformToFragment", + "transition", + "transition-delay", + "transition-duration", + "transition-property", + "transition-timing-function", + "transitionDelay", + "transitionDuration", + "transitionProperty", + "transitionTimingFunction", + "translate", + "translateSelf", + "translationX", + "translationY", + "trim", + "trimLeft", + "trimRight", + "trueSpeed", + "trunc", + "truncate", + "type", + "typeDetail", + "typeMismatch", + "typeMustMatch", + "types", + "ubound", + "undefined", + "unescape", + "uneval", + "unicode-bidi", + "unicodeBidi", + "uniform1f", + "uniform1fv", + "uniform1i", + "uniform1iv", + "uniform2f", + "uniform2fv", + "uniform2i", + "uniform2iv", + "uniform3f", + "uniform3fv", + "uniform3i", + "uniform3iv", + "uniform4f", + "uniform4fv", + "uniform4i", + "uniform4iv", + "uniformMatrix2fv", + "uniformMatrix3fv", + "uniformMatrix4fv", + "unique", + "uniqueID", + "uniqueNumber", + "unitType", + "units", + "unloadEventEnd", + "unloadEventStart", + "unlock", + "unmount", + "unobserve", + "unpause", + "unpauseAnimations", + "unreadCount", + "unregister", + "unregisterContentHandler", + "unregisterProtocolHandler", + "unscopables", + "unselectable", + "unshift", + "unsubscribe", + "unsuspendRedraw", + "unsuspendRedrawAll", + "unwatch", + "unwrapKey", + "update", + "updateCommands", + "updateIce", + "updateInterval", + "updateSettings", + "updated", + "updating", + "upload", + "upper", + "upperBound", + "upperOpen", + "uri", + "url", + "urn", + "urns", + "usages", + "useCurrentView", + "useMap", + "useProgram", + "usedSpace", + "userAgent", + "userLanguage", + "username", + "v8BreakIterator", + "vAlign", + "vLink", + "valid", + "validateProgram", + "validationMessage", + "validity", + "value", + "valueAsDate", + "valueAsNumber", + "valueAsString", + "valueInSpecifiedUnits", + "valueMissing", + "valueOf", + "valueText", + "valueType", + "values", + "vector-effect", + "vectorEffect", + "velocityAngular", + "velocityExpansion", + "velocityX", + "velocityY", + "vendor", + "vendorSub", + "verify", + "version", + "vertexAttrib1f", + "vertexAttrib1fv", + "vertexAttrib2f", + "vertexAttrib2fv", + "vertexAttrib3f", + "vertexAttrib3fv", + "vertexAttrib4f", + "vertexAttrib4fv", + "vertexAttribDivisorANGLE", + "vertexAttribPointer", + "vertical", + "vertical-align", + "verticalAlign", + "verticalOverflow", + "vibrate", + "videoHeight", + "videoTracks", + "videoWidth", + "view", + "viewBox", + "viewBoxString", + "viewTarget", + "viewTargetString", + "viewport", + "viewportAnchorX", + "viewportAnchorY", + "viewportElement", + "visibility", + "visibilityState", + "visible", + "vlinkColor", + "voice", + "volume", + "vrml", + "vspace", + "w", + "wand", + "warn", + "wasClean", + "watch", + "watchPosition", + "webdriver", + "webkitAddKey", + "webkitAnimation", + "webkitAnimationDelay", + "webkitAnimationDirection", + "webkitAnimationDuration", + "webkitAnimationFillMode", + "webkitAnimationIterationCount", + "webkitAnimationName", + "webkitAnimationPlayState", + "webkitAnimationTimingFunction", + "webkitAppearance", + "webkitAudioContext", + "webkitAudioDecodedByteCount", + "webkitAudioPannerNode", + "webkitBackfaceVisibility", + "webkitBackground", + "webkitBackgroundAttachment", + "webkitBackgroundClip", + "webkitBackgroundColor", + "webkitBackgroundImage", + "webkitBackgroundOrigin", + "webkitBackgroundPosition", + "webkitBackgroundPositionX", + "webkitBackgroundPositionY", + "webkitBackgroundRepeat", + "webkitBackgroundSize", + "webkitBackingStorePixelRatio", + "webkitBorderImage", + "webkitBorderImageOutset", + "webkitBorderImageRepeat", + "webkitBorderImageSlice", + "webkitBorderImageSource", + "webkitBorderImageWidth", + "webkitBoxAlign", + "webkitBoxDirection", + "webkitBoxFlex", + "webkitBoxOrdinalGroup", + "webkitBoxOrient", + "webkitBoxPack", + "webkitBoxSizing", + "webkitCancelAnimationFrame", + "webkitCancelFullScreen", + "webkitCancelKeyRequest", + "webkitCancelRequestAnimationFrame", + "webkitClearResourceTimings", + "webkitClosedCaptionsVisible", + "webkitConvertPointFromNodeToPage", + "webkitConvertPointFromPageToNode", + "webkitCreateShadowRoot", + "webkitCurrentFullScreenElement", + "webkitCurrentPlaybackTargetIsWireless", + "webkitDirectionInvertedFromDevice", + "webkitDisplayingFullscreen", + "webkitEnterFullScreen", + "webkitEnterFullscreen", + "webkitExitFullScreen", + "webkitExitFullscreen", + "webkitExitPointerLock", + "webkitFullScreenKeyboardInputAllowed", + "webkitFullscreenElement", + "webkitFullscreenEnabled", + "webkitGenerateKeyRequest", + "webkitGetAsEntry", + "webkitGetDatabaseNames", + "webkitGetEntries", + "webkitGetEntriesByName", + "webkitGetEntriesByType", + "webkitGetFlowByName", + "webkitGetGamepads", + "webkitGetImageDataHD", + "webkitGetNamedFlows", + "webkitGetRegionFlowRanges", + "webkitGetUserMedia", + "webkitHasClosedCaptions", + "webkitHidden", + "webkitIDBCursor", + "webkitIDBDatabase", + "webkitIDBDatabaseError", + "webkitIDBDatabaseException", + "webkitIDBFactory", + "webkitIDBIndex", + "webkitIDBKeyRange", + "webkitIDBObjectStore", + "webkitIDBRequest", + "webkitIDBTransaction", + "webkitImageSmoothingEnabled", + "webkitIndexedDB", + "webkitInitMessageEvent", + "webkitIsFullScreen", + "webkitKeys", + "webkitLineDashOffset", + "webkitLockOrientation", + "webkitMatchesSelector", + "webkitMediaStream", + "webkitNotifications", + "webkitOfflineAudioContext", + "webkitOrientation", + "webkitPeerConnection00", + "webkitPersistentStorage", + "webkitPointerLockElement", + "webkitPostMessage", + "webkitPreservesPitch", + "webkitPutImageDataHD", + "webkitRTCPeerConnection", + "webkitRegionOverset", + "webkitRequestAnimationFrame", + "webkitRequestFileSystem", + "webkitRequestFullScreen", + "webkitRequestFullscreen", + "webkitRequestPointerLock", + "webkitResolveLocalFileSystemURL", + "webkitSetMediaKeys", + "webkitSetResourceTimingBufferSize", + "webkitShadowRoot", + "webkitShowPlaybackTargetPicker", + "webkitSlice", + "webkitSpeechGrammar", + "webkitSpeechGrammarList", + "webkitSpeechRecognition", + "webkitSpeechRecognitionError", + "webkitSpeechRecognitionEvent", + "webkitStorageInfo", + "webkitSupportsFullscreen", + "webkitTemporaryStorage", + "webkitTextSizeAdjust", + "webkitTransform", + "webkitTransformOrigin", + "webkitTransition", + "webkitTransitionDelay", + "webkitTransitionDuration", + "webkitTransitionProperty", + "webkitTransitionTimingFunction", + "webkitURL", + "webkitUnlockOrientation", + "webkitUserSelect", + "webkitVideoDecodedByteCount", + "webkitVisibilityState", + "webkitWirelessVideoPlaybackDisabled", + "webkitdropzone", + "webstore", + "weight", + "whatToShow", + "wheelDelta", + "wheelDeltaX", + "wheelDeltaY", + "which", + "white-space", + "whiteSpace", + "wholeText", + "widows", + "width", + "will-change", + "willChange", + "willValidate", + "window", + "withCredentials", + "word-break", + "word-spacing", + "word-wrap", + "wordBreak", + "wordSpacing", + "wordWrap", + "wrap", + "wrapKey", + "write", + "writeln", + "writingMode", + "x", + "x1", + "x2", + "xChannelSelector", + "xmlEncoding", + "xmlStandalone", + "xmlVersion", + "xmlbase", + "xmllang", + "xmlspace", + "y", + "y1", + "y2", + "yChannelSelector", + "yandex", + "z", + "z-index", + "zIndex", + "zoom", + "zoomAndPan", + "zoomRectScreen" + ] +} diff --git a/node_modules/uglify-js/tools/exports.js b/node_modules/uglify-js/tools/exports.js new file mode 100644 index 000000000..09acc13ec --- /dev/null +++ b/node_modules/uglify-js/tools/exports.js @@ -0,0 +1,19 @@ +exports["Compressor"] = Compressor; +exports["DefaultsError"] = DefaultsError; +exports["Dictionary"] = Dictionary; +exports["JS_Parse_Error"] = JS_Parse_Error; +exports["MAP"] = MAP; +exports["OutputStream"] = OutputStream; +exports["SourceMap"] = SourceMap; +exports["TreeTransformer"] = TreeTransformer; +exports["TreeWalker"] = TreeWalker; +exports["base54"] = base54; +exports["defaults"] = defaults; +exports["mangle_properties"] = mangle_properties; +exports["merge"] = merge; +exports["parse"] = parse; +exports["push_uniq"] = push_uniq; +exports["string_template"] = string_template; +exports["tokenizer"] = tokenizer; +exports["is_identifier"] = is_identifier; +exports["SymbolDef"] = SymbolDef; diff --git a/node_modules/uglify-js/tools/node.js b/node_modules/uglify-js/tools/node.js new file mode 100644 index 000000000..147751aeb --- /dev/null +++ b/node_modules/uglify-js/tools/node.js @@ -0,0 +1,320 @@ +// workaround for tty output truncation upon process.exit() +[process.stdout, process.stderr].forEach(function(stream){ + if (stream._handle && stream._handle.setBlocking) + stream._handle.setBlocking(true); +}); + +var path = require("path"); +var fs = require("fs"); + +var UglifyJS = exports; +var FILES = UglifyJS.FILES = [ + "../lib/utils.js", + "../lib/ast.js", + "../lib/parse.js", + "../lib/transform.js", + "../lib/scope.js", + "../lib/output.js", + "../lib/compress.js", + "../lib/sourcemap.js", + "../lib/mozilla-ast.js", + "../lib/propmangle.js", + "./exports.js", +].map(function(file){ + return require.resolve(file); +}); + +new Function("MOZ_SourceMap", "exports", FILES.map(function(file){ + return fs.readFileSync(file, "utf8"); +}).join("\n\n"))( + require("source-map"), + UglifyJS +); + +UglifyJS.AST_Node.warn_function = function(txt) { + console.error("WARN: %s", txt); +}; + +function read_source_map(code) { + var match = /\n\/\/# sourceMappingURL=data:application\/json(;.*?)?;base64,(.*)/.exec(code); + if (!match) { + UglifyJS.AST_Node.warn("inline source map not found"); + return null; + } + return JSON.parse(new Buffer(match[2], "base64")); +} + +UglifyJS.minify = function(files, options) { + options = UglifyJS.defaults(options, { + compress : {}, + fromString : false, + inSourceMap : null, + mangle : {}, + mangleProperties : false, + nameCache : null, + outFileName : null, + output : null, + outSourceMap : null, + parse : {}, + sourceMapInline : false, + sourceMapUrl : null, + sourceRoot : null, + spidermonkey : false, + warnings : false, + }); + UglifyJS.base54.reset(); + + var inMap = options.inSourceMap; + if (typeof inMap == "string" && inMap != "inline") { + inMap = JSON.parse(fs.readFileSync(inMap, "utf8")); + } + + // 1. parse + var toplevel = null, + sourcesContent = {}; + + if (options.spidermonkey) { + if (inMap == "inline") { + throw new Error("inline source map only works with built-in parser"); + } + toplevel = UglifyJS.AST_Node.from_mozilla_ast(files); + } else { + function addFile(file, fileUrl) { + var code = options.fromString + ? file + : fs.readFileSync(file, "utf8"); + if (inMap == "inline") { + inMap = read_source_map(code); + } + sourcesContent[fileUrl] = code; + toplevel = UglifyJS.parse(code, { + filename: fileUrl, + toplevel: toplevel, + bare_returns: options.parse ? options.parse.bare_returns : undefined + }); + } + if (!options.fromString) { + files = UglifyJS.simple_glob(files); + if (inMap == "inline" && files.length > 1) { + throw new Error("inline source map only works with singular input"); + } + } + [].concat(files).forEach(function (files, i) { + if (typeof files === 'string') { + addFile(files, options.fromString ? i : files); + } else { + for (var fileUrl in files) { + addFile(files[fileUrl], fileUrl); + } + } + }); + } + if (options.wrap) { + toplevel = toplevel.wrap_commonjs(options.wrap, options.exportAll); + } + + // 2. compress + if (options.compress) { + var compress = { warnings: options.warnings }; + UglifyJS.merge(compress, options.compress); + toplevel.figure_out_scope(options.mangle); + var sq = UglifyJS.Compressor(compress); + toplevel = sq.compress(toplevel); + } + + // 3. mangle properties + if (options.mangleProperties || options.nameCache) { + options.mangleProperties.cache = UglifyJS.readNameCache(options.nameCache, "props"); + toplevel = UglifyJS.mangle_properties(toplevel, options.mangleProperties); + UglifyJS.writeNameCache(options.nameCache, "props", options.mangleProperties.cache); + } + + // 4. mangle + if (options.mangle) { + toplevel.figure_out_scope(options.mangle); + toplevel.compute_char_frequency(options.mangle); + toplevel.mangle_names(options.mangle); + } + + // 5. output + var output = { max_line_len: 32000 }; + if (options.outSourceMap || options.sourceMapInline) { + output.source_map = UglifyJS.SourceMap({ + // prefer outFileName, otherwise use outSourceMap without .map suffix + file: options.outFileName || (typeof options.outSourceMap === 'string' ? options.outSourceMap.replace(/\.map$/i, '') : null), + orig: inMap, + root: options.sourceRoot + }); + if (options.sourceMapIncludeSources) { + for (var file in sourcesContent) { + if (sourcesContent.hasOwnProperty(file)) { + output.source_map.get().setSourceContent(file, sourcesContent[file]); + } + } + } + + } + if (options.output) { + UglifyJS.merge(output, options.output); + } + var stream = UglifyJS.OutputStream(output); + toplevel.print(stream); + + + var source_map = output.source_map; + if (source_map) { + source_map = source_map + ""; + } + + var mappingUrlPrefix = "\n//# sourceMappingURL="; + if (options.sourceMapInline) { + stream += mappingUrlPrefix + "data:application/json;charset=utf-8;base64," + new Buffer(source_map).toString("base64"); + } else if (options.outSourceMap && typeof options.outSourceMap === "string" && options.sourceMapUrl !== false) { + stream += mappingUrlPrefix + (typeof options.sourceMapUrl === "string" ? options.sourceMapUrl : options.outSourceMap); + } + + return { + code : stream + "", + map : source_map + }; +}; + +// UglifyJS.describe_ast = function() { +// function doitem(ctor) { +// var sub = {}; +// ctor.SUBCLASSES.forEach(function(ctor){ +// sub[ctor.TYPE] = doitem(ctor); +// }); +// var ret = {}; +// if (ctor.SELF_PROPS.length > 0) ret.props = ctor.SELF_PROPS; +// if (ctor.SUBCLASSES.length > 0) ret.sub = sub; +// return ret; +// } +// return doitem(UglifyJS.AST_Node).sub; +// } + +UglifyJS.describe_ast = function() { + var out = UglifyJS.OutputStream({ beautify: true }); + function doitem(ctor) { + out.print("AST_" + ctor.TYPE); + var props = ctor.SELF_PROPS.filter(function(prop){ + return !/^\$/.test(prop); + }); + if (props.length > 0) { + out.space(); + out.with_parens(function(){ + props.forEach(function(prop, i){ + if (i) out.space(); + out.print(prop); + }); + }); + } + if (ctor.documentation) { + out.space(); + out.print_string(ctor.documentation); + } + if (ctor.SUBCLASSES.length > 0) { + out.space(); + out.with_block(function(){ + ctor.SUBCLASSES.forEach(function(ctor, i){ + out.indent(); + doitem(ctor); + out.newline(); + }); + }); + } + }; + doitem(UglifyJS.AST_Node); + return out + ""; +}; + +function readReservedFile(filename, reserved) { + if (!reserved) { + reserved = { vars: [], props: [] }; + } + var data = fs.readFileSync(filename, "utf8"); + data = JSON.parse(data); + if (data.vars) { + data.vars.forEach(function(name){ + UglifyJS.push_uniq(reserved.vars, name); + }); + } + if (data.props) { + data.props.forEach(function(name){ + UglifyJS.push_uniq(reserved.props, name); + }); + } + return reserved; +} + +UglifyJS.readReservedFile = readReservedFile; + +UglifyJS.readDefaultReservedFile = function(reserved) { + return readReservedFile(require.resolve("./domprops.json"), reserved); +}; + +UglifyJS.readNameCache = function(filename, key) { + var cache = null; + if (filename) { + try { + var cache = fs.readFileSync(filename, "utf8"); + cache = JSON.parse(cache)[key]; + if (!cache) throw "init"; + cache.props = UglifyJS.Dictionary.fromObject(cache.props); + } catch(ex) { + cache = { + cname: -1, + props: new UglifyJS.Dictionary() + }; + } + } + return cache; +}; + +UglifyJS.writeNameCache = function(filename, key, cache) { + if (filename) { + var data; + try { + data = fs.readFileSync(filename, "utf8"); + data = JSON.parse(data); + } catch(ex) { + data = {}; + } + data[key] = { + cname: cache.cname, + props: cache.props.toObject() + }; + fs.writeFileSync(filename, JSON.stringify(data, null, 2), "utf8"); + } +}; + +// A file glob function that only supports "*" and "?" wildcards in the basename. +// Example: "foo/bar/*baz??.*.js" +// Argument `glob` may be a string or an array of strings. +// Returns an array of strings. Garbage in, garbage out. +UglifyJS.simple_glob = function simple_glob(glob) { + if (Array.isArray(glob)) { + return [].concat.apply([], glob.map(simple_glob)); + } + if (glob.match(/\*|\?/)) { + var dir = path.dirname(glob); + try { + var entries = fs.readdirSync(dir); + } catch (ex) {} + if (entries) { + var pattern = "^" + path.basename(glob) + .replace(/[.+^$[\]\\(){}]/g, "\\$&") + .replace(/\*/g, "[^/\\\\]*") + .replace(/\?/g, "[^/\\\\]") + "$"; + var mod = process.platform === "win32" ? "i" : ""; + var rx = new RegExp(pattern, mod); + var results = entries.filter(function(name) { + return rx.test(name); + }).map(function(name) { + return path.join(dir, name); + }); + if (results.length) return results; + } + } + return [ glob ]; +}; diff --git a/node_modules/uglify-js/tools/props.html b/node_modules/uglify-js/tools/props.html new file mode 100644 index 000000000..f7c777aac --- /dev/null +++ b/node_modules/uglify-js/tools/props.html @@ -0,0 +1,61 @@ + + + + + + + diff --git a/node_modules/uglify-to-browserify/.npmignore b/node_modules/uglify-to-browserify/.npmignore new file mode 100644 index 000000000..3e56974b7 --- /dev/null +++ b/node_modules/uglify-to-browserify/.npmignore @@ -0,0 +1,14 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz +pids +logs +results +npm-debug.log +node_modules +/test/output.js diff --git a/node_modules/uglify-to-browserify/.travis.yml b/node_modules/uglify-to-browserify/.travis.yml new file mode 100644 index 000000000..87f8cd91a --- /dev/null +++ b/node_modules/uglify-to-browserify/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" \ No newline at end of file diff --git a/node_modules/uglify-to-browserify/LICENSE b/node_modules/uglify-to-browserify/LICENSE new file mode 100644 index 000000000..35cc606fb --- /dev/null +++ b/node_modules/uglify-to-browserify/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013 Forbes Lindesay + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/uglify-to-browserify/README.md b/node_modules/uglify-to-browserify/README.md new file mode 100644 index 000000000..c5dde969c --- /dev/null +++ b/node_modules/uglify-to-browserify/README.md @@ -0,0 +1,15 @@ +# uglify-to-browserify + +A transform to make UglifyJS work in browserify. + +[![Build Status](https://travis-ci.org/ForbesLindesay/uglify-to-browserify.png?branch=master)](https://travis-ci.org/ForbesLindesay/uglify-to-browserify) +[![Dependency Status](https://gemnasium.com/ForbesLindesay/uglify-to-browserify.png)](https://gemnasium.com/ForbesLindesay/uglify-to-browserify) +[![NPM version](https://badge.fury.io/js/uglify-to-browserify.png)](http://badge.fury.io/js/uglify-to-browserify) + +## Installation + + npm install uglify-to-browserify + +## License + + MIT \ No newline at end of file diff --git a/node_modules/uglify-to-browserify/index.js b/node_modules/uglify-to-browserify/index.js new file mode 100644 index 000000000..c1741b27c --- /dev/null +++ b/node_modules/uglify-to-browserify/index.js @@ -0,0 +1,49 @@ +'use strict' + +var fs = require('fs') +var PassThrough = require('stream').PassThrough +var Transform = require('stream').Transform + +if (typeof Transform === 'undefined') { + throw new Error('UglifyJS only supports browserify when using node >= 0.10.x') +} + +var cache = {} +module.exports = transform +function transform(file) { + if (!/tools\/node\.js$/.test(file.replace(/\\/g,'/'))) return new PassThrough(); + if (cache[file]) return makeStream(cache[file]) + var uglify = require(file) + var src = 'var sys = require("util");\nvar MOZ_SourceMap = require("source-map");\nvar UglifyJS = exports;\n' + uglify.FILES.map(function (path) { return fs.readFileSync(path, 'utf8') }).join('\n') + + var ast = uglify.parse(src) + ast.figure_out_scope() + + var variables = ast.variables + .map(function (node, name) { + return name + }) + + src += '\n\n' + variables.map(function (v) { return 'exports.' + v + ' = ' + v + ';' }).join('\n') + '\n\n' + + src += 'exports.AST_Node.warn_function = function (txt) { if (typeof console != "undefined" && typeof console.warn === "function") console.warn(txt) }\n\n' + + src += 'exports.minify = ' + uglify.minify.toString() + ';\n\n' + src += 'exports.describe_ast = ' + uglify.describe_ast.toString() + ';' + + // TODO: remove once https://github.com/substack/node-browserify/issues/631 is resolved + src = src.replace(/"for"/g, '"fo" + "r"') + + cache[file] = src + return makeStream(src); +} + +function makeStream(src) { + var res = new Transform(); + res._transform = function (chunk, encoding, callback) { callback() } + res._flush = function (callback) { + res.push(src) + callback() + } + return res; +} diff --git a/node_modules/uglify-to-browserify/package.json b/node_modules/uglify-to-browserify/package.json new file mode 100644 index 000000000..e01d797d1 --- /dev/null +++ b/node_modules/uglify-to-browserify/package.json @@ -0,0 +1,51 @@ +{ + "_from": "uglify-to-browserify@~1.0.0", + "_id": "uglify-to-browserify@1.0.2", + "_inBundle": false, + "_integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "_location": "/uglify-to-browserify", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "uglify-to-browserify@~1.0.0", + "name": "uglify-to-browserify", + "escapedName": "uglify-to-browserify", + "rawSpec": "~1.0.0", + "saveSpec": null, + "fetchSpec": "~1.0.0" + }, + "_requiredBy": [ + "/uglify-js" + ], + "_resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "_shasum": "6e0924d6bda6b5afe349e39a6d632850a0f882b7", + "_spec": "uglify-to-browserify@~1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/uglify-js", + "author": { + "name": "ForbesLindesay" + }, + "bugs": { + "url": "https://github.com/ForbesLindesay/uglify-to-browserify/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "A transform to make UglifyJS work in browserify.", + "devDependencies": { + "source-map": "~0.1.27", + "uglify-js": "~2.4.0" + }, + "homepage": "https://github.com/ForbesLindesay/uglify-to-browserify#readme", + "keywords": [], + "license": "MIT", + "name": "uglify-to-browserify", + "repository": { + "type": "git", + "url": "git+https://github.com/ForbesLindesay/uglify-to-browserify.git" + }, + "scripts": { + "test": "node test/index.js" + }, + "version": "1.0.2" +} diff --git a/node_modules/uglify-to-browserify/test/index.js b/node_modules/uglify-to-browserify/test/index.js new file mode 100644 index 000000000..6befb6b2c --- /dev/null +++ b/node_modules/uglify-to-browserify/test/index.js @@ -0,0 +1,22 @@ +var fs = require('fs') +var br = require('../') +var test = fs.readFileSync(require.resolve('uglify-js/test/run-tests.js'), 'utf8') + .replace(/^#.*\n/, '') + +var transform = br(require.resolve('uglify-js')) +transform.pipe(fs.createWriteStream(__dirname + '/output.js')) + .on('close', function () { + Function('module,require', test)({ + filename: require.resolve('uglify-js/test/run-tests.js') + }, + function (name) { + if (name === '../tools/node') { + return require('./output.js') + } else if (/^[a-z]+$/.test(name)) { + return require(name) + } else { + throw new Error('I didn\'t expect you to require ' + name) + } + }) + }) +transform.end(fs.readFileSync(require.resolve('uglify-js'), 'utf8')) \ No newline at end of file diff --git a/node_modules/uglifyjs-webpack-plugin/CHANGELOG.md b/node_modules/uglifyjs-webpack-plugin/CHANGELOG.md new file mode 100644 index 000000000..a9108d7f3 --- /dev/null +++ b/node_modules/uglifyjs-webpack-plugin/CHANGELOG.md @@ -0,0 +1,78 @@ +0.4.3 / 2017-04-15 +================== + + * Docs - Document new features. #26 + +0.4.2 / 2017-04-12 +================== + + * Chore - Fix readme link formatting. #25 + +0.4.1 / 2017-04-05 +================== + + * Chore - Note that cheap source maps don't work with the plugin. #22 + +0.4.0 / 2017-03-30 +================== + + * Chore - Update to *webpack-sources* ^0.2.3. #22 + +0.3.1 / 2017-03-22 +================== + + * Chore - Improve readme wording. #19 + +0.3.0 / 2017-03-04 +================== + + * Chore - Update to UglifyJS 2.8.0 API internally. #16 + +0.2.2 / 2017-03-02 +================== + + * Bug fix - Fix `postinstall` script. Now it works if you install the packagre from repository in Node 6+. + +0.2.1 / 2017-02-20 +================== + + * Docs - Fix typo at readme. #10 + +0.2.0 / 2017-02-19 +================== + + * Feature - Allow to extract comments to separate file [webpack/webpack#4134](https://github.com/webpack/webpack/pull/4134) + * Feature - Allow to supress uglifyjs warnings [webpack/webpack#4200](https://github.com/webpack/webpack/pull/4200) + * Chore - Use `const` where applicable [1d78f99](https://github.com/webpack/webpack/commit/1d78f990a6af1a5b85e45b345b4f7861b03bb12b) + * Chore - Avoid reassigning stream with different value [92364dc](https://github.com/webpack/webpack/commit/92364dc0f72ad8c3ac0bdc74e46766658086d83a) + * Chore - Avoid reassigning files with different value [104398f](https://github.com/webpack/webpack/commit/104398f87a707a601427e666ed318d2338e8a003) + +0.1.5 / 2017-02-15 +================== + + * Docs - Add `extractComments` documentation. #7 + +0.1.4 / 2017-02-06 +================== + + * Docs - Simplify example. + +0.1.3 / 2017-02-02 +================== + + * Docs - Fix table syntax. #6 + +0.1.2 / 2017-01-25 +================== + + * Docs - Add note about the plugin embedded to webpack. + +0.1.1 / 2017-01-25 +================== + + * Docs - Update installation instructions. + +0.1.0 / 2017-01-24 +================== + + * Initial port from webpack source. diff --git a/node_modules/uglifyjs-webpack-plugin/LICENSE b/node_modules/uglifyjs-webpack-plugin/LICENSE new file mode 100644 index 000000000..8c11fc728 --- /dev/null +++ b/node_modules/uglifyjs-webpack-plugin/LICENSE @@ -0,0 +1,20 @@ +Copyright JS Foundation and other 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/node_modules/uglifyjs-webpack-plugin/README.md b/node_modules/uglifyjs-webpack-plugin/README.md new file mode 100644 index 000000000..f5713fd1b --- /dev/null +++ b/node_modules/uglifyjs-webpack-plugin/README.md @@ -0,0 +1,172 @@ +[![npm][npm]][npm-url] +[![deps][deps]][deps-url] +[![test][test]][test-url] +[![coverage][cover]][cover-url] +[![quality][quality]][quality-url] +[![chat][chat]][chat-url] + +

+ + + + +

UglifyJS Webpack Plugin

+

This plugin uses UglifyJS v2 to minify your JavaScript.

+

+ +> Note that webpack contains the same plugin under `webpack.optimize.UglifyJsPlugin`. This is a standalone version for those that want to control the version of UglifyJS. The documentation is valid apart from the installation instructions in that case. + +

Install

+ +With [Yarn](https://yarnpkg.com): + +```bash +yarn add uglifyjs-webpack-plugin --dev +``` + +With npm: + +```bash +npm install uglifyjs-webpack-plugin --save-dev +``` + +**Important!** The plugin has a peer dependency to uglify-js, so in order to use the plugin, also uglify-js has to be installed. The currently (2017/1/25) available uglify-js npm packages; however, do not support minification of ES6 code. In order to support ES6, an ES6-capable, a.k.a. _harmony_, version of UglifyJS has to be provided. + +If your minification target is ES6: + +```bash +yarn add git://github.com/mishoo/UglifyJS2#harmony-v2.8.22 --dev +``` + +If your minification target is ES5: + +```bash +yarn add uglify-js --dev +``` + +

Usage

+ +```javascript +const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); + +module.exports = { + entry: {...}, + output: {...}, + module: {...}, + plugins: [ + new UglifyJSPlugin() + ] +}; +``` + +

Options

+ +This plugin supports UglifyJS features as discussed below: + +| Property | Type | Default | Description | +| --- | --- | --- | --- | +| compress | boolean, object | true | See [UglifyJS documentation](http://lisperator.net/uglifyjs/compress). | +| mangle | boolean, object | true | See below. | +| beautify | boolean | false | Beautify output. | +| output | An object providing options for UglifyJS [OutputStream](https://github.com/mishoo/UglifyJS2/blob/v2.x/lib/output.js) | | Lower level access to UglifyJS output. | +| comments | boolean, RegExp, function(astNode, comment) -> boolean | Defaults to preserving comments containing `/*!`, `/**!`, `@preserve` or `@license`. | Comment related configuration. | +| extractComments | boolean, RegExp, function (astNode, comment) -> boolean, object | false | Whether comments shall be extracted to a separate file, see below. | +| sourceMap | boolean | false | Use SourceMaps to map error message locations to modules. This slows down the compilation. **Important!** `cheap` source map options don't work with the plugin! | +| test | RegExp, Array | /\.js($|\?)/i | Test to match files against. | +| include | RegExp, Array | | Test only `include` files. | +| exclude | RegExp, Array | | Files to `exclude` from testing. | +| extractComments | boolean, RegExp, object | | Extract comments to separate file (see [details](https://github.com/webpack/webpack/commit/71933e979e51c533b432658d5e37917f9e71595a), since webpack 2.3.0) | +| warningsFilter | function(source) -> boolean | | Allow to filter uglify warnings (since webpack 2.3.0) | + +

Mangling

+ +`mangle (boolean|object)` - Passing `true` or an object enables and provides options for UglifyJS name mangling. See [UglifyJS documentation](https://github.com/mishoo/UglifyJS2/tree/v2.x#mangle) for mangle options. Example configuration, this will **not** mangle properties (see below): + +```javascript +new UglifyJsPlugin({ + mangle: { + // Skip mangling these + except: ['$super', '$', 'exports', 'require'] + } +}) +``` + +`mangle.props (boolean|object)` - Passing `true` or an object enables and provides options for UglifyJS property mangling - see [UglifyJS documentation](https://github.com/mishoo/UglifyJS2/tree/v2.x#mangleproperties-options) for mangleProperties options. + +> Note: the UglifyJS docs warn that [you will probably break your source if you use property mangling](https://github.com/mishoo/UglifyJS2/tree/v2.x#mangling-property-names---mangle-props), so if you aren’t sure why you’d need this feature, you most likely shouldn’t be using it! This is **not** enabled by default. + +Example configuration, this will mangle both names and properties: + +```javascript +new UglifyJsPlugin({ + mangle: { + props: true + } +}) +``` + +

Extracting Comments

+ +The `extractComments` option can be +- `true`: All comments that normally would be preserved by the `comments` option will be moved to a separate file. If the original file is named `foo.js`, then the comments will be stored to `foo.js.LICENSE` +- regular expression (given as `RegExp` or `string`) or a `function (astNode, comment) -> boolean`: + All comments that match the given expression (resp. are evaluated to `true` by the function) will be extracted to the separate file. The `comments` option specifies whether the comment will be preserved, i.e. it is possible to preserve some comments (e.g. annotations) while extracting others or even preserving comments that have been extracted. +- an `object` consisting of the following keys, all optional: + - `condition`: regular expression or function (see previous point) + - `filename`: The file where the extracted comments will be stored. Can be either a `string` or `function (string) -> string` which will be given the original filename. Default is to append the suffix `.LICENSE` to the original filename. + - `banner`: The banner text that points to the extracted file and will be added on top of the original file. will be added to the original file. Can be `false` (no banner), a `string`, or a `function (string) -> string` that will be called with the filename where extracted comments have been stored. Will be wrapped into comment. +Default: `/*! For license information please see foo.js.LICENSE */` + + +

Maintainers

+ + + + + + + + + + +
+ +
+ Juho Vepsäläinen +
+ +
+ Joshua Wiens +
+ +
+ Kees Kluskens +
+ +
+ Sean Larkin +
+ + +[npm]: https://img.shields.io/npm/v/uglifyjs-webpack-plugin.svg +[npm-url]: https://npmjs.com/package/uglifyjs-webpack-plugin + +[deps]: https://david-dm.org/webpack-contrib/uglifyjs-webpack-plugin.svg +[deps-url]: https://david-dm.org/webpack-contrib/uglifyjs-webpack-plugin + +[chat]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg +[chat-url]: https://gitter.im/webpack/webpack + +[test]: https://secure.travis-ci.org/webpack-contrib/uglifyjs-webpack-plugin.svg +[test-url]: http://travis-ci.org/webpack-contrib/uglifyjs-webpack-plugin + +[cover]: https://codecov.io/gh/webpack-contrib/uglifyjs-webpack-plugin/branch/master/graph/badge.svg +[cover-url]: https://codecov.io/gh/webpack-contrib/uglifyjs-webpack-plugin + +[quality]: https://www.bithound.io/github/webpack-contrib/uglifyjs-webpack-plugin/badges/score.svg +[quality-url]: https://www.bithound.io/github/webpack-contrib/uglifyjs-webpack-plugin diff --git a/node_modules/uglifyjs-webpack-plugin/dist/index.js b/node_modules/uglifyjs-webpack-plugin/dist/index.js new file mode 100644 index 000000000..b3790e62b --- /dev/null +++ b/node_modules/uglifyjs-webpack-plugin/dist/index.js @@ -0,0 +1,253 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +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; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var SourceMapConsumer = require("source-map").SourceMapConsumer; +var SourceMapSource = require("webpack-sources").SourceMapSource; +var RawSource = require("webpack-sources").RawSource; +var ConcatSource = require("webpack-sources").ConcatSource; +var RequestShortener = require("webpack/lib/RequestShortener"); +var ModuleFilenameHelpers = require("webpack/lib/ModuleFilenameHelpers"); +var uglify = require("uglify-js"); + +var UglifyJsPlugin = function () { + function UglifyJsPlugin(options) { + _classCallCheck(this, UglifyJsPlugin); + + if ((typeof options === "undefined" ? "undefined" : _typeof(options)) !== "object" || Array.isArray(options)) options = {}; + if (typeof options.compressor !== "undefined") options.compress = options.compressor; + this.options = options; + } + + _createClass(UglifyJsPlugin, [{ + key: "apply", + value: function apply(compiler) { + var options = this.options; + options.test = options.test || /\.js($|\?)/i; + var warningsFilter = options.warningsFilter || function () { + return true; + }; + + var requestShortener = new RequestShortener(compiler.context); + compiler.plugin("compilation", function (compilation) { + if (options.sourceMap) { + compilation.plugin("build-module", function (module) { + // to get detailed location info about errors + module.useSourceMap = true; + }); + } + compilation.plugin("optimize-chunk-assets", function (chunks, callback) { + var files = []; + chunks.forEach(function (chunk) { + return files.push.apply(files, chunk.files); + }); + files.push.apply(files, compilation.additionalChunkAssets); + var filteredFiles = files.filter(ModuleFilenameHelpers.matchObject.bind(undefined, options)); + filteredFiles.forEach(function (file) { + var oldWarnFunction = uglify.AST_Node.warn_function; + var warnings = []; + var sourceMap = void 0; + try { + var asset = compilation.assets[file]; + if (asset.__UglifyJsPlugin) { + compilation.assets[file] = asset.__UglifyJsPlugin; + return; + } + var input = void 0; + var inputSourceMap = void 0; + if (options.sourceMap) { + if (asset.sourceAndMap) { + var sourceAndMap = asset.sourceAndMap(); + inputSourceMap = sourceAndMap.map; + input = sourceAndMap.source; + } else { + inputSourceMap = asset.map(); + input = asset.source(); + } + sourceMap = new SourceMapConsumer(inputSourceMap); + uglify.AST_Node.warn_function = function (warning) { + // eslint-disable-line camelcase + var match = /\[.+:([0-9]+),([0-9]+)\]/.exec(warning); + var line = +match[1]; + var column = +match[2]; + var original = sourceMap.originalPositionFor({ + line: line, + column: column + }); + if (!original || !original.source || original.source === file) return; + if (!warningsFilter(original.source)) return; + warnings.push(warning.replace(/\[.+:([0-9]+),([0-9]+)\]/, "") + "[" + requestShortener.shorten(original.source) + ":" + original.line + "," + original.column + "]"); + }; + } else { + input = asset.source(); + uglify.AST_Node.warn_function = function (warning) { + // eslint-disable-line camelcase + warnings.push(warning); + }; + } + uglify.base54.reset(); + var ast = uglify.parse(input, { + filename: file + }); + if (options.compress !== false) { + ast.figure_out_scope(); + var compress = uglify.Compressor(options.compress || { + warnings: false + }); // eslint-disable-line new-cap + ast = compress.compress(ast); + } + if (options.mangle !== false) { + ast.figure_out_scope(options.mangle || {}); + ast.compute_char_frequency(options.mangle || {}); + ast.mangle_names(options.mangle || {}); + if (options.mangle && options.mangle.props) { + uglify.mangle_properties(ast, options.mangle.props); + } + } + var output = {}; + output.comments = Object.prototype.hasOwnProperty.call(options, "comments") ? options.comments : /^\**!|@preserve|@license/; + output.beautify = options.beautify; + for (var k in options.output) { + output[k] = options.output[k]; + } + var extractedComments = []; + if (options.extractComments) { + var condition = {}; + if (typeof options.extractComments === "string" || options.extractComments instanceof RegExp) { + // extractComments specifies the extract condition and output.comments specifies the preserve condition + condition.preserve = output.comments; + condition.extract = options.extractComments; + } else if (Object.prototype.hasOwnProperty.call(options.extractComments, "condition")) { + // Extract condition is given in extractComments.condition + condition.preserve = output.comments; + condition.extract = options.extractComments.condition; + } else { + // No extract condition is given. Extract comments that match output.comments instead of preserving them + condition.preserve = false; + condition.extract = output.comments; + } + + // Ensure that both conditions are functions + ["preserve", "extract"].forEach(function (key) { + switch (_typeof(condition[key])) { + case "boolean": + var b = condition[key]; + condition[key] = function () { + return b; + }; + break; + case "function": + break; + case "string": + if (condition[key] === "all") { + condition[key] = function () { + return true; + }; + break; + } + var regex = new RegExp(condition[key]); + condition[key] = function (astNode, comment) { + return regex.test(comment.value); + }; + break; + default: + regex = condition[key]; + condition[key] = function (astNode, comment) { + return regex.test(comment.value); + }; + } + }); + + // Redefine the comments function to extract and preserve + // comments according to the two conditions + output.comments = function (astNode, comment) { + if (condition.extract(astNode, comment)) { + extractedComments.push(comment.type === "comment2" ? "/*" + comment.value + "*/" : "//" + comment.value); + } + return condition.preserve(astNode, comment); + }; + } + var map = void 0; + if (options.sourceMap) { + map = uglify.SourceMap({ // eslint-disable-line new-cap + file: file, + root: "" + }); + output.source_map = map; // eslint-disable-line camelcase + } + var stream = uglify.OutputStream(output); // eslint-disable-line new-cap + ast.print(stream); + if (map) map = map + ""; + var stringifiedStream = stream + ""; + var outputSource = map ? new SourceMapSource(stringifiedStream, file, JSON.parse(map), input, inputSourceMap) : new RawSource(stringifiedStream); + if (extractedComments.length > 0) { + var commentsFile = options.extractComments.filename || file + ".LICENSE"; + if (typeof commentsFile === "function") { + commentsFile = commentsFile(file); + } + + // Write extracted comments to commentsFile + var commentsSource = new RawSource(extractedComments.join("\n\n") + "\n"); + if (commentsFile in compilation.assets) { + // commentsFile already exists, append new comments... + if (compilation.assets[commentsFile] instanceof ConcatSource) { + compilation.assets[commentsFile].add("\n"); + compilation.assets[commentsFile].add(commentsSource); + } else { + compilation.assets[commentsFile] = new ConcatSource(compilation.assets[commentsFile], "\n", commentsSource); + } + } else { + compilation.assets[commentsFile] = commentsSource; + } + + // Add a banner to the original file + if (options.extractComments.banner !== false) { + var banner = options.extractComments.banner || "For license information please see " + commentsFile; + if (typeof banner === "function") { + banner = banner(commentsFile); + } + if (banner) { + outputSource = new ConcatSource("/*! " + banner + " */\n", outputSource); + } + } + } + asset.__UglifyJsPlugin = compilation.assets[file] = outputSource; + if (warnings.length > 0) { + compilation.warnings.push(new Error(file + " from UglifyJs\n" + warnings.join("\n"))); + } + } catch (err) { + if (err.line) { + var original = sourceMap && sourceMap.originalPositionFor({ + line: err.line, + column: err.col + }); + if (original && original.source) { + compilation.errors.push(new Error(file + " from UglifyJs\n" + err.message + " [" + requestShortener.shorten(original.source) + ":" + original.line + "," + original.column + "][" + file + ":" + err.line + "," + err.col + "]")); + } else { + compilation.errors.push(new Error(file + " from UglifyJs\n" + err.message + " [" + file + ":" + err.line + "," + err.col + "]")); + } + } else if (err.msg) { + compilation.errors.push(new Error(file + " from UglifyJs\n" + err.msg)); + } else compilation.errors.push(new Error(file + " from UglifyJs\n" + err.stack)); + } finally { + uglify.AST_Node.warn_function = oldWarnFunction; // eslint-disable-line camelcase + } + }); + callback(); + }); + }); + } + }]); + + return UglifyJsPlugin; +}(); + +module.exports = UglifyJsPlugin; \ No newline at end of file diff --git a/node_modules/uglifyjs-webpack-plugin/lib/post_install.js b/node_modules/uglifyjs-webpack-plugin/lib/post_install.js new file mode 100644 index 000000000..4cc9a3236 --- /dev/null +++ b/node_modules/uglifyjs-webpack-plugin/lib/post_install.js @@ -0,0 +1,31 @@ +/* eslint-disable */ +// adapted based on rackt/history (MIT) +// Node 0.10+ +var execSync = require('child_process').execSync; +var fs = require('fs'); + +// Node 0.10 check +if (!execSync) { + execSync = require('sync-exec'); +} + +function exec(command) { + execSync(command, { + stdio: [0, 1, 2] + }); +} + +fs.stat('dist', function(error, stat) { + // Skip building on Travis + if (process.env.TRAVIS) { + return; + } + + if (error || !stat.isDirectory()) { + // Create a directory to avoid getting stuck + // in postinstall loop + fs.mkdirSync('dist'); + exec('npm install --only=dev'); + exec('npm run build'); + } +}); diff --git a/node_modules/uglifyjs-webpack-plugin/package.json b/node_modules/uglifyjs-webpack-plugin/package.json new file mode 100644 index 000000000..05cc2d0f9 --- /dev/null +++ b/node_modules/uglifyjs-webpack-plugin/package.json @@ -0,0 +1,102 @@ +{ + "_from": "uglifyjs-webpack-plugin@^0.4.6", + "_id": "uglifyjs-webpack-plugin@0.4.6", + "_inBundle": false, + "_integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "_location": "/uglifyjs-webpack-plugin", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "uglifyjs-webpack-plugin@^0.4.6", + "name": "uglifyjs-webpack-plugin", + "escapedName": "uglifyjs-webpack-plugin", + "rawSpec": "^0.4.6", + "saveSpec": null, + "fetchSpec": "^0.4.6" + }, + "_requiredBy": [ + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "_shasum": "b951f4abb6bd617e66f63eb891498e391763e309", + "_spec": "uglifyjs-webpack-plugin@^0.4.6", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack", + "author": "", + "bugs": { + "url": "https://github.com/webpack-contrib/uglifyjs-webpack-plugin/issues" + }, + "bundleDependencies": false, + "dependencies": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + }, + "deprecated": false, + "description": "UglifyJS plugin for webpack", + "devDependencies": { + "babel-cli": "^6.18.0", + "babel-core": "^6.21.0", + "babel-eslint": "^7.1.1", + "babel-jest": "^18.0.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "babel-plugin-transform-object-rest-spread": "^6.20.2", + "babel-preset-es2015": "^6.18.0", + "eslint": "^3.13.1", + "eslint-config-airbnb": "^14.0.0", + "eslint-plugin-import": "^2.2.0", + "eslint-plugin-jsx-a11y": "^3.0.2", + "eslint-plugin-node": "^4.0.1", + "eslint-plugin-react": "^6.9.0", + "git-prepush-hook": "^1.0.1", + "jest": "^18.1.0", + "sync-exec": "^0.6.2", + "webpack": "^2.2.0" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + }, + "files": [ + "dist", + "lib" + ], + "homepage": "https://github.com/webpack-contrib/uglifyjs-webpack-plugin", + "jest": { + "collectCoverage": true, + "moduleFileExtensions": [ + "js" + ], + "moduleDirectories": [ + "node_modules" + ] + }, + "keywords": [ + "webpack", + "uglifyjs", + "plugin" + ], + "license": "MIT", + "main": "./dist", + "name": "uglifyjs-webpack-plugin", + "peerDependencies": { + "webpack": "^1.9 || ^2 || ^2.1.0-beta || ^2.2.0-rc || ^3.0.0" + }, + "pre-push": [ + "test:all" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/webpack-contrib/uglifyjs-webpack-plugin.git" + }, + "scripts": { + "build": "babel src -d dist", + "postinstall": "node lib/post_install.js", + "preversion": "npm run test:all && npm run build && git commit --allow-empty -am \"Update dist\"", + "test": "jest --", + "test:all": "npm run test:coverage && npm run test:lint", + "test:coverage": "jest --coverage --", + "test:lint": "eslint . --ext .js --ignore-path .gitignore --cache", + "test:watch": "jest --watch --" + }, + "version": "0.4.6" +} diff --git a/node_modules/union/.npmignore b/node_modules/union/.npmignore new file mode 100644 index 000000000..cb6fcfeb6 --- /dev/null +++ b/node_modules/union/.npmignore @@ -0,0 +1,7 @@ +node_modules +npm-debug.log +test/fixtures/*-test.txt +examples/*.txt +examples/simple/*.txt +.DS_Store + diff --git a/node_modules/union/.travis.yml b/node_modules/union/.travis.yml new file mode 100644 index 000000000..e91613a65 --- /dev/null +++ b/node_modules/union/.travis.yml @@ -0,0 +1,12 @@ +language: node_js +node_js: + - "0.10" + - "0.12" + - "4" + - "6" + +notifications: + email: + - travis@nodejitsu.com + irc: "irc.freenode.org#nodejitsu" + diff --git a/node_modules/union/CHANGELOG.md b/node_modules/union/CHANGELOG.md new file mode 100644 index 000000000..c4d4c9982 --- /dev/null +++ b/node_modules/union/CHANGELOG.md @@ -0,0 +1,7 @@ + +0.3.4 / 2012-07-24 +================== + + * Added SPDY support + * Added http redirect utility function + diff --git a/node_modules/union/LICENSE b/node_modules/union/LICENSE new file mode 100644 index 000000000..b7e5560d7 --- /dev/null +++ b/node_modules/union/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010 Charlie Robbins & the 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/node_modules/union/README.md b/node_modules/union/README.md new file mode 100644 index 000000000..bd8b59b8a --- /dev/null +++ b/node_modules/union/README.md @@ -0,0 +1,323 @@ + + + +# Synopsis +A hybrid streaming middleware kernel backwards compatible with connect. + +# Motivation +The advantage to streaming middlewares is that they do not require buffering the entire stream in order to execute their function. + +# Status + +[![Build Status](https://secure.travis-ci.org/flatiron/union.png)](http://travis-ci.org/flatiron/union) + +# Installation +There are a few ways to use `union`. Install the library using npm. You can add it to your `package.json` file as a dependancy + +```bash + $ [sudo] npm install union +``` + +## Usage +Union's request handling is [connect](https://github.com/senchalabs/connect)-compatible, meaning that all existing connect middlewares should work out-of-the-box with union. + +**(Union 0.3.x is compatible with connect >= 2.1.0, [Extensively Tested](https://github.com/pksunkara/connect-union))** + +In addition, the response object passed to middlewares listens for a "next" event, which is equivalent to calling `next()`. Flatiron middlewares are written in this manner, meaning they are not reverse-compatible with connect. + +### A simple case + +``` js +var fs = require('fs'), + union = require('../lib'), + director = require('director'); + +var router = new director.http.Router(); + +var server = union.createServer({ + before: [ + function (req, res) { + var found = router.dispatch(req, res); + if (!found) { + res.emit('next'); + } + } + ] +}); + +router.get(/foo/, function () { + this.res.writeHead(200, { 'Content-Type': 'text/plain' }) + this.res.end('hello world\n'); +}); + +router.post(/foo/, { stream: true }, function () { + var req = this.req, + res = this.res, + writeStream; + + writeStream = fs.createWriteStream(Date.now() + '-foo.txt'); + req.pipe(writeStream); + + writeStream.on('close', function () { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.end('wrote to a stream!'); + }); +}); + +server.listen(9090); +console.log('union with director running on 9090'); +``` + +To demonstrate the code, we use [director](https://github.com/flatiron/director). A light-weight, Client AND Server side URL-Router for Node.js and Single Page Apps! + +### A case with connect + +Code based on connect + +```js +var connect = require('connect') + , http = require('http'); + +var app = connect() + .use(connect.favicon()) + .use(connect.logger('dev')) + .use(connect.static('public')) + .use(connect.directory('public')) + .use(connect.cookieParser('my secret here')) + .use(connect.session()) + .use(function (req, res) { + res.end('Hello from Connect!\n'); + }); + +http.createServer(app).listen(3000); +``` + +Code based on union + +```js +var connect = require('connect') + , union = require('union'); + +var server = union.createServer({ + buffer: false, + before: [ + connect.favicon(), + connect.logger('dev'), + connect.static('public'), + connect.directory('public'), + connect.cookieParser('my secret here'), + connect.session(), + function (req, res) { + res.end('Hello from Connect!\n'); + }, + ] +}).listen(3000); +``` + +### SPDY enabled server example + +# API + +## union Static Members + +### createServer(options) +The `options` object is required. Options include: + +Specification + +``` + function createServer(options) + + @param options {Object} + An object literal that represents the configuration for the server. + + @option before {Array} + The `before` value is an array of middlewares, which are used to route and serve incoming + requests. For instance, in the example, `favicon` is a middleware which handles requests + for `/favicon.ico`. + + @option after {Array} + The `after` value is an array of functions that return stream filters, + which are applied after the request handlers in `options.before`. + Stream filters inherit from `union.ResponseStream`, which implements the + Node.js core streams api with a bunch of other goodies. + + @option limit {Object} + (optional) A value, passed to internal instantiations of `union.BufferedStream`. + + @option https {Object} + (optional) A value that specifies the certificate and key necessary to create an instance of + `https.Server`. + + @option spdy {Object} + (optional) A value that specifies the certificate and key necessary to create an instance of + `spdy.Server`. + + @option headers {Object} + (optional) An object representing a set of headers to set in every outgoing response +``` + +Example + +```js +var server = union.createServer({ + before: [ + favicon('./favicon.png'), + function (req, res) { + var found = router.dispatch(req, res); + if (!found) { + res.emit('next'); + } + } + ] +}); +``` + +An example of the `https` or `spdy` option. + +``` js +{ + cert: 'path/to/cert.pem', + key: 'path/to/key.pem', + ca: 'path/to/ca.pem' +} +``` + +An example of the `headers` option. + +``` js +{ + 'x-powered-by': 'your-sweet-application v10.9.8' +} +``` + +## Error Handling +Error handler is similiar to middlware but takes an extra argument for error at the beginning. + +```js +var handle = function (err, req, res) { + res.statusCode = err.status; + res.end(req.headers); +}; + +var server = union.createServer({ + onError: handle, + before: [ + favicon('./favicon.png'), + function (req, res) { + var found = router.dispatch(req, res); + if (!found) { + res.emit('next'); + } + } + ] +}); +``` + +## BufferedStream Constructor +This constructor inherits from `Stream` and can buffer data up to `limit` bytes. It also implements `pause` and `resume` methods. + +Specification + +``` + function BufferedStream(limit) + + @param limit {Number} + the limit for which the stream can be buffered +``` + +Example + +```js +var bs = union.BufferedStream(n); +``` + +## HttpStream Constructor +This constructor inherits from `union.BufferedStream` and returns a stream with these extra properties: + +Specification + +``` + function HttpStream() +``` + +Example + +```js +var hs = union.HttpStream(); +``` + +## HttpStream Instance Members + +### url +The url from the request. + +Example + +```js +httpStream.url = ''; +``` + +### headers +The HTTP headers associated with the stream. + +Example + +```js +httpStream.headers = ''; +``` + +### method +The HTTP method ("GET", "POST", etc). + +Example + +```js +httpStream.method = 'POST'; +``` + +### query +The querystring associated with the stream (if applicable). + +Example + +```js +httpStream.query = ''; +``` + +## ResponseStream Constructor +This constructor inherits from `union.HttpStream`, and is additionally writeable. Union supplies this constructor as a basic response stream middleware from which to inherit. + +Specification + +``` + function ResponseStream() +``` + +Example + +```js +var rs = union.ResponseStream(); +``` + +# Tests + +All tests are written with [vows][0] and should be run with [npm][1]: + +``` bash + $ npm test +``` + +# Licence + +(The MIT License) + +Copyright (c) 2010-2012 Charlie Robbins & the 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. + +[0]: http://vowsjs.org +[1]: http://npmjs.org diff --git a/node_modules/union/examples/after/index.js b/node_modules/union/examples/after/index.js new file mode 100644 index 000000000..1f407bd5d --- /dev/null +++ b/node_modules/union/examples/after/index.js @@ -0,0 +1,26 @@ +var fs = require('fs'), + path = require('path'), + union = require('../../lib'); + +var server = union.createServer({ + before: [ function (req,res) { + if (req.url === "/foo") { + res.text(201, "foo"); + } + } ], + after: [ + function LoggerStream() { + var stream = new union.ResponseStream(); + + stream.once("pipe", function (req) { + console.log({res: this.res.statusCode, method: this.req.method}); + }); + + return stream; + } + ] +}); + +server.listen(9080); +console.log('union running on 9080'); + diff --git a/node_modules/union/examples/simple/favicon.png b/node_modules/union/examples/simple/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..bf002b1c87930772e940e277a01231536f468ce5 GIT binary patch literal 545 zcmV++0^a?JP)kVHn51r$>t7uilWH z5QP#B6o(cZq(V9iL7Y;^Ab~je2Xv`RmXKb+C0lSY5HodBK?Ivg5?q7~4!ME^Q4kF+ zF4BTjF3)G2jUZP$p&wU3*wbEdpI0| zx5tN^OePTs1gy*J#5wVu_qYFdF-N1(Ksud9Hk%cC+4&I%{7`w+?RHVC)u5^>QmGWe z;jkFn?RKGOvl*(@Dh7iA5{ZPE<67?E9V>1(m&+j-45HKNAQp?k=kvksb|W5-!!QiE zTrTLkj(WZR)J23l_{B<56tr3`^!t6GIsAS!GX9gvWcso!U(xyRbP$6;rLQ2l{jgQ j^vS9`>BaxXM*#)^bVsnfng-QZ00000NkvXXu0mjfh?Dl2 literal 0 HcmV?d00001 diff --git a/node_modules/union/examples/simple/middleware/favicon.js b/node_modules/union/examples/simple/middleware/favicon.js new file mode 100644 index 000000000..9707f3732 --- /dev/null +++ b/node_modules/union/examples/simple/middleware/favicon.js @@ -0,0 +1,96 @@ + +/*! + * Connect - favicon + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var crypto = require('crypto') + , fs = require('fs'); + +/** + * Favicon cache. + */ + +var icon; + +/** + * Return md5 hash of the given string and optional encoding, + * defaulting to hex. + * + * utils.md5('wahoo'); + * // => "e493298061761236c96b02ea6aa8a2ad" + * + * @param {String} str + * @param {String} encoding + * @return {String} + * @api public + */ + +exports.md5 = function (str, encoding) { + return crypto + .createHash('md5') + .update(str) + .digest(encoding || 'hex'); +}; + +/** + * By default serves the connect favicon, or the favicon + * located by the given `path`. + * + * Options: + * + * - `maxAge` cache-control max-age directive, defaulting to 1 day + * + * Examples: + * + * connect.createServer( + * connect.favicon() + * ); + * + * connect.createServer( + * connect.favicon(__dirname + '/public/favicon.ico') + * ); + * + * @param {String} path + * @param {Object} options + * @return {Function} + * @api public + */ + +module.exports = function favicon(path, options) { + var options = options || {} + , path = path || __dirname + '/../public/favicon.ico' + , maxAge = options.maxAge || 86400000; + + return function favicon(req, res, next) { + if ('/favicon.ico' == req.url) { + if (icon) { + res.writeHead(200, icon.headers); + res.end(icon.body); + } else { + fs.readFile(path, function (err, buf) { + if (err) return next(err); + icon = { + headers: { + 'Content-Type': 'image/x-icon' + , 'Content-Length': buf.length + , 'ETag': '"' + exports.md5(buf) + '"' + , 'Cache-Control': 'public, max-age=' + (maxAge / 1000) + }, + body: buf + }; + res.writeHead(200, icon.headers); + res.end(icon.body); + }); + } + } else { + next(); + } + }; +}; \ No newline at end of file diff --git a/node_modules/union/examples/simple/middleware/gzip-decode.js b/node_modules/union/examples/simple/middleware/gzip-decode.js new file mode 100644 index 000000000..16735fe73 --- /dev/null +++ b/node_modules/union/examples/simple/middleware/gzip-decode.js @@ -0,0 +1,26 @@ +var spawn = require('child_process').spawn, + util = require('util'), + RequestStream = require('../../lib').RequestStream; + +var GzipDecode = module.exports = function GzipDecoder(options) { + RequestStream.call(this, options); + + this.on('pipe', this.decode); +} + +util.inherits(GzipDecode, RequestStream); + +GzipDecode.prototype.decode = function (source) { + this.decoder = spawn('gunzip'); + this.decoder.stdout.on('data', this._onGunzipData.bind(this)); + this.decoder.stdout.on('end', this._onGunzipEnd.bind(this)); + source.pipe(this.decoder); +} + +GzipDecoderStack.prototype._onGunzipData = function (chunk) { + this.emit('data', chunk); +} + +GzipDecoderStack.prototype._onGunzipEnd = function () { + this.emit('end'); +} \ No newline at end of file diff --git a/node_modules/union/examples/simple/middleware/gzip-encode.js b/node_modules/union/examples/simple/middleware/gzip-encode.js new file mode 100644 index 000000000..647148c7a --- /dev/null +++ b/node_modules/union/examples/simple/middleware/gzip-encode.js @@ -0,0 +1,40 @@ +var spawn = require('child_process').spawn, + util = require('util'), + ResponseStream = require('../../lib').ResponseStream; + +/** + * Accepts a writable stream, i.e. fs.WriteStream, and returns a StreamStack + * whose 'write()' calls are transparently sent to a 'gzip' process before + * being written to the target stream. + */ +var GzipEncode = module.exports = function GzipEncode(options) { + ResponseStream.call(this, options); + + if (compression) { + process.assert(compression >= 1 && compression <= 9); + this.compression = compression; + } + + this.on('pipe', this.encode); +} + +util.inherits(GzipEncode, ResponseStream); + +GzipEncode.prototype.encode = function (source) { + this.source = source; +}; + +GzipEncode.prototype.pipe = function (dest) { + if (!this.source) { + throw new Error('GzipEncode is only pipeable once it has been piped to'); + } + + this.encoder = spawn('gzip', ['-'+this.compression]); + this.encoder.stdout.pipe(dest); + this.encoder.stdin.pipe(this.source); +}; + +inherits(GzipEncoderStack, StreamStack); +exports.GzipEncoderStack = GzipEncoderStack; + +GzipEncoderStack.prototype.compression = 6; \ No newline at end of file diff --git a/node_modules/union/examples/simple/simple.js b/node_modules/union/examples/simple/simple.js new file mode 100644 index 000000000..7bb0e1f00 --- /dev/null +++ b/node_modules/union/examples/simple/simple.js @@ -0,0 +1,60 @@ +var fs = require('fs'), + path = require('path'), + union = require('../../lib'), + director = require('director'), + favicon = require('./middleware/favicon'); + +var router = new director.http.Router(); + +var server = union.createServer({ + before: [ + favicon(path.join(__dirname, 'favicon.png')), + function (req, res) { + var found = router.dispatch(req, res); + if (!found) { + res.emit('next'); + } + } + ] +}); + +router.get('/foo', function () { + this.res.writeHead(200, { 'Content-Type': 'text/plain' }); + this.res.end('hello world\n'); +}); + +router.post('/foo', { stream: true }, function () { + var req = this.req, + res = this.res, + writeStream; + + writeStream = fs.createWriteStream(__dirname + '/' + Date.now() + '-foo.txt'); + req.pipe(writeStream); + + writeStream.on('close', function () { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.end('wrote to a stream!'); + }); +}); + +router.get('/redirect', function () { + this.res.redirect('http://www.google.com'); +}); + +router.get('/custom_redirect', function () { + this.res.redirect('/foo', 301); +}); + +router.get('/async', function () { + var self = this; + process.nextTick(function () { + self.req.on('end', function () { + self.res.end(); + }) + self.req.buffer = false; + }); +}); + +server.listen(9090); +console.log('union with director running on 9090'); + diff --git a/node_modules/union/examples/simple/spdy.js b/node_modules/union/examples/simple/spdy.js new file mode 100644 index 000000000..83c8f14cc --- /dev/null +++ b/node_modules/union/examples/simple/spdy.js @@ -0,0 +1,30 @@ +// In order to run this example you need to +// generate local ssl certificate +var union = require('../../lib'), + director = require('director'); + +var router = new director.http.Router(); + +var server = union.createServer({ + before: [ + function (req, res) { + var found = router.dispatch(req, res); + if (!found) { + res.emit('next'); + } + } + ], + spdy :{ + key: './certs/privatekey.pem', + cert: './certs/certificate.pem' + } +}); + +router.get(/foo/, function () { + this.res.writeHead(200, { 'Content-Type': 'text/plain' }) + this.res.end('hello world\n'); +}); + +server.listen(9090, function () { + console.log('union with director running on 9090 with SPDY'); +}); \ No newline at end of file diff --git a/node_modules/union/examples/socketio/README b/node_modules/union/examples/socketio/README new file mode 100644 index 000000000..9788811ce --- /dev/null +++ b/node_modules/union/examples/socketio/README @@ -0,0 +1,13 @@ +This folder contains an example of how to use Union with Socket.io. + +First, you'll want to install both Union and Socket.io. Run this +command in the folder you placed these two files: + +npm install union socket.io + +You can run the server like so: + +node server.js + +Now open up your web browser to http://localhost and see the results +in the console! diff --git a/node_modules/union/examples/socketio/index.html b/node_modules/union/examples/socketio/index.html new file mode 100644 index 000000000..fd8dc8c3f --- /dev/null +++ b/node_modules/union/examples/socketio/index.html @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/node_modules/union/examples/socketio/server.js b/node_modules/union/examples/socketio/server.js new file mode 100644 index 000000000..1b7c58097 --- /dev/null +++ b/node_modules/union/examples/socketio/server.js @@ -0,0 +1,30 @@ +var fs = require('fs'), + union = require('union'); + +var server = union.createServer({ + before: [ + function (req, res) { + fs.readFile(__dirname + '/index.html', + function (err, data) { + if (err) { + res.writeHead(500); + return res.end('Error loading index.html'); + } + + res.writeHead(200); + res.end(data); + }); + } + ] +}); + +server.listen(9090); + +var io = require('socket.io').listen(server); + +io.sockets.on('connection', function (socket) { + socket.emit('news', {hello: 'world'}); + socket.on('my other event', function (data) { + console.log(data); + }); +}); \ No newline at end of file diff --git a/node_modules/union/lib/buffered-stream.js b/node_modules/union/lib/buffered-stream.js new file mode 100644 index 000000000..d53117bf4 --- /dev/null +++ b/node_modules/union/lib/buffered-stream.js @@ -0,0 +1,141 @@ +/* + * buffered-stream.js: A simple(r) Stream which is partially buffered into memory. + * + * (C) 2010, Mikeal Rogers + * + * Adapted for Flatiron + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var events = require('events'), + fs = require('fs'), + stream = require('stream'), + util = require('util'); + +// +// ### function BufferedStream (limit) +// #### @limit {number} **Optional** Size of the buffer to limit +// Constructor function for the BufferedStream object responsible for +// maintaining a stream interface which can also persist to memory +// temporarily. +// + +var BufferedStream = module.exports = function (limit) { + events.EventEmitter.call(this); + + if (typeof limit === 'undefined') { + limit = Infinity; + } + + this.limit = limit; + this.size = 0; + this.chunks = []; + this.writable = true; + this.readable = true; + this._buffer = true; +}; + +util.inherits(BufferedStream, stream.Stream); + +Object.defineProperty(BufferedStream.prototype, 'buffer', { + get: function () { + return this._buffer; + }, + set: function (value) { + if (!value && this.chunks) { + var self = this; + this.chunks.forEach(function (c) { self.emit('data', c) }); + if (this.ended) this.emit('end'); + this.size = 0; + delete this.chunks; + } + + this._buffer = value; + } +}); + +BufferedStream.prototype.pipe = function () { + var self = this, + dest; + + if (self.resume) { + self.resume(); + } + + dest = stream.Stream.prototype.pipe.apply(self, arguments); + + // + // just incase you are piping to two streams, do not emit data twice. + // note: you can pipe twice, but you need to pipe both streams in the same tick. + // (this is normal for streams) + // + if (this.piped) { + return dest; + } + + process.nextTick(function () { + if (self.chunks) { + self.chunks.forEach(function (c) { self.emit('data', c) }); + self.size = 0; + delete self.chunks; + } + + if (!self.readable) { + if (self.ended) { + self.emit('end'); + } + else if (self.closed) { + self.emit('close'); + } + } + }); + + this.piped = true; + + return dest; +}; + +BufferedStream.prototype.write = function (chunk) { + if (!this.chunks || this.piped) { + this.emit('data', chunk); + return; + } + + this.chunks.push(chunk); + this.size += chunk.length; + if (this.limit < this.size) { + this.pause(); + } +}; + +BufferedStream.prototype.end = function () { + this.readable = false; + this.ended = true; + this.emit('end'); +}; + +BufferedStream.prototype.destroy = function () { + this.readable = false; + this.writable = false; + delete this.chunks; +}; + +BufferedStream.prototype.close = function () { + this.readable = false; + this.closed = true; +}; + +if (!stream.Stream.prototype.pause) { + BufferedStream.prototype.pause = function () { + this.emit('pause'); + }; +} + +if (!stream.Stream.prototype.resume) { + BufferedStream.prototype.resume = function () { + this.emit('resume'); + }; +} + diff --git a/node_modules/union/lib/core.js b/node_modules/union/lib/core.js new file mode 100644 index 000000000..8aed9c193 --- /dev/null +++ b/node_modules/union/lib/core.js @@ -0,0 +1,108 @@ +/* + * core.js: Core functionality for the Flatiron HTTP (with SPDY support) plugin. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var http = require('http'), + https = require('https'), + fs = require('fs'), + stream = require('stream'), + HttpStream = require('./http-stream'), + RoutingStream = require('./routing-stream'); + +var core = exports; + +core.createServer = function (options) { + var isArray = Array.isArray(options.after), + credentials; + + if (!options) { + throw new Error('options is required to create a server'); + } + + function requestHandler(req, res) { + var routingStream = new RoutingStream({ + before: options.before, + buffer: options.buffer, + // + // Remark: without new after is a huge memory leak that + // pipes to every single open connection + // + after: isArray && options.after.map(function (After) { + return new After; + }), + request: req, + response: res, + limit: options.limit, + headers: options.headers + }); + + routingStream.on('error', function (err) { + var fn = options.onError || core.errorHandler; + fn(err, routingStream, routingStream.target, function () { + routingStream.target.emit('next'); + }); + }); + + req.pipe(routingStream); + } + + // + // both https and spdy requires same params + // + if (options.https || options.spdy) { + if (options.https && options.spdy) { + throw new Error('You shouldn\'t be using https and spdy simultaneously.'); + } + + var serverOptions, + credentials, + key = !options.spdy + ? 'https' + : 'spdy'; + + serverOptions = options[key]; + if (!serverOptions.key || !serverOptions.cert) { + throw new Error('Both options.' + key + '.`key` and options.' + key + '.`cert` are required.'); + } + + credentials = { + key: fs.readFileSync(serverOptions.key), + cert: fs.readFileSync(serverOptions.cert) + }; + + if (serverOptions.ca) { + serverOptions.ca = !Array.isArray(serverOptions.ca) + ? [serverOptions.ca] + : serverOptions.ca + + credentials.ca = serverOptions.ca.map(function (ca) { + return fs.readFileSync(ca); + }); + } + + if (options.spdy) { + // spdy is optional so we require module here rather than on top + var spdy = require('spdy'); + return spdy.createServer(credentials, requestHandler); + } + + return https.createServer(credentials, requestHandler); + } + + return http.createServer(requestHandler); +}; + +core.errorHandler = function error(err, req, res) { + if (err) { + (this.res || res).writeHead(err.status || 500, err.headers || { "Content-Type": "text/plain" }); + (this.res || res).end(err.message + "\n"); + return; + } + + (this.res || res).writeHead(404, {"Content-Type": "text/plain"}); + (this.res || res).end("Not Found\n"); +}; diff --git a/node_modules/union/lib/http-stream.js b/node_modules/union/lib/http-stream.js new file mode 100644 index 000000000..021884f0d --- /dev/null +++ b/node_modules/union/lib/http-stream.js @@ -0,0 +1,52 @@ +/* + * http-stream.js: Idomatic buffered stream which pipes additional HTTP information. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var url = require('url'), + util = require('util'), + qs = require('qs'), + BufferedStream = require('./buffered-stream'); + +var HttpStream = module.exports = function (options) { + options = options || {}; + BufferedStream.call(this, options.limit); + + if (options.buffer === false) { + this.buffer = false; + } + + this.on('pipe', this.pipeState); +}; + +util.inherits(HttpStream, BufferedStream); + +// +// ### function pipeState (source) +// #### @source {ServerRequest|HttpStream} Source stream piping to this instance +// Pipes additional HTTP metadata from the `source` HTTP stream (either concrete or +// abstract) to this instance. e.g. url, headers, query, etc. +// +// Remark: Is there anything else we wish to pipe? +// +HttpStream.prototype.pipeState = function (source) { + this.headers = source.headers; + this.trailers = source.trailers; + this.method = source.method; + + if (source.url) { + this.url = this.originalUrl = source.url; + } + + if (source.query) { + this.query = source.query; + } + else if (source.url) { + this.query = ~source.url.indexOf('?') + ? qs.parse(url.parse(source.url).query) + : {}; + } +}; diff --git a/node_modules/union/lib/index.js b/node_modules/union/lib/index.js new file mode 100644 index 000000000..34c5f0b83 --- /dev/null +++ b/node_modules/union/lib/index.js @@ -0,0 +1,24 @@ +/* + * index.js: Top-level plugin exposing HTTP features in flatiron + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var union = exports; + +// +// Expose version information +// +exports.version = require('../package.json').version; + +// +// Expose core union components +// +union.BufferedStream = require('./buffered-stream'); +union.HttpStream = require('./http-stream'); +union.ResponseStream = require('./response-stream'); +union.RoutingStream = require('./routing-stream'); +union.createServer = require('./core').createServer; +union.errorHandler = require('./core').errorHandler; diff --git a/node_modules/union/lib/request-stream.js b/node_modules/union/lib/request-stream.js new file mode 100644 index 000000000..6cb7150c5 --- /dev/null +++ b/node_modules/union/lib/request-stream.js @@ -0,0 +1,58 @@ +/* + * http-stream.js: Idomatic buffered stream which pipes additional HTTP information. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var url = require('url'), + util = require('util'), + qs = require('qs'), + HttpStream = require('./http-stream'); + +var RequestStream = module.exports = function (options) { + options = options || {}; + HttpStream.call(this, options); + + this.on('pipe', this.pipeRequest); + this.request = options.request; +}; + +util.inherits(RequestStream, HttpStream); + +// +// ### function pipeRequest (source) +// #### @source {ServerRequest|HttpStream} Source stream piping to this instance +// Pipes additional HTTP request metadata from the `source` HTTP stream (either concrete or +// abstract) to this instance. e.g. url, headers, query, etc. +// +// Remark: Is there anything else we wish to pipe? +// +RequestStream.prototype.pipeRequest = function (source) { + this.url = this.originalUrl = source.url; + this.method = source.method; + this.httpVersion = source.httpVersion; + this.httpVersionMajor = source.httpVersionMajor; + this.httpVersionMinor = source.httpVersionMinor; + this.setEncoding = source.setEncoding; + this.connection = source.connection; + this.socket = source.socket; + + if (source.query) { + this.query = source.query; + } + else { + this.query = ~source.url.indexOf('?') + ? qs.parse(url.parse(source.url).query) + : {}; + } +}; + +// http.serverRequest methods +['setEncoding'].forEach(function (method) { + RequestStream.prototype[method] = function () { + return this.request[method].apply(this.request, arguments); + }; +}); + diff --git a/node_modules/union/lib/response-stream.js b/node_modules/union/lib/response-stream.js new file mode 100644 index 000000000..e11b2d3cd --- /dev/null +++ b/node_modules/union/lib/response-stream.js @@ -0,0 +1,203 @@ +/* + * response-stream.js: A Stream focused on writing any relevant information to + * a raw http.ServerResponse object. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var util = require('util'), + HttpStream = require('./http-stream'); + +var STATUS_CODES = require('http').STATUS_CODES; + +// +// ### function ResponseStream (options) +// +// +var ResponseStream = module.exports = function (options) { + var self = this, + key; + + options = options || {}; + HttpStream.call(this, options); + + this.writeable = true; + this.response = options.response; + + if (options.headers) { + for (key in options.headers) { + this.response.setHeader(key, options.headers[key]); + } + } + + // + // Proxy `statusCode` changes to the actual `response.statusCode`. + // + Object.defineProperty(this, 'statusCode', { + get: function () { + return self.response.statusCode; + }, + set: function (value) { + self.response.statusCode = value; + }, + enumerable: true, + configurable: true + }); + + if (this.response) { + this._headers = this.response._headers = this.response._headers || {}; + + // Patch to node core + this.response._headerNames = this.response._headerNames || {}; + + // + // Proxy to emit "header" event + // + this._renderHeaders = this.response._renderHeaders; + this.response._renderHeaders = function () { + if (!self._emittedHeader) { + self._emittedHeader = true; + self.headerSent = true; + self._header = true; + self.emit('header'); + } + + return self._renderHeaders.call(self.response); + }; + } +}; + +util.inherits(ResponseStream, HttpStream); + +ResponseStream.prototype.writeHead = function (statusCode, statusMessage, headers) { + if (typeof statusMessage === 'string') { + this.response.statusMessage = statusMessage; + } else { + this.response.statusMessage = this.response.statusMessage + || STATUS_CODES[statusCode] || 'unknown'; + headers = statusMessage; + } + + this.response.statusCode = statusCode; + + if (headers) { + var keys = Object.keys(headers); + for (var i = 0; i < keys.length; i++) { + var k = keys[i]; + if (k) this.response.setHeader(k, headers[k]); + } + } +}; + +// +// Create pass-thru for the necessary +// `http.ServerResponse` methods. +// +['setHeader', 'getHeader', 'removeHeader', '_implicitHeader', 'addTrailers'].forEach(function (method) { + ResponseStream.prototype[method] = function () { + return this.response[method].apply(this.response, arguments); + }; +}); + +ResponseStream.prototype.json = function (obj) { + if (!this.response.writable) { + return; + } + + if (typeof obj === 'number') { + this.response.statusCode = obj; + obj = arguments[1]; + } + + this.modified = true; + + if (!this.response._header && this.response.getHeader('content-type') !== 'application/json') { + this.response.setHeader('content-type', 'application/json'); + } + + this.end(obj ? JSON.stringify(obj) : ''); +}; + +ResponseStream.prototype.html = function (str) { + if (!this.response.writable) { + return; + } + + if (typeof str === 'number') { + this.response.statusCode = str; + str = arguments[1]; + } + + this.modified = true; + + if (!this.response._header && this.response.getHeader('content-type') !== 'text/html') { + this.response.setHeader('content-type', 'text/html'); + } + + this.end(str ? str: ''); +}; + +ResponseStream.prototype.text = function (str) { + if (!this.response.writable) { + return; + } + + if (typeof str === 'number') { + this.response.statusCode = str; + str = arguments[1]; + } + + this.modified = true; + + if (!this.response._header && this.response.getHeader('content-type') !== 'text/plain') { + this.response.setHeader('content-type', 'text/plain'); + } + + this.end(str ? str: ''); +}; + +ResponseStream.prototype.end = function (data) { + if (data && this.writable) { + this.emit('data', data); + } + + this.modified = true; + this.emit('end'); +}; + +ResponseStream.prototype.pipe = function () { + var self = this, + dest; + + self.dest = dest = HttpStream.prototype.pipe.apply(self, arguments); + + dest.on('drain', function() { + self.emit('drain') + }) + return dest; +}; + +ResponseStream.prototype.write = function (data) { + this.modified = true; + + if (this.writable) { + return this.dest.write(data); + } +}; + +ResponseStream.prototype.redirect = function (path, status) { + var url = ''; + + if (~path.indexOf('://')) { + url = path; + } else { + url += this.req.connection.encrypted ? 'https://' : 'http://'; + url += this.req.headers.host; + url += (path[0] === '/') ? path : '/' + path; + } + + this.res.writeHead(status || 302, { 'Location': url }); + this.end(); +}; diff --git a/node_modules/union/lib/routing-stream.js b/node_modules/union/lib/routing-stream.js new file mode 100644 index 000000000..2597c4775 --- /dev/null +++ b/node_modules/union/lib/routing-stream.js @@ -0,0 +1,126 @@ +/* + * routing-stream.js: A Stream focused on connecting an arbitrary RequestStream and + * ResponseStream through a given Router. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var util = require('util'), + union = require('./index'), + RequestStream = require('./request-stream'), + ResponseStream = require('./response-stream'); + +// +// ### function RoutingStream (options) +// +// +var RoutingStream = module.exports = function (options) { + options = options || {}; + RequestStream.call(this, options); + + this.before = options.before || []; + this.after = options.after || []; + this.response = options.response || options.res; + this.headers = options.headers || { + 'x-powered-by': 'union ' + union.version + }; + + this.target = new ResponseStream({ + response: this.response, + headers: this.headers + }); + + this.once('pipe', this.route); +}; + +util.inherits(RoutingStream, RequestStream); + +// +// Called when this instance is piped to **by another stream** +// +RoutingStream.prototype.route = function (req) { + // + // When a `RoutingStream` is piped to: + // + // 1. Setup the pipe-chain between the `after` middleware, the abstract response + // and the concrete response. + // 2. Attempt to dispatch to the `before` middleware, which represent things such as + // favicon, static files, application routing. + // 3. If no match is found then pipe to the 404Stream + // + var self = this, + after, + error, + i; + + // + // Don't allow `this.target` to be writable on HEAD requests + // + this.target.writable = req.method !== 'HEAD'; + + // + // 1. Setup the pipe-chain between the `after` middleware, the abstract response + // and the concrete response. + // + after = [this.target].concat(this.after, this.response); + for (i = 0; i < after.length - 1; i++) { + // + // attach req and res to all streams + // + after[i].req = req; + after[i + 1].req = req; + after[i].res = this.response; + after[i + 1].res = this.response; + after[i].pipe(after[i + 1]); + + // + // prevent multiple responses and memory leaks + // + after[i].on('error', this.onError); + } + + // + // Helper function for dispatching to the 404 stream. + // + function notFound() { + error = new Error('Not found'); + error.status = 404; + self.onError(error); + } + + // + // 2. Attempt to dispatch to the `before` middleware, which represent things such as + // favicon, static files, application routing. + // + (function dispatch(i) { + if (self.target.modified) { + return; + } + else if (++i === self.before.length) { + // + // 3. If no match is found then pipe to the 404Stream + // + return notFound(); + } + + self.target.once('next', dispatch.bind(null, i)); + if (self.before[i].length === 3) { + self.before[i](self, self.target, function (err) { + if (err) { + self.onError(err); + } else { + self.target.emit('next'); + } + }); + } + else { + self.before[i](self, self.target); + } + })(-1); +}; + +RoutingStream.prototype.onError = function (err) { + this.emit('error', err); +}; diff --git a/node_modules/union/package.json b/node_modules/union/package.json new file mode 100644 index 000000000..750a8846c --- /dev/null +++ b/node_modules/union/package.json @@ -0,0 +1,65 @@ +{ + "_from": "union@~0.4.3", + "_id": "union@0.4.6", + "_inBundle": false, + "_integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", + "_location": "/union", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "union@~0.4.3", + "name": "union", + "escapedName": "union", + "rawSpec": "~0.4.3", + "saveSpec": null, + "fetchSpec": "~0.4.3" + }, + "_requiredBy": [ + "/http-server" + ], + "_resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", + "_shasum": "198fbdaeba254e788b0efcb630bc11f24a2959e0", + "_spec": "union@~0.4.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/http-server", + "author": { + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com" + }, + "bugs": { + "url": "https://github.com/flatiron/union/issues" + }, + "bundleDependencies": false, + "dependencies": { + "qs": "~2.3.3" + }, + "deprecated": false, + "description": "A hybrid buffered / streaming middleware kernel backwards compatible with connect.", + "devDependencies": { + "connect": "2.22.x", + "director": "1.x.x", + "ecstatic": "0.5.x", + "request": "2.29.x", + "vows": "0.8.0" + }, + "engines": { + "node": ">= 0.8.0" + }, + "homepage": "https://github.com/flatiron/union#readme", + "main": "./lib", + "maintainers": [ + { + "name": "dscape", + "email": "nuno@nodejitsu.com" + } + ], + "name": "union", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/flatiron/union.git" + }, + "scripts": { + "test": "vows test/*-test.js --spec -i" + }, + "version": "0.4.6" +} diff --git a/node_modules/union/test/after-test.js b/node_modules/union/test/after-test.js new file mode 100644 index 000000000..79c8f766f --- /dev/null +++ b/node_modules/union/test/after-test.js @@ -0,0 +1,37 @@ +var assert = require('assert'), + vows = require('vows'), + request = require('request'), + union = require('../'); + +function stream_callback(cb) { + return function () { + var stream = new union.ResponseStream(); + + stream.once("pipe", function (req) { + return cb ? cb(null,req) : undefined; + }); + + return stream; + }; +} + +vows.describe('union/after').addBatch({ + 'When using `union`': { + 'a union server with after middleware': { + topic: function () { + var self = this; + + union.createServer({ + after: [ stream_callback(), stream_callback(self.callback) ] + }).listen(9000, function () { + request.get('http://localhost:9000'); + }); + }, + 'should preserve the request until the last call': function (req) { + assert.equal(req.req.httpVersion, '1.1'); + assert.equal(req.req.url, '/'); + assert.equal(req.req.method, 'GET'); + } + } + } +}).export(module); \ No newline at end of file diff --git a/node_modules/union/test/body-parser-test.js b/node_modules/union/test/body-parser-test.js new file mode 100644 index 000000000..b0c605cfc --- /dev/null +++ b/node_modules/union/test/body-parser-test.js @@ -0,0 +1,50 @@ +/* + * simple-test.js: Simple tests for basic streaming and non-streaming HTTP requests with union. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'), + connect = require('connect'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/body-parser').addBatch({ + "When using union with connect body parsing via urlencoded() or json()": { + topic: function () { + union.createServer({ + buffer: false, + before: [ + connect.urlencoded(), + connect.json(), + function (req, res) { + res.end(JSON.stringify(req.body, true, 2)); + } + ] + }).listen(8082, this.callback); + }, + "a request to /": { + topic: function () { + request.post({ + uri: 'http://localhost:8082/', + headers: { + 'content-type': 'application/json' + }, + body: JSON.stringify({ a: "foo", b: "bar" }) + }, this.callback); + }, + "should respond with a body-decoded object": function (err, res, body) { + assert.isNull(err); + assert.equal(res.statusCode, 200); + assert.deepEqual( + JSON.parse(body), + { a: 'foo', b: 'bar' } + ); + } + } + } +}).export(module); + diff --git a/node_modules/union/test/double-write-test.js b/node_modules/union/test/double-write-test.js new file mode 100644 index 000000000..555c73785 --- /dev/null +++ b/node_modules/union/test/double-write-test.js @@ -0,0 +1,62 @@ +/* + * simple-test.js: Simple tests for basic streaming and non-streaming HTTP requests with union. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'), + fs = require('fs'), + path = require('path'), + request = require('request'), + vows = require('vows'), + union = require('../lib/index'), + macros = require('./helpers/macros'); + +var doubleWrite = false, + server; + +server = union.createServer({ + before: [ + function (req, res) { + res.json(200, { 'hello': 'world' }); + res.emit('next'); + }, + function (req, res) { + doubleWrite = true; + res.json(200, { 'hello': 'world' }); + res.emit('next'); + } + ] +}); + + +vows.describe('union/double-write').addBatch({ + "When using union": { + "an http server which attempts to write to the response twice": { + topic: function () { + server.listen(9091, this.callback); + }, + "a GET request to `/foo`": { + topic: function () { + request({ uri: 'http://localhost:9091/foo' }, this.callback); + }, + "it should respond with `{ 'hello': 'world' }`": function (err, res, body) { + macros.assertValidResponse(err, res); + assert.deepEqual(JSON.parse(body), { 'hello': 'world' }); + }, + "it should not write to the response twice": function () { + assert.isFalse(doubleWrite); + } + } + } + } +}).addBatch({ + "When the tests are over": { + "the server should close": function () { + server.close(); + } + } +}).export(module); + diff --git a/node_modules/union/test/ecstatic-test.js b/node_modules/union/test/ecstatic-test.js new file mode 100644 index 000000000..2c3e2d8e8 --- /dev/null +++ b/node_modules/union/test/ecstatic-test.js @@ -0,0 +1,44 @@ +/* + * simple-test.js: Simple tests for basic streaming and non-streaming HTTP requests with union. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'), + ecstatic = require('ecstatic')(__dirname + '/fixtures/static'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/ecstatic').addBatch({ + "When using union with ecstatic": { + topic: function () { + union.createServer({ + before: [ + ecstatic + ] + }).listen(18082, this.callback); + }, + "a request to /some-file.txt": { + topic: function () { + request({ uri: 'http://localhost:18082/some-file.txt' }, this.callback); + }, + "should respond with `hello world`": function (err, res, body) { + assert.isNull(err); + assert.equal(body, 'hello world\n'); + } + }, + "a request to /404.txt (which does not exist)": { + topic: function () { + request({ uri: 'http://localhost:18082/404.txt' }, this.callback); + }, + "should respond with 404 status code": function (err, res, body) { + assert.isNull(err); + assert.equal(res.statusCode, 404); + } + } + } +}).export(module); + diff --git a/node_modules/union/test/fixtures/index.js b/node_modules/union/test/fixtures/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/union/test/fixtures/static/some-file.txt b/node_modules/union/test/fixtures/static/some-file.txt new file mode 100644 index 000000000..3b18e512d --- /dev/null +++ b/node_modules/union/test/fixtures/static/some-file.txt @@ -0,0 +1 @@ +hello world diff --git a/node_modules/union/test/header-test.js b/node_modules/union/test/header-test.js new file mode 100644 index 000000000..a4ab5ad98 --- /dev/null +++ b/node_modules/union/test/header-test.js @@ -0,0 +1,36 @@ +var assert = require('assert'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/header').addBatch({ + 'When using `union`': { + 'with a server that responds with a header': { + topic: function () { + var callback = this.callback; + var server = union.createServer({ + before: [ + function (req, res) { + res.on('header', function () { + callback(null, res); + }); + res.writeHead(200, { 'content-type': 'text' }); + res.end(); + } + ] + }); + server.listen(9092, function () { + request('http://localhost:9092/'); + }); + }, + 'it should have proper `headerSent` set': function (err, res) { + assert.isNull(err); + assert.isTrue(res.headerSent); + }, + 'it should have proper `_emittedHeader` set': function (err, res) { + assert.isNull(err); + assert.isTrue(res._emittedHeader); + } + } + } +}).export(module); diff --git a/node_modules/union/test/helpers/index.js b/node_modules/union/test/helpers/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/union/test/helpers/macros.js b/node_modules/union/test/helpers/macros.js new file mode 100644 index 000000000..599e1b47c --- /dev/null +++ b/node_modules/union/test/helpers/macros.js @@ -0,0 +1,17 @@ +/* + * macros.js: Simple test macros + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'); + +var macros = exports; + +macros.assertValidResponse = function (err, res) { + assert.isTrue(!err); + assert.equal(res.statusCode, 200); +}; + diff --git a/node_modules/union/test/prop-test.js b/node_modules/union/test/prop-test.js new file mode 100644 index 000000000..8e9cd4c0c --- /dev/null +++ b/node_modules/union/test/prop-test.js @@ -0,0 +1,45 @@ +var assert = require('assert'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/properties').addBatch({ + 'When using `union`': { + 'with a server that responds to requests': { + topic: function () { + var callback = this.callback; + var server = union.createServer({ + before: [ + function (req, res) { + callback(null, req, res); + + res.writeHead(200, { 'content-type': 'text' }); + res.end(); + } + ] + }); + server.listen(9092, function () { + request('http://localhost:9092/'); + }); + }, + 'the `req` should have a proper `httpVersion` set': function (err, req) { + assert.isNull(err); + assert.equal(req.httpVersion, '1.1'); + }, + 'the `req` should have a proper `httpVersionMajor` set': function (err, req) { + assert.isNull(err); + assert.equal(req.httpVersionMajor, 1); + }, + 'the `req` should have a proper `httpVersionMinor` set': function (err, req) { + assert.isNull(err); + assert.equal(req.httpVersionMinor, 1); + }, + 'the `req` should have proper `socket` reference set': function (err, req) { + var net = require('net'); + + assert.isNull(err); + assert.isTrue(req.socket instanceof net.Socket); + } + } + } +}).export(module); diff --git a/node_modules/union/test/simple-test.js b/node_modules/union/test/simple-test.js new file mode 100644 index 000000000..70416c996 --- /dev/null +++ b/node_modules/union/test/simple-test.js @@ -0,0 +1,97 @@ +/* + * simple-test.js: Simple tests for basic streaming and non-streaming HTTP requests with union. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'), + fs = require('fs'), + path = require('path'), + spawn = require('child_process').spawn, + request = require('request'), + vows = require('vows'), + macros = require('./helpers/macros'); + +var examplesDir = path.join(__dirname, '..', 'examples', 'simple'), + simpleScript = path.join(examplesDir, 'simple.js'), + pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')), + fooURI = 'http://localhost:9090/foo', + server; + +vows.describe('union/simple').addBatch({ + "When using union": { + "a simple http server": { + topic: function () { + server = spawn(process.argv[0], [simpleScript]); + server.stdout.on('data', this.callback.bind(this, null)); + }, + "a GET request to `/foo`": { + topic: function () { + request({ uri: fooURI }, this.callback); + }, + "it should respond with `hello world`": function (err, res, body) { + macros.assertValidResponse(err, res); + assert.equal(body, 'hello world\n'); + }, + "it should respond with 'x-powered-by': 'union '": function (err, res, body) { + assert.isNull(err); + assert.equal(res.headers['x-powered-by'], 'union ' + pkg.version); + } + }, + "a POST request to `/foo`": { + topic: function () { + request.post({ uri: fooURI }, this.callback); + }, + "it should respond with `wrote to a stream!`": function (err, res, body) { + macros.assertValidResponse(err, res); + assert.equal(body, 'wrote to a stream!'); + } + }, + "a GET request to `/redirect`": { + topic: function () { + request.get({ + url: 'http://localhost:9090/redirect', + followRedirect: false + }, this.callback); + }, + "it should redirect to `http://www.google.com`": function (err, res, body) { + assert.equal(res.statusCode, 302); + assert.equal(res.headers.location, "http://www.google.com"); + } + }, + "a GET request to `/custom_redirect`": { + topic: function () { + request.get({ + url: 'http://localhost:9090/custom_redirect', + followRedirect: false + }, this.callback); + }, + "it should redirect to `/foo`": function (err, res, body) { + assert.equal(res.statusCode, 301); + assert.equal(res.headers.location, "http://localhost:9090/foo"); + } + }, + "a GET request to `/async`": { + topic: function () { + request.get({ + url: 'http://localhost:9090/async', + timeout: 500 + }, this.callback); + }, + "it should not timeout": function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + } + } + } + } +}).addBatch({ + "When the tests are over": { + "the server should close": function () { + server.kill(); + } + } +}).export(module); + diff --git a/node_modules/union/test/status-code-test.js b/node_modules/union/test/status-code-test.js new file mode 100644 index 000000000..ed49d86e7 --- /dev/null +++ b/node_modules/union/test/status-code-test.js @@ -0,0 +1,31 @@ +var assert = require('assert'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/status-code').addBatch({ + 'When using `union`': { + 'with a server setting `res.statusCode`': { + topic: function () { + var server = union.createServer({ + before: [ + function (req, res) { + res.statusCode = 404; + res.end(); + } + ] + }); + server.listen(9091, this.callback); + }, + 'and sending a request': { + topic: function () { + request('http://localhost:9091/', this.callback); + }, + 'it should have proper `statusCode` set': function (err, res, body) { + assert.isTrue(!err); + assert.equal(res.statusCode, 404); + } + } + } + } +}).export(module); diff --git a/node_modules/union/test/streaming-test.js b/node_modules/union/test/streaming-test.js new file mode 100644 index 000000000..6145ef34b --- /dev/null +++ b/node_modules/union/test/streaming-test.js @@ -0,0 +1,68 @@ +var assert = require('assert'), + fs = require('fs'), + path = require('path'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/streaming').addBatch({ + 'When using `union`': { + 'a simple union server': { + topic: function () { + var self = this; + + union.createServer({ + buffer: false, + before: [ + function (req, res, next) { + var chunks = ''; + + req.on('data', function (chunk) { + chunks += chunk; + }); + + req.on('end', function () { + self.callback(null, chunks); + }); + } + ] + }).listen(9000, function () { + request.post('http://localhost:9000').write('hello world'); + }); + }, + 'should receive complete POST data': function (chunks) { + assert.equal(chunks, 'hello world'); + } + }, + "a simple pipe to a file": { + topic: function () { + var self = this; + + union.createServer({ + before: [ + function (req, res, next) { + var filename = path.join(__dirname, 'fixtures', 'pipe-write-test.txt'), + writeStream = fs.createWriteStream(filename); + + req.pipe(writeStream); + writeStream.on('close', function () { + res.writeHead(200); + fs.createReadStream(filename).pipe(res); + }); + } + ] + }).listen(9044, function () { + request({ + method: 'POST', + uri: 'http://localhost:9044', + body: 'hello world' + }, self.callback); + }); + }, + 'should receive complete POST data': function (err, res, body) { + assert.equal(body, 'hello world'); + } + } + } +}).export(module); + diff --git a/node_modules/union/union.png b/node_modules/union/union.png new file mode 100644 index 0000000000000000000000000000000000000000..96c6e665a84ed2b4be3d23bcac5fd34957367958 GIT binary patch literal 10826 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 fgXv8t3K~k + +~~~ + +Or using an AMD module system like requirejs: + +~~~javascript +define(['path/url-join.js'], function (urljoin) { + urljoin('http://blabla.com', 'foo?a=1'); +}); +~~~ + +## License + +MIT diff --git a/node_modules/url-join/bower.json b/node_modules/url-join/bower.json new file mode 100644 index 000000000..cb7248444 --- /dev/null +++ b/node_modules/url-join/bower.json @@ -0,0 +1,27 @@ +{ + "name": "url-join", + "version": "2.0.2", + "homepage": "https://github.com/jfromaniello/url-join", + "authors": [ + "José F. Romaniello " + ], + "description": "Join urls and normalize as in path.join.", + "main": "lib/url-join.js", + "moduleType": [ + "amd", + "globals", + "node" + ], + "keywords": [ + "url", + "join" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ] +} \ No newline at end of file diff --git a/node_modules/url-join/lib/url-join.js b/node_modules/url-join/lib/url-join.js new file mode 100644 index 000000000..00b7fa319 --- /dev/null +++ b/node_modules/url-join/lib/url-join.js @@ -0,0 +1,49 @@ +(function (name, context, definition) { + if (typeof module !== 'undefined' && module.exports) module.exports = definition(); + else if (typeof define === 'function' && define.amd) define(definition); + else context[name] = definition(); +})('urljoin', this, function () { + + function startsWith(str, searchString) { + return str.substr(0, searchString.length) === searchString; + } + + function normalize (str, options) { + + if (startsWith(str, 'file://')) { + + // make sure file protocol has max three slashes + str = str.replace(/(\/{0,3})\/*/g, '$1'); + } else { + + // make sure protocol is followed by two slashes + str = str.replace(/:\//g, '://'); + + // remove consecutive slashes + str = str.replace(/([^:\s\%\3\A])\/+/g, '$1/'); + } + + // remove trailing slash before parameters or hash + str = str.replace(/\/(\?|&|#[^!])/g, '$1'); + + // replace ? in parameters with & + str = str.replace(/(\?.+)\?/g, '$1&'); + + return str; + } + + return function () { + var input = arguments; + var options = {}; + + if (typeof arguments[0] === 'object') { + // new syntax with array and options + input = arguments[0]; + options = arguments[1] || {}; + } + + var joined = [].slice.call(input, 0).join('/'); + return normalize(joined, options); + }; + +}); diff --git a/node_modules/url-join/package.json b/node_modules/url-join/package.json new file mode 100644 index 000000000..4a474d0a7 --- /dev/null +++ b/node_modules/url-join/package.json @@ -0,0 +1,56 @@ +{ + "_from": "url-join@^2.0.2", + "_id": "url-join@2.0.2", + "_inBundle": false, + "_integrity": "sha1-wHJ1aWetJLi1nldBVRyqx49QuLc=", + "_location": "/url-join", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "url-join@^2.0.2", + "name": "url-join", + "escapedName": "url-join", + "rawSpec": "^2.0.2", + "saveSpec": null, + "fetchSpec": "^2.0.2" + }, + "_requiredBy": [ + "/ecstatic" + ], + "_resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.2.tgz", + "_shasum": "c072756967ad24b8b59e5741551caac78f50b8b7", + "_spec": "url-join@^2.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/ecstatic", + "author": { + "name": "José F. Romaniello", + "email": "jfromaniello@gmail.com", + "url": "http://joseoncode.com" + }, + "bugs": { + "url": "https://github.com/jfromaniello/url-join/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Join urls and normalize as in path.join.", + "devDependencies": { + "mocha": "^3.2.0", + "should": "~1.2.1" + }, + "homepage": "https://github.com/jfromaniello/url-join#readme", + "keywords": [ + "url", + "join" + ], + "license": "MIT", + "main": "lib/url-join.js", + "name": "url-join", + "repository": { + "type": "git", + "url": "git://github.com/jfromaniello/url-join.git" + }, + "scripts": { + "test": "mocha --require should" + }, + "version": "2.0.2" +} diff --git a/node_modules/url-join/test/tests.js b/node_modules/url-join/test/tests.js new file mode 100644 index 000000000..49f54cdf7 --- /dev/null +++ b/node_modules/url-join/test/tests.js @@ -0,0 +1,82 @@ +var urljoin = require('../lib/url-join'); + +describe('url join', function () { + it('should work for simple case', function () { + urljoin('http://www.google.com/', 'foo/bar', '?test=123') + .should.eql('http://www.google.com/foo/bar?test=123'); + }); + + it('should work for simple case with new syntax', function () { + urljoin(['http://www.google.com/', 'foo/bar', '?test=123']) + .should.eql('http://www.google.com/foo/bar?test=123'); + }); + + it('should work for hashbang urls', function () { + urljoin(['http://www.google.com', '#!', 'foo/bar', '?test=123']) + .should.eql('http://www.google.com/#!/foo/bar?test=123'); + }); + + it('should be able to join protocol', function () { + urljoin('http:', 'www.google.com/', 'foo/bar', '?test=123') + .should.eql('http://www.google.com/foo/bar?test=123'); + }); + + it('should be able to join protocol with slashes', function () { + urljoin('http://', 'www.google.com/', 'foo/bar', '?test=123') + .should.eql('http://www.google.com/foo/bar?test=123'); + }); + + it('should remove extra slashes', function () { + urljoin('http:', 'www.google.com///', 'foo/bar', '?test=123') + .should.eql('http://www.google.com/foo/bar?test=123'); + }); + + it('should not remove extra slashes in an encoded URL', function () { + urljoin('http:', 'www.google.com///', 'foo/bar', '?url=http%3A//Ftest.com') + .should.eql('http://www.google.com/foo/bar?url=http%3A//Ftest.com'); + + urljoin('http://a.com/23d04b3/', '/b/c.html') + .should.eql('http://a.com/23d04b3/b/c.html') + .should.not.eql('http://a.com/23d04b3//b/c.html'); + }); + + it('should support anchors in urls', function () { + urljoin('http:', 'www.google.com///', 'foo/bar', '?test=123', '#faaaaa') + .should.eql('http://www.google.com/foo/bar?test=123#faaaaa'); + }); + + it('should support protocol-relative urls', function () { + urljoin('//www.google.com', 'foo/bar', '?test=123') + .should.eql('//www.google.com/foo/bar?test=123') + }); + + it('should support file protocol urls', function () { + urljoin('file:/', 'android_asset', 'foo/bar') + .should.eql('file://android_asset/foo/bar') + + urljoin('file:', '/android_asset', 'foo/bar') + .should.eql('file://android_asset/foo/bar') + }); + + it('should support absolute file protocol urls', function () { + urljoin('file:', '///android_asset', 'foo/bar') + .should.eql('file:///android_asset/foo/bar') + + urljoin('file:///', 'android_asset', 'foo/bar') + .should.eql('file:///android_asset/foo/bar') + + urljoin('file:///', '//android_asset', 'foo/bar') + .should.eql('file:///android_asset/foo/bar') + + urljoin('file:///android_asset', 'foo/bar') + .should.eql('file:///android_asset/foo/bar') + }); + + it('should merge multiple query params properly', function () { + urljoin('http:', 'www.google.com///', 'foo/bar', '?test=123', '?key=456') + .should.eql('http://www.google.com/foo/bar?test=123&key=456'); + + urljoin('http:', 'www.google.com///', 'foo/bar', '?test=123', '?boom=value', '&key=456') + .should.eql('http://www.google.com/foo/bar?test=123&boom=value&key=456'); + }); +}); diff --git a/node_modules/url/.npmignore b/node_modules/url/.npmignore new file mode 100644 index 000000000..ba114713b --- /dev/null +++ b/node_modules/url/.npmignore @@ -0,0 +1 @@ +test-url.js diff --git a/node_modules/url/.travis.yml b/node_modules/url/.travis.yml new file mode 100644 index 000000000..16ed30155 --- /dev/null +++ b/node_modules/url/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - "0.10" +env: + global: + - secure: OgPRLCzHFh5WbjHEKlghHFW1oOreSF2JVUr3CMaFDi03ngTS2WONSw8mRn8SA6FTldiGGBx1n8orDzUw6cdkB7+tkU3G5B0M0V3vl823NaUFKgxsCM3UGDYfJb3yfAG5cj72rVZoX/ABd1fVuG4vBIlDLxsSlKQFMzUCFoyttr8= + - secure: AiZP8GHbyx83ZBhOvOxxtpNcgNHoP+vo5G1a1OYU78EHCgHg8NRyHKyCdrBnPvw6mV2BI/8frZaXAEicsHMtHMofBYn7nibNlaajBPI8AkHtYfNSc+zO+71Kwv7VOTOKKnkMEIkqhHlc6njFoH3QaBNHsgNlzzplPxaIt8vdUVk= diff --git a/node_modules/url/.zuul.yml b/node_modules/url/.zuul.yml new file mode 100644 index 000000000..feea8b60d --- /dev/null +++ b/node_modules/url/.zuul.yml @@ -0,0 +1,16 @@ +ui: mocha-tdd +browsers: + - name: chrome + version: latest + - name: firefox + version: 24..latest + - name: safari + version: latest + - name: ie + version: 9..latest + - name: iphone + version: oldest..latest + - name: ipad + version: oldest..latest + - name: android + version: oldest..latest diff --git a/node_modules/url/LICENSE b/node_modules/url/LICENSE new file mode 100644 index 000000000..f45bc1186 --- /dev/null +++ b/node_modules/url/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +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/node_modules/url/README.md b/node_modules/url/README.md new file mode 100644 index 000000000..8b3546028 --- /dev/null +++ b/node_modules/url/README.md @@ -0,0 +1,108 @@ +# node-url + +[![Build Status](https://travis-ci.org/defunctzombie/node-url.svg?branch=master)](https://travis-ci.org/defunctzombie/node-url) + +This module has utilities for URL resolution and parsing meant to have feature parity with node.js core [url](http://nodejs.org/api/url.html) module. + +```js +var url = require('url'); +``` + +## api + +Parsed URL objects have some or all of the following fields, depending on +whether or not they exist in the URL string. Any parts that are not in the URL +string will not be in the parsed object. Examples are shown for the URL + +`'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'` + +* `href`: The full URL that was originally parsed. Both the protocol and host are lowercased. + + Example: `'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'` + +* `protocol`: The request protocol, lowercased. + + Example: `'http:'` + +* `host`: The full lowercased host portion of the URL, including port + information. + + Example: `'host.com:8080'` + +* `auth`: The authentication information portion of a URL. + + Example: `'user:pass'` + +* `hostname`: Just the lowercased hostname portion of the host. + + Example: `'host.com'` + +* `port`: The port number portion of the host. + + Example: `'8080'` + +* `pathname`: The path section of the URL, that comes after the host and + before the query, including the initial slash if present. + + Example: `'/p/a/t/h'` + +* `search`: The 'query string' portion of the URL, including the leading + question mark. + + Example: `'?query=string'` + +* `path`: Concatenation of `pathname` and `search`. + + Example: `'/p/a/t/h?query=string'` + +* `query`: Either the 'params' portion of the query string, or a + querystring-parsed object. + + Example: `'query=string'` or `{'query':'string'}` + +* `hash`: The 'fragment' portion of the URL including the pound-sign. + + Example: `'#hash'` + +The following methods are provided by the URL module: + +### url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) + +Take a URL string, and return an object. + +Pass `true` as the second argument to also parse +the query string using the `querystring` module. +Defaults to `false`. + +Pass `true` as the third argument to treat `//foo/bar` as +`{ host: 'foo', pathname: '/bar' }` rather than +`{ pathname: '//foo/bar' }`. Defaults to `false`. + +### url.format(urlObj) + +Take a parsed URL object, and return a formatted URL string. + +* `href` will be ignored. +* `protocol` is treated the same with or without the trailing `:` (colon). + * The protocols `http`, `https`, `ftp`, `gopher`, `file` will be + postfixed with `://` (colon-slash-slash). + * All other protocols `mailto`, `xmpp`, `aim`, `sftp`, `foo`, etc will + be postfixed with `:` (colon) +* `auth` will be used if present. +* `hostname` will only be used if `host` is absent. +* `port` will only be used if `host` is absent. +* `host` will be used in place of `hostname` and `port` +* `pathname` is treated the same with or without the leading `/` (slash) +* `search` will be used in place of `query` +* `query` (object; see `querystring`) will only be used if `search` is absent. +* `search` is treated the same with or without the leading `?` (question mark) +* `hash` is treated the same with or without the leading `#` (pound sign, anchor) + +### url.resolve(from, to) + +Take a base URL, and a href URL, and resolve them as a browser would for +an anchor tag. Examples: + + url.resolve('/one/two/three', 'four') // '/one/two/four' + url.resolve('http://example.com/', '/one') // 'http://example.com/one' + url.resolve('http://example.com/one', '/two') // 'http://example.com/two' diff --git a/node_modules/url/node_modules/punycode/LICENSE-MIT.txt b/node_modules/url/node_modules/punycode/LICENSE-MIT.txt new file mode 100644 index 000000000..a41e0a7ef --- /dev/null +++ b/node_modules/url/node_modules/punycode/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/url/node_modules/punycode/README.md b/node_modules/url/node_modules/punycode/README.md new file mode 100644 index 000000000..831e6379b --- /dev/null +++ b/node_modules/url/node_modules/punycode/README.md @@ -0,0 +1,176 @@ +# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/coveralls/bestiejs/punycode.js/master.svg)](https://coveralls.io/r/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js) + +A robust Punycode converter that fully complies to [RFC 3492](http://tools.ietf.org/html/rfc3492) and [RFC 5891](http://tools.ietf.org/html/rfc5891), and works on nearly all JavaScript platforms. + +This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: + +* [The C example code from RFC 3492](http://tools.ietf.org/html/rfc3492#appendix-C) +* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) +* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) +* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) +* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) + +This project is [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with [Node.js v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc). + +## Installation + +Via [npm](http://npmjs.org/) (only required for Node.js releases older than v0.6.2): + +```bash +npm install punycode +``` + +Via [Bower](http://bower.io/): + +```bash +bower install punycode +``` + +Via [Component](https://github.com/component/component): + +```bash +component install bestiejs/punycode.js +``` + +In a browser: + +```html + +``` + +In [Narwhal](http://narwhaljs.org/), [Node.js](http://nodejs.org/), and [RingoJS](http://ringojs.org/): + +```js +var punycode = require('punycode'); +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('punycode.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'punycode': 'path/to/punycode' + } + }, + ['punycode'], + function(punycode) { + console.log(punycode); + } +); +``` + +## API + +### `punycode.decode(string)` + +Converts a Punycode string of ASCII symbols to a string of Unicode symbols. + +```js +// decode domain name parts +punycode.decode('maana-pta'); // 'mañana' +punycode.decode('--dqo34k'); // '☃-⌘' +``` + +### `punycode.encode(string)` + +Converts a string of Unicode symbols to a Punycode string of ASCII symbols. + +```js +// encode domain name parts +punycode.encode('mañana'); // 'maana-pta' +punycode.encode('☃-⌘'); // '--dqo34k' +``` + +### `punycode.toUnicode(input)` + +Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. + +```js +// decode domain names +punycode.toUnicode('xn--maana-pta.com'); +// → 'mañana.com' +punycode.toUnicode('xn----dqo34k.com'); +// → '☃-⌘.com' + +// decode email addresses +punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); +// → 'джумла@джpумлатест.bрфa' +``` + +### `punycode.toASCII(input)` + +Converts a Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that's already in ASCII. + +```js +// encode domain names +punycode.toASCII('mañana.com'); +// → 'xn--maana-pta.com' +punycode.toASCII('☃-⌘.com'); +// → 'xn----dqo34k.com' + +// encode email addresses +punycode.toASCII('джумла@джpумлатест.bрфa'); +// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' +``` + +### `punycode.ucs2` + +#### `punycode.ucs2.decode(string)` + +Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. + +```js +punycode.ucs2.decode('abc'); +// → [0x61, 0x62, 0x63] +// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: +punycode.ucs2.decode('\uD834\uDF06'); +// → [0x1D306] +``` + +#### `punycode.ucs2.encode(codePoints)` + +Creates a string based on an array of numeric code point values. + +```js +punycode.ucs2.encode([0x61, 0x62, 0x63]); +// → 'abc' +punycode.ucs2.encode([0x1D306]); +// → '\uD834\uDF06' +``` + +### `punycode.version` + +A string representing the current Punycode.js version number. + +## Unit tests & code coverage + +After cloning this repository, run `npm install --dev` to install the dependencies needed for Punycode.js development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +Feel free to fork if you see possible improvements! + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## Contributors + +| [![twitter/jdalton](https://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## License + +Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/url/node_modules/punycode/package.json b/node_modules/url/node_modules/punycode/package.json new file mode 100644 index 000000000..b0e9621c3 --- /dev/null +++ b/node_modules/url/node_modules/punycode/package.json @@ -0,0 +1,80 @@ +{ + "_from": "punycode@1.3.2", + "_id": "punycode@1.3.2", + "_inBundle": false, + "_integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "_location": "/url/punycode", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "punycode@1.3.2", + "name": "punycode", + "escapedName": "punycode", + "rawSpec": "1.3.2", + "saveSpec": null, + "fetchSpec": "1.3.2" + }, + "_requiredBy": [ + "/url" + ], + "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "_shasum": "9653a036fb7c1ee42342f2325cceefea3926c48d", + "_spec": "punycode@1.3.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/url", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bugs": { + "url": "https://github.com/bestiejs/punycode.js/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + { + "name": "John-David Dalton", + "url": "http://allyoucanleet.com/" + } + ], + "deprecated": false, + "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", + "devDependencies": { + "coveralls": "^2.10.1", + "grunt": "^0.4.5", + "grunt-contrib-uglify": "^0.5.0", + "grunt-shell": "^0.7.0", + "istanbul": "^0.2.13", + "qunit-extras": "^1.2.0", + "qunitjs": "~1.11.0", + "requirejs": "^2.1.14" + }, + "files": [ + "LICENSE-MIT.txt", + "punycode.js" + ], + "homepage": "https://mths.be/punycode", + "keywords": [ + "punycode", + "unicode", + "idn", + "idna", + "dns", + "url", + "domain" + ], + "license": "MIT", + "main": "punycode.js", + "name": "punycode", + "repository": { + "type": "git", + "url": "git+https://github.com/bestiejs/punycode.js.git" + }, + "scripts": { + "test": "node tests/tests.js" + }, + "version": "1.3.2" +} diff --git a/node_modules/url/node_modules/punycode/punycode.js b/node_modules/url/node_modules/punycode/punycode.js new file mode 100644 index 000000000..ac6859738 --- /dev/null +++ b/node_modules/url/node_modules/punycode/punycode.js @@ -0,0 +1,530 @@ +/*! https://mths.be/punycode v1.3.2 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * http://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.3.2', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); diff --git a/node_modules/url/package.json b/node_modules/url/package.json new file mode 100644 index 000000000..6c4ffdecf --- /dev/null +++ b/node_modules/url/package.json @@ -0,0 +1,53 @@ +{ + "_from": "url@^0.11.0", + "_id": "url@0.11.0", + "_inBundle": false, + "_integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "_location": "/url", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "url@^0.11.0", + "name": "url", + "escapedName": "url", + "rawSpec": "^0.11.0", + "saveSpec": null, + "fetchSpec": "^0.11.0" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "_shasum": "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1", + "_spec": "url@^0.11.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "bugs": { + "url": "https://github.com/defunctzombie/node-url/issues" + }, + "bundleDependencies": false, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "deprecated": false, + "description": "The core `url` packaged standalone for use with Browserify.", + "devDependencies": { + "assert": "1.1.1", + "mocha": "1.18.2", + "zuul": "3.3.0" + }, + "homepage": "https://github.com/defunctzombie/node-url#readme", + "license": "MIT", + "main": "./url.js", + "name": "url", + "repository": { + "type": "git", + "url": "git+https://github.com/defunctzombie/node-url.git" + }, + "scripts": { + "test": "mocha --ui qunit test.js && zuul -- test.js", + "test-local": "zuul --local -- test.js" + }, + "version": "0.11.0" +} diff --git a/node_modules/url/test.js b/node_modules/url/test.js new file mode 100644 index 000000000..3b7d3358c --- /dev/null +++ b/node_modules/url/test.js @@ -0,0 +1,1599 @@ +// 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 assert = require('assert'); + +var url = require('./url'); + +// URLs to parse, and expected data +// { url : parsed } +var parseTests = { + '//some_path' : { + 'href': '//some_path', + 'pathname': '//some_path', + 'path': '//some_path' + }, + + 'http:\\\\evil-phisher\\foo.html#h\\a\\s\\h': { + protocol: 'http:', + slashes: true, + host: 'evil-phisher', + hostname: 'evil-phisher', + pathname: '/foo.html', + path: '/foo.html', + hash: '#h%5Ca%5Cs%5Ch', + href: 'http://evil-phisher/foo.html#h%5Ca%5Cs%5Ch' + }, + + 'http:\\\\evil-phisher\\foo.html?json="\\"foo\\""#h\\a\\s\\h': { + protocol: 'http:', + slashes: true, + host: 'evil-phisher', + hostname: 'evil-phisher', + pathname: '/foo.html', + search: '?json=%22%5C%22foo%5C%22%22', + query: 'json=%22%5C%22foo%5C%22%22', + path: '/foo.html?json=%22%5C%22foo%5C%22%22', + hash: '#h%5Ca%5Cs%5Ch', + href: 'http://evil-phisher/foo.html?json=%22%5C%22foo%5C%22%22#h%5Ca%5Cs%5Ch' + }, + + 'http:\\\\evil-phisher\\foo.html#h\\a\\s\\h?blarg': { + protocol: 'http:', + slashes: true, + host: 'evil-phisher', + hostname: 'evil-phisher', + pathname: '/foo.html', + path: '/foo.html', + hash: '#h%5Ca%5Cs%5Ch?blarg', + href: 'http://evil-phisher/foo.html#h%5Ca%5Cs%5Ch?blarg' + }, + + + 'http:\\\\evil-phisher\\foo.html': { + protocol: 'http:', + slashes: true, + host: 'evil-phisher', + hostname: 'evil-phisher', + pathname: '/foo.html', + path: '/foo.html', + href: 'http://evil-phisher/foo.html' + }, + + 'HTTP://www.example.com/' : { + 'href': 'http://www.example.com/', + 'protocol': 'http:', + 'slashes': true, + 'host': 'www.example.com', + 'hostname': 'www.example.com', + 'pathname': '/', + 'path': '/' + }, + + 'HTTP://www.example.com' : { + 'href': 'http://www.example.com/', + 'protocol': 'http:', + 'slashes': true, + 'host': 'www.example.com', + 'hostname': 'www.example.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://www.ExAmPlE.com/' : { + 'href': 'http://www.example.com/', + 'protocol': 'http:', + 'slashes': true, + 'host': 'www.example.com', + 'hostname': 'www.example.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://user:pw@www.ExAmPlE.com/' : { + 'href': 'http://user:pw@www.example.com/', + 'protocol': 'http:', + 'slashes': true, + 'auth': 'user:pw', + 'host': 'www.example.com', + 'hostname': 'www.example.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://USER:PW@www.ExAmPlE.com/' : { + 'href': 'http://USER:PW@www.example.com/', + 'protocol': 'http:', + 'slashes': true, + 'auth': 'USER:PW', + 'host': 'www.example.com', + 'hostname': 'www.example.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://user@www.example.com/' : { + 'href': 'http://user@www.example.com/', + 'protocol': 'http:', + 'slashes': true, + 'auth': 'user', + 'host': 'www.example.com', + 'hostname': 'www.example.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://user%3Apw@www.example.com/' : { + 'href': 'http://user:pw@www.example.com/', + 'protocol': 'http:', + 'slashes': true, + 'auth': 'user:pw', + 'host': 'www.example.com', + 'hostname': 'www.example.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://x.com/path?that\'s#all, folks' : { + 'href': 'http://x.com/path?that%27s#all,%20folks', + 'protocol': 'http:', + 'slashes': true, + 'host': 'x.com', + 'hostname': 'x.com', + 'search': '?that%27s', + 'query': 'that%27s', + 'pathname': '/path', + 'hash': '#all,%20folks', + 'path': '/path?that%27s' + }, + + 'HTTP://X.COM/Y' : { + 'href': 'http://x.com/Y', + 'protocol': 'http:', + 'slashes': true, + 'host': 'x.com', + 'hostname': 'x.com', + 'pathname': '/Y', + 'path': '/Y' + }, + + // + not an invalid host character + // per https://url.spec.whatwg.org/#host-parsing + 'http://x.y.com+a/b/c' : { + 'href': 'http://x.y.com+a/b/c', + 'protocol': 'http:', + 'slashes': true, + 'host': 'x.y.com+a', + 'hostname': 'x.y.com+a', + 'pathname': '/b/c', + 'path': '/b/c' + }, + + // an unexpected invalid char in the hostname. + 'HtTp://x.y.cOm;a/b/c?d=e#f gi' : { + 'href': 'http://x.y.com/;a/b/c?d=e#f%20g%3Ch%3Ei', + 'protocol': 'http:', + 'slashes': true, + 'host': 'x.y.com', + 'hostname': 'x.y.com', + 'pathname': ';a/b/c', + 'search': '?d=e', + 'query': 'd=e', + 'hash': '#f%20g%3Ch%3Ei', + 'path': ';a/b/c?d=e' + }, + + // make sure that we don't accidentally lcast the path parts. + 'HtTp://x.y.cOm;A/b/c?d=e#f gi' : { + 'href': 'http://x.y.com/;A/b/c?d=e#f%20g%3Ch%3Ei', + 'protocol': 'http:', + 'slashes': true, + 'host': 'x.y.com', + 'hostname': 'x.y.com', + 'pathname': ';A/b/c', + 'search': '?d=e', + 'query': 'd=e', + 'hash': '#f%20g%3Ch%3Ei', + 'path': ';A/b/c?d=e' + }, + + 'http://x...y...#p': { + 'href': 'http://x...y.../#p', + 'protocol': 'http:', + 'slashes': true, + 'host': 'x...y...', + 'hostname': 'x...y...', + 'hash': '#p', + 'pathname': '/', + 'path': '/' + }, + + 'http://x/p/"quoted"': { + 'href': 'http://x/p/%22quoted%22', + 'protocol': 'http:', + 'slashes': true, + 'host': 'x', + 'hostname': 'x', + 'pathname': '/p/%22quoted%22', + 'path': '/p/%22quoted%22' + }, + + ' Is a URL!': { + 'href': '%3Chttp://goo.corn/bread%3E%20Is%20a%20URL!', + 'pathname': '%3Chttp://goo.corn/bread%3E%20Is%20a%20URL!', + 'path': '%3Chttp://goo.corn/bread%3E%20Is%20a%20URL!' + }, + + 'http://www.narwhaljs.org/blog/categories?id=news' : { + 'href': 'http://www.narwhaljs.org/blog/categories?id=news', + 'protocol': 'http:', + 'slashes': true, + 'host': 'www.narwhaljs.org', + 'hostname': 'www.narwhaljs.org', + 'search': '?id=news', + 'query': 'id=news', + 'pathname': '/blog/categories', + 'path': '/blog/categories?id=news' + }, + + 'http://mt0.google.com/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=' : { + 'href': 'http://mt0.google.com/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=', + 'protocol': 'http:', + 'slashes': true, + 'host': 'mt0.google.com', + 'hostname': 'mt0.google.com', + 'pathname': '/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=', + 'path': '/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=' + }, + + 'http://mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=' : { + 'href': 'http://mt0.google.com/vt/lyrs=m@114???&hl=en&src=api' + + '&x=2&y=2&z=3&s=', + 'protocol': 'http:', + 'slashes': true, + 'host': 'mt0.google.com', + 'hostname': 'mt0.google.com', + 'search': '???&hl=en&src=api&x=2&y=2&z=3&s=', + 'query': '??&hl=en&src=api&x=2&y=2&z=3&s=', + 'pathname': '/vt/lyrs=m@114', + 'path': '/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=' + }, + + 'http://user:pass@mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=': + { + 'href': 'http://user:pass@mt0.google.com/vt/lyrs=m@114???' + + '&hl=en&src=api&x=2&y=2&z=3&s=', + 'protocol': 'http:', + 'slashes': true, + 'host': 'mt0.google.com', + 'auth': 'user:pass', + 'hostname': 'mt0.google.com', + 'search': '???&hl=en&src=api&x=2&y=2&z=3&s=', + 'query': '??&hl=en&src=api&x=2&y=2&z=3&s=', + 'pathname': '/vt/lyrs=m@114', + 'path': '/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=' + }, + + 'file:///etc/passwd' : { + 'href': 'file:///etc/passwd', + 'slashes': true, + 'protocol': 'file:', + 'pathname': '/etc/passwd', + 'hostname': '', + 'host': '', + 'path': '/etc/passwd' + }, + + 'file://localhost/etc/passwd' : { + 'href': 'file://localhost/etc/passwd', + 'protocol': 'file:', + 'slashes': true, + 'pathname': '/etc/passwd', + 'hostname': 'localhost', + 'host': 'localhost', + 'path': '/etc/passwd' + }, + + 'file://foo/etc/passwd' : { + 'href': 'file://foo/etc/passwd', + 'protocol': 'file:', + 'slashes': true, + 'pathname': '/etc/passwd', + 'hostname': 'foo', + 'host': 'foo', + 'path': '/etc/passwd' + }, + + 'file:///etc/node/' : { + 'href': 'file:///etc/node/', + 'slashes': true, + 'protocol': 'file:', + 'pathname': '/etc/node/', + 'hostname': '', + 'host': '', + 'path': '/etc/node/' + }, + + 'file://localhost/etc/node/' : { + 'href': 'file://localhost/etc/node/', + 'protocol': 'file:', + 'slashes': true, + 'pathname': '/etc/node/', + 'hostname': 'localhost', + 'host': 'localhost', + 'path': '/etc/node/' + }, + + 'file://foo/etc/node/' : { + 'href': 'file://foo/etc/node/', + 'protocol': 'file:', + 'slashes': true, + 'pathname': '/etc/node/', + 'hostname': 'foo', + 'host': 'foo', + 'path': '/etc/node/' + }, + + 'http:/baz/../foo/bar' : { + 'href': 'http:/baz/../foo/bar', + 'protocol': 'http:', + 'pathname': '/baz/../foo/bar', + 'path': '/baz/../foo/bar' + }, + + 'http://user:pass@example.com:8000/foo/bar?baz=quux#frag' : { + 'href': 'http://user:pass@example.com:8000/foo/bar?baz=quux#frag', + 'protocol': 'http:', + 'slashes': true, + 'host': 'example.com:8000', + 'auth': 'user:pass', + 'port': '8000', + 'hostname': 'example.com', + 'hash': '#frag', + 'search': '?baz=quux', + 'query': 'baz=quux', + 'pathname': '/foo/bar', + 'path': '/foo/bar?baz=quux' + }, + + '//user:pass@example.com:8000/foo/bar?baz=quux#frag' : { + 'href': '//user:pass@example.com:8000/foo/bar?baz=quux#frag', + 'slashes': true, + 'host': 'example.com:8000', + 'auth': 'user:pass', + 'port': '8000', + 'hostname': 'example.com', + 'hash': '#frag', + 'search': '?baz=quux', + 'query': 'baz=quux', + 'pathname': '/foo/bar', + 'path': '/foo/bar?baz=quux' + }, + + '/foo/bar?baz=quux#frag' : { + 'href': '/foo/bar?baz=quux#frag', + 'hash': '#frag', + 'search': '?baz=quux', + 'query': 'baz=quux', + 'pathname': '/foo/bar', + 'path': '/foo/bar?baz=quux' + }, + + 'http:/foo/bar?baz=quux#frag' : { + 'href': 'http:/foo/bar?baz=quux#frag', + 'protocol': 'http:', + 'hash': '#frag', + 'search': '?baz=quux', + 'query': 'baz=quux', + 'pathname': '/foo/bar', + 'path': '/foo/bar?baz=quux' + }, + + 'mailto:foo@bar.com?subject=hello' : { + 'href': 'mailto:foo@bar.com?subject=hello', + 'protocol': 'mailto:', + 'host': 'bar.com', + 'auth' : 'foo', + 'hostname' : 'bar.com', + 'search': '?subject=hello', + 'query': 'subject=hello', + 'path': '?subject=hello' + }, + + 'javascript:alert(\'hello\');' : { + 'href': 'javascript:alert(\'hello\');', + 'protocol': 'javascript:', + 'pathname': 'alert(\'hello\');', + 'path': 'alert(\'hello\');' + }, + + 'xmpp:isaacschlueter@jabber.org' : { + 'href': 'xmpp:isaacschlueter@jabber.org', + 'protocol': 'xmpp:', + 'host': 'jabber.org', + 'auth': 'isaacschlueter', + 'hostname': 'jabber.org' + }, + + 'http://atpass:foo%40bar@127.0.0.1:8080/path?search=foo#bar' : { + 'href' : 'http://atpass:foo%40bar@127.0.0.1:8080/path?search=foo#bar', + 'protocol' : 'http:', + 'slashes': true, + 'host' : '127.0.0.1:8080', + 'auth' : 'atpass:foo@bar', + 'hostname' : '127.0.0.1', + 'port' : '8080', + 'pathname': '/path', + 'search' : '?search=foo', + 'query' : 'search=foo', + 'hash' : '#bar', + 'path': '/path?search=foo' + }, + + 'svn+ssh://foo/bar': { + 'href': 'svn+ssh://foo/bar', + 'host': 'foo', + 'hostname': 'foo', + 'protocol': 'svn+ssh:', + 'pathname': '/bar', + 'path': '/bar', + 'slashes': true + }, + + 'dash-test://foo/bar': { + 'href': 'dash-test://foo/bar', + 'host': 'foo', + 'hostname': 'foo', + 'protocol': 'dash-test:', + 'pathname': '/bar', + 'path': '/bar', + 'slashes': true + }, + + 'dash-test:foo/bar': { + 'href': 'dash-test:foo/bar', + 'host': 'foo', + 'hostname': 'foo', + 'protocol': 'dash-test:', + 'pathname': '/bar', + 'path': '/bar' + }, + + 'dot.test://foo/bar': { + 'href': 'dot.test://foo/bar', + 'host': 'foo', + 'hostname': 'foo', + 'protocol': 'dot.test:', + 'pathname': '/bar', + 'path': '/bar', + 'slashes': true + }, + + 'dot.test:foo/bar': { + 'href': 'dot.test:foo/bar', + 'host': 'foo', + 'hostname': 'foo', + 'protocol': 'dot.test:', + 'pathname': '/bar', + 'path': '/bar' + }, + + // IDNA tests + 'http://www.日本語.com/' : { + 'href': 'http://www.xn--wgv71a119e.com/', + 'protocol': 'http:', + 'slashes': true, + 'host': 'www.xn--wgv71a119e.com', + 'hostname': 'www.xn--wgv71a119e.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://example.Bücher.com/' : { + 'href': 'http://example.xn--bcher-kva.com/', + 'protocol': 'http:', + 'slashes': true, + 'host': 'example.xn--bcher-kva.com', + 'hostname': 'example.xn--bcher-kva.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://www.Äffchen.com/' : { + 'href': 'http://www.xn--ffchen-9ta.com/', + 'protocol': 'http:', + 'slashes': true, + 'host': 'www.xn--ffchen-9ta.com', + 'hostname': 'www.xn--ffchen-9ta.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://www.Äffchen.cOm;A/b/c?d=e#f gi' : { + 'href': 'http://www.xn--ffchen-9ta.com/;A/b/c?d=e#f%20g%3Ch%3Ei', + 'protocol': 'http:', + 'slashes': true, + 'host': 'www.xn--ffchen-9ta.com', + 'hostname': 'www.xn--ffchen-9ta.com', + 'pathname': ';A/b/c', + 'search': '?d=e', + 'query': 'd=e', + 'hash': '#f%20g%3Ch%3Ei', + 'path': ';A/b/c?d=e' + }, + + 'http://SÉLIER.COM/' : { + 'href': 'http://xn--slier-bsa.com/', + 'protocol': 'http:', + 'slashes': true, + 'host': 'xn--slier-bsa.com', + 'hostname': 'xn--slier-bsa.com', + 'pathname': '/', + 'path': '/' + }, + + 'http://ليهمابتكلموشعربي؟.ي؟/' : { + 'href': 'http://xn--egbpdaj6bu4bxfgehfvwxn.xn--egb9f/', + 'protocol': 'http:', + 'slashes': true, + 'host': 'xn--egbpdaj6bu4bxfgehfvwxn.xn--egb9f', + 'hostname': 'xn--egbpdaj6bu4bxfgehfvwxn.xn--egb9f', + 'pathname': '/', + 'path': '/' + }, + + 'http://➡.ws/➡' : { + 'href': 'http://xn--hgi.ws/➡', + 'protocol': 'http:', + 'slashes': true, + 'host': 'xn--hgi.ws', + 'hostname': 'xn--hgi.ws', + 'pathname': '/➡', + 'path': '/➡' + }, + + 'http://bucket_name.s3.amazonaws.com/image.jpg': { + protocol: 'http:', + 'slashes': true, + slashes: true, + host: 'bucket_name.s3.amazonaws.com', + hostname: 'bucket_name.s3.amazonaws.com', + pathname: '/image.jpg', + href: 'http://bucket_name.s3.amazonaws.com/image.jpg', + 'path': '/image.jpg' + }, + + 'git+http://github.com/joyent/node.git': { + protocol: 'git+http:', + slashes: true, + host: 'github.com', + hostname: 'github.com', + pathname: '/joyent/node.git', + path: '/joyent/node.git', + href: 'git+http://github.com/joyent/node.git' + }, + + //if local1@domain1 is uses as a relative URL it may + //be parse into auth@hostname, but here there is no + //way to make it work in url.parse, I add the test to be explicit + 'local1@domain1': { + 'pathname': 'local1@domain1', + 'path': 'local1@domain1', + 'href': 'local1@domain1' + }, + + //While this may seem counter-intuitive, a browser will parse + // as a path. + 'www.example.com' : { + 'href': 'www.example.com', + 'pathname': 'www.example.com', + 'path': 'www.example.com' + }, + + // ipv6 support + '[fe80::1]': { + 'href': '[fe80::1]', + 'pathname': '[fe80::1]', + 'path': '[fe80::1]' + }, + + 'coap://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]': { + 'protocol': 'coap:', + 'slashes': true, + 'host': '[fedc:ba98:7654:3210:fedc:ba98:7654:3210]', + 'hostname': 'fedc:ba98:7654:3210:fedc:ba98:7654:3210', + 'href': 'coap://[fedc:ba98:7654:3210:fedc:ba98:7654:3210]/', + 'pathname': '/', + 'path': '/' + }, + + 'coap://[1080:0:0:0:8:800:200C:417A]:61616/': { + 'protocol': 'coap:', + 'slashes': true, + 'host': '[1080:0:0:0:8:800:200c:417a]:61616', + 'port': '61616', + 'hostname': '1080:0:0:0:8:800:200c:417a', + 'href': 'coap://[1080:0:0:0:8:800:200c:417a]:61616/', + 'pathname': '/', + 'path': '/' + }, + + 'http://user:password@[3ffe:2a00:100:7031::1]:8080': { + 'protocol': 'http:', + 'slashes': true, + 'auth': 'user:password', + 'host': '[3ffe:2a00:100:7031::1]:8080', + 'port': '8080', + 'hostname': '3ffe:2a00:100:7031::1', + 'href': 'http://user:password@[3ffe:2a00:100:7031::1]:8080/', + 'pathname': '/', + 'path': '/' + }, + + 'coap://u:p@[::192.9.5.5]:61616/.well-known/r?n=Temperature': { + 'protocol': 'coap:', + 'slashes': true, + 'auth': 'u:p', + 'host': '[::192.9.5.5]:61616', + 'port': '61616', + 'hostname': '::192.9.5.5', + 'href': 'coap://u:p@[::192.9.5.5]:61616/.well-known/r?n=Temperature', + 'search': '?n=Temperature', + 'query': 'n=Temperature', + 'pathname': '/.well-known/r', + 'path': '/.well-known/r?n=Temperature' + }, + + // empty port + 'http://example.com:': { + 'protocol': 'http:', + 'slashes': true, + 'host': 'example.com', + 'hostname': 'example.com', + 'href': 'http://example.com/', + 'pathname': '/', + 'path': '/' + }, + + 'http://example.com:/a/b.html': { + 'protocol': 'http:', + 'slashes': true, + 'host': 'example.com', + 'hostname': 'example.com', + 'href': 'http://example.com/a/b.html', + 'pathname': '/a/b.html', + 'path': '/a/b.html' + }, + + 'http://example.com:?a=b': { + 'protocol': 'http:', + 'slashes': true, + 'host': 'example.com', + 'hostname': 'example.com', + 'href': 'http://example.com/?a=b', + 'search': '?a=b', + 'query': 'a=b', + 'pathname': '/', + 'path': '/?a=b' + }, + + 'http://example.com:#abc': { + 'protocol': 'http:', + 'slashes': true, + 'host': 'example.com', + 'hostname': 'example.com', + 'href': 'http://example.com/#abc', + 'hash': '#abc', + 'pathname': '/', + 'path': '/' + }, + + 'http://[fe80::1]:/a/b?a=b#abc': { + 'protocol': 'http:', + 'slashes': true, + 'host': '[fe80::1]', + 'hostname': 'fe80::1', + 'href': 'http://[fe80::1]/a/b?a=b#abc', + 'search': '?a=b', + 'query': 'a=b', + 'hash': '#abc', + 'pathname': '/a/b', + 'path': '/a/b?a=b' + }, + + 'http://-lovemonsterz.tumblr.com/rss': { + 'protocol': 'http:', + 'slashes': true, + 'host': '-lovemonsterz.tumblr.com', + 'hostname': '-lovemonsterz.tumblr.com', + 'href': 'http://-lovemonsterz.tumblr.com/rss', + 'pathname': '/rss', + 'path': '/rss', + }, + + 'http://-lovemonsterz.tumblr.com:80/rss': { + 'protocol': 'http:', + 'slashes': true, + 'port': '80', + 'host': '-lovemonsterz.tumblr.com:80', + 'hostname': '-lovemonsterz.tumblr.com', + 'href': 'http://-lovemonsterz.tumblr.com:80/rss', + 'pathname': '/rss', + 'path': '/rss', + }, + + 'http://user:pass@-lovemonsterz.tumblr.com/rss': { + 'protocol': 'http:', + 'slashes': true, + 'auth': 'user:pass', + 'host': '-lovemonsterz.tumblr.com', + 'hostname': '-lovemonsterz.tumblr.com', + 'href': 'http://user:pass@-lovemonsterz.tumblr.com/rss', + 'pathname': '/rss', + 'path': '/rss', + }, + + 'http://user:pass@-lovemonsterz.tumblr.com:80/rss': { + 'protocol': 'http:', + 'slashes': true, + 'auth': 'user:pass', + 'port': '80', + 'host': '-lovemonsterz.tumblr.com:80', + 'hostname': '-lovemonsterz.tumblr.com', + 'href': 'http://user:pass@-lovemonsterz.tumblr.com:80/rss', + 'pathname': '/rss', + 'path': '/rss', + }, + + 'http://_jabber._tcp.google.com/test': { + 'protocol': 'http:', + 'slashes': true, + 'host': '_jabber._tcp.google.com', + 'hostname': '_jabber._tcp.google.com', + 'href': 'http://_jabber._tcp.google.com/test', + 'pathname': '/test', + 'path': '/test', + }, + + 'http://user:pass@_jabber._tcp.google.com/test': { + 'protocol': 'http:', + 'slashes': true, + 'auth': 'user:pass', + 'host': '_jabber._tcp.google.com', + 'hostname': '_jabber._tcp.google.com', + 'href': 'http://user:pass@_jabber._tcp.google.com/test', + 'pathname': '/test', + 'path': '/test', + }, + + 'http://_jabber._tcp.google.com:80/test': { + 'protocol': 'http:', + 'slashes': true, + 'port': '80', + 'host': '_jabber._tcp.google.com:80', + 'hostname': '_jabber._tcp.google.com', + 'href': 'http://_jabber._tcp.google.com:80/test', + 'pathname': '/test', + 'path': '/test', + }, + + 'http://user:pass@_jabber._tcp.google.com:80/test': { + 'protocol': 'http:', + 'slashes': true, + 'auth': 'user:pass', + 'port': '80', + 'host': '_jabber._tcp.google.com:80', + 'hostname': '_jabber._tcp.google.com', + 'href': 'http://user:pass@_jabber._tcp.google.com:80/test', + 'pathname': '/test', + 'path': '/test', + }, + + 'http://x:1/\' <>"`/{}|\\^~`/': { + protocol: 'http:', + slashes: true, + host: 'x:1', + port: '1', + hostname: 'x', + pathname: '/%27%20%3C%3E%22%60/%7B%7D%7C/%5E~%60/', + path: '/%27%20%3C%3E%22%60/%7B%7D%7C/%5E~%60/', + href: 'http://x:1/%27%20%3C%3E%22%60/%7B%7D%7C/%5E~%60/' + }, + + 'http://a@b@c/': { + protocol: 'http:', + slashes: true, + auth: 'a@b', + host: 'c', + hostname: 'c', + href: 'http://a%40b@c/', + path: '/', + pathname: '/' + }, + + 'http://a@b?@c': { + protocol: 'http:', + slashes: true, + auth: 'a', + host: 'b', + hostname: 'b', + href: 'http://a@b/?@c', + path: '/?@c', + pathname: '/', + search: '?@c', + query: '@c' + }, + + 'http://a\r" \t\n<\'b:b@c\r\nd/e?f':{ + protocol: 'http:', + slashes: true, + auth: 'a\r" \t\n<\'b:b', + host: 'c', + port: null, + hostname: 'c', + hash: null, + search: '?f', + query: 'f', + pathname: '%0D%0Ad/e', + path: '%0D%0Ad/e?f', + href: 'http://a%0D%22%20%09%0A%3C\'b:b@c/%0D%0Ad/e?f' + }, + + // git urls used by npm + 'git+ssh://git@github.com:npm/npm': { + protocol: 'git+ssh:', + slashes: true, + auth: 'git', + host: 'github.com', + port: null, + hostname: 'github.com', + hash: null, + search: null, + query: null, + pathname: '/:npm/npm', + path: '/:npm/npm', + href: 'git+ssh://git@github.com/:npm/npm' + } + +}; + +Object.keys(parseTests).forEach(function(u) { + test('parse(' + u + ')', function() { + var actual = url.parse(u), + spaced = url.parse(' \t ' + u + '\n\t'); + expected = parseTests[u]; + + Object.keys(actual).forEach(function (i) { + if (expected[i] === undefined && actual[i] === null) { + expected[i] = null; + } + }); + + assert.deepEqual(actual, expected); + assert.deepEqual(spaced, expected); + + var expected = parseTests[u].href, + actual = url.format(parseTests[u]); + + assert.equal(actual, expected, + 'format(' + u + ') == ' + u + '\nactual:' + actual); + }); +}); + +var parseTestsWithQueryString = { + '/foo/bar?baz=quux#frag' : { + 'href': '/foo/bar?baz=quux#frag', + 'hash': '#frag', + 'search': '?baz=quux', + 'query': { + 'baz': 'quux' + }, + 'pathname': '/foo/bar', + 'path': '/foo/bar?baz=quux' + }, + 'http://example.com' : { + 'href': 'http://example.com/', + 'protocol': 'http:', + 'slashes': true, + 'host': 'example.com', + 'hostname': 'example.com', + 'query': {}, + 'search': '', + 'pathname': '/', + 'path': '/' + }, + '/example': { + protocol: null, + slashes: null, + auth: null, + host: null, + port: null, + hostname: null, + hash: null, + search: '', + query: {}, + pathname: '/example', + path: '/example', + href: '/example' + }, + '/example?query=value':{ + protocol: null, + slashes: null, + auth: null, + host: null, + port: null, + hostname: null, + hash: null, + search: '?query=value', + query: { query: 'value' }, + pathname: '/example', + path: '/example?query=value', + href: '/example?query=value' + } +}; + +Object.keys(parseTestsWithQueryString).forEach(function(u) { + test('parse(' + u + ')', function() { + var actual = url.parse(u, true); + var expected = parseTestsWithQueryString[u]; + for (var i in actual) { + if (actual[i] === null && expected[i] === undefined) { + expected[i] = null; + } + } + + assert.deepEqual(actual, expected); + }); +}); + +// some extra formatting tests, just to verify +// that it'll format slightly wonky content to a valid url. +var formatTests = { + 'http://example.com?' : { + 'href': 'http://example.com/?', + 'protocol': 'http:', + 'slashes': true, + 'host': 'example.com', + 'hostname': 'example.com', + 'search': '?', + 'query': {}, + 'pathname': '/' + }, + 'http://example.com?foo=bar#frag' : { + 'href': 'http://example.com/?foo=bar#frag', + 'protocol': 'http:', + 'host': 'example.com', + 'hostname': 'example.com', + 'hash': '#frag', + 'search': '?foo=bar', + 'query': 'foo=bar', + 'pathname': '/' + }, + 'http://example.com?foo=@bar#frag' : { + 'href': 'http://example.com/?foo=@bar#frag', + 'protocol': 'http:', + 'host': 'example.com', + 'hostname': 'example.com', + 'hash': '#frag', + 'search': '?foo=@bar', + 'query': 'foo=@bar', + 'pathname': '/' + }, + 'http://example.com?foo=/bar/#frag' : { + 'href': 'http://example.com/?foo=/bar/#frag', + 'protocol': 'http:', + 'host': 'example.com', + 'hostname': 'example.com', + 'hash': '#frag', + 'search': '?foo=/bar/', + 'query': 'foo=/bar/', + 'pathname': '/' + }, + 'http://example.com?foo=?bar/#frag' : { + 'href': 'http://example.com/?foo=?bar/#frag', + 'protocol': 'http:', + 'host': 'example.com', + 'hostname': 'example.com', + 'hash': '#frag', + 'search': '?foo=?bar/', + 'query': 'foo=?bar/', + 'pathname': '/' + }, + 'http://example.com#frag=?bar/#frag' : { + 'href': 'http://example.com/#frag=?bar/#frag', + 'protocol': 'http:', + 'host': 'example.com', + 'hostname': 'example.com', + 'hash': '#frag=?bar/#frag', + 'pathname': '/' + }, + 'http://google.com" onload="alert(42)/' : { + 'href': 'http://google.com/%22%20onload=%22alert(42)/', + 'protocol': 'http:', + 'host': 'google.com', + 'pathname': '/%22%20onload=%22alert(42)/' + }, + 'http://a.com/a/b/c?s#h' : { + 'href': 'http://a.com/a/b/c?s#h', + 'protocol': 'http', + 'host': 'a.com', + 'pathname': 'a/b/c', + 'hash': 'h', + 'search': 's' + }, + 'xmpp:isaacschlueter@jabber.org' : { + 'href': 'xmpp:isaacschlueter@jabber.org', + 'protocol': 'xmpp:', + 'host': 'jabber.org', + 'auth': 'isaacschlueter', + 'hostname': 'jabber.org' + }, + 'http://atpass:foo%40bar@127.0.0.1/' : { + 'href': 'http://atpass:foo%40bar@127.0.0.1/', + 'auth': 'atpass:foo@bar', + 'hostname': '127.0.0.1', + 'protocol': 'http:', + 'pathname': '/' + }, + 'http://atslash%2F%40:%2F%40@foo/' : { + 'href': 'http://atslash%2F%40:%2F%40@foo/', + 'auth': 'atslash/@:/@', + 'hostname': 'foo', + 'protocol': 'http:', + 'pathname': '/' + }, + 'svn+ssh://foo/bar': { + 'href': 'svn+ssh://foo/bar', + 'hostname': 'foo', + 'protocol': 'svn+ssh:', + 'pathname': '/bar', + 'slashes': true + }, + 'dash-test://foo/bar': { + 'href': 'dash-test://foo/bar', + 'hostname': 'foo', + 'protocol': 'dash-test:', + 'pathname': '/bar', + 'slashes': true + }, + 'dash-test:foo/bar': { + 'href': 'dash-test:foo/bar', + 'hostname': 'foo', + 'protocol': 'dash-test:', + 'pathname': '/bar' + }, + 'dot.test://foo/bar': { + 'href': 'dot.test://foo/bar', + 'hostname': 'foo', + 'protocol': 'dot.test:', + 'pathname': '/bar', + 'slashes': true + }, + 'dot.test:foo/bar': { + 'href': 'dot.test:foo/bar', + 'hostname': 'foo', + 'protocol': 'dot.test:', + 'pathname': '/bar' + }, + // ipv6 support + 'coap:u:p@[::1]:61616/.well-known/r?n=Temperature': { + 'href': 'coap:u:p@[::1]:61616/.well-known/r?n=Temperature', + 'protocol': 'coap:', + 'auth': 'u:p', + 'hostname': '::1', + 'port': '61616', + 'pathname': '/.well-known/r', + 'search': 'n=Temperature' + }, + 'coap:[fedc:ba98:7654:3210:fedc:ba98:7654:3210]:61616/s/stopButton': { + 'href': 'coap:[fedc:ba98:7654:3210:fedc:ba98:7654:3210]:61616/s/stopButton', + 'protocol': 'coap', + 'host': '[fedc:ba98:7654:3210:fedc:ba98:7654:3210]:61616', + 'pathname': '/s/stopButton' + }, + + // encode context-specific delimiters in path and query, but do not touch + // other non-delimiter chars like `%`. + // + + // `#`,`?` in path + '/path/to/%%23%3F+=&.txt?foo=theA1#bar' : { + href : '/path/to/%%23%3F+=&.txt?foo=theA1#bar', + pathname: '/path/to/%#?+=&.txt', + query: { + foo: 'theA1' + }, + hash: "#bar" + }, + + // `#`,`?` in path + `#` in query + '/path/to/%%23%3F+=&.txt?foo=the%231#bar' : { + href : '/path/to/%%23%3F+=&.txt?foo=the%231#bar', + pathname: '/path/to/%#?+=&.txt', + query: { + foo: 'the#1' + }, + hash: "#bar" + }, + + // `?` and `#` in path and search + 'http://ex.com/foo%3F100%m%23r?abc=the%231?&foo=bar#frag': { + href: 'http://ex.com/foo%3F100%m%23r?abc=the%231?&foo=bar#frag', + protocol: 'http:', + hostname: 'ex.com', + hash: '#frag', + search: '?abc=the#1?&foo=bar', + pathname: '/foo?100%m#r', + }, + + // `?` and `#` in search only + 'http://ex.com/fooA100%mBr?abc=the%231?&foo=bar#frag': { + href: 'http://ex.com/fooA100%mBr?abc=the%231?&foo=bar#frag', + protocol: 'http:', + hostname: 'ex.com', + hash: '#frag', + search: '?abc=the#1?&foo=bar', + pathname: '/fooA100%mBr', + } +}; + +Object.keys(formatTests).forEach(function(u) { + test('format(' + u + ')', function() { + var expect = formatTests[u].href; + delete formatTests[u].href; + var actual = url.format(u); + var actualObj = url.format(formatTests[u]); + assert.equal(actual, expect, + 'wonky format(' + u + ') == ' + expect + + '\nactual:' + actual); + assert.equal(actualObj, expect, + 'wonky format(' + JSON.stringify(formatTests[u]) + + ') == ' + expect + + '\nactual: ' + actualObj); + }); +}); + +/* + [from, path, expected] +*/ +var relativeTests = [ + ['/foo/bar/baz', 'quux', '/foo/bar/quux'], + ['/foo/bar/baz', 'quux/asdf', '/foo/bar/quux/asdf'], + ['/foo/bar/baz', 'quux/baz', '/foo/bar/quux/baz'], + ['/foo/bar/baz', '../quux/baz', '/foo/quux/baz'], + ['/foo/bar/baz', '/bar', '/bar'], + ['/foo/bar/baz/', 'quux', '/foo/bar/baz/quux'], + ['/foo/bar/baz/', 'quux/baz', '/foo/bar/baz/quux/baz'], + ['/foo/bar/baz', '../../../../../../../../quux/baz', '/quux/baz'], + ['/foo/bar/baz', '../../../../../../../quux/baz', '/quux/baz'], + ['/foo', '.', '/'], + ['/foo', '..', '/'], + ['/foo/', '.', '/foo/'], + ['/foo/', '..', '/'], + ['/foo/bar', '.', '/foo/'], + ['/foo/bar', '..', '/'], + ['/foo/bar/', '.', '/foo/bar/'], + ['/foo/bar/', '..', '/foo/'], + ['foo/bar', '../../../baz', '../../baz'], + ['foo/bar/', '../../../baz', '../baz'], + ['http://example.com/b//c//d;p?q#blarg', 'https:#hash2', 'https:///#hash2'], + ['http://example.com/b//c//d;p?q#blarg', + 'https:/p/a/t/h?s#hash2', + 'https://p/a/t/h?s#hash2'], + ['http://example.com/b//c//d;p?q#blarg', + 'https://u:p@h.com/p/a/t/h?s#hash2', + 'https://u:p@h.com/p/a/t/h?s#hash2'], + ['http://example.com/b//c//d;p?q#blarg', + 'https:/a/b/c/d', + 'https://a/b/c/d'], + ['http://example.com/b//c//d;p?q#blarg', + 'http:#hash2', + 'http://example.com/b//c//d;p?q#hash2'], + ['http://example.com/b//c//d;p?q#blarg', + 'http:/p/a/t/h?s#hash2', + 'http://example.com/p/a/t/h?s#hash2'], + ['http://example.com/b//c//d;p?q#blarg', + 'http://u:p@h.com/p/a/t/h?s#hash2', + 'http://u:p@h.com/p/a/t/h?s#hash2'], + ['http://example.com/b//c//d;p?q#blarg', + 'http:/a/b/c/d', + 'http://example.com/a/b/c/d'], + ['/foo/bar/baz', '/../etc/passwd', '/etc/passwd'] +]; + +relativeTests.forEach(function(relativeTest) { + test('resolve(' + [relativeTest[0], relativeTest[1]] + ')', function() { + var a = url.resolve(relativeTest[0], relativeTest[1]), + e = relativeTest[2]; + assert.equal(a, e, + 'resolve(' + [relativeTest[0], relativeTest[1]] + ') == ' + e + + '\n actual=' + a); + }); +}); + + +// https://github.com/joyent/node/issues/568 +[ + undefined, + null, + true, + false, + 0.0, + 0, + [], + {} +].forEach(function(val) { + test('parse(' + val + ')', function() { + assert.throws(function() { url.parse(val); }, TypeError); + }); +}); + + +// +// Tests below taken from Chiron +// http://code.google.com/p/chironjs/source/browse/trunk/src/test/http/url.js +// +// Copyright (c) 2002-2008 Kris Kowal +// used with permission under MIT License +// +// Changes marked with @isaacs + +var bases = [ + 'http://a/b/c/d;p?q', + 'http://a/b/c/d;p?q=1/2', + 'http://a/b/c/d;p=1/2?q', + 'fred:///s//a/b/c', + 'http:///s//a/b/c' +]; + +//[to, from, result] +var relativeTests2 = [ + // http://lists.w3.org/Archives/Public/uri/2004Feb/0114.html + ['../c', 'foo:a/b', 'foo:c'], + ['foo:.', 'foo:a', 'foo:'], + ['/foo/../../../bar', 'zz:abc', 'zz:/bar'], + ['/foo/../bar', 'zz:abc', 'zz:/bar'], + // @isaacs Disagree. Not how web browsers resolve this. + ['foo/../../../bar', 'zz:abc', 'zz:bar'], + // ['foo/../../../bar', 'zz:abc', 'zz:../../bar'], // @isaacs Added + ['foo/../bar', 'zz:abc', 'zz:bar'], + ['zz:.', 'zz:abc', 'zz:'], + ['/.', bases[0], 'http://a/'], + ['/.foo', bases[0], 'http://a/.foo'], + ['.foo', bases[0], 'http://a/b/c/.foo'], + + // http://gbiv.com/protocols/uri/test/rel_examples1.html + // examples from RFC 2396 + ['g:h', bases[0], 'g:h'], + ['g', bases[0], 'http://a/b/c/g'], + ['./g', bases[0], 'http://a/b/c/g'], + ['g/', bases[0], 'http://a/b/c/g/'], + ['/g', bases[0], 'http://a/g'], + ['//g', bases[0], 'http://g/'], + // changed with RFC 2396bis + //('?y', bases[0], 'http://a/b/c/d;p?y'], + ['?y', bases[0], 'http://a/b/c/d;p?y'], + ['g?y', bases[0], 'http://a/b/c/g?y'], + // changed with RFC 2396bis + //('#s', bases[0], CURRENT_DOC_URI + '#s'], + ['#s', bases[0], 'http://a/b/c/d;p?q#s'], + ['g#s', bases[0], 'http://a/b/c/g#s'], + ['g?y#s', bases[0], 'http://a/b/c/g?y#s'], + [';x', bases[0], 'http://a/b/c/;x'], + ['g;x', bases[0], 'http://a/b/c/g;x'], + ['g;x?y#s' , bases[0], 'http://a/b/c/g;x?y#s'], + // changed with RFC 2396bis + //('', bases[0], CURRENT_DOC_URI], + ['', bases[0], 'http://a/b/c/d;p?q'], + ['.', bases[0], 'http://a/b/c/'], + ['./', bases[0], 'http://a/b/c/'], + ['..', bases[0], 'http://a/b/'], + ['../', bases[0], 'http://a/b/'], + ['../g', bases[0], 'http://a/b/g'], + ['../..', bases[0], 'http://a/'], + ['../../', bases[0], 'http://a/'], + ['../../g' , bases[0], 'http://a/g'], + ['../../../g', bases[0], ('http://a/../g', 'http://a/g')], + ['../../../../g', bases[0], ('http://a/../../g', 'http://a/g')], + // changed with RFC 2396bis + //('/./g', bases[0], 'http://a/./g'], + ['/./g', bases[0], 'http://a/g'], + // changed with RFC 2396bis + //('/../g', bases[0], 'http://a/../g'], + ['/../g', bases[0], 'http://a/g'], + ['g.', bases[0], 'http://a/b/c/g.'], + ['.g', bases[0], 'http://a/b/c/.g'], + ['g..', bases[0], 'http://a/b/c/g..'], + ['..g', bases[0], 'http://a/b/c/..g'], + ['./../g', bases[0], 'http://a/b/g'], + ['./g/.', bases[0], 'http://a/b/c/g/'], + ['g/./h', bases[0], 'http://a/b/c/g/h'], + ['g/../h', bases[0], 'http://a/b/c/h'], + ['g;x=1/./y', bases[0], 'http://a/b/c/g;x=1/y'], + ['g;x=1/../y', bases[0], 'http://a/b/c/y'], + ['g?y/./x', bases[0], 'http://a/b/c/g?y/./x'], + ['g?y/../x', bases[0], 'http://a/b/c/g?y/../x'], + ['g#s/./x', bases[0], 'http://a/b/c/g#s/./x'], + ['g#s/../x', bases[0], 'http://a/b/c/g#s/../x'], + ['http:g', bases[0], ('http:g', 'http://a/b/c/g')], + ['http:', bases[0], ('http:', bases[0])], + // not sure where this one originated + ['/a/b/c/./../../g', bases[0], 'http://a/a/g'], + + // http://gbiv.com/protocols/uri/test/rel_examples2.html + // slashes in base URI's query args + ['g', bases[1], 'http://a/b/c/g'], + ['./g', bases[1], 'http://a/b/c/g'], + ['g/', bases[1], 'http://a/b/c/g/'], + ['/g', bases[1], 'http://a/g'], + ['//g', bases[1], 'http://g/'], + // changed in RFC 2396bis + //('?y', bases[1], 'http://a/b/c/?y'], + ['?y', bases[1], 'http://a/b/c/d;p?y'], + ['g?y', bases[1], 'http://a/b/c/g?y'], + ['g?y/./x' , bases[1], 'http://a/b/c/g?y/./x'], + ['g?y/../x', bases[1], 'http://a/b/c/g?y/../x'], + ['g#s', bases[1], 'http://a/b/c/g#s'], + ['g#s/./x' , bases[1], 'http://a/b/c/g#s/./x'], + ['g#s/../x', bases[1], 'http://a/b/c/g#s/../x'], + ['./', bases[1], 'http://a/b/c/'], + ['../', bases[1], 'http://a/b/'], + ['../g', bases[1], 'http://a/b/g'], + ['../../', bases[1], 'http://a/'], + ['../../g' , bases[1], 'http://a/g'], + + // http://gbiv.com/protocols/uri/test/rel_examples3.html + // slashes in path params + // all of these changed in RFC 2396bis + ['g', bases[2], 'http://a/b/c/d;p=1/g'], + ['./g', bases[2], 'http://a/b/c/d;p=1/g'], + ['g/', bases[2], 'http://a/b/c/d;p=1/g/'], + ['g?y', bases[2], 'http://a/b/c/d;p=1/g?y'], + [';x', bases[2], 'http://a/b/c/d;p=1/;x'], + ['g;x', bases[2], 'http://a/b/c/d;p=1/g;x'], + ['g;x=1/./y', bases[2], 'http://a/b/c/d;p=1/g;x=1/y'], + ['g;x=1/../y', bases[2], 'http://a/b/c/d;p=1/y'], + ['./', bases[2], 'http://a/b/c/d;p=1/'], + ['../', bases[2], 'http://a/b/c/'], + ['../g', bases[2], 'http://a/b/c/g'], + ['../../', bases[2], 'http://a/b/'], + ['../../g' , bases[2], 'http://a/b/g'], + + // http://gbiv.com/protocols/uri/test/rel_examples4.html + // double and triple slash, unknown scheme + ['g:h', bases[3], 'g:h'], + ['g', bases[3], 'fred:///s//a/b/g'], + ['./g', bases[3], 'fred:///s//a/b/g'], + ['g/', bases[3], 'fred:///s//a/b/g/'], + ['/g', bases[3], 'fred:///g'], // may change to fred:///s//a/g + ['//g', bases[3], 'fred://g'], // may change to fred:///s//g + ['//g/x', bases[3], 'fred://g/x'], // may change to fred:///s//g/x + ['///g', bases[3], 'fred:///g'], + ['./', bases[3], 'fred:///s//a/b/'], + ['../', bases[3], 'fred:///s//a/'], + ['../g', bases[3], 'fred:///s//a/g'], + + ['../../', bases[3], 'fred:///s//'], + ['../../g' , bases[3], 'fred:///s//g'], + ['../../../g', bases[3], 'fred:///s/g'], + // may change to fred:///s//a/../../../g + ['../../../../g', bases[3], 'fred:///g'], + + // http://gbiv.com/protocols/uri/test/rel_examples5.html + // double and triple slash, well-known scheme + ['g:h', bases[4], 'g:h'], + ['g', bases[4], 'http:///s//a/b/g'], + ['./g', bases[4], 'http:///s//a/b/g'], + ['g/', bases[4], 'http:///s//a/b/g/'], + ['/g', bases[4], 'http:///g'], // may change to http:///s//a/g + ['//g', bases[4], 'http://g/'], // may change to http:///s//g + ['//g/x', bases[4], 'http://g/x'], // may change to http:///s//g/x + ['///g', bases[4], 'http:///g'], + ['./', bases[4], 'http:///s//a/b/'], + ['../', bases[4], 'http:///s//a/'], + ['../g', bases[4], 'http:///s//a/g'], + ['../../', bases[4], 'http:///s//'], + ['../../g' , bases[4], 'http:///s//g'], + // may change to http:///s//a/../../g + ['../../../g', bases[4], 'http:///s/g'], + // may change to http:///s//a/../../../g + ['../../../../g', bases[4], 'http:///g'], + + // from Dan Connelly's tests in http://www.w3.org/2000/10/swap/uripath.py + ['bar:abc', 'foo:xyz', 'bar:abc'], + ['../abc', 'http://example/x/y/z', 'http://example/x/abc'], + ['http://example/x/abc', 'http://example2/x/y/z', 'http://example/x/abc'], + ['../r', 'http://ex/x/y/z', 'http://ex/x/r'], + ['q/r', 'http://ex/x/y', 'http://ex/x/q/r'], + ['q/r#s', 'http://ex/x/y', 'http://ex/x/q/r#s'], + ['q/r#s/t', 'http://ex/x/y', 'http://ex/x/q/r#s/t'], + ['ftp://ex/x/q/r', 'http://ex/x/y', 'ftp://ex/x/q/r'], + ['', 'http://ex/x/y', 'http://ex/x/y'], + ['', 'http://ex/x/y/', 'http://ex/x/y/'], + ['', 'http://ex/x/y/pdq', 'http://ex/x/y/pdq'], + ['z/', 'http://ex/x/y/', 'http://ex/x/y/z/'], + ['#Animal', + 'file:/swap/test/animal.rdf', + 'file:/swap/test/animal.rdf#Animal'], + ['../abc', 'file:/e/x/y/z', 'file:/e/x/abc'], + ['/example/x/abc', 'file:/example2/x/y/z', 'file:/example/x/abc'], + ['../r', 'file:/ex/x/y/z', 'file:/ex/x/r'], + ['/r', 'file:/ex/x/y/z', 'file:/r'], + ['q/r', 'file:/ex/x/y', 'file:/ex/x/q/r'], + ['q/r#s', 'file:/ex/x/y', 'file:/ex/x/q/r#s'], + ['q/r#', 'file:/ex/x/y', 'file:/ex/x/q/r#'], + ['q/r#s/t', 'file:/ex/x/y', 'file:/ex/x/q/r#s/t'], + ['ftp://ex/x/q/r', 'file:/ex/x/y', 'ftp://ex/x/q/r'], + ['', 'file:/ex/x/y', 'file:/ex/x/y'], + ['', 'file:/ex/x/y/', 'file:/ex/x/y/'], + ['', 'file:/ex/x/y/pdq', 'file:/ex/x/y/pdq'], + ['z/', 'file:/ex/x/y/', 'file:/ex/x/y/z/'], + ['file://meetings.example.com/cal#m1', + 'file:/devel/WWW/2000/10/swap/test/reluri-1.n3', + 'file://meetings.example.com/cal#m1'], + ['file://meetings.example.com/cal#m1', + 'file:/home/connolly/w3ccvs/WWW/2000/10/swap/test/reluri-1.n3', + 'file://meetings.example.com/cal#m1'], + ['./#blort', 'file:/some/dir/foo', 'file:/some/dir/#blort'], + ['./#', 'file:/some/dir/foo', 'file:/some/dir/#'], + // Ryan Lee + ['./', 'http://example/x/abc.efg', 'http://example/x/'], + + + // Graham Klyne's tests + // http://www.ninebynine.org/Software/HaskellUtils/Network/UriTest.xls + // 01-31 are from Connelly's cases + + // 32-49 + ['./q:r', 'http://ex/x/y', 'http://ex/x/q:r'], + ['./p=q:r', 'http://ex/x/y', 'http://ex/x/p=q:r'], + ['?pp/rr', 'http://ex/x/y?pp/qq', 'http://ex/x/y?pp/rr'], + ['y/z', 'http://ex/x/y?pp/qq', 'http://ex/x/y/z'], + ['local/qual@domain.org#frag', + 'mailto:local', + 'mailto:local/qual@domain.org#frag'], + ['more/qual2@domain2.org#frag', + 'mailto:local/qual1@domain1.org', + 'mailto:local/more/qual2@domain2.org#frag'], + ['y?q', 'http://ex/x/y?q', 'http://ex/x/y?q'], + ['/x/y?q', 'http://ex?p', 'http://ex/x/y?q'], + ['c/d', 'foo:a/b', 'foo:a/c/d'], + ['/c/d', 'foo:a/b', 'foo:/c/d'], + ['', 'foo:a/b?c#d', 'foo:a/b?c'], + ['b/c', 'foo:a', 'foo:b/c'], + ['../b/c', 'foo:/a/y/z', 'foo:/a/b/c'], + ['./b/c', 'foo:a', 'foo:b/c'], + ['/./b/c', 'foo:a', 'foo:/b/c'], + ['../../d', 'foo://a//b/c', 'foo://a/d'], + ['.', 'foo:a', 'foo:'], + ['..', 'foo:a', 'foo:'], + + // 50-57[cf. TimBL comments -- + // http://lists.w3.org/Archives/Public/uri/2003Feb/0028.html, + // http://lists.w3.org/Archives/Public/uri/2003Jan/0008.html) + ['abc', 'http://example/x/y%2Fz', 'http://example/x/abc'], + ['../../x%2Fabc', 'http://example/a/x/y/z', 'http://example/a/x%2Fabc'], + ['../x%2Fabc', 'http://example/a/x/y%2Fz', 'http://example/a/x%2Fabc'], + ['abc', 'http://example/x%2Fy/z', 'http://example/x%2Fy/abc'], + ['q%3Ar', 'http://ex/x/y', 'http://ex/x/q%3Ar'], + ['/x%2Fabc', 'http://example/x/y%2Fz', 'http://example/x%2Fabc'], + ['/x%2Fabc', 'http://example/x/y/z', 'http://example/x%2Fabc'], + ['/x%2Fabc', 'http://example/x/y%2Fz', 'http://example/x%2Fabc'], + + // 70-77 + ['local2@domain2', 'mailto:local1@domain1?query1', 'mailto:local2@domain2'], + ['local2@domain2?query2', + 'mailto:local1@domain1', + 'mailto:local2@domain2?query2'], + ['local2@domain2?query2', + 'mailto:local1@domain1?query1', + 'mailto:local2@domain2?query2'], + ['?query2', 'mailto:local@domain?query1', 'mailto:local@domain?query2'], + ['local@domain?query2', 'mailto:?query1', 'mailto:local@domain?query2'], + ['?query2', 'mailto:local@domain?query1', 'mailto:local@domain?query2'], + ['http://example/a/b?c/../d', 'foo:bar', 'http://example/a/b?c/../d'], + ['http://example/a/b#c/../d', 'foo:bar', 'http://example/a/b#c/../d'], + + // 82-88 + // @isaacs Disagree. Not how browsers do it. + // ['http:this', 'http://example.org/base/uri', 'http:this'], + // @isaacs Added + ['http:this', 'http://example.org/base/uri', 'http://example.org/base/this'], + ['http:this', 'http:base', 'http:this'], + ['.//g', 'f:/a', 'f://g'], + ['b/c//d/e', 'f://example.org/base/a', 'f://example.org/base/b/c//d/e'], + ['m2@example.ord/c2@example.org', + 'mid:m@example.ord/c@example.org', + 'mid:m@example.ord/m2@example.ord/c2@example.org'], + ['mini1.xml', + 'file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/', + 'file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/mini1.xml'], + ['../b/c', 'foo:a/y/z', 'foo:a/b/c'], + + //changeing auth + ['http://diff:auth@www.example.com', + 'http://asdf:qwer@www.example.com', + 'http://diff:auth@www.example.com/'] +]; + +relativeTests2.forEach(function(relativeTest) { + test('resolve(' + [relativeTest[1], relativeTest[0]] + ')', function() { + var a = url.resolve(relativeTest[1], relativeTest[0]), + e = relativeTest[2]; + assert.equal(a, e, + 'resolve(' + [relativeTest[1], relativeTest[0]] + ') == ' + e + + '\n actual=' + a); + }); +}); + +//if format and parse are inverse operations then +//resolveObject(parse(x), y) == parse(resolve(x, y)) + +//host and hostname are special, in this case a '' value is important +var emptyIsImportant = {'host': true, 'hostname': ''}; + +//format: [from, path, expected] +relativeTests.forEach(function(relativeTest) { +test('resolveObject(' + [relativeTest[0], relativeTest[1]] + ')', function() { + var actual = url.resolveObject(url.parse(relativeTest[0]), relativeTest[1]), + expected = url.parse(relativeTest[2]); + + + assert.deepEqual(actual, expected); + + expected = relativeTest[2]; + actual = url.format(actual); + + assert.equal(actual, expected, + 'format(' + actual + ') == ' + expected + '\nactual:' + actual); + }); +}); + +//format: [to, from, result] +// the test: ['.//g', 'f:/a', 'f://g'] is a fundamental problem +// url.parse('f:/a') does not have a host +// url.resolve('f:/a', './/g') does not have a host because you have moved +// down to the g directory. i.e. f: //g, however when this url is parsed +// f:// will indicate that the host is g which is not the case. +// it is unclear to me how to keep this information from being lost +// it may be that a pathname of ////g should collapse to /g but this seems +// to be a lot of work for an edge case. Right now I remove the test +if (relativeTests2[181][0] === './/g' && + relativeTests2[181][1] === 'f:/a' && + relativeTests2[181][2] === 'f://g') { + relativeTests2.splice(181, 1); +} + +relativeTests2.forEach(function(relativeTest) { + test('resolveObject(' + [relativeTest[1], relativeTest[0]] + ')', function() { + var actual = url.resolveObject(url.parse(relativeTest[1]), relativeTest[0]), + expected = url.parse(relativeTest[2]); + + assert.deepEqual(actual, expected); + + var expected = relativeTest[2], + actual = url.format(actual); + + assert.equal(actual, expected, + 'format(' + relativeTest[1] + ') == ' + expected + + '\nactual:' + actual); + }); +}); diff --git a/node_modules/url/url.js b/node_modules/url/url.js new file mode 100644 index 000000000..23ac6f5db --- /dev/null +++ b/node_modules/url/url.js @@ -0,0 +1,732 @@ +// 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. + +'use strict'; + +var punycode = require('punycode'); +var util = require('./util'); + +exports.parse = urlParse; +exports.resolve = urlResolve; +exports.resolveObject = urlResolveObject; +exports.format = urlFormat; + +exports.Url = Url; + +function Url() { + this.protocol = null; + this.slashes = null; + this.auth = null; + this.host = null; + this.port = null; + this.hostname = null; + this.hash = null; + this.search = null; + this.query = null; + this.pathname = null; + this.path = null; + this.href = null; +} + +// Reference: RFC 3986, RFC 1808, RFC 2396 + +// define these here so at least they only have to be +// compiled once on the first module load. +var protocolPattern = /^([a-z0-9.+-]+:)/i, + portPattern = /:[0-9]*$/, + + // Special case for a simple path URL + simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, + + // RFC 2396: characters reserved for delimiting URLs. + // We actually just auto-escape these. + delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], + + // RFC 2396: characters not allowed for various reasons. + unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), + + // Allowed by RFCs, but cause of XSS attacks. Always escape these. + autoEscape = ['\''].concat(unwise), + // Characters that are never ever allowed in a hostname. + // Note that any invalid chars are also handled, but these + // are the ones that are *expected* to be seen, so we fast-path + // them. + nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), + hostEndingChars = ['/', '?', '#'], + hostnameMaxLen = 255, + hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, + hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, + // protocols that can allow "unsafe" and "unwise" chars. + unsafeProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that never have a hostname. + hostlessProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that always contain a // bit. + slashedProtocol = { + 'http': true, + 'https': true, + 'ftp': true, + 'gopher': true, + 'file': true, + 'http:': true, + 'https:': true, + 'ftp:': true, + 'gopher:': true, + 'file:': true + }, + querystring = require('querystring'); + +function urlParse(url, parseQueryString, slashesDenoteHost) { + if (url && util.isObject(url) && url instanceof Url) return url; + + var u = new Url; + u.parse(url, parseQueryString, slashesDenoteHost); + return u; +} + +Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { + if (!util.isString(url)) { + throw new TypeError("Parameter 'url' must be a string, not " + typeof url); + } + + // Copy chrome, IE, opera backslash-handling behavior. + // Back slashes before the query string get converted to forward slashes + // See: https://code.google.com/p/chromium/issues/detail?id=25916 + var queryIndex = url.indexOf('?'), + splitter = + (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#', + uSplit = url.split(splitter), + slashRegex = /\\/g; + uSplit[0] = uSplit[0].replace(slashRegex, '/'); + url = uSplit.join(splitter); + + var rest = url; + + // trim before proceeding. + // This is to support parse stuff like " http://foo.com \n" + rest = rest.trim(); + + if (!slashesDenoteHost && url.split('#').length === 1) { + // Try fast path regexp + var simplePath = simplePathPattern.exec(rest); + if (simplePath) { + this.path = rest; + this.href = rest; + this.pathname = simplePath[1]; + if (simplePath[2]) { + this.search = simplePath[2]; + if (parseQueryString) { + this.query = querystring.parse(this.search.substr(1)); + } else { + this.query = this.search.substr(1); + } + } else if (parseQueryString) { + this.search = ''; + this.query = {}; + } + return this; + } + } + + var proto = protocolPattern.exec(rest); + if (proto) { + proto = proto[0]; + var lowerProto = proto.toLowerCase(); + this.protocol = lowerProto; + rest = rest.substr(proto.length); + } + + // figure out if it's got a host + // user@server is *always* interpreted as a hostname, and url + // resolution will treat //foo/bar as host=foo,path=bar because that's + // how the browser resolves relative URLs. + if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { + var slashes = rest.substr(0, 2) === '//'; + if (slashes && !(proto && hostlessProtocol[proto])) { + rest = rest.substr(2); + this.slashes = true; + } + } + + if (!hostlessProtocol[proto] && + (slashes || (proto && !slashedProtocol[proto]))) { + + // there's a hostname. + // the first instance of /, ?, ;, or # ends the host. + // + // If there is an @ in the hostname, then non-host chars *are* allowed + // to the left of the last @ sign, unless some host-ending character + // comes *before* the @-sign. + // URLs are obnoxious. + // + // ex: + // http://a@b@c/ => user:a@b host:c + // http://a@b?@c => user:a host:c path:/?@c + + // v0.12 TODO(isaacs): This is not quite how Chrome does things. + // Review our test case against browsers more comprehensively. + + // find the first instance of any hostEndingChars + var hostEnd = -1; + for (var i = 0; i < hostEndingChars.length; i++) { + var hec = rest.indexOf(hostEndingChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + + // at this point, either we have an explicit point where the + // auth portion cannot go past, or the last @ char is the decider. + var auth, atSign; + if (hostEnd === -1) { + // atSign can be anywhere. + atSign = rest.lastIndexOf('@'); + } else { + // atSign must be in auth portion. + // http://a@b/c@d => host:b auth:a path:/c@d + atSign = rest.lastIndexOf('@', hostEnd); + } + + // Now we have a portion which is definitely the auth. + // Pull that off. + if (atSign !== -1) { + auth = rest.slice(0, atSign); + rest = rest.slice(atSign + 1); + this.auth = decodeURIComponent(auth); + } + + // the host is the remaining to the left of the first non-host char + hostEnd = -1; + for (var i = 0; i < nonHostChars.length; i++) { + var hec = rest.indexOf(nonHostChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + // if we still have not hit it, then the entire thing is a host. + if (hostEnd === -1) + hostEnd = rest.length; + + this.host = rest.slice(0, hostEnd); + rest = rest.slice(hostEnd); + + // pull out port. + this.parseHost(); + + // we've indicated that there is a hostname, + // so even if it's empty, it has to be present. + this.hostname = this.hostname || ''; + + // if hostname begins with [ and ends with ] + // assume that it's an IPv6 address. + var ipv6Hostname = this.hostname[0] === '[' && + this.hostname[this.hostname.length - 1] === ']'; + + // validate a little. + if (!ipv6Hostname) { + var hostparts = this.hostname.split(/\./); + for (var i = 0, l = hostparts.length; i < l; i++) { + var part = hostparts[i]; + if (!part) continue; + if (!part.match(hostnamePartPattern)) { + var newpart = ''; + for (var j = 0, k = part.length; j < k; j++) { + if (part.charCodeAt(j) > 127) { + // we replace non-ASCII char with a temporary placeholder + // we need this to make sure size of hostname is not + // broken by replacing non-ASCII by nothing + newpart += 'x'; + } else { + newpart += part[j]; + } + } + // we test again with ASCII char only + if (!newpart.match(hostnamePartPattern)) { + var validParts = hostparts.slice(0, i); + var notHost = hostparts.slice(i + 1); + var bit = part.match(hostnamePartStart); + if (bit) { + validParts.push(bit[1]); + notHost.unshift(bit[2]); + } + if (notHost.length) { + rest = '/' + notHost.join('.') + rest; + } + this.hostname = validParts.join('.'); + break; + } + } + } + } + + if (this.hostname.length > hostnameMaxLen) { + this.hostname = ''; + } else { + // hostnames are always lower case. + this.hostname = this.hostname.toLowerCase(); + } + + if (!ipv6Hostname) { + // IDNA Support: Returns a punycoded representation of "domain". + // It only converts parts of the domain name that + // have non-ASCII characters, i.e. it doesn't matter if + // you call it with a domain that already is ASCII-only. + this.hostname = punycode.toASCII(this.hostname); + } + + var p = this.port ? ':' + this.port : ''; + var h = this.hostname || ''; + this.host = h + p; + this.href += this.host; + + // strip [ and ] from the hostname + // the host field still retains them, though + if (ipv6Hostname) { + this.hostname = this.hostname.substr(1, this.hostname.length - 2); + if (rest[0] !== '/') { + rest = '/' + rest; + } + } + } + + // now rest is set to the post-host stuff. + // chop off any delim chars. + if (!unsafeProtocol[lowerProto]) { + + // First, make 100% sure that any "autoEscape" chars get + // escaped, even if encodeURIComponent doesn't think they + // need to be. + for (var i = 0, l = autoEscape.length; i < l; i++) { + var ae = autoEscape[i]; + if (rest.indexOf(ae) === -1) + continue; + var esc = encodeURIComponent(ae); + if (esc === ae) { + esc = escape(ae); + } + rest = rest.split(ae).join(esc); + } + } + + + // chop off from the tail first. + var hash = rest.indexOf('#'); + if (hash !== -1) { + // got a fragment string. + this.hash = rest.substr(hash); + rest = rest.slice(0, hash); + } + var qm = rest.indexOf('?'); + if (qm !== -1) { + this.search = rest.substr(qm); + this.query = rest.substr(qm + 1); + if (parseQueryString) { + this.query = querystring.parse(this.query); + } + rest = rest.slice(0, qm); + } else if (parseQueryString) { + // no query string, but parseQueryString still requested + this.search = ''; + this.query = {}; + } + if (rest) this.pathname = rest; + if (slashedProtocol[lowerProto] && + this.hostname && !this.pathname) { + this.pathname = '/'; + } + + //to support http.request + if (this.pathname || this.search) { + var p = this.pathname || ''; + var s = this.search || ''; + this.path = p + s; + } + + // finally, reconstruct the href based on what has been validated. + this.href = this.format(); + return this; +}; + +// format a parsed object into a url string +function urlFormat(obj) { + // ensure it's an object, and not a string url. + // If it's an obj, this is a no-op. + // this way, you can call url_format() on strings + // to clean up potentially wonky urls. + if (util.isString(obj)) obj = urlParse(obj); + if (!(obj instanceof Url)) return Url.prototype.format.call(obj); + return obj.format(); +} + +Url.prototype.format = function() { + var auth = this.auth || ''; + if (auth) { + auth = encodeURIComponent(auth); + auth = auth.replace(/%3A/i, ':'); + auth += '@'; + } + + var protocol = this.protocol || '', + pathname = this.pathname || '', + hash = this.hash || '', + host = false, + query = ''; + + if (this.host) { + host = auth + this.host; + } else if (this.hostname) { + host = auth + (this.hostname.indexOf(':') === -1 ? + this.hostname : + '[' + this.hostname + ']'); + if (this.port) { + host += ':' + this.port; + } + } + + if (this.query && + util.isObject(this.query) && + Object.keys(this.query).length) { + query = querystring.stringify(this.query); + } + + var search = this.search || (query && ('?' + query)) || ''; + + if (protocol && protocol.substr(-1) !== ':') protocol += ':'; + + // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. + // unless they had them to begin with. + if (this.slashes || + (!protocol || slashedProtocol[protocol]) && host !== false) { + host = '//' + (host || ''); + if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; + } else if (!host) { + host = ''; + } + + if (hash && hash.charAt(0) !== '#') hash = '#' + hash; + if (search && search.charAt(0) !== '?') search = '?' + search; + + pathname = pathname.replace(/[?#]/g, function(match) { + return encodeURIComponent(match); + }); + search = search.replace('#', '%23'); + + return protocol + host + pathname + search + hash; +}; + +function urlResolve(source, relative) { + return urlParse(source, false, true).resolve(relative); +} + +Url.prototype.resolve = function(relative) { + return this.resolveObject(urlParse(relative, false, true)).format(); +}; + +function urlResolveObject(source, relative) { + if (!source) return relative; + return urlParse(source, false, true).resolveObject(relative); +} + +Url.prototype.resolveObject = function(relative) { + if (util.isString(relative)) { + var rel = new Url(); + rel.parse(relative, false, true); + relative = rel; + } + + var result = new Url(); + var tkeys = Object.keys(this); + for (var tk = 0; tk < tkeys.length; tk++) { + var tkey = tkeys[tk]; + result[tkey] = this[tkey]; + } + + // hash is always overridden, no matter what. + // even href="" will remove it. + result.hash = relative.hash; + + // if the relative url is empty, then there's nothing left to do here. + if (relative.href === '') { + result.href = result.format(); + return result; + } + + // hrefs like //foo/bar always cut to the protocol. + if (relative.slashes && !relative.protocol) { + // take everything except the protocol from relative + var rkeys = Object.keys(relative); + for (var rk = 0; rk < rkeys.length; rk++) { + var rkey = rkeys[rk]; + if (rkey !== 'protocol') + result[rkey] = relative[rkey]; + } + + //urlParse appends trailing / to urls like http://www.example.com + if (slashedProtocol[result.protocol] && + result.hostname && !result.pathname) { + result.path = result.pathname = '/'; + } + + result.href = result.format(); + return result; + } + + if (relative.protocol && relative.protocol !== result.protocol) { + // if it's a known url protocol, then changing + // the protocol does weird things + // first, if it's not file:, then we MUST have a host, + // and if there was a path + // to begin with, then we MUST have a path. + // if it is file:, then the host is dropped, + // because that's known to be hostless. + // anything else is assumed to be absolute. + if (!slashedProtocol[relative.protocol]) { + var keys = Object.keys(relative); + for (var v = 0; v < keys.length; v++) { + var k = keys[v]; + result[k] = relative[k]; + } + result.href = result.format(); + return result; + } + + result.protocol = relative.protocol; + if (!relative.host && !hostlessProtocol[relative.protocol]) { + var relPath = (relative.pathname || '').split('/'); + while (relPath.length && !(relative.host = relPath.shift())); + if (!relative.host) relative.host = ''; + if (!relative.hostname) relative.hostname = ''; + if (relPath[0] !== '') relPath.unshift(''); + if (relPath.length < 2) relPath.unshift(''); + result.pathname = relPath.join('/'); + } else { + result.pathname = relative.pathname; + } + result.search = relative.search; + result.query = relative.query; + result.host = relative.host || ''; + result.auth = relative.auth; + result.hostname = relative.hostname || relative.host; + result.port = relative.port; + // to support http.request + if (result.pathname || result.search) { + var p = result.pathname || ''; + var s = result.search || ''; + result.path = p + s; + } + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; + } + + var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), + isRelAbs = ( + relative.host || + relative.pathname && relative.pathname.charAt(0) === '/' + ), + mustEndAbs = (isRelAbs || isSourceAbs || + (result.host && relative.pathname)), + removeAllDots = mustEndAbs, + srcPath = result.pathname && result.pathname.split('/') || [], + relPath = relative.pathname && relative.pathname.split('/') || [], + psychotic = result.protocol && !slashedProtocol[result.protocol]; + + // if the url is a non-slashed url, then relative + // links like ../.. should be able + // to crawl up to the hostname, as well. This is strange. + // result.protocol has already been set by now. + // Later on, put the first path part into the host field. + if (psychotic) { + result.hostname = ''; + result.port = null; + if (result.host) { + if (srcPath[0] === '') srcPath[0] = result.host; + else srcPath.unshift(result.host); + } + result.host = ''; + if (relative.protocol) { + relative.hostname = null; + relative.port = null; + if (relative.host) { + if (relPath[0] === '') relPath[0] = relative.host; + else relPath.unshift(relative.host); + } + relative.host = null; + } + mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); + } + + if (isRelAbs) { + // it's absolute. + result.host = (relative.host || relative.host === '') ? + relative.host : result.host; + result.hostname = (relative.hostname || relative.hostname === '') ? + relative.hostname : result.hostname; + result.search = relative.search; + result.query = relative.query; + srcPath = relPath; + // fall through to the dot-handling below. + } else if (relPath.length) { + // it's relative + // throw away the existing file, and take the new path instead. + if (!srcPath) srcPath = []; + srcPath.pop(); + srcPath = srcPath.concat(relPath); + result.search = relative.search; + result.query = relative.query; + } else if (!util.isNullOrUndefined(relative.search)) { + // just pull out the search. + // like href='?foo'. + // Put this after the other two cases because it simplifies the booleans + if (psychotic) { + result.hostname = result.host = srcPath.shift(); + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + result.search = relative.search; + result.query = relative.query; + //to support http.request + if (!util.isNull(result.pathname) || !util.isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.href = result.format(); + return result; + } + + if (!srcPath.length) { + // no path at all. easy. + // we've already handled the other stuff above. + result.pathname = null; + //to support http.request + if (result.search) { + result.path = '/' + result.search; + } else { + result.path = null; + } + result.href = result.format(); + return result; + } + + // if a url ENDs in . or .., then it must get a trailing slash. + // however, if it ends in anything else non-slashy, + // then it must NOT get a trailing slash. + var last = srcPath.slice(-1)[0]; + var hasTrailingSlash = ( + (result.host || relative.host || srcPath.length > 1) && + (last === '.' || last === '..') || last === ''); + + // strip single dots, resolve double dots to parent dir + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = srcPath.length; i >= 0; i--) { + last = srcPath[i]; + if (last === '.') { + srcPath.splice(i, 1); + } else if (last === '..') { + srcPath.splice(i, 1); + up++; + } else if (up) { + srcPath.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (!mustEndAbs && !removeAllDots) { + for (; up--; up) { + srcPath.unshift('..'); + } + } + + if (mustEndAbs && srcPath[0] !== '' && + (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { + srcPath.unshift(''); + } + + if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { + srcPath.push(''); + } + + var isAbsolute = srcPath[0] === '' || + (srcPath[0] && srcPath[0].charAt(0) === '/'); + + // put the host back + if (psychotic) { + result.hostname = result.host = isAbsolute ? '' : + srcPath.length ? srcPath.shift() : ''; + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + + mustEndAbs = mustEndAbs || (result.host && srcPath.length); + + if (mustEndAbs && !isAbsolute) { + srcPath.unshift(''); + } + + if (!srcPath.length) { + result.pathname = null; + result.path = null; + } else { + result.pathname = srcPath.join('/'); + } + + //to support request.http + if (!util.isNull(result.pathname) || !util.isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.auth = relative.auth || result.auth; + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; +}; + +Url.prototype.parseHost = function() { + var host = this.host; + var port = portPattern.exec(host); + if (port) { + port = port[0]; + if (port !== ':') { + this.port = port.substr(1); + } + host = host.substr(0, host.length - port.length); + } + if (host) this.hostname = host; +}; diff --git a/node_modules/url/util.js b/node_modules/url/util.js new file mode 100644 index 000000000..97dcf31cd --- /dev/null +++ b/node_modules/url/util.js @@ -0,0 +1,16 @@ +'use strict'; + +module.exports = { + isString: function(arg) { + return typeof(arg) === 'string'; + }, + isObject: function(arg) { + return typeof(arg) === 'object' && arg !== null; + }, + isNull: function(arg) { + return arg === null; + }, + isNullOrUndefined: function(arg) { + return arg == null; + } +}; diff --git a/node_modules/user-home/cli.js b/node_modules/user-home/cli.js new file mode 100755 index 000000000..bacbd2275 --- /dev/null +++ b/node_modules/user-home/cli.js @@ -0,0 +1,26 @@ +#!/usr/bin/env node +'use strict'; +var pkg = require('./package.json'); +var userHome = require('./'); + +function help() { + console.log([ + pkg.description, + '', + 'Example', + ' $ user-home', + ' /Users/sindresorhus' + ].join('\n')); +} + +if (process.argv.indexOf('--help') !== -1) { + help(); + return; +} + +if (process.argv.indexOf('--version') !== -1) { + console.log(pkg.version); + return; +} + +process.stdout.write(userHome); diff --git a/node_modules/user-home/index.js b/node_modules/user-home/index.js new file mode 100644 index 000000000..d53b7939a --- /dev/null +++ b/node_modules/user-home/index.js @@ -0,0 +1,15 @@ +'use strict'; +var env = process.env; +var home = env.HOME; +var user = env.LOGNAME || env.USER || env.LNAME || env.USERNAME; + +if (process.platform === 'win32') { + module.exports = env.USERPROFILE || env.HOMEDRIVE + env.HOMEPATH || home || null; +} else if (process.platform === 'darwin') { + module.exports = home || (user ? '/Users/' + user : null) || null; +} else if (process.platform === 'linux') { + module.exports = home || + (user ? (process.getuid() === 0 ? '/root' : '/home/' + user) : null) || null; +} else { + module.exports = home || null; +} diff --git a/node_modules/user-home/license b/node_modules/user-home/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/user-home/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/user-home/package.json b/node_modules/user-home/package.json new file mode 100644 index 000000000..844d7ccd8 --- /dev/null +++ b/node_modules/user-home/package.json @@ -0,0 +1,71 @@ +{ + "_from": "user-home@^1.1.1", + "_id": "user-home@1.1.1", + "_inBundle": false, + "_integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "_location": "/user-home", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "user-home@^1.1.1", + "name": "user-home", + "escapedName": "user-home", + "rawSpec": "^1.1.1", + "saveSpec": null, + "fetchSpec": "^1.1.1" + }, + "_requiredBy": [ + "/v8flags" + ], + "_resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "_shasum": "2b5be23a32b63a7c9deb8d0f28d485724a3df190", + "_spec": "user-home@^1.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/v8flags", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "http://sindresorhus.com" + }, + "bin": { + "user-home": "cli.js" + }, + "bugs": { + "url": "https://github.com/sindresorhus/user-home/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Get the path to the user home directory", + "devDependencies": { + "ava": "0.0.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js", + "cli.js" + ], + "homepage": "https://github.com/sindresorhus/user-home#readme", + "keywords": [ + "cli", + "bin", + "user", + "home", + "homedir", + "dir", + "directory", + "folder", + "path" + ], + "license": "MIT", + "name": "user-home", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/user-home.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.1.1" +} diff --git a/node_modules/user-home/readme.md b/node_modules/user-home/readme.md new file mode 100644 index 000000000..5307a07ef --- /dev/null +++ b/node_modules/user-home/readme.md @@ -0,0 +1,42 @@ +# user-home [![Build Status](https://travis-ci.org/sindresorhus/user-home.svg?branch=master)](https://travis-ci.org/sindresorhus/user-home) + +> Get the path to the user home directory + + +## Install + +```sh +$ npm install --save user-home +``` + + +## Usage + +```js +var userHome = require('user-home'); + +console.log(userHome); +//=> /Users/sindresorhus +``` + +Returns `null` in the unlikely scenario that the home directory can't be found. + + +## CLI + +```sh +$ npm install --global user-home +``` + +```sh +$ user-home --help + +Example + $ user-home + /Users/sindresorhus +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/util-deprecate/History.md b/node_modules/util-deprecate/History.md new file mode 100644 index 000000000..acc867537 --- /dev/null +++ b/node_modules/util-deprecate/History.md @@ -0,0 +1,16 @@ + +1.0.2 / 2015-10-07 +================== + + * use try/catch when checking `localStorage` (#3, @kumavis) + +1.0.1 / 2014-11-25 +================== + + * browser: use `console.warn()` for deprecation calls + * browser: more jsdocs + +1.0.0 / 2014-04-30 +================== + + * initial commit diff --git a/node_modules/util-deprecate/LICENSE b/node_modules/util-deprecate/LICENSE new file mode 100644 index 000000000..6a60e8c22 --- /dev/null +++ b/node_modules/util-deprecate/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/util-deprecate/README.md b/node_modules/util-deprecate/README.md new file mode 100644 index 000000000..75622fa7c --- /dev/null +++ b/node_modules/util-deprecate/README.md @@ -0,0 +1,53 @@ +util-deprecate +============== +### The Node.js `util.deprecate()` function with browser support + +In Node.js, this module simply re-exports the `util.deprecate()` function. + +In the web browser (i.e. via browserify), a browser-specific implementation +of the `util.deprecate()` function is used. + + +## API + +A `deprecate()` function is the only thing exposed by this module. + +``` javascript +// setup: +exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead'); + + +// users see: +foo(); +// foo() is deprecated, use bar() instead +foo(); +foo(); +``` + + +## License + +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/util-deprecate/browser.js b/node_modules/util-deprecate/browser.js new file mode 100644 index 000000000..549ae2f06 --- /dev/null +++ b/node_modules/util-deprecate/browser.js @@ -0,0 +1,67 @@ + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} diff --git a/node_modules/util-deprecate/node.js b/node_modules/util-deprecate/node.js new file mode 100644 index 000000000..5e6fcff5d --- /dev/null +++ b/node_modules/util-deprecate/node.js @@ -0,0 +1,6 @@ + +/** + * For Node.js, simply re-export the core `util.deprecate` function. + */ + +module.exports = require('util').deprecate; diff --git a/node_modules/util-deprecate/package.json b/node_modules/util-deprecate/package.json new file mode 100644 index 000000000..6564a8c73 --- /dev/null +++ b/node_modules/util-deprecate/package.json @@ -0,0 +1,56 @@ +{ + "_from": "util-deprecate@~1.0.1", + "_id": "util-deprecate@1.0.2", + "_inBundle": false, + "_integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "_location": "/util-deprecate", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "util-deprecate@~1.0.1", + "name": "util-deprecate", + "escapedName": "util-deprecate", + "rawSpec": "~1.0.1", + "saveSpec": null, + "fetchSpec": "~1.0.1" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "_spec": "util-deprecate@~1.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/readable-stream", + "author": { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io/" + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/TooTallNate/util-deprecate/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "The Node.js `util.deprecate()` function with browser support", + "homepage": "https://github.com/TooTallNate/util-deprecate", + "keywords": [ + "util", + "deprecate", + "browserify", + "browser", + "node" + ], + "license": "MIT", + "main": "node.js", + "name": "util-deprecate", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/util-deprecate.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "version": "1.0.2" +} diff --git a/node_modules/util/.npmignore b/node_modules/util/.npmignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/node_modules/util/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/util/.travis.yml b/node_modules/util/.travis.yml new file mode 100644 index 000000000..ded625ce9 --- /dev/null +++ b/node_modules/util/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: +- '0.8' +- '0.10' +env: + global: + - secure: AdUubswCR68/eGD+WWjwTHgFbelwQGnNo81j1IOaUxKw+zgFPzSnFEEtDw7z98pWgg7p9DpCnyzzSnSllP40wq6AG19OwyUJjSLoZK57fp+r8zwTQwWiSqUgMu2YSMmKJPIO/aoSGpRQXT+L1nRrHoUJXgFodyIZgz40qzJeZjc= + - secure: heQuxPVsQ7jBbssoVKimXDpqGjQFiucm6W5spoujmspjDG7oEcHD9ANo9++LoRPrsAmNx56SpMK5fNfVmYediw6SvhXm4Mxt56/fYCrLDBtgGG+1neCeffAi8z1rO8x48m77hcQ6YhbUL5R9uBimUjMX92fZcygAt8Rg804zjFo= diff --git a/node_modules/util/.zuul.yml b/node_modules/util/.zuul.yml new file mode 100644 index 000000000..210501052 --- /dev/null +++ b/node_modules/util/.zuul.yml @@ -0,0 +1,10 @@ +ui: mocha-qunit +browsers: + - name: chrome + version: 27..latest + - name: firefox + version: latest + - name: safari + version: latest + - name: ie + version: 9..latest diff --git a/node_modules/util/LICENSE b/node_modules/util/LICENSE new file mode 100644 index 000000000..e3d4e695a --- /dev/null +++ b/node_modules/util/LICENSE @@ -0,0 +1,18 @@ +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/node_modules/util/README.md b/node_modules/util/README.md new file mode 100644 index 000000000..1c473d2cf --- /dev/null +++ b/node_modules/util/README.md @@ -0,0 +1,15 @@ +# util + +[![Build Status](https://travis-ci.org/defunctzombie/node-util.png?branch=master)](https://travis-ci.org/defunctzombie/node-util) + +node.js [util](http://nodejs.org/api/util.html) module as a module + +## install via [npm](npmjs.org) + +```shell +npm install util +``` + +## browser support + +This module also works in modern browsers. If you need legacy browser support you will need to polyfill ES5 features. diff --git a/node_modules/util/node_modules/inherits/LICENSE b/node_modules/util/node_modules/inherits/LICENSE new file mode 100644 index 000000000..dea3013d6 --- /dev/null +++ b/node_modules/util/node_modules/inherits/LICENSE @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + diff --git a/node_modules/util/node_modules/inherits/README.md b/node_modules/util/node_modules/inherits/README.md new file mode 100644 index 000000000..b1c566585 --- /dev/null +++ b/node_modules/util/node_modules/inherits/README.md @@ -0,0 +1,42 @@ +Browser-friendly inheritance fully compatible with standard node.js +[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). + +This package exports standard `inherits` from node.js `util` module in +node environment, but also provides alternative browser-friendly +implementation through [browser +field](https://gist.github.com/shtylman/4339901). Alternative +implementation is a literal copy of standard one located in standalone +module to avoid requiring of `util`. It also has a shim for old +browsers with no `Object.create` support. + +While keeping you sure you are using standard `inherits` +implementation in node.js environment, it allows bundlers such as +[browserify](https://github.com/substack/node-browserify) to not +include full `util` package to your client code if all you need is +just `inherits` function. It worth, because browser shim for `util` +package is large and `inherits` is often the single function you need +from it. + +It's recommended to use this package instead of +`require('util').inherits` for any code that has chances to be used +not only in node.js but in browser too. + +## usage + +```js +var inherits = require('inherits'); +// then use exactly as the standard one +``` + +## note on version ~1.0 + +Version ~1.0 had completely different motivation and is not compatible +neither with 2.0 nor with standard node.js `inherits`. + +If you are using version ~1.0 and planning to switch to ~2.0, be +careful: + +* new version uses `super_` instead of `super` for referencing + superclass +* new version overwrites current prototype while old one preserves any + existing fields on it diff --git a/node_modules/util/node_modules/inherits/inherits.js b/node_modules/util/node_modules/inherits/inherits.js new file mode 100644 index 000000000..29f5e24f5 --- /dev/null +++ b/node_modules/util/node_modules/inherits/inherits.js @@ -0,0 +1 @@ +module.exports = require('util').inherits diff --git a/node_modules/util/node_modules/inherits/inherits_browser.js b/node_modules/util/node_modules/inherits/inherits_browser.js new file mode 100644 index 000000000..c1e78a75e --- /dev/null +++ b/node_modules/util/node_modules/inherits/inherits_browser.js @@ -0,0 +1,23 @@ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} diff --git a/node_modules/util/node_modules/inherits/package.json b/node_modules/util/node_modules/inherits/package.json new file mode 100644 index 000000000..68b49f3fa --- /dev/null +++ b/node_modules/util/node_modules/inherits/package.json @@ -0,0 +1,54 @@ +{ + "_from": "inherits@2.0.1", + "_id": "inherits@2.0.1", + "_inBundle": false, + "_integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "_location": "/util/inherits", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "inherits@2.0.1", + "name": "inherits", + "escapedName": "inherits", + "rawSpec": "2.0.1", + "saveSpec": null, + "fetchSpec": "2.0.1" + }, + "_requiredBy": [ + "/util" + ], + "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", + "_spec": "inherits@2.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/util", + "browser": "./inherits_browser.js", + "bugs": { + "url": "https://github.com/isaacs/inherits/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "homepage": "https://github.com/isaacs/inherits#readme", + "keywords": [ + "inheritance", + "class", + "klass", + "oop", + "object-oriented", + "inherits", + "browser", + "browserify" + ], + "license": "ISC", + "main": "./inherits.js", + "name": "inherits", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inherits.git" + }, + "scripts": { + "test": "node test" + }, + "version": "2.0.1" +} diff --git a/node_modules/util/node_modules/inherits/test.js b/node_modules/util/node_modules/inherits/test.js new file mode 100644 index 000000000..fc53012d3 --- /dev/null +++ b/node_modules/util/node_modules/inherits/test.js @@ -0,0 +1,25 @@ +var inherits = require('./inherits.js') +var assert = require('assert') + +function test(c) { + assert(c.constructor === Child) + assert(c.constructor.super_ === Parent) + assert(Object.getPrototypeOf(c) === Child.prototype) + assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) + assert(c instanceof Child) + assert(c instanceof Parent) +} + +function Child() { + Parent.call(this) + test(this) +} + +function Parent() {} + +inherits(Child, Parent) + +var c = new Child +test(c) + +console.log('ok') diff --git a/node_modules/util/package.json b/node_modules/util/package.json new file mode 100644 index 000000000..df7d6c856 --- /dev/null +++ b/node_modules/util/package.json @@ -0,0 +1,60 @@ +{ + "_from": "util@^0.10.3", + "_id": "util@0.10.3", + "_inBundle": false, + "_integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "_location": "/util", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "util@^0.10.3", + "name": "util", + "escapedName": "util", + "rawSpec": "^0.10.3", + "saveSpec": null, + "fetchSpec": "^0.10.3" + }, + "_requiredBy": [ + "/assert", + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "_shasum": "7afb1afe50805246489e3db7fe0ed379336ac0f9", + "_spec": "util@^0.10.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "Joyent", + "url": "http://www.joyent.com" + }, + "browser": { + "./support/isBuffer.js": "./support/isBufferBrowser.js" + }, + "bugs": { + "url": "https://github.com/defunctzombie/node-util/issues" + }, + "bundleDependencies": false, + "dependencies": { + "inherits": "2.0.1" + }, + "deprecated": false, + "description": "Node.JS util module", + "devDependencies": { + "zuul": "~1.0.9" + }, + "homepage": "https://github.com/defunctzombie/node-util", + "keywords": [ + "util" + ], + "license": "MIT", + "main": "./util.js", + "name": "util", + "repository": { + "type": "git", + "url": "git://github.com/defunctzombie/node-util.git" + }, + "scripts": { + "test": "node test/node/*.js && zuul test/browser/*.js" + }, + "version": "0.10.3" +} diff --git a/node_modules/util/support/isBuffer.js b/node_modules/util/support/isBuffer.js new file mode 100644 index 000000000..ace9ac00d --- /dev/null +++ b/node_modules/util/support/isBuffer.js @@ -0,0 +1,3 @@ +module.exports = function isBuffer(arg) { + return arg instanceof Buffer; +} diff --git a/node_modules/util/support/isBufferBrowser.js b/node_modules/util/support/isBufferBrowser.js new file mode 100644 index 000000000..0e1bee1eb --- /dev/null +++ b/node_modules/util/support/isBufferBrowser.js @@ -0,0 +1,6 @@ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} \ No newline at end of file diff --git a/node_modules/util/test/browser/inspect.js b/node_modules/util/test/browser/inspect.js new file mode 100644 index 000000000..91af3b02d --- /dev/null +++ b/node_modules/util/test/browser/inspect.js @@ -0,0 +1,41 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var assert = require('assert'); +var util = require('../../'); + +suite('inspect'); + +test('util.inspect - test for sparse array', function () { + var a = ['foo', 'bar', 'baz']; + assert.equal(util.inspect(a), '[ \'foo\', \'bar\', \'baz\' ]'); + delete a[1]; + assert.equal(util.inspect(a), '[ \'foo\', , \'baz\' ]'); + assert.equal(util.inspect(a, true), '[ \'foo\', , \'baz\', [length]: 3 ]'); + assert.equal(util.inspect(new Array(5)), '[ , , , , ]'); +}); + +test('util.inspect - exceptions should print the error message, not \'{}\'', function () { + assert.equal(util.inspect(new Error()), '[Error]'); + assert.equal(util.inspect(new Error('FAIL')), '[Error: FAIL]'); + assert.equal(util.inspect(new TypeError('FAIL')), '[TypeError: FAIL]'); + assert.equal(util.inspect(new SyntaxError('FAIL')), '[SyntaxError: FAIL]'); +}); diff --git a/node_modules/util/test/browser/is.js b/node_modules/util/test/browser/is.js new file mode 100644 index 000000000..f63bff9a9 --- /dev/null +++ b/node_modules/util/test/browser/is.js @@ -0,0 +1,91 @@ +// 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 assert = require('assert'); + +var util = require('../../'); + +suite('is'); + +test('util.isArray', function () { + assert.equal(true, util.isArray([])); + assert.equal(true, util.isArray(Array())); + assert.equal(true, util.isArray(new Array())); + assert.equal(true, util.isArray(new Array(5))); + assert.equal(true, util.isArray(new Array('with', 'some', 'entries'))); + assert.equal(false, util.isArray({})); + assert.equal(false, util.isArray({ push: function() {} })); + assert.equal(false, util.isArray(/regexp/)); + assert.equal(false, util.isArray(new Error())); + assert.equal(false, util.isArray(Object.create(Array.prototype))); +}); + +test('util.isRegExp', function () { + assert.equal(true, util.isRegExp(/regexp/)); + assert.equal(true, util.isRegExp(RegExp())); + assert.equal(true, util.isRegExp(new RegExp())); + assert.equal(false, util.isRegExp({})); + assert.equal(false, util.isRegExp([])); + assert.equal(false, util.isRegExp(new Date())); + assert.equal(false, util.isRegExp(Object.create(RegExp.prototype))); +}); + +test('util.isDate', function () { + assert.equal(true, util.isDate(new Date())); + assert.equal(true, util.isDate(new Date(0))); + assert.equal(false, util.isDate(Date())); + assert.equal(false, util.isDate({})); + assert.equal(false, util.isDate([])); + assert.equal(false, util.isDate(new Error())); + assert.equal(false, util.isDate(Object.create(Date.prototype))); +}); + +test('util.isError', function () { + assert.equal(true, util.isError(new Error())); + assert.equal(true, util.isError(new TypeError())); + assert.equal(true, util.isError(new SyntaxError())); + assert.equal(false, util.isError({})); + assert.equal(false, util.isError({ name: 'Error', message: '' })); + assert.equal(false, util.isError([])); + assert.equal(true, util.isError(Object.create(Error.prototype))); +}); + +test('util._extend', function () { + assert.deepEqual(util._extend({a:1}), {a:1}); + assert.deepEqual(util._extend({a:1}, []), {a:1}); + assert.deepEqual(util._extend({a:1}, null), {a:1}); + assert.deepEqual(util._extend({a:1}, true), {a:1}); + assert.deepEqual(util._extend({a:1}, false), {a:1}); + assert.deepEqual(util._extend({a:1}, {b:2}), {a:1, b:2}); + assert.deepEqual(util._extend({a:1, b:2}, {b:3}), {a:1, b:3}); +}); + +test('util.isBuffer', function () { + assert.equal(true, util.isBuffer(new Buffer(4))); + assert.equal(true, util.isBuffer(Buffer(4))); + assert.equal(true, util.isBuffer(new Buffer(4))); + assert.equal(true, util.isBuffer(new Buffer([1, 2, 3, 4]))); + assert.equal(false, util.isBuffer({})); + assert.equal(false, util.isBuffer([])); + assert.equal(false, util.isBuffer(new Error())); + assert.equal(false, util.isRegExp(new Date())); + assert.equal(true, util.isBuffer(Object.create(Buffer.prototype))); +}); diff --git a/node_modules/util/test/node/debug.js b/node_modules/util/test/node/debug.js new file mode 100644 index 000000000..ef5f69fb1 --- /dev/null +++ b/node_modules/util/test/node/debug.js @@ -0,0 +1,86 @@ +// 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 assert = require('assert'); +var util = require('../../'); + +if (process.argv[2] === 'child') + child(); +else + parent(); + +function parent() { + test('foo,tud,bar', true); + test('foo,tud', true); + test('tud,bar', true); + test('tud', true); + test('foo,bar', false); + test('', false); +} + +function test(environ, shouldWrite) { + var expectErr = ''; + if (shouldWrite) { + expectErr = 'TUD %PID%: this { is: \'a\' } /debugging/\n' + + 'TUD %PID%: number=1234 string=asdf obj={"foo":"bar"}\n'; + } + var expectOut = 'ok\n'; + var didTest = false; + + var spawn = require('child_process').spawn; + var child = spawn(process.execPath, [__filename, 'child'], { + env: { NODE_DEBUG: environ } + }); + + expectErr = expectErr.split('%PID%').join(child.pid); + + var err = ''; + child.stderr.setEncoding('utf8'); + child.stderr.on('data', function(c) { + err += c; + }); + + var out = ''; + child.stdout.setEncoding('utf8'); + child.stdout.on('data', function(c) { + out += c; + }); + + child.on('close', function(c) { + assert(!c); + assert.equal(err, expectErr); + assert.equal(out, expectOut); + didTest = true; + console.log('ok %j %j', environ, shouldWrite); + }); + + process.on('exit', function() { + assert(didTest); + }); +} + + +function child() { + var debug = util.debuglog('tud'); + debug('this', { is: 'a' }, /debugging/); + debug('number=%d string=%s obj=%j', 1234, 'asdf', { foo: 'bar' }); + console.log('ok'); +} diff --git a/node_modules/util/test/node/format.js b/node_modules/util/test/node/format.js new file mode 100644 index 000000000..f2d18621e --- /dev/null +++ b/node_modules/util/test/node/format.js @@ -0,0 +1,77 @@ +// 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 assert = require('assert'); +var util = require('../../'); + +assert.equal(util.format(), ''); +assert.equal(util.format(''), ''); +assert.equal(util.format([]), '[]'); +assert.equal(util.format({}), '{}'); +assert.equal(util.format(null), 'null'); +assert.equal(util.format(true), 'true'); +assert.equal(util.format(false), 'false'); +assert.equal(util.format('test'), 'test'); + +// CHECKME this is for console.log() compatibility - but is it *right*? +assert.equal(util.format('foo', 'bar', 'baz'), 'foo bar baz'); + +assert.equal(util.format('%d', 42.0), '42'); +assert.equal(util.format('%d', 42), '42'); +assert.equal(util.format('%s', 42), '42'); +assert.equal(util.format('%j', 42), '42'); + +assert.equal(util.format('%d', '42.0'), '42'); +assert.equal(util.format('%d', '42'), '42'); +assert.equal(util.format('%s', '42'), '42'); +assert.equal(util.format('%j', '42'), '"42"'); + +assert.equal(util.format('%%s%s', 'foo'), '%sfoo'); + +assert.equal(util.format('%s'), '%s'); +assert.equal(util.format('%s', undefined), 'undefined'); +assert.equal(util.format('%s', 'foo'), 'foo'); +assert.equal(util.format('%s:%s'), '%s:%s'); +assert.equal(util.format('%s:%s', undefined), 'undefined:%s'); +assert.equal(util.format('%s:%s', 'foo'), 'foo:%s'); +assert.equal(util.format('%s:%s', 'foo', 'bar'), 'foo:bar'); +assert.equal(util.format('%s:%s', 'foo', 'bar', 'baz'), 'foo:bar baz'); +assert.equal(util.format('%%%s%%', 'hi'), '%hi%'); +assert.equal(util.format('%%%s%%%%', 'hi'), '%hi%%'); + +(function() { + var o = {}; + o.o = o; + assert.equal(util.format('%j', o), '[Circular]'); +})(); + +// Errors +assert.equal(util.format(new Error('foo')), '[Error: foo]'); +function CustomError(msg) { + Error.call(this); + Object.defineProperty(this, 'message', { value: msg, enumerable: false }); + Object.defineProperty(this, 'name', { value: 'CustomError', enumerable: false }); +} +util.inherits(CustomError, Error); +assert.equal(util.format(new CustomError('bar')), '[CustomError: bar]'); diff --git a/node_modules/util/test/node/inspect.js b/node_modules/util/test/node/inspect.js new file mode 100644 index 000000000..f766d1170 --- /dev/null +++ b/node_modules/util/test/node/inspect.js @@ -0,0 +1,195 @@ +// 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 assert = require('assert'); +var util = require('../../'); + +// test the internal isDate implementation +var Date2 = require('vm').runInNewContext('Date'); +var d = new Date2(); +var orig = util.inspect(d); +Date2.prototype.foo = 'bar'; +var after = util.inspect(d); +assert.equal(orig, after); + +// test for sparse array +var a = ['foo', 'bar', 'baz']; +assert.equal(util.inspect(a), '[ \'foo\', \'bar\', \'baz\' ]'); +delete a[1]; +assert.equal(util.inspect(a), '[ \'foo\', , \'baz\' ]'); +assert.equal(util.inspect(a, true), '[ \'foo\', , \'baz\', [length]: 3 ]'); +assert.equal(util.inspect(new Array(5)), '[ , , , , ]'); + +// test for property descriptors +var getter = Object.create(null, { + a: { + get: function() { return 'aaa'; } + } +}); +var setter = Object.create(null, { + b: { + set: function() {} + } +}); +var getterAndSetter = Object.create(null, { + c: { + get: function() { return 'ccc'; }, + set: function() {} + } +}); +assert.equal(util.inspect(getter, true), '{ [a]: [Getter] }'); +assert.equal(util.inspect(setter, true), '{ [b]: [Setter] }'); +assert.equal(util.inspect(getterAndSetter, true), '{ [c]: [Getter/Setter] }'); + +// exceptions should print the error message, not '{}' +assert.equal(util.inspect(new Error()), '[Error]'); +assert.equal(util.inspect(new Error('FAIL')), '[Error: FAIL]'); +assert.equal(util.inspect(new TypeError('FAIL')), '[TypeError: FAIL]'); +assert.equal(util.inspect(new SyntaxError('FAIL')), '[SyntaxError: FAIL]'); +try { + undef(); +} catch (e) { + assert.equal(util.inspect(e), '[ReferenceError: undef is not defined]'); +} +var ex = util.inspect(new Error('FAIL'), true); +assert.ok(ex.indexOf('[Error: FAIL]') != -1); +assert.ok(ex.indexOf('[stack]') != -1); +assert.ok(ex.indexOf('[message]') != -1); + +// GH-1941 +// should not throw: +assert.equal(util.inspect(Object.create(Date.prototype)), '{}'); + +// GH-1944 +assert.doesNotThrow(function() { + var d = new Date(); + d.toUTCString = null; + util.inspect(d); +}); + +assert.doesNotThrow(function() { + var r = /regexp/; + r.toString = null; + util.inspect(r); +}); + +// bug with user-supplied inspect function returns non-string +assert.doesNotThrow(function() { + util.inspect([{ + inspect: function() { return 123; } + }]); +}); + +// GH-2225 +var x = { inspect: util.inspect }; +assert.ok(util.inspect(x).indexOf('inspect') != -1); + +// util.inspect.styles and util.inspect.colors +function test_color_style(style, input, implicit) { + var color_name = util.inspect.styles[style]; + var color = ['', '']; + if(util.inspect.colors[color_name]) + color = util.inspect.colors[color_name]; + + var without_color = util.inspect(input, false, 0, false); + var with_color = util.inspect(input, false, 0, true); + var expect = '\u001b[' + color[0] + 'm' + without_color + + '\u001b[' + color[1] + 'm'; + assert.equal(with_color, expect, 'util.inspect color for style '+style); +} + +test_color_style('special', function(){}); +test_color_style('number', 123.456); +test_color_style('boolean', true); +test_color_style('undefined', undefined); +test_color_style('null', null); +test_color_style('string', 'test string'); +test_color_style('date', new Date); +test_color_style('regexp', /regexp/); + +// an object with "hasOwnProperty" overwritten should not throw +assert.doesNotThrow(function() { + util.inspect({ + hasOwnProperty: null + }); +}); + +// new API, accepts an "options" object +var subject = { foo: 'bar', hello: 31, a: { b: { c: { d: 0 } } } }; +Object.defineProperty(subject, 'hidden', { enumerable: false, value: null }); + +assert(util.inspect(subject, { showHidden: false }).indexOf('hidden') === -1); +assert(util.inspect(subject, { showHidden: true }).indexOf('hidden') !== -1); +assert(util.inspect(subject, { colors: false }).indexOf('\u001b[32m') === -1); +assert(util.inspect(subject, { colors: true }).indexOf('\u001b[32m') !== -1); +assert(util.inspect(subject, { depth: 2 }).indexOf('c: [Object]') !== -1); +assert(util.inspect(subject, { depth: 0 }).indexOf('a: [Object]') !== -1); +assert(util.inspect(subject, { depth: null }).indexOf('{ d: 0 }') !== -1); + +// "customInspect" option can enable/disable calling inspect() on objects +subject = { inspect: function() { return 123; } }; + +assert(util.inspect(subject, { customInspect: true }).indexOf('123') !== -1); +assert(util.inspect(subject, { customInspect: true }).indexOf('inspect') === -1); +assert(util.inspect(subject, { customInspect: false }).indexOf('123') === -1); +assert(util.inspect(subject, { customInspect: false }).indexOf('inspect') !== -1); + +// custom inspect() functions should be able to return other Objects +subject.inspect = function() { return { foo: 'bar' }; }; + +assert.equal(util.inspect(subject), '{ foo: \'bar\' }'); + +subject.inspect = function(depth, opts) { + assert.strictEqual(opts.customInspectOptions, true); +}; + +util.inspect(subject, { customInspectOptions: true }); + +// util.inspect with "colors" option should produce as many lines as without it +function test_lines(input) { + var count_lines = function(str) { + return (str.match(/\n/g) || []).length; + } + + var without_color = util.inspect(input); + var with_color = util.inspect(input, {colors: true}); + assert.equal(count_lines(without_color), count_lines(with_color)); +} + +test_lines([1, 2, 3, 4, 5, 6, 7]); +test_lines(function() { + var big_array = []; + for (var i = 0; i < 100; i++) { + big_array.push(i); + } + return big_array; +}()); +test_lines({foo: 'bar', baz: 35, b: {a: 35}}); +test_lines({ + foo: 'bar', + baz: 35, + b: {a: 35}, + very_long_key: 'very_long_value', + even_longer_key: ['with even longer value in array'] +}); diff --git a/node_modules/util/test/node/log.js b/node_modules/util/test/node/log.js new file mode 100644 index 000000000..6bd96d1f1 --- /dev/null +++ b/node_modules/util/test/node/log.js @@ -0,0 +1,58 @@ +// 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 assert = require('assert'); +var util = require('../../'); + +assert.ok(process.stdout.writable); +assert.ok(process.stderr.writable); + +var stdout_write = global.process.stdout.write; +var strings = []; +global.process.stdout.write = function(string) { + strings.push(string); +}; +console._stderr = process.stdout; + +var tests = [ + {input: 'foo', output: 'foo'}, + {input: undefined, output: 'undefined'}, + {input: null, output: 'null'}, + {input: false, output: 'false'}, + {input: 42, output: '42'}, + {input: function(){}, output: '[Function]'}, + {input: parseInt('not a number', 10), output: 'NaN'}, + {input: {answer: 42}, output: '{ answer: 42 }'}, + {input: [1,2,3], output: '[ 1, 2, 3 ]'} +]; + +// test util.log() +tests.forEach(function(test) { + util.log(test.input); + var result = strings.shift().trim(), + re = (/[0-9]{1,2} [A-Z][a-z]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} - (.+)$/), + match = re.exec(result); + assert.ok(match); + assert.equal(match[1], test.output); +}); + +global.process.stdout.write = stdout_write; diff --git a/node_modules/util/test/node/util.js b/node_modules/util/test/node/util.js new file mode 100644 index 000000000..633ba6906 --- /dev/null +++ b/node_modules/util/test/node/util.js @@ -0,0 +1,83 @@ +// 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 assert = require('assert'); +var context = require('vm').runInNewContext; + +var util = require('../../'); + +// isArray +assert.equal(true, util.isArray([])); +assert.equal(true, util.isArray(Array())); +assert.equal(true, util.isArray(new Array())); +assert.equal(true, util.isArray(new Array(5))); +assert.equal(true, util.isArray(new Array('with', 'some', 'entries'))); +assert.equal(true, util.isArray(context('Array')())); +assert.equal(false, util.isArray({})); +assert.equal(false, util.isArray({ push: function() {} })); +assert.equal(false, util.isArray(/regexp/)); +assert.equal(false, util.isArray(new Error)); +assert.equal(false, util.isArray(Object.create(Array.prototype))); + +// isRegExp +assert.equal(true, util.isRegExp(/regexp/)); +assert.equal(true, util.isRegExp(RegExp())); +assert.equal(true, util.isRegExp(new RegExp())); +assert.equal(true, util.isRegExp(context('RegExp')())); +assert.equal(false, util.isRegExp({})); +assert.equal(false, util.isRegExp([])); +assert.equal(false, util.isRegExp(new Date())); +assert.equal(false, util.isRegExp(Object.create(RegExp.prototype))); + +// isDate +assert.equal(true, util.isDate(new Date())); +assert.equal(true, util.isDate(new Date(0))); +assert.equal(true, util.isDate(new (context('Date')))); +assert.equal(false, util.isDate(Date())); +assert.equal(false, util.isDate({})); +assert.equal(false, util.isDate([])); +assert.equal(false, util.isDate(new Error)); +assert.equal(false, util.isDate(Object.create(Date.prototype))); + +// isError +assert.equal(true, util.isError(new Error)); +assert.equal(true, util.isError(new TypeError)); +assert.equal(true, util.isError(new SyntaxError)); +assert.equal(true, util.isError(new (context('Error')))); +assert.equal(true, util.isError(new (context('TypeError')))); +assert.equal(true, util.isError(new (context('SyntaxError')))); +assert.equal(false, util.isError({})); +assert.equal(false, util.isError({ name: 'Error', message: '' })); +assert.equal(false, util.isError([])); +assert.equal(true, util.isError(Object.create(Error.prototype))); + +// isObject +assert.ok(util.isObject({}) === true); + +// _extend +assert.deepEqual(util._extend({a:1}), {a:1}); +assert.deepEqual(util._extend({a:1}, []), {a:1}); +assert.deepEqual(util._extend({a:1}, null), {a:1}); +assert.deepEqual(util._extend({a:1}, true), {a:1}); +assert.deepEqual(util._extend({a:1}, false), {a:1}); +assert.deepEqual(util._extend({a:1}, {b:2}), {a:1, b:2}); +assert.deepEqual(util._extend({a:1, b:2}, {b:3}), {a:1, b:3}); diff --git a/node_modules/util/util.js b/node_modules/util/util.js new file mode 100644 index 000000000..e0ea321d3 --- /dev/null +++ b/node_modules/util/util.js @@ -0,0 +1,586 @@ +// 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 formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} diff --git a/node_modules/v8flags/.npmignore b/node_modules/v8flags/.npmignore new file mode 100644 index 000000000..ae16e5f8f --- /dev/null +++ b/node_modules/v8flags/.npmignore @@ -0,0 +1,4 @@ +*.yml +LICENSE +README.md +test.js diff --git a/node_modules/v8flags/LICENSE b/node_modules/v8flags/LICENSE new file mode 100644 index 000000000..a55f5b74b --- /dev/null +++ b/node_modules/v8flags/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 Tyler Kellen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/v8flags/README.md b/node_modules/v8flags/README.md new file mode 100644 index 000000000..ca6065b22 --- /dev/null +++ b/node_modules/v8flags/README.md @@ -0,0 +1,49 @@ +# v8flags [![Build Status](https://secure.travis-ci.org/js-cli/js-v8flags.png)](http://travis-ci.org/js-cli/js-v8flags) [![Build status](https://ci.appveyor.com/api/projects/status/9psgmwayx9kpol1a?svg=true)](https://ci.appveyor.com/project/js-cli/js-v8flags) +> Get available v8 flags. + +[![NPM](https://nodei.co/npm/v8flags.png)](https://nodei.co/npm/v8flags/) + +## Example +```js +const v8flags = require('v8flags'); + +v8flags(function (err, results) { + console.log(results); // [ '--use_strict', + // '--es5_readonly', + // '--es52_globals', + // '--harmony_typeof', + // '--harmony_scoping', + // '--harmony_modules', + // '--harmony_proxies', + // '--harmony_collections', + // '--harmony', + // ... +}); +``` + +## Release History + +* 2017-04-18 - v2.1.0 - hash username to support invalid path characters +* 2017-03-31 - v2.0.12 - don't pollute global namespace +* 2015-12-07 - v2.0.11 - cache to temp directory if home is present but unwritable +* 2015-07-28 - v2.0.10 - don't throw for electron runtime, just call back with empty array +* 2015-06-25 - v2.0.9 - call back with flags even if cache file can't be written +* 2015-06-15 - v2.0.7 - revert to 2.0.5 behavior. +* 2015-06-15 - v2.0.6 - store cache file in ~/.cache or ~/AppData/Local depending on platform +* 2015-04-18 - v2.0.5 - attempt to require config file, if this throws for any reason, fopen w+ and re-create +* 2015-04-16 - v2.0.4 - when concurrent processes are run and no config exists, don't append to the cached config. +* 2015-03-31 - v2.0.3 - prefer to store config files in user home over tmp +* 2015-01-18 - v2.0.2 - keep his dark tentacles contained +* 2015-01-15 - v2.0.1 - store temp file in `os.tmpdir()`, drop support for node 0.8 +* 2015-01-15 - v2.0.0 - make the stupid thing async +* 2014-12-22 - v1.0.8 - exclude `--help` flag +* 2014-12-20 - v1.0.7 - pre-cache flags for every version of node from 0.8 to 0.11 +* 2014-12-09 - v1.0.6 - revert to 1.0.0 behavior +* 2014-11-26 - v1.0.5 - get node executable from `process.execPath` +* 2014-11-18 - v1.0.4 - wrap node executable path in quotes +* 2014-11-17 - v1.0.3 - get node executable during npm install via `process.env.NODE` +* 2014-11-17 - v1.0.2 - get node executable from `process.env._` +* 2014-09-03 - v1.0.0 - first major version release +* 2014-09-02 - v0.3.0 - keep -- in flag names +* 2014-09-02 - v0.2.0 - cache flags +* 2014-05-09 - v0.1.0 - initial release diff --git a/node_modules/v8flags/index.js b/node_modules/v8flags/index.js new file mode 100644 index 000000000..40404d005 --- /dev/null +++ b/node_modules/v8flags/index.js @@ -0,0 +1,133 @@ +// this entire module is depressing. i should have spent my time learning +// how to patch v8 so that these options would just be available on the +// process object. + +const os = require('os'); +const fs = require('fs'); +const path = require('path'); +const crypto = require('crypto'); +const execFile = require('child_process').execFile; +const env = process.env; +const user = env.LOGNAME || env.USER || env.LNAME || env.USERNAME || ''; +const exclusions = ['--help']; + +const configfile = '.v8flags.'+process.versions.v8+'.'+crypto.createHash('md5').update(user).digest('hex')+'.json'; + +const failureMessage = [ + 'Unable to cache a config file for v8flags to a your home directory', + 'or a temporary folder. To fix this problem, please correct your', + 'environment by setting HOME=/path/to/home or TEMP=/path/to/temp.', + 'NOTE: the user running this must be able to access provided path.', + 'If all else fails, please open an issue here:', + 'http://github.com/tkellen/js-v8flags' +].join('\n'); + +function fail (err) { + err.message += '\n\n' + failureMessage; + return err; +} + +function openConfig (cb) { + var userHome = require('user-home'); + if (!userHome) { + return tryOpenConfig(path.join(os.tmpdir(), configfile), cb); + } + + tryOpenConfig(path.join(userHome, configfile), function (err, fd) { + if (err) return tryOpenConfig(path.join(os.tmpdir(), configfile), cb); + return cb(null, fd); + }); +} + +function tryOpenConfig (configpath, cb) { + try { + // if the config file is valid, it should be json and therefore + // node should be able to require it directly. if this doesn't + // throw, we're done! + var content = require(configpath); + process.nextTick(function () { + cb(null, content); + }); + } catch (e) { + // if requiring the config file failed, maybe it doesn't exist, or + // perhaps it has become corrupted. instead of calling back with the + // content of the file, call back with a file descriptor that we can + // write the cached data to + fs.open(configpath, 'w+', function (err, fd) { + if (err) { + return cb(err); + } + return cb(null, fd); + }); + } +} + +// i can't wait for the day this whole module is obsolete because these +// options are available on the process object. this executes node with +// `--v8-options` and parses the result, returning an array of command +// line flags. +function getFlags (cb) { + execFile(process.execPath, ['--v8-options'], function (execErr, result) { + if (execErr) { + return cb(execErr); + } + var flags = result.match(/\s\s--(\w+)/gm).map(function (match) { + return match.substring(2); + }).filter(function (name) { + return exclusions.indexOf(name) === -1; + }); + return cb(null, flags); + }); +} + +// write some json to a file descriptor. if this fails, call back +// with both the error and the data that was meant to be written. +function writeConfig (fd, flags, cb) { + var buf = new Buffer(JSON.stringify(flags)); + return fs.write(fd, buf, 0, buf.length, 0 , function (writeErr) { + fs.close(fd, function (closeErr) { + var err = writeErr || closeErr; + if (err) { + return cb(fail(err), flags); + } + return cb(null, flags); + }); + }); +} + +module.exports = function (cb) { + // bail early if this is not node + var isElectron = process.versions && process.versions.electron; + if (isElectron) { + return process.nextTick(function () { + cb(null, []); + }); + } + + // attempt to open/read cache file + openConfig(function (openErr, result) { + if (!openErr && typeof result !== 'number') { + return cb(null, result); + } + // if the result is not an array, we need to go fetch + // the flags by invoking node with `--v8-options` + getFlags(function (flagsErr, flags) { + // if there was an error fetching the flags, bail immediately + if (flagsErr) { + return cb(flagsErr); + } + // if there was a problem opening the config file for writing + // throw an error but include the flags anyway so that users + // can continue to execute (at the expense of having to fetch + // flags on every run until they fix the underyling problem). + if (openErr) { + return cb(fail(openErr), flags); + } + // write the config file to disk so subsequent runs can read + // flags out of a cache file. + return writeConfig(result, flags, cb); + }); + }); +}; + +module.exports.configfile = configfile; diff --git a/node_modules/v8flags/package.json b/node_modules/v8flags/package.json new file mode 100644 index 000000000..fc63c53f2 --- /dev/null +++ b/node_modules/v8flags/package.json @@ -0,0 +1,67 @@ +{ + "_from": "v8flags@^2.1.1", + "_id": "v8flags@2.1.1", + "_inBundle": false, + "_integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "_location": "/v8flags", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "v8flags@^2.1.1", + "name": "v8flags", + "escapedName": "v8flags", + "rawSpec": "^2.1.1", + "saveSpec": null, + "fetchSpec": "^2.1.1" + }, + "_requiredBy": [ + "/babel-cli" + ], + "_resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "_shasum": "aab1a1fa30d45f88dd321148875ac02c0b55e5b4", + "_spec": "v8flags@^2.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-cli", + "author": { + "name": "Tyler Kellen", + "url": "http://goingslowly.com/" + }, + "bugs": { + "url": "https://github.com/tkellen/node-v8flags/issues" + }, + "bundleDependencies": false, + "dependencies": { + "user-home": "^1.1.1" + }, + "deprecated": false, + "description": "Get available v8 flags.", + "devDependencies": { + "async": "^0.9.0", + "chai": "~1.9.1", + "mocha": "~1.21.4" + }, + "engines": { + "node": ">= 0.10.0" + }, + "homepage": "https://github.com/tkellen/node-v8flags", + "keywords": [ + "v8 flags", + "harmony flags" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/tkellen/node-v8flags/blob/master/LICENSE" + } + ], + "main": "index.js", + "name": "v8flags", + "repository": { + "type": "git", + "url": "git://github.com/tkellen/node-v8flags.git" + }, + "scripts": { + "test": "_mocha -R spec test.js" + }, + "version": "2.1.1" +} diff --git a/node_modules/validate-npm-package-license/LICENSE b/node_modules/validate-npm-package-license/LICENSE new file mode 100644 index 000000000..a5e905d55 --- /dev/null +++ b/node_modules/validate-npm-package-license/LICENSE @@ -0,0 +1,174 @@ +SPDX:Apache-2.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: + +(a) You must give any other recipients of the Work or Derivative Works a +copy of this License; and + +(b) You must cause any modified files to carry prominent notices stating +that You changed the files; and + +(c) 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 + +(d) 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. diff --git a/node_modules/validate-npm-package-license/README.md b/node_modules/validate-npm-package-license/README.md new file mode 100644 index 000000000..c5b3bfcf3 --- /dev/null +++ b/node_modules/validate-npm-package-license/README.md @@ -0,0 +1,113 @@ +validate-npm-package-license +============================ + +Give me a string and I'll tell you if it's a valid npm package license string. + +```javascript +var valid = require('validate-npm-package-license'); +``` + +SPDX license identifiers are valid license strings: + +```javascript + +var assert = require('assert'); +var validSPDXExpression = { + validForNewPackages: true, + validForOldPackages: true, + spdx: true +}; + +assert.deepEqual(valid('MIT'), validSPDXExpression); +assert.deepEqual(valid('BSD-2-Clause'), validSPDXExpression); +assert.deepEqual(valid('Apache-2.0'), validSPDXExpression); +assert.deepEqual(valid('ISC'), validSPDXExpression); +``` +The function will return a warning and suggestion for nearly-correct license identifiers: + +```javascript +assert.deepEqual( + valid('Apache 2.0'), + { + validForOldPackages: false, + validForNewPackages: false, + warnings: [ + 'license should be ' + + 'a valid SPDX license expression (without "LicenseRef"), ' + + '"UNLICENSED", or ' + + '"SEE LICENSE IN "', + 'license is similar to the valid expression "Apache-2.0"' + ] + } +); +``` + +SPDX expressions are valid, too ... + +```javascript +// Simple SPDX license expression for dual licensing +assert.deepEqual( + valid('(GPL-3.0 OR BSD-2-Clause)'), + validSPDXExpression +); +``` + +... except if they contain `LicenseRef`: + +```javascript +var warningAboutLicenseRef = { + validForOldPackages: false, + validForNewPackages: false, + spdx: true, + warnings: [ + 'license should be ' + + 'a valid SPDX license expression (without "LicenseRef"), ' + + '"UNLICENSED", or ' + + '"SEE LICENSE IN "', + ] +}; + +assert.deepEqual( + valid('LicenseRef-Made-Up'), + warningAboutLicenseRef +); + +assert.deepEqual( + valid('(MIT OR LicenseRef-Made-Up)'), + warningAboutLicenseRef +); +``` + +If you can't describe your licensing terms with standardized SPDX identifiers, put the terms in a file in the package and point users there: + +```javascript +assert.deepEqual( + valid('SEE LICENSE IN LICENSE.txt'), + { + validForNewPackages: true, + validForOldPackages: true, + inFile: 'LICENSE.txt' + } +); + +assert.deepEqual( + valid('SEE LICENSE IN license.md'), + { + validForNewPackages: true, + validForOldPackages: true, + inFile: 'license.md' + } +); +``` + +If there aren't any licensing terms, use `UNLICENSED`: + +```javascript +var unlicensed = { + validForNewPackages: true, + validForOldPackages: true, + unlicensed: true +}; +assert.deepEqual(valid('UNLICENSED'), unlicensed); +assert.deepEqual(valid('UNLICENCED'), unlicensed); +``` diff --git a/node_modules/validate-npm-package-license/index.js b/node_modules/validate-npm-package-license/index.js new file mode 100644 index 000000000..2ad98d9d8 --- /dev/null +++ b/node_modules/validate-npm-package-license/index.js @@ -0,0 +1,84 @@ +var parse = require('spdx-expression-parse'); +var correct = require('spdx-correct'); + +var genericWarning = ( + 'license should be ' + + 'a valid SPDX license expression (without "LicenseRef"), ' + + '"UNLICENSED", or ' + + '"SEE LICENSE IN "' +); + +var fileReferenceRE = /^SEE LICEN[CS]E IN (.+)$/; + +function startsWith(prefix, string) { + return string.slice(0, prefix.length) === prefix; +} + +function usesLicenseRef(ast) { + if (ast.hasOwnProperty('license')) { + var license = ast.license; + return ( + startsWith('LicenseRef', license) || + startsWith('DocumentRef', license) + ); + } else { + return ( + usesLicenseRef(ast.left) || + usesLicenseRef(ast.right) + ); + } +} + +module.exports = function(argument) { + var ast; + + try { + ast = parse(argument); + } catch (e) { + var match + if ( + argument === 'UNLICENSED' || + argument === 'UNLICENCED' + ) { + return { + validForOldPackages: true, + validForNewPackages: true, + unlicensed: true + }; + } else if (match = fileReferenceRE.exec(argument)) { + return { + validForOldPackages: true, + validForNewPackages: true, + inFile: match[1] + }; + } else { + var result = { + validForOldPackages: false, + validForNewPackages: false, + warnings: [genericWarning] + }; + var corrected = correct(argument); + if (corrected) { + result.warnings.push( + 'license is similar to the valid expression "' + corrected + '"' + ); + } + return result; + } + } + + if (usesLicenseRef(ast)) { + return { + validForNewPackages: false, + validForOldPackages: false, + spdx: true, + warnings: [genericWarning] + }; + } else { + return { + validForNewPackages: true, + validForOldPackages: true, + spdx: true + }; + } +}; diff --git a/node_modules/validate-npm-package-license/package.json b/node_modules/validate-npm-package-license/package.json new file mode 100644 index 000000000..624af2932 --- /dev/null +++ b/node_modules/validate-npm-package-license/package.json @@ -0,0 +1,61 @@ +{ + "_from": "validate-npm-package-license@^3.0.1", + "_id": "validate-npm-package-license@3.0.1", + "_inBundle": false, + "_integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "_location": "/validate-npm-package-license", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "validate-npm-package-license@^3.0.1", + "name": "validate-npm-package-license", + "escapedName": "validate-npm-package-license", + "rawSpec": "^3.0.1", + "saveSpec": null, + "fetchSpec": "^3.0.1" + }, + "_requiredBy": [ + "/normalize-package-data" + ], + "_resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "_shasum": "2804babe712ad3379459acfbe24746ab2c303fbc", + "_spec": "validate-npm-package-license@^3.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/normalize-package-data", + "author": { + "name": "Kyle E. Mitchell", + "email": "kyle@kemitchell.com", + "url": "https://kemitchell.com" + }, + "bugs": { + "url": "https://github.com/kemitchell/validate-npm-package-license.js/issues" + }, + "bundleDependencies": false, + "dependencies": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + }, + "deprecated": false, + "description": "Give me a string and I'll tell you if it's a valid npm package license string", + "devDependencies": { + "defence-cli": "^1.0.1", + "replace-require-self": "^1.0.0" + }, + "homepage": "https://github.com/kemitchell/validate-npm-package-license.js#readme", + "keywords": [ + "license", + "npm", + "package", + "validation" + ], + "license": "Apache-2.0", + "name": "validate-npm-package-license", + "repository": { + "type": "git", + "url": "git+https://github.com/kemitchell/validate-npm-package-license.js.git" + }, + "scripts": { + "test": "defence README.md | replace-require-self | node" + }, + "version": "3.0.1" +} diff --git a/node_modules/vm-browserify/LICENSE b/node_modules/vm-browserify/LICENSE new file mode 100644 index 000000000..ee27ba4b4 --- /dev/null +++ b/node_modules/vm-browserify/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/vm-browserify/example/run/bundle.js b/node_modules/vm-browserify/example/run/bundle.js new file mode 100644 index 000000000..5dbc43f41 --- /dev/null +++ b/node_modules/vm-browserify/example/run/bundle.js @@ -0,0 +1,473 @@ +var require = function (file, cwd) { + var resolved = require.resolve(file, cwd || '/'); + var mod = require.modules[resolved]; + if (!mod) throw new Error( + 'Failed to resolve module ' + file + ', tried ' + resolved + ); + var res = mod._cached ? mod._cached : mod(); + return res; +} + +require.paths = []; +require.modules = {}; +require.extensions = [".js",".coffee"]; + +require._core = { + 'assert': true, + 'events': true, + 'fs': true, + 'path': true, + 'vm': true +}; + +require.resolve = (function () { + return function (x, cwd) { + if (!cwd) cwd = '/'; + + if (require._core[x]) return x; + var path = require.modules.path(); + var y = cwd || '.'; + + if (x.match(/^(?:\.\.?\/|\/)/)) { + var m = loadAsFileSync(path.resolve(y, x)) + || loadAsDirectorySync(path.resolve(y, x)); + if (m) return m; + } + + var n = loadNodeModulesSync(x, y); + if (n) return n; + + throw new Error("Cannot find module '" + x + "'"); + + function loadAsFileSync (x) { + if (require.modules[x]) { + return x; + } + + for (var i = 0; i < require.extensions.length; i++) { + var ext = require.extensions[i]; + if (require.modules[x + ext]) return x + ext; + } + } + + function loadAsDirectorySync (x) { + x = x.replace(/\/+$/, ''); + var pkgfile = x + '/package.json'; + if (require.modules[pkgfile]) { + var pkg = require.modules[pkgfile](); + var b = pkg.browserify; + if (typeof b === 'object' && b.main) { + var m = loadAsFileSync(path.resolve(x, b.main)); + if (m) return m; + } + else if (typeof b === 'string') { + var m = loadAsFileSync(path.resolve(x, b)); + if (m) return m; + } + else if (pkg.main) { + var m = loadAsFileSync(path.resolve(x, pkg.main)); + if (m) return m; + } + } + + return loadAsFileSync(x + '/index'); + } + + function loadNodeModulesSync (x, start) { + var dirs = nodeModulesPathsSync(start); + for (var i = 0; i < dirs.length; i++) { + var dir = dirs[i]; + var m = loadAsFileSync(dir + '/' + x); + if (m) return m; + var n = loadAsDirectorySync(dir + '/' + x); + if (n) return n; + } + + var m = loadAsFileSync(x); + if (m) return m; + } + + function nodeModulesPathsSync (start) { + var parts; + if (start === '/') parts = [ '' ]; + else parts = path.normalize(start).split('/'); + + var dirs = []; + for (var i = parts.length - 1; i >= 0; i--) { + if (parts[i] === 'node_modules') continue; + var dir = parts.slice(0, i + 1).join('/') + '/node_modules'; + dirs.push(dir); + } + + return dirs; + } + }; +})(); + +require.alias = function (from, to) { + var path = require.modules.path(); + var res = null; + try { + res = require.resolve(from + '/package.json', '/'); + } + catch (err) { + res = require.resolve(from, '/'); + } + var basedir = path.dirname(res); + + var keys = (Object.keys || function (obj) { + var res = []; + for (var key in obj) res.push(key) + return res; + })(require.modules); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (key.slice(0, basedir.length + 1) === basedir + '/') { + var f = key.slice(basedir.length); + require.modules[to + f] = require.modules[basedir + f]; + } + else if (key === basedir) { + require.modules[to] = require.modules[basedir]; + } + } +}; + +require.define = function (filename, fn) { + var dirname = require._core[filename] + ? '' + : require.modules.path().dirname(filename) + ; + + var require_ = function (file) { + return require(file, dirname) + }; + require_.resolve = function (name) { + return require.resolve(name, dirname); + }; + require_.modules = require.modules; + require_.define = require.define; + var module_ = { exports : {} }; + + require.modules[filename] = function () { + require.modules[filename]._cached = module_.exports; + fn.call( + module_.exports, + require_, + module_, + module_.exports, + dirname, + filename + ); + require.modules[filename]._cached = module_.exports; + return module_.exports; + }; +}; + +if (typeof process === 'undefined') process = {}; + +if (!process.nextTick) process.nextTick = (function () { + var queue = []; + var canPost = typeof window !== 'undefined' + && window.postMessage && window.addEventListener + ; + + if (canPost) { + window.addEventListener('message', function (ev) { + if (ev.source === window && ev.data === 'browserify-tick') { + ev.stopPropagation(); + if (queue.length > 0) { + var fn = queue.shift(); + fn(); + } + } + }, true); + } + + return function (fn) { + if (canPost) { + queue.push(fn); + window.postMessage('browserify-tick', '*'); + } + else setTimeout(fn, 0); + }; +})(); + +if (!process.title) process.title = 'browser'; + +if (!process.binding) process.binding = function (name) { + if (name === 'evals') return require('vm') + else throw new Error('No such module') +}; + +if (!process.cwd) process.cwd = function () { return '.' }; + +require.define("path", function (require, module, exports, __dirname, __filename) { +function filter (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + if (fn(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length; i >= 0; i--) { + var last = parts[i]; + if (last == '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Regex to split a filename into [*, dir, basename, ext] +// posix version +var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { +var resolvedPath = '', + resolvedAbsolute = false; + +for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) + ? arguments[i] + : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string' || !path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; +} + +// At this point the path should be resolved to a full absolute path, but +// handle relative paths to be safe (might happen when process.cwd() fails) + +// Normalize the path +resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { +var isAbsolute = path.charAt(0) === '/', + trailingSlash = path.slice(-1) === '/'; + +// Normalize the path +path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + return p && typeof p === 'string'; + }).join('/')); +}; + + +exports.dirname = function(path) { + var dir = splitPathRe.exec(path)[1] || ''; + var isWindows = false; + if (!dir) { + // No dirname + return '.'; + } else if (dir.length === 1 || + (isWindows && dir.length <= 3 && dir.charAt(1) === ':')) { + // It is just a slash or a drive letter with a slash + return dir; + } else { + // It is a full dirname, strip trailing slash + return dir.substring(0, dir.length - 1); + } +}; + + +exports.basename = function(path, ext) { + var f = splitPathRe.exec(path)[2] || ''; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPathRe.exec(path)[3] || ''; +}; + +}); + +require.define("vm", function (require, module, exports, __dirname, __filename) { +var Object_keys = function (obj) { + if (Object.keys) return Object.keys(obj) + else { + var res = []; + for (var key in obj) res.push(key) + return res; + } +}; + +var forEach = function (xs, fn) { + if (xs.forEach) return xs.forEach(fn) + else for (var i = 0; i < xs.length; i++) { + fn(xs[i], i, xs); + } +}; + +var Script = exports.Script = function NodeScript (code) { + if (!(this instanceof Script)) return new Script(code); + this.code = code; +}; + +var iframe = document.createElement('iframe'); +if (!iframe.style) iframe.style = {}; +iframe.style.display = 'none'; + +var iframeCapable = true; // until proven otherwise +if (navigator.appName === 'Microsoft Internet Explorer') { + var m = navigator.appVersion.match(/\bMSIE (\d+\.\d+);/); + if (m && parseFloat(m[1]) <= 9.0) { + iframeCapable = false; + } +} + +Script.prototype.runInNewContext = function (context) { + if (!context) context = {}; + + if (!iframeCapable) { + var keys = Object_keys(context); + var args = []; + for (var i = 0; i < keys.length; i++) { + args.push(context[keys[i]]); + } + + var fn = new Function(keys, 'return ' + this.code); + return fn.apply(null, args); + } + + document.body.appendChild(iframe); + + var win = iframe.contentWindow + || (window.frames && window.frames[window.frames.length - 1]) + || window[window.length - 1] + ; + + forEach(Object_keys(context), function (key) { + win[key] = context[key]; + iframe[key] = context[key]; + }); + + if (win.eval) { + // chrome and ff can just .eval() + var res = win.eval(this.code); + } + else { + // this works in IE9 but not anything newer + iframe.setAttribute('src', + 'javascript:__browserifyVmResult=(' + this.code + ')' + ); + if ('__browserifyVmResult' in win) { + var res = win.__browserifyVmResult; + } + else { + iframeCapable = false; + res = this.runInThisContext(context); + } + } + + forEach(Object_keys(win), function (key) { + context[key] = win[key]; + }); + + document.body.removeChild(iframe); + + return res; +}; + +Script.prototype.runInThisContext = function () { + return eval(this.code); // maybe... +}; + +Script.prototype.runInContext = function (context) { + // seems to be just runInNewContext on magical context objects which are + // otherwise indistinguishable from objects except plain old objects + // for the parameter segfaults node + return this.runInNewContext(context); +}; + +forEach(Object_keys(Script.prototype), function (name) { + exports[name] = Script[name] = function (code) { + var s = Script(code); + return s[name].apply(s, [].slice.call(arguments, 1)); + }; +}); + +exports.createScript = function (code) { + return exports.Script(code); +}; + +exports.createContext = Script.createContext = function (context) { + // not really sure what this one does + // seems to just make a shallow copy + var copy = {}; + forEach(Object_keys(context), function (key) { + copy[key] = context[key]; + }); + return copy; +}; + +}); + +require.define("/entry.js", function (require, module, exports, __dirname, __filename) { + var vm = require('vm'); + +$(function () { + var res = vm.runInNewContext('a + 5', { a : 100 }); + $('#res').text(res); +}); + +}); +require("/entry.js"); diff --git a/node_modules/vm-browserify/example/run/entry.js b/node_modules/vm-browserify/example/run/entry.js new file mode 100644 index 000000000..c7d38918c --- /dev/null +++ b/node_modules/vm-browserify/example/run/entry.js @@ -0,0 +1,6 @@ +var vm = require('vm'); + +$(function () { + var res = vm.runInNewContext('a + 5', { a : 100 }); + $('#res').text(res); +}); diff --git a/node_modules/vm-browserify/example/run/index.html b/node_modules/vm-browserify/example/run/index.html new file mode 100644 index 000000000..1ea094235 --- /dev/null +++ b/node_modules/vm-browserify/example/run/index.html @@ -0,0 +1,9 @@ + + + + + + + result = + + diff --git a/node_modules/vm-browserify/example/run/server.js b/node_modules/vm-browserify/example/run/server.js new file mode 100644 index 000000000..339d3eea0 --- /dev/null +++ b/node_modules/vm-browserify/example/run/server.js @@ -0,0 +1,6 @@ +var ecstatic = require('ecstatic')(__dirname); +var http = require('http'); +http.createServer(ecstatic).listen(8000); + +console.log('listening on :8000'); +console.log('# remember to run browserify entry.js -o bundle.js'); diff --git a/node_modules/vm-browserify/index.js b/node_modules/vm-browserify/index.js new file mode 100644 index 000000000..644efd1b1 --- /dev/null +++ b/node_modules/vm-browserify/index.js @@ -0,0 +1,138 @@ +var indexOf = require('indexof'); + +var Object_keys = function (obj) { + if (Object.keys) return Object.keys(obj) + else { + var res = []; + for (var key in obj) res.push(key) + return res; + } +}; + +var forEach = function (xs, fn) { + if (xs.forEach) return xs.forEach(fn) + else for (var i = 0; i < xs.length; i++) { + fn(xs[i], i, xs); + } +}; + +var defineProp = (function() { + try { + Object.defineProperty({}, '_', {}); + return function(obj, name, value) { + Object.defineProperty(obj, name, { + writable: true, + enumerable: false, + configurable: true, + value: value + }) + }; + } catch(e) { + return function(obj, name, value) { + obj[name] = value; + }; + } +}()); + +var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', +'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', +'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', +'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', +'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; + +function Context() {} +Context.prototype = {}; + +var Script = exports.Script = function NodeScript (code) { + if (!(this instanceof Script)) return new Script(code); + this.code = code; +}; + +Script.prototype.runInContext = function (context) { + if (!(context instanceof Context)) { + throw new TypeError("needs a 'context' argument."); + } + + var iframe = document.createElement('iframe'); + if (!iframe.style) iframe.style = {}; + iframe.style.display = 'none'; + + document.body.appendChild(iframe); + + var win = iframe.contentWindow; + var wEval = win.eval, wExecScript = win.execScript; + + if (!wEval && wExecScript) { + // win.eval() magically appears when this is called in IE: + wExecScript.call(win, 'null'); + wEval = win.eval; + } + + forEach(Object_keys(context), function (key) { + win[key] = context[key]; + }); + forEach(globals, function (key) { + if (context[key]) { + win[key] = context[key]; + } + }); + + var winKeys = Object_keys(win); + + var res = wEval.call(win, this.code); + + forEach(Object_keys(win), function (key) { + // Avoid copying circular objects like `top` and `window` by only + // updating existing context properties or new properties in the `win` + // that was only introduced after the eval. + if (key in context || indexOf(winKeys, key) === -1) { + context[key] = win[key]; + } + }); + + forEach(globals, function (key) { + if (!(key in context)) { + defineProp(context, key, win[key]); + } + }); + + document.body.removeChild(iframe); + + return res; +}; + +Script.prototype.runInThisContext = function () { + return eval(this.code); // maybe... +}; + +Script.prototype.runInNewContext = function (context) { + var ctx = Script.createContext(context); + var res = this.runInContext(ctx); + + forEach(Object_keys(ctx), function (key) { + context[key] = ctx[key]; + }); + + return res; +}; + +forEach(Object_keys(Script.prototype), function (name) { + exports[name] = Script[name] = function (code) { + var s = Script(code); + return s[name].apply(s, [].slice.call(arguments, 1)); + }; +}); + +exports.createScript = function (code) { + return exports.Script(code); +}; + +exports.createContext = Script.createContext = function (context) { + var copy = new Context(); + if(typeof context === 'object') { + forEach(Object_keys(context), function (key) { + copy[key] = context[key]; + }); + } + return copy; +}; diff --git a/node_modules/vm-browserify/package.json b/node_modules/vm-browserify/package.json new file mode 100644 index 000000000..43aace4d0 --- /dev/null +++ b/node_modules/vm-browserify/package.json @@ -0,0 +1,75 @@ +{ + "_from": "vm-browserify@0.0.4", + "_id": "vm-browserify@0.0.4", + "_inBundle": false, + "_integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "_location": "/vm-browserify", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "vm-browserify@0.0.4", + "name": "vm-browserify", + "escapedName": "vm-browserify", + "rawSpec": "0.0.4", + "saveSpec": null, + "fetchSpec": "0.0.4" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "_shasum": "5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73", + "_spec": "vm-browserify@0.0.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/vm-browserify/issues" + }, + "bundleDependencies": false, + "dependencies": { + "indexof": "0.0.1" + }, + "deprecated": false, + "description": "vm module for the browser", + "devDependencies": { + "tape": "~2.3.2" + }, + "homepage": "https://github.com/substack/vm-browserify#readme", + "keywords": [ + "vm", + "browser", + "eval" + ], + "license": "MIT", + "main": "index.js", + "name": "vm-browserify", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/substack/vm-browserify.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "firefox/16..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "0.0.4" +} diff --git a/node_modules/vm-browserify/readme.markdown b/node_modules/vm-browserify/readme.markdown new file mode 100644 index 000000000..1ad139b66 --- /dev/null +++ b/node_modules/vm-browserify/readme.markdown @@ -0,0 +1,67 @@ +# vm-browserify + +emulate node's vm module for the browser + +[![testling badge](https://ci.testling.com/substack/vm-browserify.png)](https://ci.testling.com/substack/vm-browserify) + +# example + +Just write some client-side javascript: + +``` js +var vm = require('vm'); + +$(function () { + var res = vm.runInNewContext('a + 5', { a : 100 }); + $('#res').text(res); +}); +``` + +compile it with [browserify](http://github.com/substack/node-browserify): + +``` +browserify entry.js -o bundle.js +``` + +then whip up some html: + +``` html + + + + + + + result = + + +``` + +and when you load the page you should see: + +``` +result = 105 +``` + +# methods + +## vm.runInNewContext(code, context={}) + +Evaluate some `code` in a new iframe with a `context`. + +Contexts are like wrapping your code in a `with()` except slightly less terrible +because the code is sandboxed into a new iframe. + +# install + +This module is depended upon by browserify, so you should just be able to +`require('vm')` and it will just work. However if you want to use this module +directly you can install it with [npm](http://npmjs.org): + +``` +npm install vm-browserify +``` + +# license + +MIT diff --git a/node_modules/vm-browserify/test/vm.js b/node_modules/vm-browserify/test/vm.js new file mode 100644 index 000000000..ea8cd31be --- /dev/null +++ b/node_modules/vm-browserify/test/vm.js @@ -0,0 +1,35 @@ +var test = require('tape'); +var vm = require('../'); + +test('vmRunInNewContext', function (t) { + t.plan(6); + + t.equal(vm.runInNewContext('a + 5', { a : 100 }), 105); + + (function () { + var vars = { x : 10 }; + t.equal(vm.runInNewContext('x++', vars), 10); + t.equal(vars.x, 11); + })(); + + (function () { + var vars = { x : 10 }; + t.equal(vm.runInNewContext('var y = 3; y + x++', vars), 13); + t.equal(vars.x, 11); + t.equal(vars.y, 3); + })(); + + t.end(); +}); + +test('vmRunInContext', function (t) { + t.plan(2); + + var context = vm.createContext({ foo: 1 }); + + vm.runInContext('var x = 1', context); + t.deepEqual(context, { foo: 1, x: 1 }); + + vm.runInContext('var y = 1', context); + t.deepEqual(context, { foo: 1, x: 1, y: 1 }); +}); diff --git a/node_modules/watchpack/LICENSE b/node_modules/watchpack/LICENSE new file mode 100644 index 000000000..8c11fc728 --- /dev/null +++ b/node_modules/watchpack/LICENSE @@ -0,0 +1,20 @@ +Copyright JS Foundation and other 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/node_modules/watchpack/README.md b/node_modules/watchpack/README.md new file mode 100644 index 000000000..8288412d0 --- /dev/null +++ b/node_modules/watchpack/README.md @@ -0,0 +1,72 @@ +# watchpack + +Wrapper library for directory and file watching. + +[![Build Status](https://travis-ci.org/webpack/watchpack.svg?branch=master)](https://travis-ci.org/webpack/watchpack) [![Build status](https://ci.appveyor.com/api/projects/status/e5u2qvmugtv0r647/branch/master?svg=true)](https://ci.appveyor.com/project/sokra/watchpack/branch/master) [![Test coverage][coveralls-image]][coveralls-url] + +## Concept + +watchpack high level API don't map directly to watchers. Instead a three level architecture ensures that for each directory only a single watcher exists. + +* The high level API requests `DirectoryWatchers` from a `WatcherManager`, which ensures that only a single `DirectoryWatcher` per directory is created. +* A user-faced `Watcher` can be obtained from a `DirectoryWatcher` and provides a filtered view on the `DirectoryWatcher`. +* Reference-counting is used on the `DirectoryWatcher` and `Watcher` to decide when to close them. +* The real watchers (currently chokidar) are created by the `DirectoryWatcher`. +* Files are never watched directly. This should keep the watcher count low. +* Watching can be started in the past. This way watching can start after file reading. +* Symlinks are not followed, instead the symlink is watched. + +## API + +``` javascript +var Watchpack = require("watchpack"); + +var wp = new Watchpack({ + // options: + aggregateTimeout: 1000 + // fire "aggregated" event when after a change for 1000ms no additonal change occured + // aggregated defaults to undefined, which doesn't fire an "aggregated" event + + poll: true + // poll: true - use polling with the default interval + // poll: 10000 - use polling with an interval of 10s + // poll defaults to undefined, which prefer native watching methods + // Note: enable polling when watching on a network path + + ignored: /node_modules/, + // anymatch-compatible definition of files/paths to be ignored + // see https://github.com/paulmillr/chokidar#path-filtering +}); + +// Watchpack.prototype.watch(string[] files, string[] directories, [number startTime]) +wp.watch(listOfFiles, listOfDirectories, Date.now() - 10000); +// starts watching these files and directories +// calling this again will override the files and directories + +wp.on("change", function(filePath, mtime) { + // filePath: the changed file + // mtime: last modified time for the changed file +}); + +wp.on("aggregated", function(changes) { + // changes: an array of all changed files +}); + +// Watchpack.prototype.pause() +wp.pause(); +// stops emitting events, but keeps watchers open +// next "watch" call can reuse the watchers + +// Watchpack.prototype.close() +wp.close(); +// stops emitting events and closes all watchers + +// Watchpack.prototype.getTimes() +var fileTimes = wp.getTimes(); +// returns an object with all know change times for files +// this include timestamps from files not directly watched +// key: absolute path, value: timestamp as number +``` + +[coveralls-url]: https://coveralls.io/r/webpack/watchpack/ +[coveralls-image]: https://img.shields.io/coveralls/webpack/watchpack.svg diff --git a/node_modules/watchpack/lib/DirectoryWatcher.js b/node_modules/watchpack/lib/DirectoryWatcher.js new file mode 100644 index 000000000..2aea0dfaa --- /dev/null +++ b/node_modules/watchpack/lib/DirectoryWatcher.js @@ -0,0 +1,356 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var EventEmitter = require("events").EventEmitter; +var async = require("async"); +var chokidar = require("chokidar"); +var fs = require("graceful-fs"); +var path = require("path"); + +var watcherManager = require("./watcherManager"); + +var FS_ACCURACY = 10000; + + +function withoutCase(str) { + return str.toLowerCase(); +} + + +function Watcher(directoryWatcher, filePath, startTime) { + EventEmitter.call(this); + this.directoryWatcher = directoryWatcher; + this.path = filePath; + this.startTime = startTime && +startTime; + this.data = 0; +} + +Watcher.prototype = Object.create(EventEmitter.prototype); +Watcher.prototype.constructor = Watcher; + +Watcher.prototype.checkStartTime = function checkStartTime(mtime, initial) { + if(typeof this.startTime !== "number") return !initial; + var startTime = this.startTime; + return startTime <= mtime; +}; + +Watcher.prototype.close = function close() { + this.emit("closed"); +}; + + +function DirectoryWatcher(directoryPath, options) { + EventEmitter.call(this); + this.options = options; + this.path = directoryPath; + this.files = Object.create(null); + this.directories = Object.create(null); + this.watcher = chokidar.watch(directoryPath, { + ignoreInitial: true, + persistent: true, + followSymlinks: false, + depth: 0, + atomic: false, + alwaysStat: true, + ignorePermissionErrors: true, + ignored: options.ignored, + usePolling: options.poll ? true : undefined, + interval: typeof options.poll === "number" ? options.poll : undefined, + disableGlobbing: true + }); + this.watcher.on("add", this.onFileAdded.bind(this)); + this.watcher.on("addDir", this.onDirectoryAdded.bind(this)); + this.watcher.on("change", this.onChange.bind(this)); + this.watcher.on("unlink", this.onFileUnlinked.bind(this)); + this.watcher.on("unlinkDir", this.onDirectoryUnlinked.bind(this)); + this.watcher.on("error", this.onWatcherError.bind(this)); + this.initialScan = true; + this.nestedWatching = false; + this.initialScanRemoved = []; + this.doInitialScan(); + this.watchers = Object.create(null); + this.refs = 0; +} +module.exports = DirectoryWatcher; + +DirectoryWatcher.prototype = Object.create(EventEmitter.prototype); +DirectoryWatcher.prototype.constructor = DirectoryWatcher; + +DirectoryWatcher.prototype.setFileTime = function setFileTime(filePath, mtime, initial, type) { + var now = Date.now(); + var old = this.files[filePath]; + + this.files[filePath] = [initial ? Math.min(now, mtime) : now, mtime]; + + // we add the fs accurency to reach the maximum possible mtime + if(mtime) + mtime = mtime + FS_ACCURACY; + + if(!old) { + if(mtime) { + if(this.watchers[withoutCase(filePath)]) { + this.watchers[withoutCase(filePath)].forEach(function(w) { + if(!initial || w.checkStartTime(mtime, initial)) { + w.emit("change", mtime, initial ? "initial" : type); + } + }); + } + } + } else if(!initial && mtime && type !== "add") { + if(this.watchers[withoutCase(filePath)]) { + this.watchers[withoutCase(filePath)].forEach(function(w) { + w.emit("change", mtime, type); + }); + } + } else if(!initial && !mtime) { + if(this.watchers[withoutCase(filePath)]) { + this.watchers[withoutCase(filePath)].forEach(function(w) { + w.emit("remove", type); + }); + } + } + if(this.watchers[withoutCase(this.path)]) { + this.watchers[withoutCase(this.path)].forEach(function(w) { + if(!initial || w.checkStartTime(mtime, initial)) { + w.emit("change", filePath, mtime, initial ? "initial" : type); + } + }); + } +}; + +DirectoryWatcher.prototype.setDirectory = function setDirectory(directoryPath, exist, initial, type) { + if(directoryPath === this.path) { + if(!initial && this.watchers[withoutCase(this.path)]) { + this.watchers[withoutCase(this.path)].forEach(function(w) { + w.emit("change", directoryPath, w.data, initial ? "initial" : type); + }); + } + } else { + var old = this.directories[directoryPath]; + if(!old) { + if(exist) { + if(this.nestedWatching) { + this.createNestedWatcher(directoryPath); + } else { + this.directories[directoryPath] = true; + } + if(!initial && this.watchers[withoutCase(this.path)]) { + this.watchers[withoutCase(this.path)].forEach(function(w) { + w.emit("change", directoryPath, w.data, initial ? "initial" : type); + }); + } + } + } else { + if(!exist) { + if(this.nestedWatching) + this.directories[directoryPath].close(); + delete this.directories[directoryPath]; + if(!initial && this.watchers[withoutCase(this.path)]) { + this.watchers[withoutCase(this.path)].forEach(function(w) { + w.emit("change", directoryPath, w.data, initial ? "initial" : type); + }); + } + } + } + } +}; + +DirectoryWatcher.prototype.createNestedWatcher = function(directoryPath) { + this.directories[directoryPath] = watcherManager.watchDirectory(directoryPath, this.options, 1); + this.directories[directoryPath].on("change", function(filePath, mtime, type) { + if(this.watchers[withoutCase(this.path)]) { + this.watchers[withoutCase(this.path)].forEach(function(w) { + if(w.checkStartTime(mtime, false)) { + w.emit("change", filePath, mtime, type); + } + }); + } + }.bind(this)); +}; + +DirectoryWatcher.prototype.setNestedWatching = function(flag) { + if(this.nestedWatching !== !!flag) { + this.nestedWatching = !!flag; + if(this.nestedWatching) { + Object.keys(this.directories).forEach(function(directory) { + this.createNestedWatcher(directory); + }, this); + } else { + Object.keys(this.directories).forEach(function(directory) { + this.directories[directory].close(); + this.directories[directory] = true; + }, this); + } + } +}; + +DirectoryWatcher.prototype.watch = function watch(filePath, startTime) { + this.watchers[withoutCase(filePath)] = this.watchers[withoutCase(filePath)] || []; + this.refs++; + var watcher = new Watcher(this, filePath, startTime); + watcher.on("closed", function() { + var idx = this.watchers[withoutCase(filePath)].indexOf(watcher); + this.watchers[withoutCase(filePath)].splice(idx, 1); + if(this.watchers[withoutCase(filePath)].length === 0) { + delete this.watchers[withoutCase(filePath)]; + if(this.path === filePath) + this.setNestedWatching(false); + } + if(--this.refs <= 0) + this.close(); + }.bind(this)); + this.watchers[withoutCase(filePath)].push(watcher); + var data; + if(filePath === this.path) { + this.setNestedWatching(true); + data = false; + Object.keys(this.files).forEach(function(file) { + var d = this.files[file]; + if(!data) + data = d; + else + data = [Math.max(data[0], d[0]), Math.max(data[1], d[1])]; + }, this); + } else { + data = this.files[filePath]; + } + process.nextTick(function() { + if(data) { + var ts = data[0] === data[1] ? data[0] + FS_ACCURACY : data[0]; + if(ts >= startTime) + watcher.emit("change", data[1]); + } else if(this.initialScan && this.initialScanRemoved.indexOf(filePath) >= 0) { + watcher.emit("remove"); + } + }.bind(this)); + return watcher; +}; + +DirectoryWatcher.prototype.onFileAdded = function onFileAdded(filePath, stat) { + if(filePath.indexOf(this.path) !== 0) return; + if(/[\\\/]/.test(filePath.substr(this.path.length + 1))) return; + + this.setFileTime(filePath, +stat.mtime, false, "add"); +}; + +DirectoryWatcher.prototype.onDirectoryAdded = function onDirectoryAdded(directoryPath /*, stat */) { + if(directoryPath.indexOf(this.path) !== 0) return; + if(/[\\\/]/.test(directoryPath.substr(this.path.length + 1))) return; + this.setDirectory(directoryPath, true, false, "add"); +}; + +DirectoryWatcher.prototype.onChange = function onChange(filePath, stat) { + if(filePath.indexOf(this.path) !== 0) return; + if(/[\\\/]/.test(filePath.substr(this.path.length + 1))) return; + var mtime = +stat.mtime; + ensureFsAccuracy(mtime); + this.setFileTime(filePath, mtime, false, "change"); +}; + +DirectoryWatcher.prototype.onFileUnlinked = function onFileUnlinked(filePath) { + if(filePath.indexOf(this.path) !== 0) return; + if(/[\\\/]/.test(filePath.substr(this.path.length + 1))) return; + this.setFileTime(filePath, null, false, "unlink"); + if(this.initialScan) { + this.initialScanRemoved.push(filePath); + } +}; + +DirectoryWatcher.prototype.onDirectoryUnlinked = function onDirectoryUnlinked(directoryPath) { + if(directoryPath.indexOf(this.path) !== 0) return; + if(/[\\\/]/.test(directoryPath.substr(this.path.length + 1))) return; + this.setDirectory(directoryPath, false, false, "unlink"); + if(this.initialScan) { + this.initialScanRemoved.push(directoryPath); + } +}; + +DirectoryWatcher.prototype.onWatcherError = function onWatcherError(/* err */) { +}; + +DirectoryWatcher.prototype.doInitialScan = function doInitialScan() { + fs.readdir(this.path, function(err, items) { + if(err) { + this.initialScan = false; + return; + } + async.forEach(items, function(item, callback) { + var itemPath = path.join(this.path, item); + fs.stat(itemPath, function(err2, stat) { + if(!this.initialScan) return; + if(err2) { + callback(); + return; + } + if(stat.isFile()) { + if(!this.files[itemPath]) + this.setFileTime(itemPath, +stat.mtime, true); + } else if(stat.isDirectory()) { + if(!this.directories[itemPath]) + this.setDirectory(itemPath, true, true); + } + callback(); + }.bind(this)); + }.bind(this), function() { + this.initialScan = false; + this.initialScanRemoved = null; + }.bind(this)); + }.bind(this)); +}; + +DirectoryWatcher.prototype.getTimes = function() { + var obj = Object.create(null); + var selfTime = 0; + Object.keys(this.files).forEach(function(file) { + var data = this.files[file]; + var time; + if(data[1]) { + time = Math.max(data[0], data[1] + FS_ACCURACY); + } else { + time = data[0]; + } + obj[file] = time; + if(time > selfTime) + selfTime = time; + }, this); + if(this.nestedWatching) { + Object.keys(this.directories).forEach(function(dir) { + var w = this.directories[dir]; + var times = w.directoryWatcher.getTimes(); + Object.keys(times).forEach(function(file) { + var time = times[file]; + obj[file] = time; + if(time > selfTime) + selfTime = time; + }); + }, this); + obj[this.path] = selfTime; + } + return obj; +}; + +DirectoryWatcher.prototype.close = function() { + this.initialScan = false; + this.watcher.close(); + if(this.nestedWatching) { + Object.keys(this.directories).forEach(function(dir) { + this.directories[dir].close(); + }, this); + } + this.emit("closed"); +}; + +function ensureFsAccuracy(mtime) { + if(!mtime) return; + if(FS_ACCURACY > 1 && mtime % 1 !== 0) + FS_ACCURACY = 1; + else if(FS_ACCURACY > 10 && mtime % 10 !== 0) + FS_ACCURACY = 10; + else if(FS_ACCURACY > 100 && mtime % 100 !== 0) + FS_ACCURACY = 100; + else if(FS_ACCURACY > 1000 && mtime % 1000 !== 0) + FS_ACCURACY = 1000; + else if(FS_ACCURACY > 2000 && mtime % 2000 !== 0) + FS_ACCURACY = 2000; +} diff --git a/node_modules/watchpack/lib/watcherManager.js b/node_modules/watchpack/lib/watcherManager.js new file mode 100644 index 000000000..128ac42aa --- /dev/null +++ b/node_modules/watchpack/lib/watcherManager.js @@ -0,0 +1,33 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var path = require("path"); + +function WatcherManager() { + this.directoryWatchers = {}; +} + +WatcherManager.prototype.getDirectoryWatcher = function(directory, options) { + var DirectoryWatcher = require("./DirectoryWatcher"); + options = options || {}; + var key = directory + " " + JSON.stringify(options); + if(!this.directoryWatchers[key]) { + this.directoryWatchers[key] = new DirectoryWatcher(directory, options); + this.directoryWatchers[key].on("closed", function() { + delete this.directoryWatchers[key]; + }.bind(this)); + } + return this.directoryWatchers[key]; +}; + +WatcherManager.prototype.watchFile = function watchFile(p, options, startTime) { + var directory = path.dirname(p); + return this.getDirectoryWatcher(directory, options).watch(p, startTime); +}; + +WatcherManager.prototype.watchDirectory = function watchDirectory(directory, options, startTime) { + return this.getDirectoryWatcher(directory, options).watch(directory, startTime); +}; + +module.exports = new WatcherManager(); diff --git a/node_modules/watchpack/lib/watchpack.js b/node_modules/watchpack/lib/watchpack.js new file mode 100644 index 000000000..213f333bc --- /dev/null +++ b/node_modules/watchpack/lib/watchpack.js @@ -0,0 +1,143 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var watcherManager = require("./watcherManager"); +var EventEmitter = require("events").EventEmitter; + +function Watchpack(options) { + EventEmitter.call(this); + if(!options) options = {}; + if(!options.aggregateTimeout) options.aggregateTimeout = 200; + this.options = options; + this.watcherOptions = { + ignored: options.ignored, + poll: options.poll + }; + this.fileWatchers = []; + this.dirWatchers = []; + this.mtimes = Object.create(null); + this.paused = false; + this.aggregatedChanges = []; + this.aggregatedRemovals = []; + this.aggregateTimeout = 0; + this._onTimeout = this._onTimeout.bind(this); +} + +module.exports = Watchpack; + +Watchpack.prototype = Object.create(EventEmitter.prototype); + +Watchpack.prototype.watch = function watch(files, directories, startTime) { + this.paused = false; + var oldFileWatchers = this.fileWatchers; + var oldDirWatchers = this.dirWatchers; + this.fileWatchers = files.map(function(file) { + return this._fileWatcher(file, watcherManager.watchFile(file, this.watcherOptions, startTime)); + }, this); + this.dirWatchers = directories.map(function(dir) { + return this._dirWatcher(dir, watcherManager.watchDirectory(dir, this.watcherOptions, startTime)); + }, this); + oldFileWatchers.forEach(function(w) { + w.close(); + }, this); + oldDirWatchers.forEach(function(w) { + w.close(); + }, this); +}; + +Watchpack.prototype.close = function resume() { + this.paused = true; + if(this.aggregateTimeout) + clearTimeout(this.aggregateTimeout); + this.fileWatchers.forEach(function(w) { + w.close(); + }, this); + this.dirWatchers.forEach(function(w) { + w.close(); + }, this); + this.fileWatchers.length = 0; + this.dirWatchers.length = 0; +}; + +Watchpack.prototype.pause = function pause() { + this.paused = true; + if(this.aggregateTimeout) + clearTimeout(this.aggregateTimeout); +}; + +function addWatchersToArray(watchers, array) { + watchers.forEach(function(w) { + if(array.indexOf(w.directoryWatcher) < 0) { + array.push(w.directoryWatcher); + addWatchersToArray(Object.keys(w.directoryWatcher.directories).reduce(function(a, dir) { + if(w.directoryWatcher.directories[dir] !== true) + a.push(w.directoryWatcher.directories[dir]); + return a; + }, []), array); + } + }); +} + +Watchpack.prototype.getTimes = function() { + var directoryWatchers = []; + addWatchersToArray(this.fileWatchers.concat(this.dirWatchers), directoryWatchers); + var obj = Object.create(null); + directoryWatchers.forEach(function(w) { + var times = w.getTimes(); + Object.keys(times).forEach(function(file) { + obj[file] = times[file]; + }); + }); + return obj; +}; + +Watchpack.prototype._fileWatcher = function _fileWatcher(file, watcher) { + watcher.on("change", function(mtime, type) { + this._onChange(file, mtime, file, type); + }.bind(this)); + watcher.on("remove", function(type) { + this._onRemove(file, file, type); + }.bind(this)); + return watcher; +}; + +Watchpack.prototype._dirWatcher = function _dirWatcher(item, watcher) { + watcher.on("change", function(file, mtime, type) { + this._onChange(item, mtime, file, type); + }.bind(this)); + return watcher; +}; + +Watchpack.prototype._onChange = function _onChange(item, mtime, file) { + file = file || item; + this.mtimes[file] = mtime; + if(this.paused) return; + this.emit("change", file, mtime); + if(this.aggregateTimeout) + clearTimeout(this.aggregateTimeout); + if(this.aggregatedChanges.indexOf(item) < 0) + this.aggregatedChanges.push(item); + this.aggregateTimeout = setTimeout(this._onTimeout, this.options.aggregateTimeout); +}; + +Watchpack.prototype._onRemove = function _onRemove(item, file) { + file = file || item; + delete this.mtimes[item]; + if(this.paused) return; + this.emit("remove", item); + if(this.aggregateTimeout) + clearTimeout(this.aggregateTimeout); + if(this.aggregatedRemovals.indexOf(item) < 0) + this.aggregatedRemovals.push(item); + this.aggregateTimeout = setTimeout(this._onTimeout, this.options.aggregateTimeout); +}; + +Watchpack.prototype._onTimeout = function _onTimeout() { + this.aggregateTimeout = 0; + var changes = this.aggregatedChanges; + var removals = this.aggregatedRemovals; + this.aggregatedChanges = []; + this.aggregatedRemovals = []; + this.emit("aggregated", changes, removals); +}; diff --git a/node_modules/watchpack/node_modules/async/CHANGELOG.md b/node_modules/watchpack/node_modules/async/CHANGELOG.md new file mode 100644 index 000000000..fa7e4d614 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/CHANGELOG.md @@ -0,0 +1,257 @@ +# v2.5.0 +- Added `concatLimit`, the `Limit` equivalent of [`concat`](https://caolan.github.io/async/docs.html#concat) ([#1426](https://github.com/caolan/async/issues/1426), [#1430](https://github.com/caolan/async/pull/1430)) +- `concat` improvements: it now preserves order, handles falsy values and the `iteratee` callback takes a variable number of arguments ([#1437](https://github.com/caolan/async/issues/1437), [#1436](https://github.com/caolan/async/pull/1436)) +- Fixed an issue in `queue` where there was a size discrepancy between `workersList().length` and `running()` ([#1428](https://github.com/caolan/async/issues/1428), [#1429](https://github.com/caolan/async/pull/1429)) +- Various doc fixes ([#1422](https://github.com/caolan/async/issues/1422), [#1424](https://github.com/caolan/async/pull/1424)) + +# v2.4.1 +- Fixed a bug preventing functions wrapped with `timeout()` from being re-used. ([#1418](https://github.com/caolan/async/issues/1418), [#1419](https://github.com/caolan/async/issues/1419)) + +# v2.4.0 +- Added `tryEach`, for running async functions in parallel, where you only expect one to succeed. ([#1365](https://github.com/caolan/async/issues/1365), [#687](https://github.com/caolan/async/issues/687)) +- Improved performance, most notably in `parallel` and `waterfall` ([#1395](https://github.com/caolan/async/issues/1395)) +- Added `queue.remove()`, for removing items in a `queue` ([#1397](https://github.com/caolan/async/issues/1397), [#1391](https://github.com/caolan/async/issues/1391)) +- Fixed using `eval`, preventing Async from running in pages with Content Security Policy ([#1404](https://github.com/caolan/async/issues/1404), [#1403](https://github.com/caolan/async/issues/1403)) +- Fixed errors thrown in an `asyncify`ed function's callback being caught by the underlying Promise ([#1408](https://github.com/caolan/async/issues/1408)) +- Fixed timing of `queue.empty()` ([#1367](https://github.com/caolan/async/issues/1367)) +- Various doc fixes ([#1314](https://github.com/caolan/async/issues/1314), [#1394](https://github.com/caolan/async/issues/1394), [#1412](https://github.com/caolan/async/issues/1412)) + +# v2.3.0 +- Added support for ES2017 `async` functions. Wherever you can pass a Node-style/CPS function that uses a callback, you can also pass an `async` function. Previously, you had to wrap `async` functions with `asyncify`. The caveat is that it will only work if `async` functions are supported natively in your environment, transpiled implementations can't be detected. ([#1386](https://github.com/caolan/async/issues/1386), [#1390](https://github.com/caolan/async/issues/1390)) +- Small doc fix ([#1392](https://github.com/caolan/async/issues/1392)) + +# v2.2.0 +- Added `groupBy`, and the `Series`/`Limit` equivalents, analogous to [`_.groupBy`](http://lodash.com/docs#groupBy) ([#1364](https://github.com/caolan/async/issues/1364)) +- Fixed `transform` bug when `callback` was not passed ([#1381](https://github.com/caolan/async/issues/1381)) +- Added note about `reflect` to `parallel` docs ([#1385](https://github.com/caolan/async/issues/1385)) + +# v2.1.5 +- Fix `auto` bug when function names collided with Array.prototype ([#1358](https://github.com/caolan/async/issues/1358)) +- Improve some error messages ([#1349](https://github.com/caolan/async/issues/1349)) +- Avoid stack overflow case in queue +- Fixed an issue in `some`, `every` and `find` where processing would continue after the result was determined. +- Cleanup implementations of `some`, `every` and `find` + +# v2.1.3 +- Make bundle size smaller +- Create optimized hotpath for `filter` in array case. + +# v2.1.2 +- Fixed a stackoverflow bug with `detect`, `some`, `every` on large inputs ([#1293](https://github.com/caolan/async/issues/1293)). + +# v2.1.0 + +- `retry` and `retryable` now support an optional `errorFilter` function that determines if the `task` should retry on the error ([#1256](https://github.com/caolan/async/issues/1256), [#1261](https://github.com/caolan/async/issues/1261)) +- Optimized array iteration in `race`, `cargo`, `queue`, and `priorityQueue` ([#1253](https://github.com/caolan/async/issues/1253)) +- Added alias documentation to doc site ([#1251](https://github.com/caolan/async/issues/1251), [#1254](https://github.com/caolan/async/issues/1254)) +- Added [BootStrap scrollspy](http://getbootstrap.com/javascript/#scrollspy) to docs to highlight in the sidebar the current method being viewed ([#1289](https://github.com/caolan/async/issues/1289), [#1300](https://github.com/caolan/async/issues/1300)) +- Various minor doc fixes ([#1263](https://github.com/caolan/async/issues/1263), [#1264](https://github.com/caolan/async/issues/1264), [#1271](https://github.com/caolan/async/issues/1271), [#1278](https://github.com/caolan/async/issues/1278), [#1280](https://github.com/caolan/async/issues/1280), [#1282](https://github.com/caolan/async/issues/1282), [#1302](https://github.com/caolan/async/issues/1302)) + +# v2.0.1 + +- Significantly optimized all iteration based collection methods such as `each`, `map`, `filter`, etc ([#1245](https://github.com/caolan/async/issues/1245), [#1246](https://github.com/caolan/async/issues/1246), [#1247](https://github.com/caolan/async/issues/1247)). + +# v2.0.0 + +Lots of changes here! + +First and foremost, we have a slick new [site for docs](https://caolan.github.io/async/). Special thanks to [**@hargasinski**](https://github.com/hargasinski) for his work converting our old docs to `jsdoc` format and implementing the new website. Also huge ups to [**@ivanseidel**](https://github.com/ivanseidel) for designing our new logo. It was a long process for both of these tasks, but I think these changes turned out extraordinary well. + +The biggest feature is modularization. You can now `require("async/series")` to only require the `series` function. Every Async library function is available this way. You still can `require("async")` to require the entire library, like you could do before. + +We also provide Async as a collection of ES2015 modules. You can now `import {each} from 'async-es'` or `import waterfall from 'async-es/waterfall'`. If you are using only a few Async functions, and are using a ES bundler such as Rollup, this can significantly lower your build size. + +Major thanks to [**@Kikobeats**](github.com/Kikobeats), [**@aearly**](github.com/aearly) and [**@megawac**](github.com/megawac) for doing the majority of the modularization work, as well as [**@jdalton**](github.com/jdalton) and [**@Rich-Harris**](github.com/Rich-Harris) for advisory work on the general modularization strategy. + +Another one of the general themes of the 2.0 release is standardization of what an "async" function is. We are now more strictly following the node-style continuation passing style. That is, an async function is a function that: + +1. Takes a variable number of arguments +2. The last argument is always a callback +3. The callback can accept any number of arguments +4. The first argument passed to the callback will be treated as an error result, if the argument is truthy +5. Any number of result arguments can be passed after the "error" argument +6. The callback is called once and exactly once, either on the same tick or later tick of the JavaScript event loop. + +There were several cases where Async accepted some functions that did not strictly have these properties, most notably `auto`, `every`, `some`, and `filter`. + +Another theme is performance. We have eliminated internal deferrals in all cases where they make sense. For example, in `waterfall` and `auto`, there was a `setImmediate` between each task -- these deferrals have been removed. A `setImmediate` call can add up to 1ms of delay. This might not seem like a lot, but it can add up if you are using many Async functions in the course of processing a HTTP request, for example. Nearly all asynchronous functions that do I/O already have some sort of deferral built in, so the extra deferral is unnecessary. The trade-off of this change is removing our built-in stack-overflow defense. Many synchronous callback calls in series can quickly overflow the JS call stack. If you do have a function that is sometimes synchronous (calling its callback on the same tick), and are running into stack overflows, wrap it with `async.ensureAsync()`. + +Another big performance win has been re-implementing `queue`, `cargo`, and `priorityQueue` with [doubly linked lists](https://en.wikipedia.org/wiki/Doubly_linked_list) instead of arrays. This has lead to queues being an order of [magnitude faster on large sets of tasks](https://github.com/caolan/async/pull/1205). + +## New Features + +- Async is now modularized. Individual functions can be `require()`d from the main package. (`require('async/auto')`) ([#984](https://github.com/caolan/async/issues/984), [#996](https://github.com/caolan/async/issues/996)) +- Async is also available as a collection of ES2015 modules in the new `async-es` package. (`import {forEachSeries} from 'async-es'`) ([#984](https://github.com/caolan/async/issues/984), [#996](https://github.com/caolan/async/issues/996)) +- Added `race`, analogous to `Promise.race()`. It will run an array of async tasks in parallel and will call its callback with the result of the first task to respond. ([#568](https://github.com/caolan/async/issues/568), [#1038](https://github.com/caolan/async/issues/1038)) +- Collection methods now accept ES2015 iterators. Maps, Sets, and anything that implements the iterator spec can now be passed directly to `each`, `map`, `parallel`, etc.. ([#579](https://github.com/caolan/async/issues/579), [#839](https://github.com/caolan/async/issues/839), [#1074](https://github.com/caolan/async/issues/1074)) +- Added `mapValues`, for mapping over the properties of an object and returning an object with the same keys. ([#1157](https://github.com/caolan/async/issues/1157), [#1177](https://github.com/caolan/async/issues/1177)) +- Added `timeout`, a wrapper for an async function that will make the task time-out after the specified time. ([#1007](https://github.com/caolan/async/issues/1007), [#1027](https://github.com/caolan/async/issues/1027)) +- Added `reflect` and `reflectAll`, analagous to [`Promise.reflect()`](http://bluebirdjs.com/docs/api/reflect.html), a wrapper for async tasks that always succeeds, by gathering results and errors into an object. ([#942](https://github.com/caolan/async/issues/942), [#1012](https://github.com/caolan/async/issues/1012), [#1095](https://github.com/caolan/async/issues/1095)) +- `constant` supports dynamic arguments -- it will now always use its last argument as the callback. ([#1016](https://github.com/caolan/async/issues/1016), [#1052](https://github.com/caolan/async/issues/1052)) +- `setImmediate` and `nextTick` now support arguments to partially apply to the deferred function, like the node-native versions do. ([#940](https://github.com/caolan/async/issues/940), [#1053](https://github.com/caolan/async/issues/1053)) +- `auto` now supports resolving cyclic dependencies using [Kahn's algorithm](https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm) ([#1140](https://github.com/caolan/async/issues/1140)). +- Added `autoInject`, a relative of `auto` that automatically spreads a task's dependencies as arguments to the task function. ([#608](https://github.com/caolan/async/issues/608), [#1055](https://github.com/caolan/async/issues/1055), [#1099](https://github.com/caolan/async/issues/1099), [#1100](https://github.com/caolan/async/issues/1100)) +- You can now limit the concurrency of `auto` tasks. ([#635](https://github.com/caolan/async/issues/635), [#637](https://github.com/caolan/async/issues/637)) +- Added `retryable`, a relative of `retry` that wraps an async function, making it retry when called. ([#1058](https://github.com/caolan/async/issues/1058)) +- `retry` now supports specifying a function that determines the next time interval, useful for exponential backoff, logging and other retry strategies. ([#1161](https://github.com/caolan/async/issues/1161)) +- `retry` will now pass all of the arguments the task function was resolved with to the callback ([#1231](https://github.com/caolan/async/issues/1231)). +- Added `q.unsaturated` -- callback called when a `queue`'s number of running workers falls below a threshold. ([#868](https://github.com/caolan/async/issues/868), [#1030](https://github.com/caolan/async/issues/1030), [#1033](https://github.com/caolan/async/issues/1033), [#1034](https://github.com/caolan/async/issues/1034)) +- Added `q.error` -- a callback called whenever a `queue` task calls its callback with an error. ([#1170](https://github.com/caolan/async/issues/1170)) +- `applyEach` and `applyEachSeries` now pass results to the final callback. ([#1088](https://github.com/caolan/async/issues/1088)) + +## Breaking changes + +- Calling a callback more than once is considered an error, and an error will be thrown. This had an explicit breaking change in `waterfall`. If you were relying on this behavior, you should more accurately represent your control flow as an event emitter or stream. ([#814](https://github.com/caolan/async/issues/814), [#815](https://github.com/caolan/async/issues/815), [#1048](https://github.com/caolan/async/issues/1048), [#1050](https://github.com/caolan/async/issues/1050)) +- `auto` task functions now always take the callback as the last argument. If a task has dependencies, the `results` object will be passed as the first argument. To migrate old task functions, wrap them with [`_.flip`](https://lodash.com/docs#flip) ([#1036](https://github.com/caolan/async/issues/1036), [#1042](https://github.com/caolan/async/issues/1042)) +- Internal `setImmediate` calls have been refactored away. This may make existing flows vulnerable to stack overflows if you use many synchronous functions in series. Use `ensureAsync` to work around this. ([#696](https://github.com/caolan/async/issues/696), [#704](https://github.com/caolan/async/issues/704), [#1049](https://github.com/caolan/async/issues/1049), [#1050](https://github.com/caolan/async/issues/1050)) +- `map` used to return an object when iterating over an object. `map` now always returns an array, like in other libraries. The previous object behavior has been split out into `mapValues`. ([#1157](https://github.com/caolan/async/issues/1157), [#1177](https://github.com/caolan/async/issues/1177)) +- `filter`, `reject`, `some`, `every`, and related functions now expect an error as the first callback argument, rather than just a simple boolean. Pass `null` as the first argument, or use `fs.access` instead of `fs.exists`. ([#118](https://github.com/caolan/async/issues/118), [#774](https://github.com/caolan/async/issues/774), [#1028](https://github.com/caolan/async/issues/1028), [#1041](https://github.com/caolan/async/issues/1041)) +- `{METHOD}` and `{METHOD}Series` are now implemented in terms of `{METHOD}Limit`. This is a major internal simplification, and is not expected to cause many problems, but it does subtly affect how functions execute internally. ([#778](https://github.com/caolan/async/issues/778), [#847](https://github.com/caolan/async/issues/847)) +- `retry`'s callback is now optional. Previously, omitting the callback would partially apply the function, meaning it could be passed directly as a task to `series` or `auto`. The partially applied "control-flow" behavior has been separated out into `retryable`. ([#1054](https://github.com/caolan/async/issues/1054), [#1058](https://github.com/caolan/async/issues/1058)) +- The test function for `whilst`, `until`, and `during` used to be passed non-error args from the iteratee function's callback, but this led to weirdness where the first call of the test function would be passed no args. We have made it so the test function is never passed extra arguments, and only the `doWhilst`, `doUntil`, and `doDuring` functions pass iteratee callback arguments to the test function ([#1217](https://github.com/caolan/async/issues/1217), [#1224](https://github.com/caolan/async/issues/1224)) +- The `q.tasks` array has been renamed `q._tasks` and is now implemented as a doubly linked list (DLL). Any code that used to interact with this array will need to be updated to either use the provided helpers or support DLLs ([#1205](https://github.com/caolan/async/issues/1205)). +- The timing of the `q.saturated()` callback in a `queue` has been modified to better reflect when tasks pushed to the queue will start queueing. ([#724](https://github.com/caolan/async/issues/724), [#1078](https://github.com/caolan/async/issues/1078)) +- Removed `iterator` method in favour of [ES2015 iterator protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators ) which natively supports arrays ([#1237](https://github.com/caolan/async/issues/1237)) +- Dropped support for Component, Jam, SPM, and Volo ([#1175](https://github.com/caolan/async/issues/1175), #[#176](https://github.com/caolan/async/issues/176)) + +## Bug Fixes + +- Improved handling of no dependency cases in `auto` & `autoInject` ([#1147](https://github.com/caolan/async/issues/1147)). +- Fixed a bug where the callback generated by `asyncify` with `Promises` could resolve twice ([#1197](https://github.com/caolan/async/issues/1197)). +- Fixed several documented optional callbacks not actually being optional ([#1223](https://github.com/caolan/async/issues/1223)). + +## Other + +- Added `someSeries` and `everySeries` for symmetry, as well as a complete set of `any`/`anyLimit`/`anySeries` and `all`/`/allLmit`/`allSeries` aliases. +- Added `find` as an alias for `detect. (as well as `findLimit` and `findSeries`). +- Various doc fixes ([#1005](https://github.com/caolan/async/issues/1005), [#1008](https://github.com/caolan/async/issues/1008), [#1010](https://github.com/caolan/async/issues/1010), [#1015](https://github.com/caolan/async/issues/1015), [#1021](https://github.com/caolan/async/issues/1021), [#1037](https://github.com/caolan/async/issues/1037), [#1039](https://github.com/caolan/async/issues/1039), [#1051](https://github.com/caolan/async/issues/1051), [#1102](https://github.com/caolan/async/issues/1102), [#1107](https://github.com/caolan/async/issues/1107), [#1121](https://github.com/caolan/async/issues/1121), [#1123](https://github.com/caolan/async/issues/1123), [#1129](https://github.com/caolan/async/issues/1129), [#1135](https://github.com/caolan/async/issues/1135), [#1138](https://github.com/caolan/async/issues/1138), [#1141](https://github.com/caolan/async/issues/1141), [#1153](https://github.com/caolan/async/issues/1153), [#1216](https://github.com/caolan/async/issues/1216), [#1217](https://github.com/caolan/async/issues/1217), [#1232](https://github.com/caolan/async/issues/1232), [#1233](https://github.com/caolan/async/issues/1233), [#1236](https://github.com/caolan/async/issues/1236), [#1238](https://github.com/caolan/async/issues/1238)) + +Thank you [**@aearly**](github.com/aearly) and [**@megawac**](github.com/megawac) for taking the lead on version 2 of async. + +------------------------------------------ + +# v1.5.2 +- Allow using `"constructor"` as an argument in `memoize` ([#998](https://github.com/caolan/async/issues/998)) +- Give a better error messsage when `auto` dependency checking fails ([#994](https://github.com/caolan/async/issues/994)) +- Various doc updates ([#936](https://github.com/caolan/async/issues/936), [#956](https://github.com/caolan/async/issues/956), [#979](https://github.com/caolan/async/issues/979), [#1002](https://github.com/caolan/async/issues/1002)) + +# v1.5.1 +- Fix issue with `pause` in `queue` with concurrency enabled ([#946](https://github.com/caolan/async/issues/946)) +- `while` and `until` now pass the final result to callback ([#963](https://github.com/caolan/async/issues/963)) +- `auto` will properly handle concurrency when there is no callback ([#966](https://github.com/caolan/async/issues/966)) +- `auto` will no. properly stop execution when an error occurs ([#988](https://github.com/caolan/async/issues/988), [#993](https://github.com/caolan/async/issues/993)) +- Various doc fixes ([#971](https://github.com/caolan/async/issues/971), [#980](https://github.com/caolan/async/issues/980)) + +# v1.5.0 + +- Added `transform`, analogous to [`_.transform`](http://lodash.com/docs#transform) ([#892](https://github.com/caolan/async/issues/892)) +- `map` now returns an object when an object is passed in, rather than array with non-numeric keys. `map` will begin always returning an array with numeric indexes in the next major release. ([#873](https://github.com/caolan/async/issues/873)) +- `auto` now accepts an optional `concurrency` argument to limit the number o. running tasks ([#637](https://github.com/caolan/async/issues/637)) +- Added `queue#workersList()`, to retrieve the lis. of currently running tasks. ([#891](https://github.com/caolan/async/issues/891)) +- Various code simplifications ([#896](https://github.com/caolan/async/issues/896), [#904](https://github.com/caolan/async/issues/904)) +- Various doc fixes :scroll: ([#890](https://github.com/caolan/async/issues/890), [#894](https://github.com/caolan/async/issues/894), [#903](https://github.com/caolan/async/issues/903), [#905](https://github.com/caolan/async/issues/905), [#912](https://github.com/caolan/async/issues/912)) + +# v1.4.2 + +- Ensure coverage files don't get published on npm ([#879](https://github.com/caolan/async/issues/879)) + +# v1.4.1 + +- Add in overlooked `detectLimit` method ([#866](https://github.com/caolan/async/issues/866)) +- Removed unnecessary files from npm releases ([#861](https://github.com/caolan/async/issues/861)) +- Removed usage of a reserved word to prevent :boom: in older environments ([#870](https://github.com/caolan/async/issues/870)) + +# v1.4.0 + +- `asyncify` now supports promises ([#840](https://github.com/caolan/async/issues/840)) +- Added `Limit` versions of `filter` and `reject` ([#836](https://github.com/caolan/async/issues/836)) +- Add `Limit` versions of `detect`, `some` and `every` ([#828](https://github.com/caolan/async/issues/828), [#829](https://github.com/caolan/async/issues/829)) +- `some`, `every` and `detect` now short circuit early ([#828](https://github.com/caolan/async/issues/828), [#829](https://github.com/caolan/async/issues/829)) +- Improve detection of the global object ([#804](https://github.com/caolan/async/issues/804)), enabling use in WebWorkers +- `whilst` now called with arguments from iterator ([#823](https://github.com/caolan/async/issues/823)) +- `during` now gets called with arguments from iterator ([#824](https://github.com/caolan/async/issues/824)) +- Code simplifications and optimizations aplenty ([diff](https://github.com/caolan/async/compare/v1.3.0...v1.4.0)) + + +# v1.3.0 + +New Features: +- Added `constant` +- Added `asyncify`/`wrapSync` for making sync functions work with callbacks. ([#671](https://github.com/caolan/async/issues/671), [#806](https://github.com/caolan/async/issues/806)) +- Added `during` and `doDuring`, which are like `whilst` with an async truth test. ([#800](https://github.com/caolan/async/issues/800)) +- `retry` now accepts an `interval` parameter to specify a delay between retries. ([#793](https://github.com/caolan/async/issues/793)) +- `async` should work better in Web Workers due to better `root` detection ([#804](https://github.com/caolan/async/issues/804)) +- Callbacks are now optional in `whilst`, `doWhilst`, `until`, and `doUntil` ([#642](https://github.com/caolan/async/issues/642)) +- Various internal updates ([#786](https://github.com/caolan/async/issues/786), [#801](https://github.com/caolan/async/issues/801), [#802](https://github.com/caolan/async/issues/802), [#803](https://github.com/caolan/async/issues/803)) +- Various doc fixes ([#790](https://github.com/caolan/async/issues/790), [#794](https://github.com/caolan/async/issues/794)) + +Bug Fixes: +- `cargo` now exposes the `payload` size, and `cargo.payload` can be changed on the fly after the `cargo` is created. ([#740](https://github.com/caolan/async/issues/740), [#744](https://github.com/caolan/async/issues/744), [#783](https://github.com/caolan/async/issues/783)) + + +# v1.2.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. ([#782](https://github.com/caolan/async/issues/782)) + + +# v1.2.0 + +New Features: + +- Added `timesLimit` ([#743](https://github.com/caolan/async/issues/743)) +- `concurrency` can be changed after initialization in `queue` by setting `q.concurrency`. The new concurrency will be reflected the next time a task is processed. ([#747](https://github.com/caolan/async/issues/747), [#772](https://github.com/caolan/async/issues/772)) + +Bug Fixes: + +- Fixed a regression in `each` and family with empty arrays that have additional properties. ([#775](https://github.com/caolan/async/issues/775), [#777](https://github.com/caolan/async/issues/777)) + + +# v1.1.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. ([#782](https://github.com/caolan/async/issues/782)) + + +# v1.1.0 + +New Features: + +- `cargo` now supports all of the same methods and event callbacks as `queue`. +- Added `ensureAsync` - A wrapper that ensures an async function calls its callback on a later tick. ([#769](https://github.com/caolan/async/issues/769)) +- Optimized `map`, `eachOf`, and `waterfall` families of functions +- Passing a `null` or `undefined` array to `map`, `each`, `parallel` and families will be treated as an empty array ([#667](https://github.com/caolan/async/issues/667)). +- The callback is now optional for the composed results of `compose` and `seq`. ([#618](https://github.com/caolan/async/issues/618)) +- Reduced file size by 4kb, (minified version by 1kb) +- Added code coverage through `nyc` and `coveralls` ([#768](https://github.com/caolan/async/issues/768)) + +Bug Fixes: + +- `forever` will no longer stack overflow with a synchronous iterator ([#622](https://github.com/caolan/async/issues/622)) +- `eachLimit` and other limit functions will stop iterating once an error occurs ([#754](https://github.com/caolan/async/issues/754)) +- Always pass `null` in callbacks when there is no error ([#439](https://github.com/caolan/async/issues/439)) +- Ensure proper conditions when calling `drain()` after pushing an empty data set to a queue ([#668](https://github.com/caolan/async/issues/668)) +- `each` and family will properly handle an empty array ([#578](https://github.com/caolan/async/issues/578)) +- `eachSeries` and family will finish if the underlying array is modified during execution ([#557](https://github.com/caolan/async/issues/557)) +- `queue` will throw if a non-function is passed to `q.push()` ([#593](https://github.com/caolan/async/issues/593)) +- Doc fixes ([#629](https://github.com/caolan/async/issues/629), [#766](https://github.com/caolan/async/issues/766)) + + +# v1.0.0 + +No known breaking changes, we are simply complying with semver from here on out. + +Changes: + +- Start using a changelog! +- Add `forEachOf` for iterating over Objects (or to iterate Arrays with indexes available) ([#168](https://github.com/caolan/async/issues/168) [#704](https://github.com/caolan/async/issues/704) [#321](https://github.com/caolan/async/issues/321)) +- Detect deadlocks in `auto` ([#663](https://github.com/caolan/async/issues/663)) +- Better support for require.js ([#527](https://github.com/caolan/async/issues/527)) +- Throw if queue created with concurrency `0` ([#714](https://github.com/caolan/async/issues/714)) +- Fix unneeded iteration in `queue.resume()` ([#758](https://github.com/caolan/async/issues/758)) +- Guard against timer mocking overriding `setImmediate` ([#609](https://github.com/caolan/async/issues/609) [#611](https://github.com/caolan/async/issues/611)) +- Miscellaneous doc fixes ([#542](https://github.com/caolan/async/issues/542) [#596](https://github.com/caolan/async/issues/596) [#615](https://github.com/caolan/async/issues/615) [#628](https://github.com/caolan/async/issues/628) [#631](https://github.com/caolan/async/issues/631) [#690](https://github.com/caolan/async/issues/690) [#729](https://github.com/caolan/async/issues/729)) +- Use single noop function internally ([#546](https://github.com/caolan/async/issues/546)) +- Optimize internal `_each`, `_map` and `_keys` functions. diff --git a/node_modules/watchpack/node_modules/async/LICENSE b/node_modules/watchpack/node_modules/async/LICENSE new file mode 100644 index 000000000..d807c05ac --- /dev/null +++ b/node_modules/watchpack/node_modules/async/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010-2017 Caolan McMahon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/watchpack/node_modules/async/README.md b/node_modules/watchpack/node_modules/async/README.md new file mode 100644 index 000000000..141926b72 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/README.md @@ -0,0 +1,14 @@ +![Async Logo](https://raw.githubusercontent.com/caolan/async/master/logo/async-logo_readme.jpg) + +[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async) +[![NPM version](https://img.shields.io/npm/v/async.svg)](https://www.npmjs.com/package/async) +[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master) +[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![libhive - Open source examples](https://www.libhive.com/providers/npm/packages/async/examples/badge.svg)](https://www.libhive.com/providers/npm/packages/async) + + +Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Although originally designed for use with [Node.js](https://nodejs.org/) and installable via `npm install --save async`, it can also be used directly in the browser. + +For Documentation, visit + +*For Async v1.5.x documentation, go [HERE](https://github.com/caolan/async/blob/v1.5.2/README.md)* diff --git a/node_modules/watchpack/node_modules/async/apply.js b/node_modules/watchpack/node_modules/async/apply.js new file mode 100644 index 000000000..f590fa574 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/apply.js @@ -0,0 +1,68 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (fn /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + return function () /*callArgs*/{ + var callArgs = (0, _slice2.default)(arguments); + return fn.apply(null, args.concat(callArgs)); + }; +}; + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +; + +/** + * Creates a continuation function with some arguments already applied. + * + * Useful as a shorthand when combined with other control flow functions. Any + * arguments passed to the returned function are added to the arguments + * originally passed to apply. + * + * @name apply + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {Function} fn - The function you want to eventually apply all + * arguments to. Invokes with (arguments...). + * @param {...*} arguments... - Any number of arguments to automatically apply + * when the continuation is called. + * @returns {Function} the partially-applied function + * @example + * + * // using apply + * async.parallel([ + * async.apply(fs.writeFile, 'testfile1', 'test1'), + * async.apply(fs.writeFile, 'testfile2', 'test2') + * ]); + * + * + * // the same process without using apply + * async.parallel([ + * function(callback) { + * fs.writeFile('testfile1', 'test1', callback); + * }, + * function(callback) { + * fs.writeFile('testfile2', 'test2', callback); + * } + * ]); + * + * // It's possible to pass any number of additional arguments when calling the + * // continuation: + * + * node> var fn = async.apply(sys.puts, 'one'); + * node> fn('two', 'three'); + * one + * two + * three + */ +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/applyEach.js b/node_modules/watchpack/node_modules/async/applyEach.js new file mode 100644 index 000000000..06c08450a --- /dev/null +++ b/node_modules/watchpack/node_modules/async/applyEach.js @@ -0,0 +1,51 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _applyEach = require('./internal/applyEach'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _map = require('./map'); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Applies the provided arguments to each function in the array, calling + * `callback` after all functions have completed. If you only provide the first + * argument, `fns`, then it will return a function which lets you pass in the + * arguments as if it were a single function call. If more arguments are + * provided, `callback` is required while `args` is still optional. + * + * @name applyEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s + * to all call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument, `fns`, is provided, it will + * return a function which lets you pass in the arguments as if it were a single + * function call. The signature is `(..args, callback)`. If invoked with any + * arguments, `callback` is required. + * @example + * + * async.applyEach([enableSearch, updateSchema], 'bucket', callback); + * + * // partial application example: + * async.each( + * buckets, + * async.applyEach([enableSearch, updateSchema]), + * callback + * ); + */ +exports.default = (0, _applyEach2.default)(_map2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/applyEachSeries.js b/node_modules/watchpack/node_modules/async/applyEachSeries.js new file mode 100644 index 000000000..ad80280cc --- /dev/null +++ b/node_modules/watchpack/node_modules/async/applyEachSeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _applyEach = require('./internal/applyEach'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _mapSeries = require('./mapSeries'); + +var _mapSeries2 = _interopRequireDefault(_mapSeries); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time. + * + * @name applyEachSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.applyEach]{@link module:ControlFlow.applyEach} + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s to all + * call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument is provided, it will return + * a function which lets you pass in the arguments as if it were a single + * function call. + */ +exports.default = (0, _applyEach2.default)(_mapSeries2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/asyncify.js b/node_modules/watchpack/node_modules/async/asyncify.js new file mode 100644 index 000000000..5e3fc9155 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/asyncify.js @@ -0,0 +1,110 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = asyncify; + +var _isObject = require('lodash/isObject'); + +var _isObject2 = _interopRequireDefault(_isObject); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + return (0, _initialParams2.default)(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if ((0, _isObject2.default)(result) && typeof result.then === 'function') { + result.then(function (value) { + invokeCallback(callback, null, value); + }, function (err) { + invokeCallback(callback, err.message ? err : new Error(err)); + }); + } else { + callback(null, result); + } + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (e) { + (0, _setImmediate2.default)(rethrow, e); + } +} + +function rethrow(error) { + throw error; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/auto.js b/node_modules/watchpack/node_modules/async/auto.js new file mode 100644 index 000000000..26c1d562c --- /dev/null +++ b/node_modules/watchpack/node_modules/async/auto.js @@ -0,0 +1,289 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (tasks, concurrency, callback) { + if (typeof concurrency === 'function') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = (0, _once2.default)(callback || _noop2.default); + var keys = (0, _keys2.default)(tasks); + var numTasks = keys.length; + if (!numTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = numTasks; + } + + var results = {}; + var runningTasks = 0; + var hasError = false; + + var listeners = Object.create(null); + + var readyTasks = []; + + // for cycle detection: + var readyToCheck = []; // tasks that have been identified as reachable + // without the possibility of returning to an ancestor task + var uncheckedDependencies = {}; + + (0, _baseForOwn2.default)(tasks, function (task, key) { + if (!(0, _isArray2.default)(task)) { + // no dependencies + enqueueTask(key, [task]); + readyToCheck.push(key); + return; + } + + var dependencies = task.slice(0, task.length - 1); + var remainingDependencies = dependencies.length; + if (remainingDependencies === 0) { + enqueueTask(key, task); + readyToCheck.push(key); + return; + } + uncheckedDependencies[key] = remainingDependencies; + + (0, _arrayEach2.default)(dependencies, function (dependencyName) { + if (!tasks[dependencyName]) { + throw new Error('async.auto task `' + key + '` has a non-existent dependency `' + dependencyName + '` in ' + dependencies.join(', ')); + } + addListener(dependencyName, function () { + remainingDependencies--; + if (remainingDependencies === 0) { + enqueueTask(key, task); + } + }); + }); + }); + + checkForDeadlocks(); + processQueue(); + + function enqueueTask(key, task) { + readyTasks.push(function () { + runTask(key, task); + }); + } + + function processQueue() { + if (readyTasks.length === 0 && runningTasks === 0) { + return callback(null, results); + } + while (readyTasks.length && runningTasks < concurrency) { + var run = readyTasks.shift(); + run(); + } + } + + function addListener(taskName, fn) { + var taskListeners = listeners[taskName]; + if (!taskListeners) { + taskListeners = listeners[taskName] = []; + } + + taskListeners.push(fn); + } + + function taskComplete(taskName) { + var taskListeners = listeners[taskName] || []; + (0, _arrayEach2.default)(taskListeners, function (fn) { + fn(); + }); + processQueue(); + } + + function runTask(key, task) { + if (hasError) return; + + var taskCallback = (0, _onlyOnce2.default)(function (err, result) { + runningTasks--; + if (arguments.length > 2) { + result = (0, _slice2.default)(arguments, 1); + } + if (err) { + var safeResults = {}; + (0, _baseForOwn2.default)(results, function (val, rkey) { + safeResults[rkey] = val; + }); + safeResults[key] = result; + hasError = true; + listeners = Object.create(null); + + callback(err, safeResults); + } else { + results[key] = result; + taskComplete(key); + } + }); + + runningTasks++; + var taskFn = (0, _wrapAsync2.default)(task[task.length - 1]); + if (task.length > 1) { + taskFn(results, taskCallback); + } else { + taskFn(taskCallback); + } + } + + function checkForDeadlocks() { + // Kahn's algorithm + // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm + // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html + var currentTask; + var counter = 0; + while (readyToCheck.length) { + currentTask = readyToCheck.pop(); + counter++; + (0, _arrayEach2.default)(getDependents(currentTask), function (dependent) { + if (--uncheckedDependencies[dependent] === 0) { + readyToCheck.push(dependent); + } + }); + } + + if (counter !== numTasks) { + throw new Error('async.auto cannot execute tasks due to a recursive dependency'); + } + } + + function getDependents(taskName) { + var result = []; + (0, _baseForOwn2.default)(tasks, function (task, key) { + if ((0, _isArray2.default)(task) && (0, _baseIndexOf2.default)(task, taskName, 0) >= 0) { + result.push(key); + } + }); + return result; + } +}; + +var _arrayEach = require('lodash/_arrayEach'); + +var _arrayEach2 = _interopRequireDefault(_arrayEach); + +var _baseForOwn = require('lodash/_baseForOwn'); + +var _baseForOwn2 = _interopRequireDefault(_baseForOwn); + +var _baseIndexOf = require('lodash/_baseIndexOf'); + +var _baseIndexOf2 = _interopRequireDefault(_baseIndexOf); + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _keys = require('lodash/keys'); + +var _keys2 = _interopRequireDefault(_keys); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on + * their requirements. Each function can optionally depend on other functions + * being completed first, and each function is run as soon as its requirements + * are satisfied. + * + * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence + * will stop. Further tasks will not execute (so any other functions depending + * on it will not run), and the main `callback` is immediately called with the + * error. + * + * {@link AsyncFunction}s also receive an object containing the results of functions which + * have completed so far as the first argument, if they have dependencies. If a + * task function has no dependencies, it will only be passed a callback. + * + * @name auto + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Object} tasks - An object. Each of its properties is either a + * function or an array of requirements, with the {@link AsyncFunction} itself the last item + * in the array. The object's key of a property serves as the name of the task + * defined by that property, i.e. can be used when specifying requirements for + * other tasks. The function receives one or two arguments: + * * a `results` object, containing the results of the previously executed + * functions, only passed if the task has any dependencies, + * * a `callback(err, result)` function, which must be called when finished, + * passing an `error` (which can be `null`) and the result of the function's + * execution. + * @param {number} [concurrency=Infinity] - An optional `integer` for + * determining the maximum number of tasks that can be run in parallel. By + * default, as many as possible. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback. Results are always returned; however, if an + * error occurs, no further `tasks` will be performed, and the results object + * will only contain partial results. Invoked with (err, results). + * @returns undefined + * @example + * + * async.auto({ + * // this function will just be passed a callback + * readData: async.apply(fs.readFile, 'data.txt', 'utf-8'), + * showData: ['readData', function(results, cb) { + * // results.readData is the file's contents + * // ... + * }] + * }, callback); + * + * async.auto({ + * get_data: function(callback) { + * console.log('in get_data'); + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * console.log('in make_folder'); + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * console.log('in write_file', JSON.stringify(results)); + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * console.log('in email_link', JSON.stringify(results)); + * // once the file is written let's email a link to it... + * // results.write_file contains the filename returned by write_file. + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }, function(err, results) { + * console.log('err = ', err); + * console.log('results = ', results); + * }); + */ \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/autoInject.js b/node_modules/watchpack/node_modules/async/autoInject.js new file mode 100644 index 000000000..bfbe7e8ec --- /dev/null +++ b/node_modules/watchpack/node_modules/async/autoInject.js @@ -0,0 +1,170 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = autoInject; + +var _auto = require('./auto'); + +var _auto2 = _interopRequireDefault(_auto); + +var _baseForOwn = require('lodash/_baseForOwn'); + +var _baseForOwn2 = _interopRequireDefault(_baseForOwn); + +var _arrayMap = require('lodash/_arrayMap'); + +var _arrayMap2 = _interopRequireDefault(_arrayMap); + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _trim = require('lodash/trim'); + +var _trim2 = _interopRequireDefault(_trim); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var FN_ARGS = /^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m; +var FN_ARG_SPLIT = /,/; +var FN_ARG = /(=.+)?(\s*)$/; +var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; + +function parseParams(func) { + func = func.toString().replace(STRIP_COMMENTS, ''); + func = func.match(FN_ARGS)[2].replace(' ', ''); + func = func ? func.split(FN_ARG_SPLIT) : []; + func = func.map(function (arg) { + return (0, _trim2.default)(arg.replace(FN_ARG, '')); + }); + return func; +} + +/** + * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent + * tasks are specified as parameters to the function, after the usual callback + * parameter, with the parameter names matching the names of the tasks it + * depends on. This can provide even more readable task graphs which can be + * easier to maintain. + * + * If a final callback is specified, the task results are similarly injected, + * specified as named parameters after the initial error parameter. + * + * The autoInject function is purely syntactic sugar and its semantics are + * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}. + * + * @name autoInject + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.auto]{@link module:ControlFlow.auto} + * @category Control Flow + * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of + * the form 'func([dependencies...], callback). The object's key of a property + * serves as the name of the task defined by that property, i.e. can be used + * when specifying requirements for other tasks. + * * The `callback` parameter is a `callback(err, result)` which must be called + * when finished, passing an `error` (which can be `null`) and the result of + * the function's execution. The remaining parameters name other tasks on + * which the task is dependent, and the results from those tasks are the + * arguments of those parameters. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback, and a `results` object with any completed + * task results, similar to `auto`. + * @example + * + * // The example from `auto` can be rewritten as follows: + * async.autoInject({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: function(get_data, make_folder, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }, + * email_link: function(write_file, callback) { + * // once the file is written let's email a link to it... + * // write_file contains the filename returned by write_file. + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * } + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + * + * // If you are using a JS minifier that mangles parameter names, `autoInject` + * // will not work with plain functions, since the parameter names will be + * // collapsed to a single letter identifier. To work around this, you can + * // explicitly specify the names of the parameters your task function needs + * // in an array, similar to Angular.js dependency injection. + * + * // This still has an advantage over plain `auto`, since the results a task + * // depends on are still spread into arguments. + * async.autoInject({ + * //... + * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) { + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(write_file, callback) { + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * }] + * //... + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + */ +function autoInject(tasks, callback) { + var newTasks = {}; + + (0, _baseForOwn2.default)(tasks, function (taskFn, key) { + var params; + var fnIsAsync = (0, _wrapAsync.isAsync)(taskFn); + var hasNoDeps = !fnIsAsync && taskFn.length === 1 || fnIsAsync && taskFn.length === 0; + + if ((0, _isArray2.default)(taskFn)) { + params = taskFn.slice(0, -1); + taskFn = taskFn[taskFn.length - 1]; + + newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); + } else if (hasNoDeps) { + // no dependencies, use the function as-is + newTasks[key] = taskFn; + } else { + params = parseParams(taskFn); + if (taskFn.length === 0 && !fnIsAsync && params.length === 0) { + throw new Error("autoInject task functions require explicit parameters."); + } + + // remove callback param + if (!fnIsAsync) params.pop(); + + newTasks[key] = params.concat(newTask); + } + + function newTask(results, taskCb) { + var newArgs = (0, _arrayMap2.default)(params, function (name) { + return results[name]; + }); + newArgs.push(taskCb); + (0, _wrapAsync2.default)(taskFn).apply(null, newArgs); + } + }); + + (0, _auto2.default)(newTasks, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/bower.json b/node_modules/watchpack/node_modules/async/bower.json new file mode 100644 index 000000000..7dbeb1497 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/bower.json @@ -0,0 +1,17 @@ +{ + "name": "async", + "main": "dist/async.js", + "ignore": [ + "bower_components", + "lib", + "mocha_test", + "node_modules", + "perf", + "support", + "**/.*", + "*.config.js", + "*.json", + "index.js", + "Makefile" + ] +} diff --git a/node_modules/watchpack/node_modules/async/cargo.js b/node_modules/watchpack/node_modules/async/cargo.js new file mode 100644 index 000000000..c7e59c7c5 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/cargo.js @@ -0,0 +1,94 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = cargo; + +var _queue = require('./internal/queue'); + +var _queue2 = _interopRequireDefault(_queue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A cargo of tasks for the worker function to complete. Cargo inherits all of + * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}. + * @typedef {Object} CargoObject + * @memberOf module:ControlFlow + * @property {Function} length - A function returning the number of items + * waiting to be processed. Invoke like `cargo.length()`. + * @property {number} payload - An `integer` for determining how many tasks + * should be process per round. This property can be changed after a `cargo` is + * created to alter the payload on-the-fly. + * @property {Function} push - Adds `task` to the `queue`. The callback is + * called once the `worker` has finished processing the task. Instead of a + * single task, an array of `tasks` can be submitted. The respective callback is + * used for every task in the list. Invoke like `cargo.push(task, [callback])`. + * @property {Function} saturated - A callback that is called when the + * `queue.length()` hits the concurrency and further tasks will be queued. + * @property {Function} empty - A callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - A callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke like `cargo.idle()`. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke like `cargo.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke like `cargo.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`. + */ + +/** + * Creates a `cargo` object with the specified payload. Tasks added to the + * cargo will be processed altogether (up to the `payload` limit). If the + * `worker` is in progress, the task is queued until it becomes available. Once + * the `worker` has completed some tasks, each callback of those tasks is + * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) + * for how `cargo` and `queue` work. + * + * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers + * at a time, cargo passes an array of tasks to a single worker, repeating + * when the worker is finished. + * + * @name cargo + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An asynchronous function for processing an array + * of queued tasks. Invoked with `(tasks, callback)`. + * @param {number} [payload=Infinity] - An optional `integer` for determining + * how many tasks should be processed per round; if omitted, the default is + * unlimited. + * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the cargo and inner queue. + * @example + * + * // create a cargo object with payload 2 + * var cargo = async.cargo(function(tasks, callback) { + * for (var i=0; i async.dir(hello, 'world'); + * {hello: 'world'} + */ +exports.default = (0, _consoleFunc2.default)('dir'); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/dist/async.js b/node_modules/watchpack/node_modules/async/dist/async.js new file mode 100644 index 000000000..c4fbcef46 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/dist/async.js @@ -0,0 +1,5575 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.async = global.async || {}))); +}(this, (function (exports) { 'use strict'; + +function slice(arrayLike, start) { + start = start|0; + var newLen = Math.max(arrayLike.length - start, 0); + var newArr = Array(newLen); + for(var idx = 0; idx < newLen; idx++) { + newArr[idx] = arrayLike[start + idx]; + } + return newArr; +} + +var initialParams = function (fn) { + return function (/*...args, callback*/) { + var args = slice(arguments); + var callback = args.pop(); + fn.call(this, args, callback); + }; +}; + +/** + * 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'); +} + +var hasSetImmediate = typeof setImmediate === 'function' && setImmediate; +var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + +function fallback(fn) { + setTimeout(fn, 0); +} + +function wrap(defer) { + return function (fn/*, ...args*/) { + var args = slice(arguments, 1); + defer(function () { + fn.apply(null, args); + }); + }; +} + +var _defer; + +if (hasSetImmediate) { + _defer = setImmediate; +} else if (hasNextTick) { + _defer = process.nextTick; +} else { + _defer = fallback; +} + +var setImmediate$1 = wrap(_defer); + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + return initialParams(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if (isObject(result) && typeof result.then === 'function') { + result.then(function(value) { + invokeCallback(callback, null, value); + }, function(err) { + invokeCallback(callback, err.message ? err : new Error(err)); + }); + } else { + callback(null, result); + } + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (e) { + setImmediate$1(rethrow, e); + } +} + +function rethrow(error) { + throw error; +} + +var supportsSymbol = typeof Symbol === 'function'; + +function isAsync(fn) { + return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction'; +} + +function wrapAsync(asyncFn) { + return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn; +} + +function applyEach$1(eachfn) { + return function(fns/*, ...args*/) { + var args = slice(arguments, 1); + var go = initialParams(function(args, callback) { + var that = this; + return eachfn(fns, function (fn, cb) { + wrapAsync(fn).apply(that, args.concat(cb)); + }, callback); + }); + if (args.length) { + return go.apply(this, args); + } + else { + return go; + } + }; +} + +/** 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')(); + +/** Built-in value references. */ +var Symbol$1 = root.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$1 = Symbol$1 ? Symbol$1.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$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$1.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$1.call(value); +} + +/** `Object#toString` result references. */ +var nullTag = '[object Null]'; +var undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol$1 ? Symbol$1.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); +} + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]'; +var funcTag = '[object Function]'; +var genTag = '[object GeneratorFunction]'; +var 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; +} + +/** 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; +} + +/** + * 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); +} + +// A temporary value used to identify if the loop should be broken. +// See #1064, #1293 +var breakLoop = {}; + +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +function once(fn) { + return function () { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} + +var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator; + +var getIterator = function (coll) { + return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol](); +}; + +/** + * 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; +} + +/** + * 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'; +} + +/** `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; +} + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$3.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$2.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; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/** 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; + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 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$1 : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]'; +var arrayTag = '[object Array]'; +var boolTag = '[object Boolean]'; +var dateTag = '[object Date]'; +var errorTag = '[object Error]'; +var funcTag$1 = '[object Function]'; +var mapTag = '[object Map]'; +var numberTag = '[object Number]'; +var objectTag = '[object Object]'; +var regexpTag = '[object RegExp]'; +var setTag = '[object Set]'; +var stringTag = '[object String]'; +var weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]'; +var dataViewTag = '[object DataView]'; +var float32Tag = '[object Float32Array]'; +var float64Tag = '[object Float64Array]'; +var int8Tag = '[object Int8Array]'; +var int16Tag = '[object Int16Array]'; +var int32Tag = '[object Int32Array]'; +var uint8Tag = '[object Uint8Array]'; +var uint8ClampedTag = '[object Uint8ClampedArray]'; +var uint16Tag = '[object Uint16Array]'; +var 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$1] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = +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)]; +} + +/** + * 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); + }; +} + +/** Detect free variable `exports`. */ +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports$1 && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + return freeProcess && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * 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; + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$2.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$1.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; +} + +/** Used for built-in method references. */ +var objectProto$5 = 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$5; + + return value === proto; +} + +/** + * 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)); + }; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$4.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$3.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * 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); +} + +function createArrayIterator(coll) { + var i = -1; + var len = coll.length; + return function next() { + return ++i < len ? {value: coll[i], key: i} : null; + } +} + +function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) + return null; + i++; + return {value: item.value, key: i}; + } +} + +function createObjectIterator(obj) { + var okeys = keys(obj); + var i = -1; + var len = okeys.length; + return function next() { + var key = okeys[++i]; + return i < len ? {value: obj[key], key: key} : null; + }; +} + +function iterator(coll) { + if (isArrayLike(coll)) { + return createArrayIterator(coll); + } + + var iterator = getIterator(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); +} + +function onlyOnce(fn) { + return function() { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} + +function _eachOfLimit(limit) { + return function (obj, iteratee, callback) { + callback = once(callback || noop); + if (limit <= 0 || !obj) { + return callback(null); + } + var nextElem = iterator(obj); + var done = false; + var running = 0; + + function iterateeCallback(err, value) { + running -= 1; + if (err) { + done = true; + callback(err); + } + else if (value === breakLoop || (done && running <= 0)) { + done = true; + return callback(null); + } + else { + replenish(); + } + } + + function replenish () { + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, onlyOnce(iterateeCallback)); + } + } + + replenish(); + }; +} + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a + * time. + * + * @name eachOfLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. The `key` is the item's key, or index in the case of an + * array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachOfLimit(coll, limit, iteratee, callback) { + _eachOfLimit(limit)(coll, wrapAsync(iteratee), callback); +} + +function doLimit(fn, limit) { + return function (iterable, iteratee, callback) { + return fn(iterable, limit, iteratee, callback); + }; +} + +// eachOf implementation optimized for array-likes +function eachOfArrayLike(coll, iteratee, callback) { + callback = once(callback || noop); + var index = 0, + completed = 0, + length = coll.length; + if (length === 0) { + callback(null); + } + + function iteratorCallback(err, value) { + if (err) { + callback(err); + } else if ((++completed === length) || value === breakLoop) { + callback(null); + } + } + + for (; index < length; index++) { + iteratee(coll[index], index, onlyOnce(iteratorCallback)); + } +} + +// a generic version of eachOf which can handle array, object, and iterator cases. +var eachOfGeneric = doLimit(eachOfLimit, Infinity); + +/** + * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument + * to the iteratee. + * + * @name eachOf + * @static + * @memberOf module:Collections + * @method + * @alias forEachOf + * @category Collection + * @see [async.each]{@link module:Collections.each} + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each + * item in `coll`. + * The `key` is the item's key, or index in the case of an array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @example + * + * var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; + * var configs = {}; + * + * async.forEachOf(obj, function (value, key, callback) { + * fs.readFile(__dirname + value, "utf8", function (err, data) { + * if (err) return callback(err); + * try { + * configs[key] = JSON.parse(data); + * } catch (e) { + * return callback(e); + * } + * callback(); + * }); + * }, function (err) { + * if (err) console.error(err.message); + * // configs is now a map of JSON data + * doSomethingWith(configs); + * }); + */ +var eachOf = function(coll, iteratee, callback) { + var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric; + eachOfImplementation(coll, wrapAsync(iteratee), callback); +}; + +function doParallel(fn) { + return function (obj, iteratee, callback) { + return fn(eachOf, obj, wrapAsync(iteratee), callback); + }; +} + +function _asyncMap(eachfn, arr, iteratee, callback) { + callback = callback || noop; + arr = arr || []; + var results = []; + var counter = 0; + var _iteratee = wrapAsync(iteratee); + + eachfn(arr, function (value, _, callback) { + var index = counter++; + _iteratee(value, function (err, v) { + results[index] = v; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} + +/** + * Produces a new collection of values by mapping each value in `coll` through + * the `iteratee` function. The `iteratee` is called with an item from `coll` + * and a callback for when it has finished processing. Each of these callback + * takes 2 arguments: an `error`, and the transformed item from `coll`. If + * `iteratee` passes an error to its callback, the main `callback` (for the + * `map` function) is immediately called with the error. + * + * Note, that since this function applies the `iteratee` to each item in + * parallel, there is no guarantee that the `iteratee` functions will complete + * in order. However, the results array will be in the same order as the + * original `coll`. + * + * If `map` is passed an Object, the results will be an Array. The results + * will roughly be in the order of the original Objects' keys (but this can + * vary across JavaScript engines). + * + * @name map + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an Array of the + * transformed items from the `coll`. Invoked with (err, results). + * @example + * + * async.map(['file1','file2','file3'], fs.stat, function(err, results) { + * // results is now an array of stats for each file + * }); + */ +var map = doParallel(_asyncMap); + +/** + * Applies the provided arguments to each function in the array, calling + * `callback` after all functions have completed. If you only provide the first + * argument, `fns`, then it will return a function which lets you pass in the + * arguments as if it were a single function call. If more arguments are + * provided, `callback` is required while `args` is still optional. + * + * @name applyEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s + * to all call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument, `fns`, is provided, it will + * return a function which lets you pass in the arguments as if it were a single + * function call. The signature is `(..args, callback)`. If invoked with any + * arguments, `callback` is required. + * @example + * + * async.applyEach([enableSearch, updateSchema], 'bucket', callback); + * + * // partial application example: + * async.each( + * buckets, + * async.applyEach([enableSearch, updateSchema]), + * callback + * ); + */ +var applyEach = applyEach$1(map); + +function doParallelLimit(fn) { + return function (obj, limit, iteratee, callback) { + return fn(_eachOfLimit(limit), obj, wrapAsync(iteratee), callback); + }; +} + +/** + * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time. + * + * @name mapLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +var mapLimit = doParallelLimit(_asyncMap); + +/** + * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. + * + * @name mapSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +var mapSeries = doLimit(mapLimit, 1); + +/** + * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time. + * + * @name applyEachSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.applyEach]{@link module:ControlFlow.applyEach} + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s to all + * call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument is provided, it will return + * a function which lets you pass in the arguments as if it were a single + * function call. + */ +var applyEachSeries = applyEach$1(mapSeries); + +/** + * Creates a continuation function with some arguments already applied. + * + * Useful as a shorthand when combined with other control flow functions. Any + * arguments passed to the returned function are added to the arguments + * originally passed to apply. + * + * @name apply + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {Function} fn - The function you want to eventually apply all + * arguments to. Invokes with (arguments...). + * @param {...*} arguments... - Any number of arguments to automatically apply + * when the continuation is called. + * @returns {Function} the partially-applied function + * @example + * + * // using apply + * async.parallel([ + * async.apply(fs.writeFile, 'testfile1', 'test1'), + * async.apply(fs.writeFile, 'testfile2', 'test2') + * ]); + * + * + * // the same process without using apply + * async.parallel([ + * function(callback) { + * fs.writeFile('testfile1', 'test1', callback); + * }, + * function(callback) { + * fs.writeFile('testfile2', 'test2', callback); + * } + * ]); + * + * // It's possible to pass any number of additional arguments when calling the + * // continuation: + * + * node> var fn = async.apply(sys.puts, 'one'); + * node> fn('two', 'three'); + * one + * two + * three + */ +var apply = function(fn/*, ...args*/) { + var args = slice(arguments, 1); + return function(/*callArgs*/) { + var callArgs = slice(arguments); + return fn.apply(null, args.concat(callArgs)); + }; +}; + +/** + * 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; +} + +/** + * 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; + }; +} + +/** + * 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 `_.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 `_.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; +} + +/** + * 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; +} + +/** + * 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); +} + +/** + * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on + * their requirements. Each function can optionally depend on other functions + * being completed first, and each function is run as soon as its requirements + * are satisfied. + * + * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence + * will stop. Further tasks will not execute (so any other functions depending + * on it will not run), and the main `callback` is immediately called with the + * error. + * + * {@link AsyncFunction}s also receive an object containing the results of functions which + * have completed so far as the first argument, if they have dependencies. If a + * task function has no dependencies, it will only be passed a callback. + * + * @name auto + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Object} tasks - An object. Each of its properties is either a + * function or an array of requirements, with the {@link AsyncFunction} itself the last item + * in the array. The object's key of a property serves as the name of the task + * defined by that property, i.e. can be used when specifying requirements for + * other tasks. The function receives one or two arguments: + * * a `results` object, containing the results of the previously executed + * functions, only passed if the task has any dependencies, + * * a `callback(err, result)` function, which must be called when finished, + * passing an `error` (which can be `null`) and the result of the function's + * execution. + * @param {number} [concurrency=Infinity] - An optional `integer` for + * determining the maximum number of tasks that can be run in parallel. By + * default, as many as possible. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback. Results are always returned; however, if an + * error occurs, no further `tasks` will be performed, and the results object + * will only contain partial results. Invoked with (err, results). + * @returns undefined + * @example + * + * async.auto({ + * // this function will just be passed a callback + * readData: async.apply(fs.readFile, 'data.txt', 'utf-8'), + * showData: ['readData', function(results, cb) { + * // results.readData is the file's contents + * // ... + * }] + * }, callback); + * + * async.auto({ + * get_data: function(callback) { + * console.log('in get_data'); + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * console.log('in make_folder'); + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * console.log('in write_file', JSON.stringify(results)); + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * console.log('in email_link', JSON.stringify(results)); + * // once the file is written let's email a link to it... + * // results.write_file contains the filename returned by write_file. + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }, function(err, results) { + * console.log('err = ', err); + * console.log('results = ', results); + * }); + */ +var auto = function (tasks, concurrency, callback) { + if (typeof concurrency === 'function') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = once(callback || noop); + var keys$$1 = keys(tasks); + var numTasks = keys$$1.length; + if (!numTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = numTasks; + } + + var results = {}; + var runningTasks = 0; + var hasError = false; + + var listeners = Object.create(null); + + var readyTasks = []; + + // for cycle detection: + var readyToCheck = []; // tasks that have been identified as reachable + // without the possibility of returning to an ancestor task + var uncheckedDependencies = {}; + + baseForOwn(tasks, function (task, key) { + if (!isArray(task)) { + // no dependencies + enqueueTask(key, [task]); + readyToCheck.push(key); + return; + } + + var dependencies = task.slice(0, task.length - 1); + var remainingDependencies = dependencies.length; + if (remainingDependencies === 0) { + enqueueTask(key, task); + readyToCheck.push(key); + return; + } + uncheckedDependencies[key] = remainingDependencies; + + arrayEach(dependencies, function (dependencyName) { + if (!tasks[dependencyName]) { + throw new Error('async.auto task `' + key + + '` has a non-existent dependency `' + + dependencyName + '` in ' + + dependencies.join(', ')); + } + addListener(dependencyName, function () { + remainingDependencies--; + if (remainingDependencies === 0) { + enqueueTask(key, task); + } + }); + }); + }); + + checkForDeadlocks(); + processQueue(); + + function enqueueTask(key, task) { + readyTasks.push(function () { + runTask(key, task); + }); + } + + function processQueue() { + if (readyTasks.length === 0 && runningTasks === 0) { + return callback(null, results); + } + while(readyTasks.length && runningTasks < concurrency) { + var run = readyTasks.shift(); + run(); + } + + } + + function addListener(taskName, fn) { + var taskListeners = listeners[taskName]; + if (!taskListeners) { + taskListeners = listeners[taskName] = []; + } + + taskListeners.push(fn); + } + + function taskComplete(taskName) { + var taskListeners = listeners[taskName] || []; + arrayEach(taskListeners, function (fn) { + fn(); + }); + processQueue(); + } + + + function runTask(key, task) { + if (hasError) return; + + var taskCallback = onlyOnce(function(err, result) { + runningTasks--; + if (arguments.length > 2) { + result = slice(arguments, 1); + } + if (err) { + var safeResults = {}; + baseForOwn(results, function(val, rkey) { + safeResults[rkey] = val; + }); + safeResults[key] = result; + hasError = true; + listeners = Object.create(null); + + callback(err, safeResults); + } else { + results[key] = result; + taskComplete(key); + } + }); + + runningTasks++; + var taskFn = wrapAsync(task[task.length - 1]); + if (task.length > 1) { + taskFn(results, taskCallback); + } else { + taskFn(taskCallback); + } + } + + function checkForDeadlocks() { + // Kahn's algorithm + // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm + // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html + var currentTask; + var counter = 0; + while (readyToCheck.length) { + currentTask = readyToCheck.pop(); + counter++; + arrayEach(getDependents(currentTask), function (dependent) { + if (--uncheckedDependencies[dependent] === 0) { + readyToCheck.push(dependent); + } + }); + } + + if (counter !== numTasks) { + throw new Error( + 'async.auto cannot execute tasks due to a recursive dependency' + ); + } + } + + function getDependents(taskName) { + var result = []; + baseForOwn(tasks, function (task, key) { + if (isArray(task) && baseIndexOf(task, taskName, 0) >= 0) { + result.push(key); + } + }); + return result; + } +}; + +/** + * 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; +} + +/** `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); +} + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined; +var 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; +} + +/** + * 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; +} + +/** + * 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); +} + +/** + * 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; +} + +/** + * 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; +} + +/** + * 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(''); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff'; +var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23'; +var rsComboSymbolsRange = '\\u20d0-\\u20f0'; +var 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 + rsComboMarksRange + rsComboSymbolsRange + 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); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange$1 = '\\ud800-\\udfff'; +var rsComboMarksRange$1 = '\\u0300-\\u036f\\ufe20-\\ufe23'; +var rsComboSymbolsRange$1 = '\\u20d0-\\u20f0'; +var rsVarRange$1 = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange$1 + ']'; +var rsCombo = '[' + rsComboMarksRange$1 + rsComboSymbolsRange$1 + ']'; +var rsFitz = '\\ud83c[\\udffb-\\udfff]'; +var rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')'; +var rsNonAstral = '[^' + rsAstralRange$1 + ']'; +var rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}'; +var rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]'; +var rsZWJ$1 = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?'; +var rsOptVar = '[' + rsVarRange$1 + ']?'; +var rsOptJoin = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*'; +var rsSeq = rsOptVar + reOptMod + rsOptJoin; +var 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) || []; +} + +/** + * 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); +} + +/** + * 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); +} + +/** Used to match leading and trailing whitespace. */ +var reTrim = /^\s+|\s+$/g; + +/** + * Removes leading and trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trim(' abc '); + * // => 'abc' + * + * _.trim('-_-abc-_-', '_-'); + * // => 'abc' + * + * _.map([' foo ', ' bar '], _.trim); + * // => ['foo', 'bar'] + */ +function trim(string, chars, guard) { + string = toString(string); + if (string && (guard || chars === undefined)) { + return string.replace(reTrim, ''); + } + if (!string || !(chars = baseToString(chars))) { + return string; + } + var strSymbols = stringToArray(string), + chrSymbols = stringToArray(chars), + start = charsStartIndex(strSymbols, chrSymbols), + end = charsEndIndex(strSymbols, chrSymbols) + 1; + + return castSlice(strSymbols, start, end).join(''); +} + +var FN_ARGS = /^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m; +var FN_ARG_SPLIT = /,/; +var FN_ARG = /(=.+)?(\s*)$/; +var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; + +function parseParams(func) { + func = func.toString().replace(STRIP_COMMENTS, ''); + func = func.match(FN_ARGS)[2].replace(' ', ''); + func = func ? func.split(FN_ARG_SPLIT) : []; + func = func.map(function (arg){ + return trim(arg.replace(FN_ARG, '')); + }); + return func; +} + +/** + * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent + * tasks are specified as parameters to the function, after the usual callback + * parameter, with the parameter names matching the names of the tasks it + * depends on. This can provide even more readable task graphs which can be + * easier to maintain. + * + * If a final callback is specified, the task results are similarly injected, + * specified as named parameters after the initial error parameter. + * + * The autoInject function is purely syntactic sugar and its semantics are + * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}. + * + * @name autoInject + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.auto]{@link module:ControlFlow.auto} + * @category Control Flow + * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of + * the form 'func([dependencies...], callback). The object's key of a property + * serves as the name of the task defined by that property, i.e. can be used + * when specifying requirements for other tasks. + * * The `callback` parameter is a `callback(err, result)` which must be called + * when finished, passing an `error` (which can be `null`) and the result of + * the function's execution. The remaining parameters name other tasks on + * which the task is dependent, and the results from those tasks are the + * arguments of those parameters. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback, and a `results` object with any completed + * task results, similar to `auto`. + * @example + * + * // The example from `auto` can be rewritten as follows: + * async.autoInject({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: function(get_data, make_folder, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }, + * email_link: function(write_file, callback) { + * // once the file is written let's email a link to it... + * // write_file contains the filename returned by write_file. + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * } + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + * + * // If you are using a JS minifier that mangles parameter names, `autoInject` + * // will not work with plain functions, since the parameter names will be + * // collapsed to a single letter identifier. To work around this, you can + * // explicitly specify the names of the parameters your task function needs + * // in an array, similar to Angular.js dependency injection. + * + * // This still has an advantage over plain `auto`, since the results a task + * // depends on are still spread into arguments. + * async.autoInject({ + * //... + * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) { + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(write_file, callback) { + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * }] + * //... + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + */ +function autoInject(tasks, callback) { + var newTasks = {}; + + baseForOwn(tasks, function (taskFn, key) { + var params; + var fnIsAsync = isAsync(taskFn); + var hasNoDeps = + (!fnIsAsync && taskFn.length === 1) || + (fnIsAsync && taskFn.length === 0); + + if (isArray(taskFn)) { + params = taskFn.slice(0, -1); + taskFn = taskFn[taskFn.length - 1]; + + newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); + } else if (hasNoDeps) { + // no dependencies, use the function as-is + newTasks[key] = taskFn; + } else { + params = parseParams(taskFn); + if (taskFn.length === 0 && !fnIsAsync && params.length === 0) { + throw new Error("autoInject task functions require explicit parameters."); + } + + // remove callback param + if (!fnIsAsync) params.pop(); + + newTasks[key] = params.concat(newTask); + } + + function newTask(results, taskCb) { + var newArgs = arrayMap(params, function (name) { + return results[name]; + }); + newArgs.push(taskCb); + wrapAsync(taskFn).apply(null, newArgs); + } + }); + + auto(newTasks, callback); +} + +// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation +// used for queues. This implementation assumes that the node provided by the user can be modified +// to adjust the next and last properties. We implement only the minimal functionality +// for queue support. +function DLL() { + this.head = this.tail = null; + this.length = 0; +} + +function setInitial(dll, node) { + dll.length = 1; + dll.head = dll.tail = node; +} + +DLL.prototype.removeLink = function(node) { + if (node.prev) node.prev.next = node.next; + else this.head = node.next; + if (node.next) node.next.prev = node.prev; + else this.tail = node.prev; + + node.prev = node.next = null; + this.length -= 1; + return node; +}; + +DLL.prototype.empty = function () { + while(this.head) this.shift(); + return this; +}; + +DLL.prototype.insertAfter = function(node, newNode) { + newNode.prev = node; + newNode.next = node.next; + if (node.next) node.next.prev = newNode; + else this.tail = newNode; + node.next = newNode; + this.length += 1; +}; + +DLL.prototype.insertBefore = function(node, newNode) { + newNode.prev = node.prev; + newNode.next = node; + if (node.prev) node.prev.next = newNode; + else this.head = newNode; + node.prev = newNode; + this.length += 1; +}; + +DLL.prototype.unshift = function(node) { + if (this.head) this.insertBefore(this.head, node); + else setInitial(this, node); +}; + +DLL.prototype.push = function(node) { + if (this.tail) this.insertAfter(this.tail, node); + else setInitial(this, node); +}; + +DLL.prototype.shift = function() { + return this.head && this.removeLink(this.head); +}; + +DLL.prototype.pop = function() { + return this.tail && this.removeLink(this.tail); +}; + +DLL.prototype.toArray = function () { + var arr = Array(this.length); + var curr = this.head; + for(var idx = 0; idx < this.length; idx++) { + arr[idx] = curr.data; + curr = curr.next; + } + return arr; +}; + +DLL.prototype.remove = function (testFn) { + var curr = this.head; + while(!!curr) { + var next = curr.next; + if (testFn(curr)) { + this.removeLink(curr); + } + curr = next; + } + return this; +}; + +function queue(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } + else if(concurrency === 0) { + throw new Error('Concurrency must not be zero'); + } + + var _worker = wrapAsync(worker); + var numRunning = 0; + var workersList = []; + + function _insert(data, insertAtFront, callback) { + if (callback != null && typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!isArray(data)) { + data = [data]; + } + if (data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + return setImmediate$1(function() { + q.drain(); + }); + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + callback: callback || noop + }; + + if (insertAtFront) { + q._tasks.unshift(item); + } else { + q._tasks.push(item); + } + } + setImmediate$1(q.process); + } + + function _next(tasks) { + return function(err){ + numRunning -= 1; + + for (var i = 0, l = tasks.length; i < l; i++) { + var task = tasks[i]; + + var index = baseIndexOf(workersList, task, 0); + if (index >= 0) { + workersList.splice(index, 1); + } + + task.callback.apply(task, arguments); + + if (err != null) { + q.error(err, task.data); + } + } + + if (numRunning <= (q.concurrency - q.buffer) ) { + q.unsaturated(); + } + + if (q.idle()) { + q.drain(); + } + q.process(); + }; + } + + var isProcessing = false; + var q = { + _tasks: new DLL(), + concurrency: concurrency, + payload: payload, + saturated: noop, + unsaturated:noop, + buffer: concurrency / 4, + empty: noop, + drain: noop, + error: noop, + started: false, + paused: false, + push: function (data, callback) { + _insert(data, false, callback); + }, + kill: function () { + q.drain = noop; + q._tasks.empty(); + }, + unshift: function (data, callback) { + _insert(data, true, callback); + }, + remove: function (testFn) { + q._tasks.remove(testFn); + }, + process: function () { + // Avoid trying to start too many processing operations. This can occur + // when callbacks resolve synchronously (#1267). + if (isProcessing) { + return; + } + isProcessing = true; + while(!q.paused && numRunning < q.concurrency && q._tasks.length){ + var tasks = [], data = []; + var l = q._tasks.length; + if (q.payload) l = Math.min(l, q.payload); + for (var i = 0; i < l; i++) { + var node = q._tasks.shift(); + tasks.push(node); + workersList.push(node); + data.push(node.data); + } + + numRunning += 1; + + if (q._tasks.length === 0) { + q.empty(); + } + + if (numRunning === q.concurrency) { + q.saturated(); + } + + var cb = onlyOnce(_next(tasks)); + _worker(data, cb); + } + isProcessing = false; + }, + length: function () { + return q._tasks.length; + }, + running: function () { + return numRunning; + }, + workersList: function () { + return workersList; + }, + idle: function() { + return q._tasks.length + numRunning === 0; + }, + pause: function () { + q.paused = true; + }, + resume: function () { + if (q.paused === false) { return; } + q.paused = false; + setImmediate$1(q.process); + } + }; + return q; +} + +/** + * A cargo of tasks for the worker function to complete. Cargo inherits all of + * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}. + * @typedef {Object} CargoObject + * @memberOf module:ControlFlow + * @property {Function} length - A function returning the number of items + * waiting to be processed. Invoke like `cargo.length()`. + * @property {number} payload - An `integer` for determining how many tasks + * should be process per round. This property can be changed after a `cargo` is + * created to alter the payload on-the-fly. + * @property {Function} push - Adds `task` to the `queue`. The callback is + * called once the `worker` has finished processing the task. Instead of a + * single task, an array of `tasks` can be submitted. The respective callback is + * used for every task in the list. Invoke like `cargo.push(task, [callback])`. + * @property {Function} saturated - A callback that is called when the + * `queue.length()` hits the concurrency and further tasks will be queued. + * @property {Function} empty - A callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - A callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke like `cargo.idle()`. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke like `cargo.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke like `cargo.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`. + */ + +/** + * Creates a `cargo` object with the specified payload. Tasks added to the + * cargo will be processed altogether (up to the `payload` limit). If the + * `worker` is in progress, the task is queued until it becomes available. Once + * the `worker` has completed some tasks, each callback of those tasks is + * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) + * for how `cargo` and `queue` work. + * + * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers + * at a time, cargo passes an array of tasks to a single worker, repeating + * when the worker is finished. + * + * @name cargo + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An asynchronous function for processing an array + * of queued tasks. Invoked with `(tasks, callback)`. + * @param {number} [payload=Infinity] - An optional `integer` for determining + * how many tasks should be processed per round; if omitted, the default is + * unlimited. + * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the cargo and inner queue. + * @example + * + * // create a cargo object with payload 2 + * var cargo = async.cargo(function(tasks, callback) { + * for (var i=0; i true + */ +function identity(value) { + return value; +} + +function _createTester(check, getResult) { + return function(eachfn, arr, iteratee, cb) { + cb = cb || noop; + var testPassed = false; + var testResult; + eachfn(arr, function(value, _, callback) { + iteratee(value, function(err, result) { + if (err) { + callback(err); + } else if (check(result) && !testResult) { + testPassed = true; + testResult = getResult(true, value); + callback(null, breakLoop); + } else { + callback(); + } + }); + }, function(err) { + if (err) { + cb(err); + } else { + cb(null, testPassed ? testResult : getResult(false)); + } + }); + }; +} + +function _findGetResult(v, x) { + return x; +} + +/** + * Returns the first value in `coll` that passes an async truth test. The + * `iteratee` is applied in parallel, meaning the first iteratee to return + * `true` will fire the detect `callback` with that result. That means the + * result might not be the first item in the original `coll` (in terms of order) + * that passes the test. + + * If order within the original `coll` is important, then look at + * [`detectSeries`]{@link module:Collections.detectSeries}. + * + * @name detect + * @static + * @memberOf module:Collections + * @method + * @alias find + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @example + * + * async.detect(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // result now equals the first file in the list that exists + * }); + */ +var detect = doParallel(_createTester(identity, _findGetResult)); + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a + * time. + * + * @name detectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findLimit + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + */ +var detectLimit = doParallelLimit(_createTester(identity, _findGetResult)); + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time. + * + * @name detectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findSeries + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + */ +var detectSeries = doLimit(detectLimit, 1); + +function consoleFunc(name) { + return function (fn/*, ...args*/) { + var args = slice(arguments, 1); + args.push(function (err/*, ...args*/) { + var args = slice(arguments, 1); + if (typeof console === 'object') { + if (err) { + if (console.error) { + console.error(err); + } + } else if (console[name]) { + arrayEach(args, function (x) { + console[name](x); + }); + } + } + }); + wrapAsync(fn).apply(null, args); + }; +} + +/** + * Logs the result of an [`async` function]{@link AsyncFunction} to the + * `console` using `console.dir` to display the properties of the resulting object. + * Only works in Node.js or in browsers that support `console.dir` and + * `console.error` (such as FF and Chrome). + * If multiple arguments are returned from the async function, + * `console.dir` is called on each argument in order. + * + * @name dir + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, {hello: name}); + * }, 1000); + * }; + * + * // in the node repl + * node> async.dir(hello, 'world'); + * {hello: 'world'} + */ +var dir = consoleFunc('dir'); + +/** + * The post-check version of [`during`]{@link module:ControlFlow.during}. To reflect the difference in + * the order of operations, the arguments `test` and `fn` are switched. + * + * Also a version of [`doWhilst`]{@link module:ControlFlow.doWhilst} with asynchronous `test` function. + * @name doDuring + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.during]{@link module:ControlFlow.during} + * @category Control Flow + * @param {AsyncFunction} fn - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `fn`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `fn`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `fn` has stopped. `callback` + * will be passed an error if one occurred, otherwise `null`. + */ +function doDuring(fn, test, callback) { + callback = onlyOnce(callback || noop); + var _fn = wrapAsync(fn); + var _test = wrapAsync(test); + + function next(err/*, ...args*/) { + if (err) return callback(err); + var args = slice(arguments, 1); + args.push(check); + _test.apply(this, args); + } + + function check(err, truth) { + if (err) return callback(err); + if (!truth) return callback(null); + _fn(next); + } + + check(null, true); + +} + +/** + * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in + * the order of operations, the arguments `test` and `iteratee` are switched. + * + * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + * + * @name doWhilst + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - A function which is called each time `test` + * passes. Invoked with (callback). + * @param {Function} test - synchronous truth test to perform after each + * execution of `iteratee`. Invoked with any non-error callback results of + * `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. + * `callback` will be passed an error and any arguments passed to the final + * `iteratee`'s callback. Invoked with (err, [results]); + */ +function doWhilst(iteratee, test, callback) { + callback = onlyOnce(callback || noop); + var _iteratee = wrapAsync(iteratee); + var next = function(err/*, ...args*/) { + if (err) return callback(err); + var args = slice(arguments, 1); + if (test.apply(this, args)) return _iteratee(next); + callback.apply(null, [null].concat(args)); + }; + _iteratee(next); +} + +/** + * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the + * argument ordering differs from `until`. + * + * @name doUntil + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.doWhilst]{@link module:ControlFlow.doWhilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} test - synchronous truth test to perform after each + * execution of `iteratee`. Invoked with any non-error callback results of + * `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function doUntil(iteratee, test, callback) { + doWhilst(iteratee, function() { + return !test.apply(this, arguments); + }, callback); +} + +/** + * Like [`whilst`]{@link module:ControlFlow.whilst}, except the `test` is an asynchronous function that + * is passed a callback in the form of `function (err, truth)`. If error is + * passed to `test` or `fn`, the main callback is immediately called with the + * value of the error. + * + * @name during + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `fn`. Invoked with (callback). + * @param {AsyncFunction} fn - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `fn` has stopped. `callback` + * will be passed an error, if one occurred, otherwise `null`. + * @example + * + * var count = 0; + * + * async.during( + * function (callback) { + * return callback(null, count < 5); + * }, + * function (callback) { + * count++; + * setTimeout(callback, 1000); + * }, + * function (err) { + * // 5 seconds have passed + * } + * ); + */ +function during(test, fn, callback) { + callback = onlyOnce(callback || noop); + var _fn = wrapAsync(fn); + var _test = wrapAsync(test); + + function next(err) { + if (err) return callback(err); + _test(check); + } + + function check(err, truth) { + if (err) return callback(err); + if (!truth) return callback(null); + _fn(next); + } + + _test(check); +} + +function _withoutIndex(iteratee) { + return function (value, index, callback) { + return iteratee(value, callback); + }; +} + +/** + * Applies the function `iteratee` to each item in `coll`, in parallel. + * The `iteratee` is called with an item from the list, and a callback for when + * it has finished. If the `iteratee` passes an error to its `callback`, the + * main `callback` (for the `each` function) is immediately called with the + * error. + * + * Note, that since this function applies `iteratee` to each item in parallel, + * there is no guarantee that the iteratee functions will complete in order. + * + * @name each + * @static + * @memberOf module:Collections + * @method + * @alias forEach + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to + * each item in `coll`. Invoked with (item, callback). + * The array index is not passed to the iteratee. + * If you need the index, use `eachOf`. + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @example + * + * // assuming openFiles is an array of file names and saveFile is a function + * // to save the modified contents of that file: + * + * async.each(openFiles, saveFile, function(err){ + * // if any of the saves produced an error, err would equal that error + * }); + * + * // assuming openFiles is an array of file names + * async.each(openFiles, function(file, callback) { + * + * // Perform operation on file here. + * console.log('Processing file ' + file); + * + * if( file.length > 32 ) { + * console.log('This file name is too long'); + * callback('File name too long'); + * } else { + * // Do work to process file here + * console.log('File processed'); + * callback(); + * } + * }, function(err) { + * // if any of the file processing produced an error, err would equal that error + * if( err ) { + * // One of the iterations produced an error. + * // All processing will now stop. + * console.log('A file failed to process'); + * } else { + * console.log('All files have been processed successfully'); + * } + * }); + */ +function eachLimit(coll, iteratee, callback) { + eachOf(coll, _withoutIndex(wrapAsync(iteratee)), callback); +} + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachLimit$1(coll, limit, iteratee, callback) { + _eachOfLimit(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback); +} + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +var eachSeries = doLimit(eachLimit$1, 1); + +/** + * Wrap an async function and ensure it calls its callback on a later tick of + * the event loop. If the function already calls its callback on a next tick, + * no extra deferral is added. This is useful for preventing stack overflows + * (`RangeError: Maximum call stack size exceeded`) and generally keeping + * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) + * contained. ES2017 `async` functions are returned as-is -- they are immune + * to Zalgo's corrupting influences, as they always resolve on a later tick. + * + * @name ensureAsync + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - an async function, one that expects a node-style + * callback as its last argument. + * @returns {AsyncFunction} Returns a wrapped function with the exact same call + * signature as the function passed in. + * @example + * + * function sometimesAsync(arg, callback) { + * if (cache[arg]) { + * return callback(null, cache[arg]); // this would be synchronous!! + * } else { + * doSomeIO(arg, callback); // this IO would be asynchronous + * } + * } + * + * // this has a risk of stack overflows if many results are cached in a row + * async.mapSeries(args, sometimesAsync, done); + * + * // this will defer sometimesAsync's callback if necessary, + * // preventing stack overflows + * async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + */ +function ensureAsync(fn) { + if (isAsync(fn)) return fn; + return initialParams(function (args, callback) { + var sync = true; + args.push(function () { + var innerArgs = arguments; + if (sync) { + setImmediate$1(function () { + callback.apply(null, innerArgs); + }); + } else { + callback.apply(null, innerArgs); + } + }); + fn.apply(this, args); + sync = false; + }); +} + +function notId(v) { + return !v; +} + +/** + * Returns `true` if every element in `coll` satisfies an async test. If any + * iteratee call returns `false`, the main `callback` is immediately called. + * + * @name every + * @static + * @memberOf module:Collections + * @method + * @alias all + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @example + * + * async.every(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then every file exists + * }); + */ +var every = doParallel(_createTester(notId, notId)); + +/** + * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. + * + * @name everyLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +var everyLimit = doParallelLimit(_createTester(notId, notId)); + +/** + * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. + * + * @name everySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in series. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +var everySeries = doLimit(everyLimit, 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]; + }; +} + +function filterArray(eachfn, arr, iteratee, callback) { + var truthValues = new Array(arr.length); + eachfn(arr, function (x, index, callback) { + iteratee(x, function (err, v) { + truthValues[index] = !!v; + callback(err); + }); + }, function (err) { + if (err) return callback(err); + var results = []; + for (var i = 0; i < arr.length; i++) { + if (truthValues[i]) results.push(arr[i]); + } + callback(null, results); + }); +} + +function filterGeneric(eachfn, coll, iteratee, callback) { + var results = []; + eachfn(coll, function (x, index, callback) { + iteratee(x, function (err, v) { + if (err) { + callback(err); + } else { + if (v) { + results.push({index: index, value: x}); + } + callback(); + } + }); + }, function (err) { + if (err) { + callback(err); + } else { + callback(null, arrayMap(results.sort(function (a, b) { + return a.index - b.index; + }), baseProperty('value'))); + } + }); +} + +function _filter(eachfn, coll, iteratee, callback) { + var filter = isArrayLike(coll) ? filterArray : filterGeneric; + filter(eachfn, coll, wrapAsync(iteratee), callback || noop); +} + +/** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.filter(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of the existing files + * }); + */ +var filter = doParallel(_filter); + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a + * time. + * + * @name filterLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +var filterLimit = doParallelLimit(_filter); + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. + * + * @name filterSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results) + */ +var filterSeries = doLimit(filterLimit, 1); + +/** + * Calls the asynchronous function `fn` with a callback parameter that allows it + * to call itself again, in series, indefinitely. + + * If an error is passed to the callback then `errback` is called with the + * error, and execution stops, otherwise it will never be called. + * + * @name forever + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} fn - an async function to call repeatedly. + * Invoked with (next). + * @param {Function} [errback] - when `fn` passes an error to it's callback, + * this function will be called, and execution stops. Invoked with (err). + * @example + * + * async.forever( + * function(next) { + * // next is suitable for passing to things that need a callback(err [, whatever]); + * // it will result in this function being called again. + * }, + * function(err) { + * // if next is called with a value in its first parameter, it will appear + * // in here as 'err', and execution will stop. + * } + * ); + */ +function forever(fn, errback) { + var done = onlyOnce(errback || noop); + var task = wrapAsync(ensureAsync(fn)); + + function next(err) { + if (err) return done(err); + task(next); + } + next(); +} + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time. + * + * @name groupByLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +var groupByLimit = function(coll, limit, iteratee, callback) { + callback = callback || noop; + var _iteratee = wrapAsync(iteratee); + mapLimit(coll, limit, function(val, callback) { + _iteratee(val, function(err, key) { + if (err) return callback(err); + return callback(null, {key: key, val: val}); + }); + }, function(err, mapResults) { + var result = {}; + // from MDN, handle object having an `hasOwnProperty` prop + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + var key = mapResults[i].key; + var val = mapResults[i].val; + + if (hasOwnProperty.call(result, key)) { + result[key].push(val); + } else { + result[key] = [val]; + } + } + } + + return callback(err, result); + }); +}; + +/** + * Returns a new object, where each value corresponds to an array of items, from + * `coll`, that returned the corresponding key. That is, the keys of the object + * correspond to the values passed to the `iteratee` callback. + * + * Note: Since this function applies the `iteratee` to each item in parallel, + * there is no guarantee that the `iteratee` functions will complete in order. + * However, the values for each key in the `result` will be in the same order as + * the original `coll`. For Objects, the values will roughly be in the order of + * the original Objects' keys (but this can vary across JavaScript engines). + * + * @name groupBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @example + * + * async.groupBy(['userId1', 'userId2', 'userId3'], function(userId, callback) { + * db.findById(userId, function(err, user) { + * if (err) return callback(err); + * return callback(null, user.age); + * }); + * }, function(err, result) { + * // result is object containing the userIds grouped by age + * // e.g. { 30: ['userId1', 'userId3'], 42: ['userId2']}; + * }); + */ +var groupBy = doLimit(groupByLimit, Infinity); + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. + * + * @name groupBySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +var groupBySeries = doLimit(groupByLimit, 1); + +/** + * Logs the result of an `async` function to the `console`. Only works in + * Node.js or in browsers that support `console.log` and `console.error` (such + * as FF and Chrome). If multiple arguments are returned from the async + * function, `console.log` is called on each argument in order. + * + * @name log + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, 'hello ' + name); + * }, 1000); + * }; + * + * // in the node repl + * node> async.log(hello, 'world'); + * 'hello world' + */ +var log = consoleFunc('log'); + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a + * time. + * + * @name mapValuesLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +function mapValuesLimit(obj, limit, iteratee, callback) { + callback = once(callback || noop); + var newObj = {}; + var _iteratee = wrapAsync(iteratee); + eachOfLimit(obj, limit, function(val, key, next) { + _iteratee(val, key, function (err, result) { + if (err) return next(err); + newObj[key] = result; + next(); + }); + }, function (err) { + callback(err, newObj); + }); +} + +/** + * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. + * + * Produces a new Object by mapping each value of `obj` through the `iteratee` + * function. The `iteratee` is called each `value` and `key` from `obj` and a + * callback for when it has finished processing. Each of these callbacks takes + * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` + * passes an error to its callback, the main `callback` (for the `mapValues` + * function) is immediately called with the error. + * + * Note, the order of the keys in the result is not guaranteed. The keys will + * be roughly in the order they complete, (but this is very engine-specific) + * + * @name mapValues + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @example + * + * async.mapValues({ + * f1: 'file1', + * f2: 'file2', + * f3: 'file3' + * }, function (file, key, callback) { + * fs.stat(file, callback); + * }, function(err, result) { + * // result is now a map of stats for each file, e.g. + * // { + * // f1: [stats for file1], + * // f2: [stats for file2], + * // f3: [stats for file3] + * // } + * }); + */ + +var mapValues = doLimit(mapValuesLimit, Infinity); + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time. + * + * @name mapValuesSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +var mapValuesSeries = doLimit(mapValuesLimit, 1); + +function has(obj, key) { + return key in obj; +} + +/** + * Caches the results of an async function. When creating a hash to store + * function results against, the callback is omitted from the hash and an + * optional hash function can be used. + * + * If no hash function is specified, the first argument is used as a hash key, + * which may work reasonably if it is a string or a data type that converts to a + * distinct string. Note that objects and arrays will not behave reasonably. + * Neither will cases where the other arguments are significant. In such cases, + * specify your own hash function. + * + * The cache of results is exposed as the `memo` property of the function + * returned by `memoize`. + * + * @name memoize + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function to proxy and cache results from. + * @param {Function} hasher - An optional function for generating a custom hash + * for storing results. It has all the arguments applied to it apart from the + * callback, and must be synchronous. + * @returns {AsyncFunction} a memoized version of `fn` + * @example + * + * var slow_fn = function(name, callback) { + * // do something + * callback(null, result); + * }; + * var fn = async.memoize(slow_fn); + * + * // fn can now be used as if it were slow_fn + * fn('some name', function() { + * // callback + * }); + */ +function memoize(fn, hasher) { + var memo = Object.create(null); + var queues = Object.create(null); + hasher = hasher || identity; + var _fn = wrapAsync(fn); + var memoized = initialParams(function memoized(args, callback) { + var key = hasher.apply(null, args); + if (has(memo, key)) { + setImmediate$1(function() { + callback.apply(null, memo[key]); + }); + } else if (has(queues, key)) { + queues[key].push(callback); + } else { + queues[key] = [callback]; + _fn.apply(null, args.concat(function(/*args*/) { + var args = slice(arguments); + memo[key] = args; + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i].apply(null, args); + } + })); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; +} + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `setImmediate`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name nextTick + * @static + * @memberOf module:Utils + * @method + * @alias setImmediate + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +var _defer$1; + +if (hasNextTick) { + _defer$1 = process.nextTick; +} else if (hasSetImmediate) { + _defer$1 = setImmediate; +} else { + _defer$1 = fallback; +} + +var nextTick = wrap(_defer$1); + +function _parallel(eachfn, tasks, callback) { + callback = callback || noop; + var results = isArrayLike(tasks) ? [] : {}; + + eachfn(tasks, function (task, key, callback) { + wrapAsync(task)(function (err, result) { + if (arguments.length > 2) { + result = slice(arguments, 1); + } + results[key] = result; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} + +/** + * Run the `tasks` collection of functions in parallel, without waiting until + * the previous function has completed. If any of the functions pass an error to + * its callback, the main `callback` is immediately called with the value of the + * error. Once the `tasks` have completed, the results are passed to the final + * `callback` as an array. + * + * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about + * parallel execution of code. If your tasks do not use any timers or perform + * any I/O, they will actually be executed in series. Any synchronous setup + * sections for each task will happen one after the other. JavaScript remains + * single-threaded. + * + * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the + * execution of other tasks when a task fails. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.parallel}. + * + * @name parallel + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * + * @example + * async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // optional callback + * function(err, results) { + * // the results array will equal ['one','two'] even though + * // the second function had a shorter timeout. + * }); + * + * // an example using an object instead of an array + * async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * // results is now equals to: {one: 1, two: 2} + * }); + */ +function parallelLimit(tasks, callback) { + _parallel(eachOf, tasks, callback); +} + +/** + * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a + * time. + * + * @name parallelLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.parallel]{@link module:ControlFlow.parallel} + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + */ +function parallelLimit$1(tasks, limit, callback) { + _parallel(_eachOfLimit(limit), tasks, callback); +} + +/** + * A queue of tasks for the worker function to complete. + * @typedef {Object} QueueObject + * @memberOf module:ControlFlow + * @property {Function} length - a function returning the number of items + * waiting to be processed. Invoke with `queue.length()`. + * @property {boolean} started - a boolean indicating whether or not any + * items have been pushed and processed by the queue. + * @property {Function} running - a function returning the number of items + * currently being processed. Invoke with `queue.running()`. + * @property {Function} workersList - a function returning the array of items + * currently being processed. Invoke with `queue.workersList()`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke with `queue.idle()`. + * @property {number} concurrency - an integer for determining how many `worker` + * functions should be run in parallel. This property can be changed after a + * `queue` is created to alter the concurrency on-the-fly. + * @property {Function} push - add a new task to the `queue`. Calls `callback` + * once the `worker` has finished processing the task. Instead of a single task, + * a `tasks` array can be submitted. The respective callback is used for every + * task in the list. Invoke with `queue.push(task, [callback])`, + * @property {Function} unshift - add a new task to the front of the `queue`. + * Invoke with `queue.unshift(task, [callback])`. + * @property {Function} remove - remove items from the queue that match a test + * function. The test function will be passed an object with a `data` property, + * and a `priority` property, if this is a + * [priorityQueue]{@link module:ControlFlow.priorityQueue} object. + * Invoked with `queue.remove(testFn)`, where `testFn` is of the form + * `function ({data, priority}) {}` and returns a Boolean. + * @property {Function} saturated - a callback that is called when the number of + * running workers hits the `concurrency` limit, and further tasks will be + * queued. + * @property {Function} unsaturated - a callback that is called when the number + * of running workers is less than the `concurrency` & `buffer` limits, and + * further tasks will not be queued. + * @property {number} buffer - A minimum threshold buffer in order to say that + * the `queue` is `unsaturated`. + * @property {Function} empty - a callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - a callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} error - a callback that is called when a task errors. + * Has the signature `function(error, task)`. + * @property {boolean} paused - a boolean for determining whether the queue is + * in a paused state. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke with `queue.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke with `queue.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. No more tasks + * should be pushed to the queue after calling this function. Invoke with `queue.kill()`. + */ + +/** + * Creates a `queue` object with the specified `concurrency`. Tasks added to the + * `queue` are processed in parallel (up to the `concurrency` limit). If all + * `worker`s are in progress, the task is queued until one becomes available. + * Once a `worker` completes a `task`, that `task`'s callback is called. + * + * @name queue + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. Invoked with (task, callback). + * @param {number} [concurrency=1] - An `integer` for determining how many + * `worker` functions should be run in parallel. If omitted, the concurrency + * defaults to `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the queue. + * @example + * + * // create a queue object with concurrency 2 + * var q = async.queue(function(task, callback) { + * console.log('hello ' + task.name); + * callback(); + * }, 2); + * + * // assign a callback + * q.drain = function() { + * console.log('all items have been processed'); + * }; + * + * // add some items to the queue + * q.push({name: 'foo'}, function(err) { + * console.log('finished processing foo'); + * }); + * q.push({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + * + * // add some items to the queue (batch-wise) + * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) { + * console.log('finished processing item'); + * }); + * + * // add some items to the front of the queue + * q.unshift({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + */ +var queue$1 = function (worker, concurrency) { + var _worker = wrapAsync(worker); + return queue(function (items, cb) { + _worker(items[0], cb); + }, concurrency, 1); +}; + +/** + * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and + * completed in ascending priority order. + * + * @name priorityQueue + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. + * Invoked with (task, callback). + * @param {number} concurrency - An `integer` for determining how many `worker` + * functions should be run in parallel. If omitted, the concurrency defaults to + * `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are two + * differences between `queue` and `priorityQueue` objects: + * * `push(task, priority, [callback])` - `priority` should be a number. If an + * array of `tasks` is given, all tasks will be assigned the same priority. + * * The `unshift` method was removed. + */ +var priorityQueue = function(worker, concurrency) { + // Start with a normal queue + var q = queue$1(worker, concurrency); + + // Override push to accept second parameter representing priority + q.push = function(data, priority, callback) { + if (callback == null) callback = noop; + if (typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!isArray(data)) { + data = [data]; + } + if (data.length === 0) { + // call drain immediately if there are no tasks + return setImmediate$1(function() { + q.drain(); + }); + } + + priority = priority || 0; + var nextNode = q._tasks.head; + while (nextNode && priority >= nextNode.priority) { + nextNode = nextNode.next; + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + priority: priority, + callback: callback + }; + + if (nextNode) { + q._tasks.insertBefore(nextNode, item); + } else { + q._tasks.push(item); + } + } + setImmediate$1(q.process); + }; + + // Remove unshift function + delete q.unshift; + + return q; +}; + +/** + * Runs the `tasks` array of functions in parallel, without waiting until the + * previous function has completed. Once any of the `tasks` complete or pass an + * error to its callback, the main `callback` is immediately called. It's + * equivalent to `Promise.race()`. + * + * @name race + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} + * to run. Each function can complete with an optional `result` value. + * @param {Function} callback - A callback to run once any of the functions have + * completed. This function gets an error or result from the first function that + * completed. Invoked with (err, result). + * @returns undefined + * @example + * + * async.race([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // main callback + * function(err, result) { + * // the result will be equal to 'two' as it finishes earlier + * }); + */ +function race(tasks, callback) { + callback = once(callback || noop); + if (!isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); + if (!tasks.length) return callback(); + for (var i = 0, l = tasks.length; i < l; i++) { + wrapAsync(tasks[i])(callback); + } +} + +/** + * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. + * + * @name reduceRight + * @static + * @memberOf module:Collections + * @method + * @see [async.reduce]{@link module:Collections.reduce} + * @alias foldr + * @category Collection + * @param {Array} array - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee complete with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + */ +function reduceRight (array, memo, iteratee, callback) { + var reversed = slice(array).reverse(); + reduce(reversed, memo, iteratee, callback); +} + +/** + * Wraps the async function in another function that always completes with a + * result object, even when it errors. + * + * The result object has either the property `error` or `value`. + * + * @name reflect + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function you want to wrap + * @returns {Function} - A function that always passes null to it's callback as + * the error. The second argument to the callback will be an `object` with + * either an `error` or a `value` property. + * @example + * + * async.parallel([ + * async.reflect(function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }), + * async.reflect(function(callback) { + * // do some more stuff but error ... + * callback('bad stuff happened'); + * }), + * async.reflect(function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * }) + * ], + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = 'bad stuff happened' + * // results[2].value = 'two' + * }); + */ +function reflect(fn) { + var _fn = wrapAsync(fn); + return initialParams(function reflectOn(args, reflectCallback) { + args.push(function callback(error, cbArg) { + if (error) { + reflectCallback(null, { error: error }); + } else { + var value; + if (arguments.length <= 2) { + value = cbArg; + } else { + value = slice(arguments, 1); + } + reflectCallback(null, { value: value }); + } + }); + + return _fn.apply(this, args); + }); +} + +function reject$1(eachfn, arr, iteratee, callback) { + _filter(eachfn, arr, function(value, cb) { + iteratee(value, function(err, v) { + cb(err, !v); + }); + }, callback); +} + +/** + * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test. + * + * @name reject + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.reject(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of missing files + * createFiles(results); + * }); + */ +var reject = doParallel(reject$1); + +/** + * A helper function that wraps an array or an object of functions with `reflect`. + * + * @name reflectAll + * @static + * @memberOf module:Utils + * @method + * @see [async.reflect]{@link module:Utils.reflect} + * @category Util + * @param {Array|Object|Iterable} tasks - The collection of + * [async functions]{@link AsyncFunction} to wrap in `async.reflect`. + * @returns {Array} Returns an array of async functions, each wrapped in + * `async.reflect` + * @example + * + * let tasks = [ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * // do some more stuff but error ... + * callback(new Error('bad stuff happened')); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = Error('bad stuff happened') + * // results[2].value = 'two' + * }); + * + * // an example using an object instead of an array + * let tasks = { + * one: function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * two: function(callback) { + * callback('two'); + * }, + * three: function(callback) { + * setTimeout(function() { + * callback(null, 'three'); + * }, 100); + * } + * }; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results.one.value = 'one' + * // results.two.error = 'two' + * // results.three.value = 'three' + * }); + */ +function reflectAll(tasks) { + var results; + if (isArray(tasks)) { + results = arrayMap(tasks, reflect); + } else { + results = {}; + baseForOwn(tasks, function(task, key) { + results[key] = reflect.call(this, task); + }); + } + return results; +} + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a + * time. + * + * @name rejectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +var rejectLimit = doParallelLimit(reject$1); + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. + * + * @name rejectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +var rejectSeries = doLimit(rejectLimit, 1); + +/** + * 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$1(value) { + return function() { + return value; + }; +} + +/** + * Attempts to get a successful response from `task` no more than `times` times + * before returning an error. If the task is successful, the `callback` will be + * passed the result of the successful task. If all attempts fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name retry + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @see [async.retryable]{@link module:ControlFlow.retryable} + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an + * object with `times` and `interval` or a number. + * * `times` - The number of attempts to make before giving up. The default + * is `5`. + * * `interval` - The time to wait between retries, in milliseconds. The + * default is `0`. The interval may also be specified as a function of the + * retry count (see example). + * * `errorFilter` - An optional synchronous function that is invoked on + * erroneous result. If it returns `true` the retry attempts will continue; + * if the function returns `false` the retry flow is aborted with the current + * attempt's error and result being returned to the final callback. + * Invoked with (err). + * * If `opts` is a number, the number specifies the number of times to retry, + * with the default interval of `0`. + * @param {AsyncFunction} task - An async function to retry. + * Invoked with (callback). + * @param {Function} [callback] - An optional callback which is called when the + * task has succeeded, or after the final failed attempt. It receives the `err` + * and `result` arguments of the last attempt at completing the `task`. Invoked + * with (err, results). + * + * @example + * + * // The `retry` function can be used as a stand-alone control flow by passing + * // a callback, as shown below: + * + * // try calling apiMethod 3 times + * async.retry(3, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 3 times, waiting 200 ms between each retry + * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 10 times with exponential backoff + * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) + * async.retry({ + * times: 10, + * interval: function(retryCount) { + * return 50 * Math.pow(2, retryCount); + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod the default 5 times no delay between each retry + * async.retry(apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod only when error condition satisfies, all other + * // errors will abort the retry control flow and return to final callback + * async.retry({ + * errorFilter: function(err) { + * return err.message === 'Temporary error'; // only retry on a specific error + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // It can also be embedded within other control flow functions to retry + * // individual methods that are not as reliable, like this: + * async.auto({ + * users: api.getUsers.bind(api), + * payments: async.retryable(3, api.getPayments.bind(api)) + * }, function(err, results) { + * // do something with the results + * }); + * + */ +function retry(opts, task, callback) { + var DEFAULT_TIMES = 5; + var DEFAULT_INTERVAL = 0; + + var options = { + times: DEFAULT_TIMES, + intervalFunc: constant$1(DEFAULT_INTERVAL) + }; + + function parseTimes(acc, t) { + if (typeof t === 'object') { + acc.times = +t.times || DEFAULT_TIMES; + + acc.intervalFunc = typeof t.interval === 'function' ? + t.interval : + constant$1(+t.interval || DEFAULT_INTERVAL); + + acc.errorFilter = t.errorFilter; + } else if (typeof t === 'number' || typeof t === 'string') { + acc.times = +t || DEFAULT_TIMES; + } else { + throw new Error("Invalid arguments for async.retry"); + } + } + + if (arguments.length < 3 && typeof opts === 'function') { + callback = task || noop; + task = opts; + } else { + parseTimes(options, opts); + callback = callback || noop; + } + + if (typeof task !== 'function') { + throw new Error("Invalid arguments for async.retry"); + } + + var _task = wrapAsync(task); + + var attempt = 1; + function retryAttempt() { + _task(function(err) { + if (err && attempt++ < options.times && + (typeof options.errorFilter != 'function' || + options.errorFilter(err))) { + setTimeout(retryAttempt, options.intervalFunc(attempt)); + } else { + callback.apply(null, arguments); + } + }); + } + + retryAttempt(); +} + +/** + * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method + * wraps a task and makes it retryable, rather than immediately calling it + * with retries. + * + * @name retryable + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.retry]{@link module:ControlFlow.retry} + * @category Control Flow + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional + * options, exactly the same as from `retry` + * @param {AsyncFunction} task - the asynchronous function to wrap. + * This function will be passed any arguments passed to the returned wrapper. + * Invoked with (...args, callback). + * @returns {AsyncFunction} The wrapped function, which when invoked, will + * retry on an error, based on the parameters specified in `opts`. + * This function will accept the same parameters as `task`. + * @example + * + * async.auto({ + * dep1: async.retryable(3, getFromFlakyService), + * process: ["dep1", async.retryable(3, function (results, cb) { + * maybeProcessData(results.dep1, cb); + * })] + * }, callback); + */ +var retryable = function (opts, task) { + if (!task) { + task = opts; + opts = null; + } + var _task = wrapAsync(task); + return initialParams(function (args, callback) { + function taskFn(cb) { + _task.apply(null, args.concat(cb)); + } + + if (opts) retry(opts, taskFn, callback); + else retry(taskFn, callback); + + }); +}; + +/** + * Run the functions in the `tasks` collection in series, each one running once + * the previous function has completed. If any functions in the series pass an + * error to its callback, no more functions are run, and `callback` is + * immediately called with the value of the error. Otherwise, `callback` + * receives an array of results when `tasks` have completed. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function, and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.series}. + * + * **Note** that while many implementations preserve the order of object + * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) + * explicitly states that + * + * > The mechanics and order of enumerating the properties is not specified. + * + * So if you rely on the order in which your series of functions are executed, + * and want this to work on all platforms, consider using an array. + * + * @name series + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing + * [async functions]{@link AsyncFunction} to run in series. + * Each function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This function gets a results array (or object) + * containing all the result arguments passed to the `task` callbacks. Invoked + * with (err, result). + * @example + * async.series([ + * function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }, + * function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * } + * ], + * // optional callback + * function(err, results) { + * // results is now equal to ['one', 'two'] + * }); + * + * async.series({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback){ + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * // results is now equal to: {one: 1, two: 2} + * }); + */ +function series(tasks, callback) { + _parallel(eachOfSeries, tasks, callback); +} + +/** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @example + * + * async.some(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then at least one of the files exists + * }); + */ +var some = doParallel(_createTester(Boolean, identity)); + +/** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +var someLimit = doParallelLimit(_createTester(Boolean, identity)); + +/** + * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. + * + * @name someSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anySeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in series. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +var someSeries = doLimit(someLimit, 1); + +/** + * Sorts a list by the results of running each `coll` value through an async + * `iteratee`. + * + * @name sortBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a value to use as the sort criteria as + * its `result`. + * Invoked with (item, callback). + * @param {Function} callback - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is the items + * from the original `coll` sorted by the values returned by the `iteratee` + * calls. Invoked with (err, results). + * @example + * + * async.sortBy(['file1','file2','file3'], function(file, callback) { + * fs.stat(file, function(err, stats) { + * callback(err, stats.mtime); + * }); + * }, function(err, results) { + * // results is now the original array of files sorted by + * // modified date + * }); + * + * // By modifying the callback parameter the + * // sorting order can be influenced: + * + * // ascending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x); + * }, function(err,result) { + * // result callback + * }); + * + * // descending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x*-1); //<- x*-1 instead of x, turns the order around + * }, function(err,result) { + * // result callback + * }); + */ +function sortBy (coll, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + map(coll, function (x, callback) { + _iteratee(x, function (err, criteria) { + if (err) return callback(err); + callback(null, {value: x, criteria: criteria}); + }); + }, function (err, results) { + if (err) return callback(err); + callback(null, arrayMap(results.sort(comparator), baseProperty('value'))); + }); + + function comparator(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } +} + +/** + * Sets a time limit on an asynchronous function. If the function does not call + * its callback within the specified milliseconds, it will be called with a + * timeout error. The code property for the error object will be `'ETIMEDOUT'`. + * + * @name timeout + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} asyncFn - The async function to limit in time. + * @param {number} milliseconds - The specified time limit. + * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) + * to timeout Error for more information.. + * @returns {AsyncFunction} Returns a wrapped function that can be used with any + * of the control flow functions. + * Invoke this function with the same parameters as you would `asyncFunc`. + * @example + * + * function myFunction(foo, callback) { + * doAsyncTask(foo, function(err, data) { + * // handle errors + * if (err) return callback(err); + * + * // do some stuff ... + * + * // return processed data + * return callback(null, data); + * }); + * } + * + * var wrapped = async.timeout(myFunction, 1000); + * + * // call `wrapped` as you would `myFunction` + * wrapped({ bar: 'bar' }, function(err, data) { + * // if `myFunction` takes < 1000 ms to execute, `err` + * // and `data` will have their expected values + * + * // else `err` will be an Error with the code 'ETIMEDOUT' + * }); + */ +function timeout(asyncFn, milliseconds, info) { + var fn = wrapAsync(asyncFn); + + return initialParams(function (args, callback) { + var timedOut = false; + var timer; + + function timeoutCallback() { + var name = asyncFn.name || 'anonymous'; + var error = new Error('Callback function "' + name + '" timed out.'); + error.code = 'ETIMEDOUT'; + if (info) { + error.info = info; + } + timedOut = true; + callback(error); + } + + args.push(function () { + if (!timedOut) { + callback.apply(null, arguments); + clearTimeout(timer); + } + }); + + // setup timer and call original function + timer = setTimeout(timeoutCallback, milliseconds); + fn.apply(null, args); + }); +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil; +var 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; +} + +/** + * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a + * time. + * + * @name timesLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} count - The number of times to run the function. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see [async.map]{@link module:Collections.map}. + */ +function timeLimit(count, limit, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + mapLimit(baseRange(0, count, 1), limit, _iteratee, callback); +} + +/** + * Calls the `iteratee` function `n` times, and accumulates results in the same + * manner you would use with [map]{@link module:Collections.map}. + * + * @name times + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.map]{@link module:Collections.map} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @example + * + * // Pretend this is some complicated async factory + * var createUser = function(id, callback) { + * callback(null, { + * id: 'user' + id + * }); + * }; + * + * // generate 5 users + * async.times(5, function(n, next) { + * createUser(n, function(err, user) { + * next(err, user); + * }); + * }, function(err, users) { + * // we should now have 5 users + * }); + */ +var times = doLimit(timeLimit, Infinity); + +/** + * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time. + * + * @name timesSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + */ +var timesSeries = doLimit(timeLimit, 1); + +/** + * A relative of `reduce`. Takes an Object or Array, and iterates over each + * element in series, each step potentially mutating an `accumulator` value. + * The type of the accumulator defaults to the type of collection passed in. + * + * @name transform + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {*} [accumulator] - The initial state of the transform. If omitted, + * it will default to an empty Object or Array, depending on the type of `coll` + * @param {AsyncFunction} iteratee - A function applied to each item in the + * collection that potentially modifies the accumulator. + * Invoked with (accumulator, item, key, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the transformed accumulator. + * Invoked with (err, result). + * @example + * + * async.transform([1,2,3], function(acc, item, index, callback) { + * // pointless async: + * process.nextTick(function() { + * acc.push(item * 2) + * callback(null) + * }); + * }, function(err, result) { + * // result is now equal to [2, 4, 6] + * }); + * + * @example + * + * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) { + * setImmediate(function () { + * obj[key] = val * 2; + * callback(); + * }) + * }, function (err, result) { + * // result is equal to {a: 2, b: 4, c: 6} + * }) + */ +function transform (coll, accumulator, iteratee, callback) { + if (arguments.length <= 3) { + callback = iteratee; + iteratee = accumulator; + accumulator = isArray(coll) ? [] : {}; + } + callback = once(callback || noop); + var _iteratee = wrapAsync(iteratee); + + eachOf(coll, function(v, k, cb) { + _iteratee(accumulator, v, k, cb); + }, function(err) { + callback(err, accumulator); + }); +} + +/** + * It runs each task in series but stops whenever any of the functions were + * successful. If one of the tasks were successful, the `callback` will be + * passed the result of the successful task. If all tasks fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name tryEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing functions to + * run, each function is passed a `callback(err, result)` it must call on + * completion with an error `err` (which can be `null`) and an optional `result` + * value. + * @param {Function} [callback] - An optional callback which is called when one + * of the tasks has succeeded, or all have failed. It receives the `err` and + * `result` arguments of the last attempt at completing the `task`. Invoked with + * (err, results). + * @example + * async.try([ + * function getDataFromFirstWebsite(callback) { + * // Try getting the data from the first website + * callback(err, data); + * }, + * function getDataFromSecondWebsite(callback) { + * // First website failed, + * // Try getting the data from the backup website + * callback(err, data); + * } + * ], + * // optional callback + * function(err, results) { + * Now do something with the data. + * }); + * + */ +function tryEach(tasks, callback) { + var error = null; + var result; + callback = callback || noop; + eachSeries(tasks, function(task, callback) { + wrapAsync(task)(function (err, res/*, ...args*/) { + if (arguments.length > 2) { + result = slice(arguments, 1); + } else { + result = res; + } + error = err; + callback(!err); + }); + }, function () { + callback(error, result); + }); +} + +/** + * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original, + * unmemoized form. Handy for testing. + * + * @name unmemoize + * @static + * @memberOf module:Utils + * @method + * @see [async.memoize]{@link module:Utils.memoize} + * @category Util + * @param {AsyncFunction} fn - the memoized function + * @returns {AsyncFunction} a function that calls the original unmemoized function + */ +function unmemoize(fn) { + return function () { + return (fn.unmemoized || fn).apply(null, arguments); + }; +} + +/** + * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. + * + * @name whilst + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns undefined + * @example + * + * var count = 0; + * async.whilst( + * function() { return count < 5; }, + * function(callback) { + * count++; + * setTimeout(function() { + * callback(null, count); + * }, 1000); + * }, + * function (err, n) { + * // 5 seconds have passed, n = 5 + * } + * ); + */ +function whilst(test, iteratee, callback) { + callback = onlyOnce(callback || noop); + var _iteratee = wrapAsync(iteratee); + if (!test()) return callback(null); + var next = function(err/*, ...args*/) { + if (err) return callback(err); + if (test()) return _iteratee(next); + var args = slice(arguments, 1); + callback.apply(null, [null].concat(args)); + }; + _iteratee(next); +} + +/** + * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. `callback` will be passed an error and any + * arguments passed to the final `iteratee`'s callback. + * + * The inverse of [whilst]{@link module:ControlFlow.whilst}. + * + * @name until + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function until(test, iteratee, callback) { + whilst(function() { + return !test.apply(this, arguments); + }, iteratee, callback); +} + +/** + * Runs the `tasks` array of functions in series, each passing their results to + * the next in the array. However, if any of the `tasks` pass an error to their + * own callback, the next function is not executed, and the main `callback` is + * immediately called with the error. + * + * @name waterfall + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array of [async functions]{@link AsyncFunction} + * to run. + * Each function should complete with any number of `result` values. + * The `result` values will be passed as arguments, in order, to the next task. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This will be passed the results of the last task's + * callback. Invoked with (err, [results]). + * @returns undefined + * @example + * + * async.waterfall([ + * function(callback) { + * callback(null, 'one', 'two'); + * }, + * function(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * }, + * function(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + * ], function (err, result) { + * // result now equals 'done' + * }); + * + * // Or, with named functions: + * async.waterfall([ + * myFirstFunction, + * mySecondFunction, + * myLastFunction, + * ], function (err, result) { + * // result now equals 'done' + * }); + * function myFirstFunction(callback) { + * callback(null, 'one', 'two'); + * } + * function mySecondFunction(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * } + * function myLastFunction(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + */ +var waterfall = function(tasks, callback) { + callback = once(callback || noop); + if (!isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions')); + if (!tasks.length) return callback(); + var taskIndex = 0; + + function nextTask(args) { + var task = wrapAsync(tasks[taskIndex++]); + args.push(onlyOnce(next)); + task.apply(null, args); + } + + function next(err/*, ...args*/) { + if (err || taskIndex === tasks.length) { + return callback.apply(null, arguments); + } + nextTask(slice(arguments, 1)); + } + + nextTask([]); +}; + +/** + * An "async function" in the context of Async is an asynchronous function with + * a variable number of parameters, with the final parameter being a callback. + * (`function (arg1, arg2, ..., callback) {}`) + * The final callback is of the form `callback(err, results...)`, which must be + * called once the function is completed. The callback should be called with a + * Error as its first argument to signal that an error occurred. + * Otherwise, if no error occurred, it should be called with `null` as the first + * argument, and any additional `result` arguments that may apply, to signal + * successful completion. + * The callback must be called exactly once, ideally on a later tick of the + * JavaScript event loop. + * + * This type of function is also referred to as a "Node-style async function", + * or a "continuation passing-style function" (CPS). Most of the methods of this + * library are themselves CPS/Node-style async functions, or functions that + * return CPS/Node-style async functions. + * + * Wherever we accept a Node-style async function, we also directly accept an + * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. + * In this case, the `async` function will not be passed a final callback + * argument, and any thrown error will be used as the `err` argument of the + * implicit callback, and the return value will be used as the `result` value. + * (i.e. a `rejected` of the returned Promise becomes the `err` callback + * argument, and a `resolved` value becomes the `result`.) + * + * Note, due to JavaScript limitations, we can only detect native `async` + * functions and not transpilied implementations. + * Your environment must have `async`/`await` support for this to work. + * (e.g. Node > v7.6, or a recent version of a modern browser). + * If you are using `async` functions through a transpiler (e.g. Babel), you + * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, + * because the `async function` will be compiled to an ordinary function that + * returns a promise. + * + * @typedef {Function} AsyncFunction + * @static + */ + +/** + * Async is a utility module which provides straight-forward, powerful functions + * for working with asynchronous JavaScript. Although originally designed for + * use with [Node.js](http://nodejs.org) and installable via + * `npm install --save async`, it can also be used directly in the browser. + * @module async + * @see AsyncFunction + */ + + +/** + * A collection of `async` functions for manipulating collections, such as + * arrays and objects. + * @module Collections + */ + +/** + * A collection of `async` functions for controlling the flow through a script. + * @module ControlFlow + */ + +/** + * A collection of `async` utility functions. + * @module Utils + */ + +var index = { + applyEach: applyEach, + applyEachSeries: applyEachSeries, + apply: apply, + asyncify: asyncify, + auto: auto, + autoInject: autoInject, + cargo: cargo, + compose: compose, + concat: concat, + concatLimit: concatLimit, + concatSeries: concatSeries, + constant: constant, + detect: detect, + detectLimit: detectLimit, + detectSeries: detectSeries, + dir: dir, + doDuring: doDuring, + doUntil: doUntil, + doWhilst: doWhilst, + during: during, + each: eachLimit, + eachLimit: eachLimit$1, + eachOf: eachOf, + eachOfLimit: eachOfLimit, + eachOfSeries: eachOfSeries, + eachSeries: eachSeries, + ensureAsync: ensureAsync, + every: every, + everyLimit: everyLimit, + everySeries: everySeries, + filter: filter, + filterLimit: filterLimit, + filterSeries: filterSeries, + forever: forever, + groupBy: groupBy, + groupByLimit: groupByLimit, + groupBySeries: groupBySeries, + log: log, + map: map, + mapLimit: mapLimit, + mapSeries: mapSeries, + mapValues: mapValues, + mapValuesLimit: mapValuesLimit, + mapValuesSeries: mapValuesSeries, + memoize: memoize, + nextTick: nextTick, + parallel: parallelLimit, + parallelLimit: parallelLimit$1, + priorityQueue: priorityQueue, + queue: queue$1, + race: race, + reduce: reduce, + reduceRight: reduceRight, + reflect: reflect, + reflectAll: reflectAll, + reject: reject, + rejectLimit: rejectLimit, + rejectSeries: rejectSeries, + retry: retry, + retryable: retryable, + seq: seq, + series: series, + setImmediate: setImmediate$1, + some: some, + someLimit: someLimit, + someSeries: someSeries, + sortBy: sortBy, + timeout: timeout, + times: times, + timesLimit: timeLimit, + timesSeries: timesSeries, + transform: transform, + tryEach: tryEach, + unmemoize: unmemoize, + until: until, + waterfall: waterfall, + whilst: whilst, + + // aliases + all: every, + any: some, + forEach: eachLimit, + forEachSeries: eachSeries, + forEachLimit: eachLimit$1, + forEachOf: eachOf, + forEachOfSeries: eachOfSeries, + forEachOfLimit: eachOfLimit, + inject: reduce, + foldl: reduce, + foldr: reduceRight, + select: filter, + selectLimit: filterLimit, + selectSeries: filterSeries, + wrapSync: asyncify +}; + +exports['default'] = index; +exports.applyEach = applyEach; +exports.applyEachSeries = applyEachSeries; +exports.apply = apply; +exports.asyncify = asyncify; +exports.auto = auto; +exports.autoInject = autoInject; +exports.cargo = cargo; +exports.compose = compose; +exports.concat = concat; +exports.concatLimit = concatLimit; +exports.concatSeries = concatSeries; +exports.constant = constant; +exports.detect = detect; +exports.detectLimit = detectLimit; +exports.detectSeries = detectSeries; +exports.dir = dir; +exports.doDuring = doDuring; +exports.doUntil = doUntil; +exports.doWhilst = doWhilst; +exports.during = during; +exports.each = eachLimit; +exports.eachLimit = eachLimit$1; +exports.eachOf = eachOf; +exports.eachOfLimit = eachOfLimit; +exports.eachOfSeries = eachOfSeries; +exports.eachSeries = eachSeries; +exports.ensureAsync = ensureAsync; +exports.every = every; +exports.everyLimit = everyLimit; +exports.everySeries = everySeries; +exports.filter = filter; +exports.filterLimit = filterLimit; +exports.filterSeries = filterSeries; +exports.forever = forever; +exports.groupBy = groupBy; +exports.groupByLimit = groupByLimit; +exports.groupBySeries = groupBySeries; +exports.log = log; +exports.map = map; +exports.mapLimit = mapLimit; +exports.mapSeries = mapSeries; +exports.mapValues = mapValues; +exports.mapValuesLimit = mapValuesLimit; +exports.mapValuesSeries = mapValuesSeries; +exports.memoize = memoize; +exports.nextTick = nextTick; +exports.parallel = parallelLimit; +exports.parallelLimit = parallelLimit$1; +exports.priorityQueue = priorityQueue; +exports.queue = queue$1; +exports.race = race; +exports.reduce = reduce; +exports.reduceRight = reduceRight; +exports.reflect = reflect; +exports.reflectAll = reflectAll; +exports.reject = reject; +exports.rejectLimit = rejectLimit; +exports.rejectSeries = rejectSeries; +exports.retry = retry; +exports.retryable = retryable; +exports.seq = seq; +exports.series = series; +exports.setImmediate = setImmediate$1; +exports.some = some; +exports.someLimit = someLimit; +exports.someSeries = someSeries; +exports.sortBy = sortBy; +exports.timeout = timeout; +exports.times = times; +exports.timesLimit = timeLimit; +exports.timesSeries = timesSeries; +exports.transform = transform; +exports.tryEach = tryEach; +exports.unmemoize = unmemoize; +exports.until = until; +exports.waterfall = waterfall; +exports.whilst = whilst; +exports.all = every; +exports.allLimit = everyLimit; +exports.allSeries = everySeries; +exports.any = some; +exports.anyLimit = someLimit; +exports.anySeries = someSeries; +exports.find = detect; +exports.findLimit = detectLimit; +exports.findSeries = detectSeries; +exports.forEach = eachLimit; +exports.forEachSeries = eachSeries; +exports.forEachLimit = eachLimit$1; +exports.forEachOf = eachOf; +exports.forEachOfSeries = eachOfSeries; +exports.forEachOfLimit = eachOfLimit; +exports.inject = reduce; +exports.foldl = reduce; +exports.foldr = reduceRight; +exports.select = filter; +exports.selectLimit = filterLimit; +exports.selectSeries = filterSeries; +exports.wrapSync = asyncify; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/node_modules/watchpack/node_modules/async/dist/async.min.js b/node_modules/watchpack/node_modules/async/dist/async.min.js new file mode 100644 index 000000000..364629992 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/dist/async.min.js @@ -0,0 +1,2 @@ +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(n.async=n.async||{})}(this,function(n){"use strict";function t(n,t){t|=0;for(var e=Math.max(n.length-t,0),r=Array(e),u=0;u-1&&n%1==0&&n<=At}function d(n){return null!=n&&v(n.length)&&!y(n)}function m(){}function g(n){return function(){if(null!==n){var t=n;n=null,t.apply(this,arguments)}}}function b(n,t){for(var e=-1,r=Array(n);++e-1&&n%1==0&&nu?0:u+t),e=e>u?u:e,e<0&&(e+=u),u=t>e?0:e-t>>>0,t>>>=0;for(var o=Array(u);++r=r?n:Z(n,t,e)}function tn(n,t){for(var e=n.length;e--&&J(t,n[e],0)>-1;);return e}function en(n,t){for(var e=-1,r=n.length;++e-1;);return e}function rn(n){return n.split("")}function un(n){return Je.test(n)}function on(n){return n.match(hr)||[]}function cn(n){return un(n)?on(n):rn(n)}function fn(n){return null==n?"":Y(n)}function an(n,t,e){if(n=fn(n),n&&(e||void 0===t))return n.replace(yr,"");if(!n||!(t=Y(t)))return n;var r=cn(n),u=cn(t),o=en(r,u),i=tn(r,u)+1;return nn(r,o,i).join("")}function ln(n){return n=n.toString().replace(gr,""),n=n.match(vr)[2].replace(" ",""),n=n?n.split(dr):[],n=n.map(function(n){return an(n.replace(mr,""))})}function sn(n,t){var e={};N(n,function(n,t){function r(t,e){var r=K(u,function(n){return t[n]});r.push(e),a(n).apply(null,r)}var u,o=f(n),i=!o&&1===n.length||o&&0===n.length;if(Pt(n))u=n.slice(0,-1),n=n[n.length-1],e[t]=u.concat(u.length>0?r:n);else if(i)e[t]=n;else{if(u=ln(n),0===n.length&&!o&&0===u.length)throw new Error("autoInject task functions require explicit parameters.");o||u.pop(),e[t]=u.concat(r)}}),qe(e,t)}function pn(){this.head=this.tail=null,this.length=0}function hn(n,t){n.length=1,n.head=n.tail=t}function yn(n,t,e){function r(n,t,e){if(null!=e&&"function"!=typeof e)throw new Error("task callback must be a function");if(l.started=!0,Pt(n)||(n=[n]),0===n.length&&l.idle())return at(function(){l.drain()});for(var r=0,u=n.length;r=0&&c.splice(o,1),u.callback.apply(u,arguments),null!=t&&l.error(t,u.data)}i<=l.concurrency-l.buffer&&l.unsaturated(),l.idle()&&l.drain(),l.process()}}if(null==t)t=1;else if(0===t)throw new Error("Concurrency must not be zero");var o=a(n),i=0,c=[],f=!1,l={_tasks:new pn,concurrency:t,payload:e,saturated:m,unsaturated:m,buffer:t/4,empty:m,drain:m,error:m,started:!1,paused:!1,push:function(n,t){r(n,!1,t)},kill:function(){l.drain=m,l._tasks.empty()},unshift:function(n,t){r(n,!0,t)},remove:function(n){l._tasks.remove(n)},process:function(){if(!f){for(f=!0;!l.paused&&i2&&(o=t(arguments,1)),u[e]=o,r(n)})},function(n){r(n,u)})}function Dn(n,t){qn(Fe,n,t)}function Rn(n,t,e){qn(z(t),n,e)}function Cn(n,t){if(t=g(t||m),!Pt(n))return t(new TypeError("First argument to race must be an array of functions"));if(!n.length)return t();for(var e=0,r=n.length;er?1:0}var u=a(t);Ie(n,function(n,t){u(n,function(e,r){return e?t(e):void t(null,{value:n,criteria:r})})},function(n,t){return n?e(n):void e(null,K(t.sort(r),Fn("value")))})}function Xn(n,t,e){var r=a(n);return it(function(u,o){function i(){var t=n.name||"anonymous",r=new Error('Callback function "'+t+'" timed out.');r.code="ETIMEDOUT",e&&(r.info=e),f=!0,o(r)}var c,f=!1;u.push(function(){f||(o.apply(null,arguments),clearTimeout(c))}),c=setTimeout(i,t),r.apply(null,u)})}function Yn(n,t,e,r){for(var u=-1,o=tu(nu((t-n)/(e||1)),0),i=Array(o);o--;)i[r?o:++u]=n,n+=e;return i}function Zn(n,t,e,r){var u=a(e);Me(Yn(0,n,1),t,u,r)}function nt(n,t,e,r){arguments.length<=3&&(r=e,e=t,t=Pt(n)?[]:{}),r=g(r||m);var u=a(e);Fe(n,function(n,e,r){u(t,n,e,r)},function(n){r(n,t)})}function tt(n,e){var r,u=null;e=e||m,Fr(n,function(n,e){a(n)(function(n,o){r=arguments.length>2?t(arguments,1):o,u=n,e(!n)})},function(){e(u,r)})}function et(n){return function(){return(n.unmemoized||n).apply(null,arguments)}}function rt(n,e,r){r=U(r||m);var u=a(e);if(!n())return r(null);var o=function(e){if(e)return r(e);if(n())return u(o);var i=t(arguments,1);r.apply(null,[null].concat(i))};u(o)}function ut(n,t,e){rt(function(){return!n.apply(this,arguments)},t,e)}var ot,it=function(n){return function(){var e=t(arguments),r=e.pop();n.call(this,e,r)}},ct="function"==typeof setImmediate&&setImmediate,ft="object"==typeof process&&"function"==typeof process.nextTick;ot=ct?setImmediate:ft?process.nextTick:r;var at=u(ot),lt="function"==typeof Symbol,st="object"==typeof global&&global&&global.Object===Object&&global,pt="object"==typeof self&&self&&self.Object===Object&&self,ht=st||pt||Function("return this")(),yt=ht.Symbol,vt=Object.prototype,dt=vt.hasOwnProperty,mt=vt.toString,gt=yt?yt.toStringTag:void 0,bt=Object.prototype,jt=bt.toString,St="[object Null]",kt="[object Undefined]",Lt=yt?yt.toStringTag:void 0,Ot="[object AsyncFunction]",wt="[object Function]",xt="[object GeneratorFunction]",Et="[object Proxy]",At=9007199254740991,Tt={},Bt="function"==typeof Symbol&&Symbol.iterator,Ft=function(n){return Bt&&n[Bt]&&n[Bt]()},It="[object Arguments]",_t=Object.prototype,Mt=_t.hasOwnProperty,Ut=_t.propertyIsEnumerable,zt=S(function(){return arguments}())?S:function(n){return j(n)&&Mt.call(n,"callee")&&!Ut.call(n,"callee")},Pt=Array.isArray,Vt="object"==typeof n&&n&&!n.nodeType&&n,qt=Vt&&"object"==typeof module&&module&&!module.nodeType&&module,Dt=qt&&qt.exports===Vt,Rt=Dt?ht.Buffer:void 0,Ct=Rt?Rt.isBuffer:void 0,$t=Ct||k,Wt=9007199254740991,Nt=/^(?:0|[1-9]\d*)$/,Qt="[object Arguments]",Gt="[object Array]",Ht="[object Boolean]",Jt="[object Date]",Kt="[object Error]",Xt="[object Function]",Yt="[object Map]",Zt="[object Number]",ne="[object Object]",te="[object RegExp]",ee="[object Set]",re="[object String]",ue="[object WeakMap]",oe="[object ArrayBuffer]",ie="[object DataView]",ce="[object Float32Array]",fe="[object Float64Array]",ae="[object Int8Array]",le="[object Int16Array]",se="[object Int32Array]",pe="[object Uint8Array]",he="[object Uint8ClampedArray]",ye="[object Uint16Array]",ve="[object Uint32Array]",de={};de[ce]=de[fe]=de[ae]=de[le]=de[se]=de[pe]=de[he]=de[ye]=de[ve]=!0,de[Qt]=de[Gt]=de[oe]=de[Ht]=de[ie]=de[Jt]=de[Kt]=de[Xt]=de[Yt]=de[Zt]=de[ne]=de[te]=de[ee]=de[re]=de[ue]=!1;var me="object"==typeof n&&n&&!n.nodeType&&n,ge=me&&"object"==typeof module&&module&&!module.nodeType&&module,be=ge&&ge.exports===me,je=be&&st.process,Se=function(){try{return je&&je.binding("util")}catch(n){}}(),ke=Se&&Se.isTypedArray,Le=ke?w(ke):O,Oe=Object.prototype,we=Oe.hasOwnProperty,xe=Object.prototype,Ee=A(Object.keys,Object),Ae=Object.prototype,Te=Ae.hasOwnProperty,Be=V(P,1/0),Fe=function(n,t,e){var r=d(n)?q:Be;r(n,a(t),e)},Ie=D(R),_e=l(Ie),Me=C(R),Ue=V(Me,1),ze=l(Ue),Pe=function(n){var e=t(arguments,1);return function(){var r=t(arguments);return n.apply(null,e.concat(r))}},Ve=W(),qe=function(n,e,r){function u(n,t){j.push(function(){f(n,t)})}function o(){if(0===j.length&&0===v)return r(null,y);for(;j.length&&v2&&(u=t(arguments,1)),e){var o={};N(y,function(n,t){o[t]=n}),o[n]=u,d=!0,b=Object.create(null),r(e,o)}else y[n]=u,c(n)});v++;var o=a(e[e.length-1]);e.length>1?o(y,u):o(u)}}function l(){for(var n,t=0;S.length;)n=S.pop(),t++,$(s(n),function(n){0===--k[n]&&S.push(n)});if(t!==h)throw new Error("async.auto cannot execute tasks due to a recursive dependency")}function s(t){var e=[];return N(n,function(n,r){Pt(n)&&J(n,t,0)>=0&&e.push(r)}),e}"function"==typeof e&&(r=e,e=null),r=g(r||m);var p=B(n),h=p.length;if(!h)return r(null);e||(e=h);var y={},v=0,d=!1,b=Object.create(null),j=[],S=[],k={};N(n,function(t,e){if(!Pt(t))return u(e,[t]),void S.push(e);var r=t.slice(0,t.length-1),o=r.length;return 0===o?(u(e,t),void S.push(e)):(k[e]=o,void $(r,function(c){if(!n[c])throw new Error("async.auto task `"+e+"` has a non-existent dependency `"+c+"` in "+r.join(", "));i(c,function(){o--,0===o&&u(e,t)})}))}),l(),o()},De="[object Symbol]",Re=1/0,Ce=yt?yt.prototype:void 0,$e=Ce?Ce.toString:void 0,We="\\ud800-\\udfff",Ne="\\u0300-\\u036f\\ufe20-\\ufe23",Qe="\\u20d0-\\u20f0",Ge="\\ufe0e\\ufe0f",He="\\u200d",Je=RegExp("["+He+We+Ne+Qe+Ge+"]"),Ke="\\ud800-\\udfff",Xe="\\u0300-\\u036f\\ufe20-\\ufe23",Ye="\\u20d0-\\u20f0",Ze="\\ufe0e\\ufe0f",nr="["+Ke+"]",tr="["+Xe+Ye+"]",er="\\ud83c[\\udffb-\\udfff]",rr="(?:"+tr+"|"+er+")",ur="[^"+Ke+"]",or="(?:\\ud83c[\\udde6-\\uddff]){2}",ir="[\\ud800-\\udbff][\\udc00-\\udfff]",cr="\\u200d",fr=rr+"?",ar="["+Ze+"]?",lr="(?:"+cr+"(?:"+[ur,or,ir].join("|")+")"+ar+fr+")*",sr=ar+fr+lr,pr="(?:"+[ur+tr+"?",tr,or,ir,nr].join("|")+")",hr=RegExp(er+"(?="+er+")|"+pr+sr,"g"),yr=/^\s+|\s+$/g,vr=/^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m,dr=/,/,mr=/(=.+)?(\s*)$/,gr=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;pn.prototype.removeLink=function(n){return n.prev?n.prev.next=n.next:this.head=n.next,n.next?n.next.prev=n.prev:this.tail=n.prev,n.prev=n.next=null,this.length-=1,n},pn.prototype.empty=function(){for(;this.head;)this.shift();return this},pn.prototype.insertAfter=function(n,t){t.prev=n,t.next=n.next,n.next?n.next.prev=t:this.tail=t,n.next=t,this.length+=1},pn.prototype.insertBefore=function(n,t){t.prev=n.prev,t.next=n,n.prev?n.prev.next=t:this.head=t,n.prev=t,this.length+=1},pn.prototype.unshift=function(n){this.head?this.insertBefore(this.head,n):hn(this,n)},pn.prototype.push=function(n){this.tail?this.insertAfter(this.tail,n):hn(this,n)},pn.prototype.shift=function(){return this.head&&this.removeLink(this.head)},pn.prototype.pop=function(){return this.tail&&this.removeLink(this.tail)},pn.prototype.toArray=function(){for(var n=Array(this.length),t=this.head,e=0;e=u.priority;)u=u.next;for(var o=0,i=n.length;o 32 ) { + * console.log('This file name is too long'); + * callback('File name too long'); + * } else { + * // Do work to process file here + * console.log('File processed'); + * callback(); + * } + * }, function(err) { + * // if any of the file processing produced an error, err would equal that error + * if( err ) { + * // One of the iterations produced an error. + * // All processing will now stop. + * console.log('A file failed to process'); + * } else { + * console.log('All files have been processed successfully'); + * } + * }); + */ +function eachLimit(coll, iteratee, callback) { + (0, _eachOf2.default)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/eachLimit.js b/node_modules/watchpack/node_modules/async/eachLimit.js new file mode 100644 index 000000000..fff721bce --- /dev/null +++ b/node_modules/watchpack/node_modules/async/eachLimit.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = eachLimit; + +var _eachOfLimit = require('./internal/eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _withoutIndex = require('./internal/withoutIndex'); + +var _withoutIndex2 = _interopRequireDefault(_withoutIndex); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachLimit(coll, limit, iteratee, callback) { + (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/eachOf.js b/node_modules/watchpack/node_modules/async/eachOf.js new file mode 100644 index 000000000..055b9bde1 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/eachOf.js @@ -0,0 +1,111 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll, iteratee, callback) { + var eachOfImplementation = (0, _isArrayLike2.default)(coll) ? eachOfArrayLike : eachOfGeneric; + eachOfImplementation(coll, (0, _wrapAsync2.default)(iteratee), callback); +}; + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _breakLoop = require('./internal/breakLoop'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// eachOf implementation optimized for array-likes +function eachOfArrayLike(coll, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + var index = 0, + completed = 0, + length = coll.length; + if (length === 0) { + callback(null); + } + + function iteratorCallback(err, value) { + if (err) { + callback(err); + } else if (++completed === length || value === _breakLoop2.default) { + callback(null); + } + } + + for (; index < length; index++) { + iteratee(coll[index], index, (0, _onlyOnce2.default)(iteratorCallback)); + } +} + +// a generic version of eachOf which can handle array, object, and iterator cases. +var eachOfGeneric = (0, _doLimit2.default)(_eachOfLimit2.default, Infinity); + +/** + * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument + * to the iteratee. + * + * @name eachOf + * @static + * @memberOf module:Collections + * @method + * @alias forEachOf + * @category Collection + * @see [async.each]{@link module:Collections.each} + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each + * item in `coll`. + * The `key` is the item's key, or index in the case of an array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @example + * + * var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; + * var configs = {}; + * + * async.forEachOf(obj, function (value, key, callback) { + * fs.readFile(__dirname + value, "utf8", function (err, data) { + * if (err) return callback(err); + * try { + * configs[key] = JSON.parse(data); + * } catch (e) { + * return callback(e); + * } + * callback(); + * }); + * }, function (err) { + * if (err) console.error(err.message); + * // configs is now a map of JSON data + * doSomethingWith(configs); + * }); + */ +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/eachOfLimit.js b/node_modules/watchpack/node_modules/async/eachOfLimit.js new file mode 100644 index 000000000..30a13299e --- /dev/null +++ b/node_modules/watchpack/node_modules/async/eachOfLimit.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = eachOfLimit; + +var _eachOfLimit2 = require('./internal/eachOfLimit'); + +var _eachOfLimit3 = _interopRequireDefault(_eachOfLimit2); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a + * time. + * + * @name eachOfLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. The `key` is the item's key, or index in the case of an + * array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachOfLimit(coll, limit, iteratee, callback) { + (0, _eachOfLimit3.default)(limit)(coll, (0, _wrapAsync2.default)(iteratee), callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/eachOfSeries.js b/node_modules/watchpack/node_modules/async/eachOfSeries.js new file mode 100644 index 000000000..9dfd71134 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/eachOfSeries.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time. + * + * @name eachOfSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Invoked with (err). + */ +exports.default = (0, _doLimit2.default)(_eachOfLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/eachSeries.js b/node_modules/watchpack/node_modules/async/eachSeries.js new file mode 100644 index 000000000..55c78405e --- /dev/null +++ b/node_modules/watchpack/node_modules/async/eachSeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachLimit = require('./eachLimit'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +exports.default = (0, _doLimit2.default)(_eachLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/ensureAsync.js b/node_modules/watchpack/node_modules/async/ensureAsync.js new file mode 100644 index 000000000..1f57aecde --- /dev/null +++ b/node_modules/watchpack/node_modules/async/ensureAsync.js @@ -0,0 +1,73 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = ensureAsync; + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Wrap an async function and ensure it calls its callback on a later tick of + * the event loop. If the function already calls its callback on a next tick, + * no extra deferral is added. This is useful for preventing stack overflows + * (`RangeError: Maximum call stack size exceeded`) and generally keeping + * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) + * contained. ES2017 `async` functions are returned as-is -- they are immune + * to Zalgo's corrupting influences, as they always resolve on a later tick. + * + * @name ensureAsync + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - an async function, one that expects a node-style + * callback as its last argument. + * @returns {AsyncFunction} Returns a wrapped function with the exact same call + * signature as the function passed in. + * @example + * + * function sometimesAsync(arg, callback) { + * if (cache[arg]) { + * return callback(null, cache[arg]); // this would be synchronous!! + * } else { + * doSomeIO(arg, callback); // this IO would be asynchronous + * } + * } + * + * // this has a risk of stack overflows if many results are cached in a row + * async.mapSeries(args, sometimesAsync, done); + * + * // this will defer sometimesAsync's callback if necessary, + * // preventing stack overflows + * async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + */ +function ensureAsync(fn) { + if ((0, _wrapAsync.isAsync)(fn)) return fn; + return (0, _initialParams2.default)(function (args, callback) { + var sync = true; + args.push(function () { + var innerArgs = arguments; + if (sync) { + (0, _setImmediate2.default)(function () { + callback.apply(null, innerArgs); + }); + } else { + callback.apply(null, innerArgs); + } + }); + fn.apply(this, args); + sync = false; + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/every.js b/node_modules/watchpack/node_modules/async/every.js new file mode 100644 index 000000000..d0565b045 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/every.js @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +var _notId = require('./internal/notId'); + +var _notId2 = _interopRequireDefault(_notId); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns `true` if every element in `coll` satisfies an async test. If any + * iteratee call returns `false`, the main `callback` is immediately called. + * + * @name every + * @static + * @memberOf module:Collections + * @method + * @alias all + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @example + * + * async.every(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then every file exists + * }); + */ +exports.default = (0, _doParallel2.default)((0, _createTester2.default)(_notId2.default, _notId2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/everyLimit.js b/node_modules/watchpack/node_modules/async/everyLimit.js new file mode 100644 index 000000000..a1a759a2b --- /dev/null +++ b/node_modules/watchpack/node_modules/async/everyLimit.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +var _notId = require('./internal/notId'); + +var _notId2 = _interopRequireDefault(_notId); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. + * + * @name everyLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +exports.default = (0, _doParallelLimit2.default)((0, _createTester2.default)(_notId2.default, _notId2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/everySeries.js b/node_modules/watchpack/node_modules/async/everySeries.js new file mode 100644 index 000000000..23bfebb59 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/everySeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _everyLimit = require('./everyLimit'); + +var _everyLimit2 = _interopRequireDefault(_everyLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. + * + * @name everySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in series. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +exports.default = (0, _doLimit2.default)(_everyLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/filter.js b/node_modules/watchpack/node_modules/async/filter.js new file mode 100644 index 000000000..54772d562 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/filter.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter = require('./internal/filter'); + +var _filter2 = _interopRequireDefault(_filter); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.filter(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of the existing files + * }); + */ +exports.default = (0, _doParallel2.default)(_filter2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/filterLimit.js b/node_modules/watchpack/node_modules/async/filterLimit.js new file mode 100644 index 000000000..06216f785 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/filterLimit.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter = require('./internal/filter'); + +var _filter2 = _interopRequireDefault(_filter); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a + * time. + * + * @name filterLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +exports.default = (0, _doParallelLimit2.default)(_filter2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/filterSeries.js b/node_modules/watchpack/node_modules/async/filterSeries.js new file mode 100644 index 000000000..e48d966cb --- /dev/null +++ b/node_modules/watchpack/node_modules/async/filterSeries.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filterLimit = require('./filterLimit'); + +var _filterLimit2 = _interopRequireDefault(_filterLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. + * + * @name filterSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results) + */ +exports.default = (0, _doLimit2.default)(_filterLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/forever.js b/node_modules/watchpack/node_modules/async/forever.js new file mode 100644 index 000000000..6c7b8a4cd --- /dev/null +++ b/node_modules/watchpack/node_modules/async/forever.js @@ -0,0 +1,65 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = forever; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _ensureAsync = require('./ensureAsync'); + +var _ensureAsync2 = _interopRequireDefault(_ensureAsync); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls the asynchronous function `fn` with a callback parameter that allows it + * to call itself again, in series, indefinitely. + + * If an error is passed to the callback then `errback` is called with the + * error, and execution stops, otherwise it will never be called. + * + * @name forever + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} fn - an async function to call repeatedly. + * Invoked with (next). + * @param {Function} [errback] - when `fn` passes an error to it's callback, + * this function will be called, and execution stops. Invoked with (err). + * @example + * + * async.forever( + * function(next) { + * // next is suitable for passing to things that need a callback(err [, whatever]); + * // it will result in this function being called again. + * }, + * function(err) { + * // if next is called with a value in its first parameter, it will appear + * // in here as 'err', and execution will stop. + * } + * ); + */ +function forever(fn, errback) { + var done = (0, _onlyOnce2.default)(errback || _noop2.default); + var task = (0, _wrapAsync2.default)((0, _ensureAsync2.default)(fn)); + + function next(err) { + if (err) return done(err); + task(next); + } + next(); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/groupBy.js b/node_modules/watchpack/node_modules/async/groupBy.js new file mode 100644 index 000000000..755cba764 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/groupBy.js @@ -0,0 +1,54 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +var _groupByLimit = require('./groupByLimit'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns a new object, where each value corresponds to an array of items, from + * `coll`, that returned the corresponding key. That is, the keys of the object + * correspond to the values passed to the `iteratee` callback. + * + * Note: Since this function applies the `iteratee` to each item in parallel, + * there is no guarantee that the `iteratee` functions will complete in order. + * However, the values for each key in the `result` will be in the same order as + * the original `coll`. For Objects, the values will roughly be in the order of + * the original Objects' keys (but this can vary across JavaScript engines). + * + * @name groupBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @example + * + * async.groupBy(['userId1', 'userId2', 'userId3'], function(userId, callback) { + * db.findById(userId, function(err, user) { + * if (err) return callback(err); + * return callback(null, user.age); + * }); + * }, function(err, result) { + * // result is object containing the userIds grouped by age + * // e.g. { 30: ['userId1', 'userId3'], 42: ['userId2']}; + * }); + */ +exports.default = (0, _doLimit2.default)(_groupByLimit2.default, Infinity); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/groupByLimit.js b/node_modules/watchpack/node_modules/async/groupByLimit.js new file mode 100644 index 000000000..fec13f865 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/groupByLimit.js @@ -0,0 +1,71 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll, limit, iteratee, callback) { + callback = callback || _noop2.default; + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _mapLimit2.default)(coll, limit, function (val, callback) { + _iteratee(val, function (err, key) { + if (err) return callback(err); + return callback(null, { key: key, val: val }); + }); + }, function (err, mapResults) { + var result = {}; + // from MDN, handle object having an `hasOwnProperty` prop + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + var key = mapResults[i].key; + var val = mapResults[i].val; + + if (hasOwnProperty.call(result, key)) { + result[key].push(val); + } else { + result[key] = [val]; + } + } + } + + return callback(err, result); + }); +}; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +; +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time. + * + * @name groupByLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/groupBySeries.js b/node_modules/watchpack/node_modules/async/groupBySeries.js new file mode 100644 index 000000000..b94805e35 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/groupBySeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +var _groupByLimit = require('./groupByLimit'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. + * + * @name groupBySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +exports.default = (0, _doLimit2.default)(_groupByLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/index.js b/node_modules/watchpack/node_modules/async/index.js new file mode 100644 index 000000000..090cade67 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/index.js @@ -0,0 +1,575 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.wrapSync = exports.selectSeries = exports.selectLimit = exports.select = exports.foldr = exports.foldl = exports.inject = exports.forEachOfLimit = exports.forEachOfSeries = exports.forEachOf = exports.forEachLimit = exports.forEachSeries = exports.forEach = exports.findSeries = exports.findLimit = exports.find = exports.anySeries = exports.anyLimit = exports.any = exports.allSeries = exports.allLimit = exports.all = exports.whilst = exports.waterfall = exports.until = exports.unmemoize = exports.tryEach = exports.transform = exports.timesSeries = exports.timesLimit = exports.times = exports.timeout = exports.sortBy = exports.someSeries = exports.someLimit = exports.some = exports.setImmediate = exports.series = exports.seq = exports.retryable = exports.retry = exports.rejectSeries = exports.rejectLimit = exports.reject = exports.reflectAll = exports.reflect = exports.reduceRight = exports.reduce = exports.race = exports.queue = exports.priorityQueue = exports.parallelLimit = exports.parallel = exports.nextTick = exports.memoize = exports.mapValuesSeries = exports.mapValuesLimit = exports.mapValues = exports.mapSeries = exports.mapLimit = exports.map = exports.log = exports.groupBySeries = exports.groupByLimit = exports.groupBy = exports.forever = exports.filterSeries = exports.filterLimit = exports.filter = exports.everySeries = exports.everyLimit = exports.every = exports.ensureAsync = exports.eachSeries = exports.eachOfSeries = exports.eachOfLimit = exports.eachOf = exports.eachLimit = exports.each = exports.during = exports.doWhilst = exports.doUntil = exports.doDuring = exports.dir = exports.detectSeries = exports.detectLimit = exports.detect = exports.constant = exports.concatSeries = exports.concatLimit = exports.concat = exports.compose = exports.cargo = exports.autoInject = exports.auto = exports.asyncify = exports.apply = exports.applyEachSeries = exports.applyEach = undefined; + +var _applyEach = require('./applyEach'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _applyEachSeries = require('./applyEachSeries'); + +var _applyEachSeries2 = _interopRequireDefault(_applyEachSeries); + +var _apply = require('./apply'); + +var _apply2 = _interopRequireDefault(_apply); + +var _asyncify = require('./asyncify'); + +var _asyncify2 = _interopRequireDefault(_asyncify); + +var _auto = require('./auto'); + +var _auto2 = _interopRequireDefault(_auto); + +var _autoInject = require('./autoInject'); + +var _autoInject2 = _interopRequireDefault(_autoInject); + +var _cargo = require('./cargo'); + +var _cargo2 = _interopRequireDefault(_cargo); + +var _compose = require('./compose'); + +var _compose2 = _interopRequireDefault(_compose); + +var _concat = require('./concat'); + +var _concat2 = _interopRequireDefault(_concat); + +var _concatLimit = require('./concatLimit'); + +var _concatLimit2 = _interopRequireDefault(_concatLimit); + +var _concatSeries = require('./concatSeries'); + +var _concatSeries2 = _interopRequireDefault(_concatSeries); + +var _constant = require('./constant'); + +var _constant2 = _interopRequireDefault(_constant); + +var _detect = require('./detect'); + +var _detect2 = _interopRequireDefault(_detect); + +var _detectLimit = require('./detectLimit'); + +var _detectLimit2 = _interopRequireDefault(_detectLimit); + +var _detectSeries = require('./detectSeries'); + +var _detectSeries2 = _interopRequireDefault(_detectSeries); + +var _dir = require('./dir'); + +var _dir2 = _interopRequireDefault(_dir); + +var _doDuring = require('./doDuring'); + +var _doDuring2 = _interopRequireDefault(_doDuring); + +var _doUntil = require('./doUntil'); + +var _doUntil2 = _interopRequireDefault(_doUntil); + +var _doWhilst = require('./doWhilst'); + +var _doWhilst2 = _interopRequireDefault(_doWhilst); + +var _during = require('./during'); + +var _during2 = _interopRequireDefault(_during); + +var _each = require('./each'); + +var _each2 = _interopRequireDefault(_each); + +var _eachLimit = require('./eachLimit'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _eachOf = require('./eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _eachOfSeries = require('./eachOfSeries'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _eachSeries = require('./eachSeries'); + +var _eachSeries2 = _interopRequireDefault(_eachSeries); + +var _ensureAsync = require('./ensureAsync'); + +var _ensureAsync2 = _interopRequireDefault(_ensureAsync); + +var _every = require('./every'); + +var _every2 = _interopRequireDefault(_every); + +var _everyLimit = require('./everyLimit'); + +var _everyLimit2 = _interopRequireDefault(_everyLimit); + +var _everySeries = require('./everySeries'); + +var _everySeries2 = _interopRequireDefault(_everySeries); + +var _filter = require('./filter'); + +var _filter2 = _interopRequireDefault(_filter); + +var _filterLimit = require('./filterLimit'); + +var _filterLimit2 = _interopRequireDefault(_filterLimit); + +var _filterSeries = require('./filterSeries'); + +var _filterSeries2 = _interopRequireDefault(_filterSeries); + +var _forever = require('./forever'); + +var _forever2 = _interopRequireDefault(_forever); + +var _groupBy = require('./groupBy'); + +var _groupBy2 = _interopRequireDefault(_groupBy); + +var _groupByLimit = require('./groupByLimit'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +var _groupBySeries = require('./groupBySeries'); + +var _groupBySeries2 = _interopRequireDefault(_groupBySeries); + +var _log = require('./log'); + +var _log2 = _interopRequireDefault(_log); + +var _map = require('./map'); + +var _map2 = _interopRequireDefault(_map); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _mapSeries = require('./mapSeries'); + +var _mapSeries2 = _interopRequireDefault(_mapSeries); + +var _mapValues = require('./mapValues'); + +var _mapValues2 = _interopRequireDefault(_mapValues); + +var _mapValuesLimit = require('./mapValuesLimit'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +var _mapValuesSeries = require('./mapValuesSeries'); + +var _mapValuesSeries2 = _interopRequireDefault(_mapValuesSeries); + +var _memoize = require('./memoize'); + +var _memoize2 = _interopRequireDefault(_memoize); + +var _nextTick = require('./nextTick'); + +var _nextTick2 = _interopRequireDefault(_nextTick); + +var _parallel = require('./parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +var _parallelLimit = require('./parallelLimit'); + +var _parallelLimit2 = _interopRequireDefault(_parallelLimit); + +var _priorityQueue = require('./priorityQueue'); + +var _priorityQueue2 = _interopRequireDefault(_priorityQueue); + +var _queue = require('./queue'); + +var _queue2 = _interopRequireDefault(_queue); + +var _race = require('./race'); + +var _race2 = _interopRequireDefault(_race); + +var _reduce = require('./reduce'); + +var _reduce2 = _interopRequireDefault(_reduce); + +var _reduceRight = require('./reduceRight'); + +var _reduceRight2 = _interopRequireDefault(_reduceRight); + +var _reflect = require('./reflect'); + +var _reflect2 = _interopRequireDefault(_reflect); + +var _reject = require('./reject'); + +var _reject2 = _interopRequireDefault(_reject); + +var _reflectAll = require('./reflectAll'); + +var _reflectAll2 = _interopRequireDefault(_reflectAll); + +var _rejectLimit = require('./rejectLimit'); + +var _rejectLimit2 = _interopRequireDefault(_rejectLimit); + +var _rejectSeries = require('./rejectSeries'); + +var _rejectSeries2 = _interopRequireDefault(_rejectSeries); + +var _retry = require('./retry'); + +var _retry2 = _interopRequireDefault(_retry); + +var _retryable = require('./retryable'); + +var _retryable2 = _interopRequireDefault(_retryable); + +var _seq = require('./seq'); + +var _seq2 = _interopRequireDefault(_seq); + +var _series = require('./series'); + +var _series2 = _interopRequireDefault(_series); + +var _setImmediate = require('./setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _some = require('./some'); + +var _some2 = _interopRequireDefault(_some); + +var _someLimit = require('./someLimit'); + +var _someLimit2 = _interopRequireDefault(_someLimit); + +var _someSeries = require('./someSeries'); + +var _someSeries2 = _interopRequireDefault(_someSeries); + +var _sortBy = require('./sortBy'); + +var _sortBy2 = _interopRequireDefault(_sortBy); + +var _timeout = require('./timeout'); + +var _timeout2 = _interopRequireDefault(_timeout); + +var _times = require('./times'); + +var _times2 = _interopRequireDefault(_times); + +var _timesLimit = require('./timesLimit'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +var _timesSeries = require('./timesSeries'); + +var _timesSeries2 = _interopRequireDefault(_timesSeries); + +var _transform = require('./transform'); + +var _transform2 = _interopRequireDefault(_transform); + +var _tryEach = require('./tryEach'); + +var _tryEach2 = _interopRequireDefault(_tryEach); + +var _unmemoize = require('./unmemoize'); + +var _unmemoize2 = _interopRequireDefault(_unmemoize); + +var _until = require('./until'); + +var _until2 = _interopRequireDefault(_until); + +var _waterfall = require('./waterfall'); + +var _waterfall2 = _interopRequireDefault(_waterfall); + +var _whilst = require('./whilst'); + +var _whilst2 = _interopRequireDefault(_whilst); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = { + applyEach: _applyEach2.default, + applyEachSeries: _applyEachSeries2.default, + apply: _apply2.default, + asyncify: _asyncify2.default, + auto: _auto2.default, + autoInject: _autoInject2.default, + cargo: _cargo2.default, + compose: _compose2.default, + concat: _concat2.default, + concatLimit: _concatLimit2.default, + concatSeries: _concatSeries2.default, + constant: _constant2.default, + detect: _detect2.default, + detectLimit: _detectLimit2.default, + detectSeries: _detectSeries2.default, + dir: _dir2.default, + doDuring: _doDuring2.default, + doUntil: _doUntil2.default, + doWhilst: _doWhilst2.default, + during: _during2.default, + each: _each2.default, + eachLimit: _eachLimit2.default, + eachOf: _eachOf2.default, + eachOfLimit: _eachOfLimit2.default, + eachOfSeries: _eachOfSeries2.default, + eachSeries: _eachSeries2.default, + ensureAsync: _ensureAsync2.default, + every: _every2.default, + everyLimit: _everyLimit2.default, + everySeries: _everySeries2.default, + filter: _filter2.default, + filterLimit: _filterLimit2.default, + filterSeries: _filterSeries2.default, + forever: _forever2.default, + groupBy: _groupBy2.default, + groupByLimit: _groupByLimit2.default, + groupBySeries: _groupBySeries2.default, + log: _log2.default, + map: _map2.default, + mapLimit: _mapLimit2.default, + mapSeries: _mapSeries2.default, + mapValues: _mapValues2.default, + mapValuesLimit: _mapValuesLimit2.default, + mapValuesSeries: _mapValuesSeries2.default, + memoize: _memoize2.default, + nextTick: _nextTick2.default, + parallel: _parallel2.default, + parallelLimit: _parallelLimit2.default, + priorityQueue: _priorityQueue2.default, + queue: _queue2.default, + race: _race2.default, + reduce: _reduce2.default, + reduceRight: _reduceRight2.default, + reflect: _reflect2.default, + reflectAll: _reflectAll2.default, + reject: _reject2.default, + rejectLimit: _rejectLimit2.default, + rejectSeries: _rejectSeries2.default, + retry: _retry2.default, + retryable: _retryable2.default, + seq: _seq2.default, + series: _series2.default, + setImmediate: _setImmediate2.default, + some: _some2.default, + someLimit: _someLimit2.default, + someSeries: _someSeries2.default, + sortBy: _sortBy2.default, + timeout: _timeout2.default, + times: _times2.default, + timesLimit: _timesLimit2.default, + timesSeries: _timesSeries2.default, + transform: _transform2.default, + tryEach: _tryEach2.default, + unmemoize: _unmemoize2.default, + until: _until2.default, + waterfall: _waterfall2.default, + whilst: _whilst2.default, + + // aliases + all: _every2.default, + any: _some2.default, + forEach: _each2.default, + forEachSeries: _eachSeries2.default, + forEachLimit: _eachLimit2.default, + forEachOf: _eachOf2.default, + forEachOfSeries: _eachOfSeries2.default, + forEachOfLimit: _eachOfLimit2.default, + inject: _reduce2.default, + foldl: _reduce2.default, + foldr: _reduceRight2.default, + select: _filter2.default, + selectLimit: _filterLimit2.default, + selectSeries: _filterSeries2.default, + wrapSync: _asyncify2.default +}; /** + * An "async function" in the context of Async is an asynchronous function with + * a variable number of parameters, with the final parameter being a callback. + * (`function (arg1, arg2, ..., callback) {}`) + * The final callback is of the form `callback(err, results...)`, which must be + * called once the function is completed. The callback should be called with a + * Error as its first argument to signal that an error occurred. + * Otherwise, if no error occurred, it should be called with `null` as the first + * argument, and any additional `result` arguments that may apply, to signal + * successful completion. + * The callback must be called exactly once, ideally on a later tick of the + * JavaScript event loop. + * + * This type of function is also referred to as a "Node-style async function", + * or a "continuation passing-style function" (CPS). Most of the methods of this + * library are themselves CPS/Node-style async functions, or functions that + * return CPS/Node-style async functions. + * + * Wherever we accept a Node-style async function, we also directly accept an + * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. + * In this case, the `async` function will not be passed a final callback + * argument, and any thrown error will be used as the `err` argument of the + * implicit callback, and the return value will be used as the `result` value. + * (i.e. a `rejected` of the returned Promise becomes the `err` callback + * argument, and a `resolved` value becomes the `result`.) + * + * Note, due to JavaScript limitations, we can only detect native `async` + * functions and not transpilied implementations. + * Your environment must have `async`/`await` support for this to work. + * (e.g. Node > v7.6, or a recent version of a modern browser). + * If you are using `async` functions through a transpiler (e.g. Babel), you + * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, + * because the `async function` will be compiled to an ordinary function that + * returns a promise. + * + * @typedef {Function} AsyncFunction + * @static + */ + +/** + * Async is a utility module which provides straight-forward, powerful functions + * for working with asynchronous JavaScript. Although originally designed for + * use with [Node.js](http://nodejs.org) and installable via + * `npm install --save async`, it can also be used directly in the browser. + * @module async + * @see AsyncFunction + */ + +/** + * A collection of `async` functions for manipulating collections, such as + * arrays and objects. + * @module Collections + */ + +/** + * A collection of `async` functions for controlling the flow through a script. + * @module ControlFlow + */ + +/** + * A collection of `async` utility functions. + * @module Utils + */ + +exports.applyEach = _applyEach2.default; +exports.applyEachSeries = _applyEachSeries2.default; +exports.apply = _apply2.default; +exports.asyncify = _asyncify2.default; +exports.auto = _auto2.default; +exports.autoInject = _autoInject2.default; +exports.cargo = _cargo2.default; +exports.compose = _compose2.default; +exports.concat = _concat2.default; +exports.concatLimit = _concatLimit2.default; +exports.concatSeries = _concatSeries2.default; +exports.constant = _constant2.default; +exports.detect = _detect2.default; +exports.detectLimit = _detectLimit2.default; +exports.detectSeries = _detectSeries2.default; +exports.dir = _dir2.default; +exports.doDuring = _doDuring2.default; +exports.doUntil = _doUntil2.default; +exports.doWhilst = _doWhilst2.default; +exports.during = _during2.default; +exports.each = _each2.default; +exports.eachLimit = _eachLimit2.default; +exports.eachOf = _eachOf2.default; +exports.eachOfLimit = _eachOfLimit2.default; +exports.eachOfSeries = _eachOfSeries2.default; +exports.eachSeries = _eachSeries2.default; +exports.ensureAsync = _ensureAsync2.default; +exports.every = _every2.default; +exports.everyLimit = _everyLimit2.default; +exports.everySeries = _everySeries2.default; +exports.filter = _filter2.default; +exports.filterLimit = _filterLimit2.default; +exports.filterSeries = _filterSeries2.default; +exports.forever = _forever2.default; +exports.groupBy = _groupBy2.default; +exports.groupByLimit = _groupByLimit2.default; +exports.groupBySeries = _groupBySeries2.default; +exports.log = _log2.default; +exports.map = _map2.default; +exports.mapLimit = _mapLimit2.default; +exports.mapSeries = _mapSeries2.default; +exports.mapValues = _mapValues2.default; +exports.mapValuesLimit = _mapValuesLimit2.default; +exports.mapValuesSeries = _mapValuesSeries2.default; +exports.memoize = _memoize2.default; +exports.nextTick = _nextTick2.default; +exports.parallel = _parallel2.default; +exports.parallelLimit = _parallelLimit2.default; +exports.priorityQueue = _priorityQueue2.default; +exports.queue = _queue2.default; +exports.race = _race2.default; +exports.reduce = _reduce2.default; +exports.reduceRight = _reduceRight2.default; +exports.reflect = _reflect2.default; +exports.reflectAll = _reflectAll2.default; +exports.reject = _reject2.default; +exports.rejectLimit = _rejectLimit2.default; +exports.rejectSeries = _rejectSeries2.default; +exports.retry = _retry2.default; +exports.retryable = _retryable2.default; +exports.seq = _seq2.default; +exports.series = _series2.default; +exports.setImmediate = _setImmediate2.default; +exports.some = _some2.default; +exports.someLimit = _someLimit2.default; +exports.someSeries = _someSeries2.default; +exports.sortBy = _sortBy2.default; +exports.timeout = _timeout2.default; +exports.times = _times2.default; +exports.timesLimit = _timesLimit2.default; +exports.timesSeries = _timesSeries2.default; +exports.transform = _transform2.default; +exports.tryEach = _tryEach2.default; +exports.unmemoize = _unmemoize2.default; +exports.until = _until2.default; +exports.waterfall = _waterfall2.default; +exports.whilst = _whilst2.default; +exports.all = _every2.default; +exports.allLimit = _everyLimit2.default; +exports.allSeries = _everySeries2.default; +exports.any = _some2.default; +exports.anyLimit = _someLimit2.default; +exports.anySeries = _someSeries2.default; +exports.find = _detect2.default; +exports.findLimit = _detectLimit2.default; +exports.findSeries = _detectSeries2.default; +exports.forEach = _each2.default; +exports.forEachSeries = _eachSeries2.default; +exports.forEachLimit = _eachLimit2.default; +exports.forEachOf = _eachOf2.default; +exports.forEachOfSeries = _eachOfSeries2.default; +exports.forEachOfLimit = _eachOfLimit2.default; +exports.inject = _reduce2.default; +exports.foldl = _reduce2.default; +exports.foldr = _reduceRight2.default; +exports.select = _filter2.default; +exports.selectLimit = _filterLimit2.default; +exports.selectSeries = _filterSeries2.default; +exports.wrapSync = _asyncify2.default; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/DoublyLinkedList.js b/node_modules/watchpack/node_modules/async/internal/DoublyLinkedList.js new file mode 100644 index 000000000..7e71728e2 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/DoublyLinkedList.js @@ -0,0 +1,88 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = DLL; +// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation +// used for queues. This implementation assumes that the node provided by the user can be modified +// to adjust the next and last properties. We implement only the minimal functionality +// for queue support. +function DLL() { + this.head = this.tail = null; + this.length = 0; +} + +function setInitial(dll, node) { + dll.length = 1; + dll.head = dll.tail = node; +} + +DLL.prototype.removeLink = function (node) { + if (node.prev) node.prev.next = node.next;else this.head = node.next; + if (node.next) node.next.prev = node.prev;else this.tail = node.prev; + + node.prev = node.next = null; + this.length -= 1; + return node; +}; + +DLL.prototype.empty = function () { + while (this.head) this.shift(); + return this; +}; + +DLL.prototype.insertAfter = function (node, newNode) { + newNode.prev = node; + newNode.next = node.next; + if (node.next) node.next.prev = newNode;else this.tail = newNode; + node.next = newNode; + this.length += 1; +}; + +DLL.prototype.insertBefore = function (node, newNode) { + newNode.prev = node.prev; + newNode.next = node; + if (node.prev) node.prev.next = newNode;else this.head = newNode; + node.prev = newNode; + this.length += 1; +}; + +DLL.prototype.unshift = function (node) { + if (this.head) this.insertBefore(this.head, node);else setInitial(this, node); +}; + +DLL.prototype.push = function (node) { + if (this.tail) this.insertAfter(this.tail, node);else setInitial(this, node); +}; + +DLL.prototype.shift = function () { + return this.head && this.removeLink(this.head); +}; + +DLL.prototype.pop = function () { + return this.tail && this.removeLink(this.tail); +}; + +DLL.prototype.toArray = function () { + var arr = Array(this.length); + var curr = this.head; + for (var idx = 0; idx < this.length; idx++) { + arr[idx] = curr.data; + curr = curr.next; + } + return arr; +}; + +DLL.prototype.remove = function (testFn) { + var curr = this.head; + while (!!curr) { + var next = curr.next; + if (testFn(curr)) { + this.removeLink(curr); + } + curr = next; + } + return this; +}; +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/applyEach.js b/node_modules/watchpack/node_modules/async/internal/applyEach.js new file mode 100644 index 000000000..322e03ca7 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/applyEach.js @@ -0,0 +1,38 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = applyEach; + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _initialParams = require('./initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function applyEach(eachfn) { + return function (fns /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + var go = (0, _initialParams2.default)(function (args, callback) { + var that = this; + return eachfn(fns, function (fn, cb) { + (0, _wrapAsync2.default)(fn).apply(that, args.concat(cb)); + }, callback); + }); + if (args.length) { + return go.apply(this, args); + } else { + return go; + } + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/breakLoop.js b/node_modules/watchpack/node_modules/async/internal/breakLoop.js new file mode 100644 index 000000000..106505824 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/breakLoop.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +// A temporary value used to identify if the loop should be broken. +// See #1064, #1293 +exports.default = {}; +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/consoleFunc.js b/node_modules/watchpack/node_modules/async/internal/consoleFunc.js new file mode 100644 index 000000000..603f48e8e --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/consoleFunc.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = consoleFunc; + +var _arrayEach = require('lodash/_arrayEach'); + +var _arrayEach2 = _interopRequireDefault(_arrayEach); + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function consoleFunc(name) { + return function (fn /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + args.push(function (err /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + if (typeof console === 'object') { + if (err) { + if (console.error) { + console.error(err); + } + } else if (console[name]) { + (0, _arrayEach2.default)(args, function (x) { + console[name](x); + }); + } + } + }); + (0, _wrapAsync2.default)(fn).apply(null, args); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/createTester.js b/node_modules/watchpack/node_modules/async/internal/createTester.js new file mode 100644 index 000000000..ce96e8b4e --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/createTester.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _createTester; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _breakLoop = require('./breakLoop'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _createTester(check, getResult) { + return function (eachfn, arr, iteratee, cb) { + cb = cb || _noop2.default; + var testPassed = false; + var testResult; + eachfn(arr, function (value, _, callback) { + iteratee(value, function (err, result) { + if (err) { + callback(err); + } else if (check(result) && !testResult) { + testPassed = true; + testResult = getResult(true, value); + callback(null, _breakLoop2.default); + } else { + callback(); + } + }); + }, function (err) { + if (err) { + cb(err); + } else { + cb(null, testPassed ? testResult : getResult(false)); + } + }); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/doLimit.js b/node_modules/watchpack/node_modules/async/internal/doLimit.js new file mode 100644 index 000000000..963c6088f --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/doLimit.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doLimit; +function doLimit(fn, limit) { + return function (iterable, iteratee, callback) { + return fn(iterable, limit, iteratee, callback); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/doParallel.js b/node_modules/watchpack/node_modules/async/internal/doParallel.js new file mode 100644 index 000000000..bb402077c --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/doParallel.js @@ -0,0 +1,23 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doParallel; + +var _eachOf = require('../eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function doParallel(fn) { + return function (obj, iteratee, callback) { + return fn(_eachOf2.default, obj, (0, _wrapAsync2.default)(iteratee), callback); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/doParallelLimit.js b/node_modules/watchpack/node_modules/async/internal/doParallelLimit.js new file mode 100644 index 000000000..a7e963d53 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/doParallelLimit.js @@ -0,0 +1,23 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doParallelLimit; + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function doParallelLimit(fn) { + return function (obj, limit, iteratee, callback) { + return fn((0, _eachOfLimit2.default)(limit), obj, (0, _wrapAsync2.default)(iteratee), callback); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/eachOfLimit.js b/node_modules/watchpack/node_modules/async/internal/eachOfLimit.js new file mode 100644 index 000000000..e4c74bb12 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/eachOfLimit.js @@ -0,0 +1,71 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _eachOfLimit; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./once'); + +var _once2 = _interopRequireDefault(_once); + +var _iterator = require('./iterator'); + +var _iterator2 = _interopRequireDefault(_iterator); + +var _onlyOnce = require('./onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _breakLoop = require('./breakLoop'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _eachOfLimit(limit) { + return function (obj, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + if (limit <= 0 || !obj) { + return callback(null); + } + var nextElem = (0, _iterator2.default)(obj); + var done = false; + var running = 0; + + function iterateeCallback(err, value) { + running -= 1; + if (err) { + done = true; + callback(err); + } else if (value === _breakLoop2.default || done && running <= 0) { + done = true; + return callback(null); + } else { + replenish(); + } + } + + function replenish() { + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback)); + } + } + + replenish(); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/filter.js b/node_modules/watchpack/node_modules/async/internal/filter.js new file mode 100644 index 000000000..74f398635 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/filter.js @@ -0,0 +1,75 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _filter; + +var _arrayMap = require('lodash/_arrayMap'); + +var _arrayMap2 = _interopRequireDefault(_arrayMap); + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _baseProperty = require('lodash/_baseProperty'); + +var _baseProperty2 = _interopRequireDefault(_baseProperty); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function filterArray(eachfn, arr, iteratee, callback) { + var truthValues = new Array(arr.length); + eachfn(arr, function (x, index, callback) { + iteratee(x, function (err, v) { + truthValues[index] = !!v; + callback(err); + }); + }, function (err) { + if (err) return callback(err); + var results = []; + for (var i = 0; i < arr.length; i++) { + if (truthValues[i]) results.push(arr[i]); + } + callback(null, results); + }); +} + +function filterGeneric(eachfn, coll, iteratee, callback) { + var results = []; + eachfn(coll, function (x, index, callback) { + iteratee(x, function (err, v) { + if (err) { + callback(err); + } else { + if (v) { + results.push({ index: index, value: x }); + } + callback(); + } + }); + }, function (err) { + if (err) { + callback(err); + } else { + callback(null, (0, _arrayMap2.default)(results.sort(function (a, b) { + return a.index - b.index; + }), (0, _baseProperty2.default)('value'))); + } + }); +} + +function _filter(eachfn, coll, iteratee, callback) { + var filter = (0, _isArrayLike2.default)(coll) ? filterArray : filterGeneric; + filter(eachfn, coll, (0, _wrapAsync2.default)(iteratee), callback || _noop2.default); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/findGetResult.js b/node_modules/watchpack/node_modules/async/internal/findGetResult.js new file mode 100644 index 000000000..f8d3fe063 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/findGetResult.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _findGetResult; +function _findGetResult(v, x) { + return x; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/getIterator.js b/node_modules/watchpack/node_modules/async/internal/getIterator.js new file mode 100644 index 000000000..3eadd24d0 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/getIterator.js @@ -0,0 +1,13 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll) { + return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol](); +}; + +var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator; + +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/initialParams.js b/node_modules/watchpack/node_modules/async/internal/initialParams.js new file mode 100644 index 000000000..df02cb1f1 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/initialParams.js @@ -0,0 +1,21 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (fn) { + return function () /*...args, callback*/{ + var args = (0, _slice2.default)(arguments); + var callback = args.pop(); + fn.call(this, args, callback); + }; +}; + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/iterator.js b/node_modules/watchpack/node_modules/async/internal/iterator.js new file mode 100644 index 000000000..3d32942ff --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/iterator.js @@ -0,0 +1,58 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = iterator; + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _getIterator = require('./getIterator'); + +var _getIterator2 = _interopRequireDefault(_getIterator); + +var _keys = require('lodash/keys'); + +var _keys2 = _interopRequireDefault(_keys); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createArrayIterator(coll) { + var i = -1; + var len = coll.length; + return function next() { + return ++i < len ? { value: coll[i], key: i } : null; + }; +} + +function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) return null; + i++; + return { value: item.value, key: i }; + }; +} + +function createObjectIterator(obj) { + var okeys = (0, _keys2.default)(obj); + var i = -1; + var len = okeys.length; + return function next() { + var key = okeys[++i]; + return i < len ? { value: obj[key], key: key } : null; + }; +} + +function iterator(coll) { + if ((0, _isArrayLike2.default)(coll)) { + return createArrayIterator(coll); + } + + var iterator = (0, _getIterator2.default)(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/map.js b/node_modules/watchpack/node_modules/async/internal/map.js new file mode 100644 index 000000000..f4f2aa594 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/map.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _asyncMap; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _asyncMap(eachfn, arr, iteratee, callback) { + callback = callback || _noop2.default; + arr = arr || []; + var results = []; + var counter = 0; + var _iteratee = (0, _wrapAsync2.default)(iteratee); + + eachfn(arr, function (value, _, callback) { + var index = counter++; + _iteratee(value, function (err, v) { + results[index] = v; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/notId.js b/node_modules/watchpack/node_modules/async/internal/notId.js new file mode 100644 index 000000000..0106c92c0 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/notId.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = notId; +function notId(v) { + return !v; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/once.js b/node_modules/watchpack/node_modules/async/internal/once.js new file mode 100644 index 000000000..f0c379f75 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/once.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = once; +function once(fn) { + return function () { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/onlyOnce.js b/node_modules/watchpack/node_modules/async/internal/onlyOnce.js new file mode 100644 index 000000000..f2e3001dc --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/onlyOnce.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = onlyOnce; +function onlyOnce(fn) { + return function () { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/parallel.js b/node_modules/watchpack/node_modules/async/internal/parallel.js new file mode 100644 index 000000000..c97293b6c --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/parallel.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _parallel; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _parallel(eachfn, tasks, callback) { + callback = callback || _noop2.default; + var results = (0, _isArrayLike2.default)(tasks) ? [] : {}; + + eachfn(tasks, function (task, key, callback) { + (0, _wrapAsync2.default)(task)(function (err, result) { + if (arguments.length > 2) { + result = (0, _slice2.default)(arguments, 1); + } + results[key] = result; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/queue.js b/node_modules/watchpack/node_modules/async/internal/queue.js new file mode 100644 index 000000000..6a7c455a8 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/queue.js @@ -0,0 +1,194 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = queue; + +var _baseIndexOf = require('lodash/_baseIndexOf'); + +var _baseIndexOf2 = _interopRequireDefault(_baseIndexOf); + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _onlyOnce = require('./onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _setImmediate = require('./setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _DoublyLinkedList = require('./DoublyLinkedList'); + +var _DoublyLinkedList2 = _interopRequireDefault(_DoublyLinkedList); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function queue(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } else if (concurrency === 0) { + throw new Error('Concurrency must not be zero'); + } + + var _worker = (0, _wrapAsync2.default)(worker); + var numRunning = 0; + var workersList = []; + + function _insert(data, insertAtFront, callback) { + if (callback != null && typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!(0, _isArray2.default)(data)) { + data = [data]; + } + if (data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + return (0, _setImmediate2.default)(function () { + q.drain(); + }); + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + callback: callback || _noop2.default + }; + + if (insertAtFront) { + q._tasks.unshift(item); + } else { + q._tasks.push(item); + } + } + (0, _setImmediate2.default)(q.process); + } + + function _next(tasks) { + return function (err) { + numRunning -= 1; + + for (var i = 0, l = tasks.length; i < l; i++) { + var task = tasks[i]; + + var index = (0, _baseIndexOf2.default)(workersList, task, 0); + if (index >= 0) { + workersList.splice(index, 1); + } + + task.callback.apply(task, arguments); + + if (err != null) { + q.error(err, task.data); + } + } + + if (numRunning <= q.concurrency - q.buffer) { + q.unsaturated(); + } + + if (q.idle()) { + q.drain(); + } + q.process(); + }; + } + + var isProcessing = false; + var q = { + _tasks: new _DoublyLinkedList2.default(), + concurrency: concurrency, + payload: payload, + saturated: _noop2.default, + unsaturated: _noop2.default, + buffer: concurrency / 4, + empty: _noop2.default, + drain: _noop2.default, + error: _noop2.default, + started: false, + paused: false, + push: function (data, callback) { + _insert(data, false, callback); + }, + kill: function () { + q.drain = _noop2.default; + q._tasks.empty(); + }, + unshift: function (data, callback) { + _insert(data, true, callback); + }, + remove: function (testFn) { + q._tasks.remove(testFn); + }, + process: function () { + // Avoid trying to start too many processing operations. This can occur + // when callbacks resolve synchronously (#1267). + if (isProcessing) { + return; + } + isProcessing = true; + while (!q.paused && numRunning < q.concurrency && q._tasks.length) { + var tasks = [], + data = []; + var l = q._tasks.length; + if (q.payload) l = Math.min(l, q.payload); + for (var i = 0; i < l; i++) { + var node = q._tasks.shift(); + tasks.push(node); + workersList.push(node); + data.push(node.data); + } + + numRunning += 1; + + if (q._tasks.length === 0) { + q.empty(); + } + + if (numRunning === q.concurrency) { + q.saturated(); + } + + var cb = (0, _onlyOnce2.default)(_next(tasks)); + _worker(data, cb); + } + isProcessing = false; + }, + length: function () { + return q._tasks.length; + }, + running: function () { + return numRunning; + }, + workersList: function () { + return workersList; + }, + idle: function () { + return q._tasks.length + numRunning === 0; + }, + pause: function () { + q.paused = true; + }, + resume: function () { + if (q.paused === false) { + return; + } + q.paused = false; + (0, _setImmediate2.default)(q.process); + } + }; + return q; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/reject.js b/node_modules/watchpack/node_modules/async/internal/reject.js new file mode 100644 index 000000000..5dbfcfb15 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/reject.js @@ -0,0 +1,21 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reject; + +var _filter = require('./filter'); + +var _filter2 = _interopRequireDefault(_filter); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function reject(eachfn, arr, iteratee, callback) { + (0, _filter2.default)(eachfn, arr, function (value, cb) { + iteratee(value, function (err, v) { + cb(err, !v); + }); + }, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/setImmediate.js b/node_modules/watchpack/node_modules/async/internal/setImmediate.js new file mode 100644 index 000000000..3545f2bcd --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/setImmediate.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.hasNextTick = exports.hasSetImmediate = undefined; +exports.fallback = fallback; +exports.wrap = wrap; + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate; +var hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + +function fallback(fn) { + setTimeout(fn, 0); +} + +function wrap(defer) { + return function (fn /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + defer(function () { + fn.apply(null, args); + }); + }; +} + +var _defer; + +if (hasSetImmediate) { + _defer = setImmediate; +} else if (hasNextTick) { + _defer = process.nextTick; +} else { + _defer = fallback; +} + +exports.default = wrap(_defer); \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/slice.js b/node_modules/watchpack/node_modules/async/internal/slice.js new file mode 100644 index 000000000..56f10c03e --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/slice.js @@ -0,0 +1,16 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = slice; +function slice(arrayLike, start) { + start = start | 0; + var newLen = Math.max(arrayLike.length - start, 0); + var newArr = Array(newLen); + for (var idx = 0; idx < newLen; idx++) { + newArr[idx] = arrayLike[start + idx]; + } + return newArr; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/withoutIndex.js b/node_modules/watchpack/node_modules/async/internal/withoutIndex.js new file mode 100644 index 000000000..2bd35796a --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/withoutIndex.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _withoutIndex; +function _withoutIndex(iteratee) { + return function (value, index, callback) { + return iteratee(value, callback); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/internal/wrapAsync.js b/node_modules/watchpack/node_modules/async/internal/wrapAsync.js new file mode 100644 index 000000000..bc6c96668 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/internal/wrapAsync.js @@ -0,0 +1,25 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isAsync = undefined; + +var _asyncify = require('../asyncify'); + +var _asyncify2 = _interopRequireDefault(_asyncify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var supportsSymbol = typeof Symbol === 'function'; + +function isAsync(fn) { + return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction'; +} + +function wrapAsync(asyncFn) { + return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn; +} + +exports.default = wrapAsync; +exports.isAsync = isAsync; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/log.js b/node_modules/watchpack/node_modules/async/log.js new file mode 100644 index 000000000..c643867bc --- /dev/null +++ b/node_modules/watchpack/node_modules/async/log.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _consoleFunc = require('./internal/consoleFunc'); + +var _consoleFunc2 = _interopRequireDefault(_consoleFunc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Logs the result of an `async` function to the `console`. Only works in + * Node.js or in browsers that support `console.log` and `console.error` (such + * as FF and Chrome). If multiple arguments are returned from the async + * function, `console.log` is called on each argument in order. + * + * @name log + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, 'hello ' + name); + * }, 1000); + * }; + * + * // in the node repl + * node> async.log(hello, 'world'); + * 'hello world' + */ +exports.default = (0, _consoleFunc2.default)('log'); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/map.js b/node_modules/watchpack/node_modules/async/map.js new file mode 100644 index 000000000..67c9cda93 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/map.js @@ -0,0 +1,54 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +var _map = require('./internal/map'); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Produces a new collection of values by mapping each value in `coll` through + * the `iteratee` function. The `iteratee` is called with an item from `coll` + * and a callback for when it has finished processing. Each of these callback + * takes 2 arguments: an `error`, and the transformed item from `coll`. If + * `iteratee` passes an error to its callback, the main `callback` (for the + * `map` function) is immediately called with the error. + * + * Note, that since this function applies the `iteratee` to each item in + * parallel, there is no guarantee that the `iteratee` functions will complete + * in order. However, the results array will be in the same order as the + * original `coll`. + * + * If `map` is passed an Object, the results will be an Array. The results + * will roughly be in the order of the original Objects' keys (but this can + * vary across JavaScript engines). + * + * @name map + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an Array of the + * transformed items from the `coll`. Invoked with (err, results). + * @example + * + * async.map(['file1','file2','file3'], fs.stat, function(err, results) { + * // results is now an array of stats for each file + * }); + */ +exports.default = (0, _doParallel2.default)(_map2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/mapLimit.js b/node_modules/watchpack/node_modules/async/mapLimit.js new file mode 100644 index 000000000..c8b60d8dc --- /dev/null +++ b/node_modules/watchpack/node_modules/async/mapLimit.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +var _map = require('./internal/map'); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time. + * + * @name mapLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +exports.default = (0, _doParallelLimit2.default)(_map2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/mapSeries.js b/node_modules/watchpack/node_modules/async/mapSeries.js new file mode 100644 index 000000000..61b42d01b --- /dev/null +++ b/node_modules/watchpack/node_modules/async/mapSeries.js @@ -0,0 +1,36 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. + * + * @name mapSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +exports.default = (0, _doLimit2.default)(_mapLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/mapValues.js b/node_modules/watchpack/node_modules/async/mapValues.js new file mode 100644 index 000000000..3d838ca1e --- /dev/null +++ b/node_modules/watchpack/node_modules/async/mapValues.js @@ -0,0 +1,63 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mapValuesLimit = require('./mapValuesLimit'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. + * + * Produces a new Object by mapping each value of `obj` through the `iteratee` + * function. The `iteratee` is called each `value` and `key` from `obj` and a + * callback for when it has finished processing. Each of these callbacks takes + * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` + * passes an error to its callback, the main `callback` (for the `mapValues` + * function) is immediately called with the error. + * + * Note, the order of the keys in the result is not guaranteed. The keys will + * be roughly in the order they complete, (but this is very engine-specific) + * + * @name mapValues + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @example + * + * async.mapValues({ + * f1: 'file1', + * f2: 'file2', + * f3: 'file3' + * }, function (file, key, callback) { + * fs.stat(file, callback); + * }, function(err, result) { + * // result is now a map of stats for each file, e.g. + * // { + * // f1: [stats for file1], + * // f2: [stats for file2], + * // f3: [stats for file3] + * // } + * }); + */ + +exports.default = (0, _doLimit2.default)(_mapValuesLimit2.default, Infinity); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/mapValuesLimit.js b/node_modules/watchpack/node_modules/async/mapValuesLimit.js new file mode 100644 index 000000000..912a8b522 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/mapValuesLimit.js @@ -0,0 +1,61 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = mapValuesLimit; + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a + * time. + * + * @name mapValuesLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +function mapValuesLimit(obj, limit, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + var newObj = {}; + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _eachOfLimit2.default)(obj, limit, function (val, key, next) { + _iteratee(val, key, function (err, result) { + if (err) return next(err); + newObj[key] = result; + next(); + }); + }, function (err) { + callback(err, newObj); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/mapValuesSeries.js b/node_modules/watchpack/node_modules/async/mapValuesSeries.js new file mode 100644 index 000000000..b378c4a1a --- /dev/null +++ b/node_modules/watchpack/node_modules/async/mapValuesSeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mapValuesLimit = require('./mapValuesLimit'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time. + * + * @name mapValuesSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +exports.default = (0, _doLimit2.default)(_mapValuesLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/memoize.js b/node_modules/watchpack/node_modules/async/memoize.js new file mode 100644 index 000000000..1f2b56691 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/memoize.js @@ -0,0 +1,101 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = memoize; + +var _identity = require('lodash/identity'); + +var _identity2 = _interopRequireDefault(_identity); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function has(obj, key) { + return key in obj; +} + +/** + * Caches the results of an async function. When creating a hash to store + * function results against, the callback is omitted from the hash and an + * optional hash function can be used. + * + * If no hash function is specified, the first argument is used as a hash key, + * which may work reasonably if it is a string or a data type that converts to a + * distinct string. Note that objects and arrays will not behave reasonably. + * Neither will cases where the other arguments are significant. In such cases, + * specify your own hash function. + * + * The cache of results is exposed as the `memo` property of the function + * returned by `memoize`. + * + * @name memoize + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function to proxy and cache results from. + * @param {Function} hasher - An optional function for generating a custom hash + * for storing results. It has all the arguments applied to it apart from the + * callback, and must be synchronous. + * @returns {AsyncFunction} a memoized version of `fn` + * @example + * + * var slow_fn = function(name, callback) { + * // do something + * callback(null, result); + * }; + * var fn = async.memoize(slow_fn); + * + * // fn can now be used as if it were slow_fn + * fn('some name', function() { + * // callback + * }); + */ +function memoize(fn, hasher) { + var memo = Object.create(null); + var queues = Object.create(null); + hasher = hasher || _identity2.default; + var _fn = (0, _wrapAsync2.default)(fn); + var memoized = (0, _initialParams2.default)(function memoized(args, callback) { + var key = hasher.apply(null, args); + if (has(memo, key)) { + (0, _setImmediate2.default)(function () { + callback.apply(null, memo[key]); + }); + } else if (has(queues, key)) { + queues[key].push(callback); + } else { + queues[key] = [callback]; + _fn.apply(null, args.concat(function () /*args*/{ + var args = (0, _slice2.default)(arguments); + memo[key] = args; + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i].apply(null, args); + } + })); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/nextTick.js b/node_modules/watchpack/node_modules/async/nextTick.js new file mode 100644 index 000000000..fa48e3264 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/nextTick.js @@ -0,0 +1,51 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _setImmediate = require('./internal/setImmediate'); + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `setImmediate`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name nextTick + * @static + * @memberOf module:Utils + * @method + * @alias setImmediate + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +var _defer; + +if (_setImmediate.hasNextTick) { + _defer = process.nextTick; +} else if (_setImmediate.hasSetImmediate) { + _defer = setImmediate; +} else { + _defer = _setImmediate.fallback; +} + +exports.default = (0, _setImmediate.wrap)(_defer); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/package.json b/node_modules/watchpack/node_modules/async/package.json new file mode 100644 index 000000000..a0d548d07 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/package.json @@ -0,0 +1,110 @@ +{ + "_from": "async@^2.1.2", + "_id": "async@2.5.0", + "_inBundle": false, + "_integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "_location": "/watchpack/async", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "async@^2.1.2", + "name": "async", + "escapedName": "async", + "rawSpec": "^2.1.2", + "saveSpec": null, + "fetchSpec": "^2.1.2" + }, + "_requiredBy": [ + "/watchpack" + ], + "_resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "_shasum": "843190fd6b7357a0b9e1c956edddd5ec8462b54d", + "_spec": "async@^2.1.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/watchpack", + "author": { + "name": "Caolan McMahon" + }, + "bugs": { + "url": "https://github.com/caolan/async/issues" + }, + "bundleDependencies": false, + "dependencies": { + "lodash": "^4.14.0" + }, + "deprecated": false, + "description": "Higher-order functions and common patterns for asynchronous code", + "devDependencies": { + "babel-cli": "^6.24.0", + "babel-core": "^6.24.0", + "babel-plugin-add-module-exports": "^0.2.1", + "babel-plugin-istanbul": "^2.0.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.3.16", + "babel-preset-es2015": "^6.3.13", + "babel-preset-es2017": "^6.22.0", + "babelify": "^7.2.0", + "benchmark": "^2.1.1", + "bluebird": "^3.4.6", + "chai": "^3.1.0", + "cheerio": "^0.22.0", + "coveralls": "^2.11.2", + "es6-promise": "^2.3.0", + "eslint": "^2.13.1", + "fs-extra": "^0.26.7", + "gh-pages-deploy": "^0.4.2", + "jsdoc": "^3.4.0", + "karma": "^1.3.0", + "karma-browserify": "^5.1.0", + "karma-firefox-launcher": "^1.0.0", + "karma-mocha": "^1.2.0", + "karma-mocha-reporter": "^2.2.0", + "mocha": "^3.1.2", + "native-promise-only": "^0.8.0-a", + "nyc": "^7.0.0", + "recursive-readdir": "^1.3.0", + "rimraf": "^2.5.0", + "rollup": "^0.36.3", + "rollup-plugin-node-resolve": "^2.0.0", + "rollup-plugin-npm": "^2.0.0", + "rsvp": "^3.0.18", + "semver": "^4.3.6", + "uglify-js": "~2.7.3", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0", + "watchify": "^3.7.0", + "yargs": "~3.9.1" + }, + "gh-pages-deploy": { + "staticpath": "docs" + }, + "homepage": "https://github.com/caolan/async#readme", + "keywords": [ + "async", + "callback", + "module", + "utility" + ], + "license": "MIT", + "main": "dist/async.js", + "name": "async", + "nyc": { + "exclude": [ + "mocha_test" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/caolan/async.git" + }, + "scripts": { + "coverage": "nyc npm run mocha-node-test -- --grep @nycinvalid --invert", + "coveralls": "npm run coverage && nyc report --reporter=text-lcov | coveralls", + "jsdoc": "jsdoc -c ./support/jsdoc/jsdoc.json && node support/jsdoc/jsdoc-fix-html.js", + "lint": "eslint lib/ mocha_test/ perf/memory.js perf/suites.js perf/benchmark.js support/build/ support/*.js karma.conf.js", + "mocha-browser-test": "karma start", + "mocha-node-test": "mocha mocha_test/ --compilers js:babel-core/register", + "mocha-test": "npm run mocha-node-test && npm run mocha-browser-test", + "test": "npm run lint && npm run mocha-node-test" + }, + "version": "2.5.0" +} diff --git a/node_modules/watchpack/node_modules/async/parallel.js b/node_modules/watchpack/node_modules/async/parallel.js new file mode 100644 index 000000000..da28a4def --- /dev/null +++ b/node_modules/watchpack/node_modules/async/parallel.js @@ -0,0 +1,90 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = parallelLimit; + +var _eachOf = require('./eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _parallel = require('./internal/parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Run the `tasks` collection of functions in parallel, without waiting until + * the previous function has completed. If any of the functions pass an error to + * its callback, the main `callback` is immediately called with the value of the + * error. Once the `tasks` have completed, the results are passed to the final + * `callback` as an array. + * + * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about + * parallel execution of code. If your tasks do not use any timers or perform + * any I/O, they will actually be executed in series. Any synchronous setup + * sections for each task will happen one after the other. JavaScript remains + * single-threaded. + * + * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the + * execution of other tasks when a task fails. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.parallel}. + * + * @name parallel + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * + * @example + * async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // optional callback + * function(err, results) { + * // the results array will equal ['one','two'] even though + * // the second function had a shorter timeout. + * }); + * + * // an example using an object instead of an array + * async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * // results is now equals to: {one: 1, two: 2} + * }); + */ +function parallelLimit(tasks, callback) { + (0, _parallel2.default)(_eachOf2.default, tasks, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/parallelLimit.js b/node_modules/watchpack/node_modules/async/parallelLimit.js new file mode 100644 index 000000000..a026526f4 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/parallelLimit.js @@ -0,0 +1,40 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = parallelLimit; + +var _eachOfLimit = require('./internal/eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _parallel = require('./internal/parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a + * time. + * + * @name parallelLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.parallel]{@link module:ControlFlow.parallel} + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + */ +function parallelLimit(tasks, limit, callback) { + (0, _parallel2.default)((0, _eachOfLimit2.default)(limit), tasks, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/priorityQueue.js b/node_modules/watchpack/node_modules/async/priorityQueue.js new file mode 100644 index 000000000..3a5f023e5 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/priorityQueue.js @@ -0,0 +1,98 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (worker, concurrency) { + // Start with a normal queue + var q = (0, _queue2.default)(worker, concurrency); + + // Override push to accept second parameter representing priority + q.push = function (data, priority, callback) { + if (callback == null) callback = _noop2.default; + if (typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!(0, _isArray2.default)(data)) { + data = [data]; + } + if (data.length === 0) { + // call drain immediately if there are no tasks + return (0, _setImmediate2.default)(function () { + q.drain(); + }); + } + + priority = priority || 0; + var nextNode = q._tasks.head; + while (nextNode && priority >= nextNode.priority) { + nextNode = nextNode.next; + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + priority: priority, + callback: callback + }; + + if (nextNode) { + q._tasks.insertBefore(nextNode, item); + } else { + q._tasks.push(item); + } + } + (0, _setImmediate2.default)(q.process); + }; + + // Remove unshift function + delete q.unshift; + + return q; +}; + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _setImmediate = require('./setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _queue = require('./queue'); + +var _queue2 = _interopRequireDefault(_queue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and + * completed in ascending priority order. + * + * @name priorityQueue + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. + * Invoked with (task, callback). + * @param {number} concurrency - An `integer` for determining how many `worker` + * functions should be run in parallel. If omitted, the concurrency defaults to + * `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are two + * differences between `queue` and `priorityQueue` objects: + * * `push(task, priority, [callback])` - `priority` should be a number. If an + * array of `tasks` is given, all tasks will be assigned the same priority. + * * The `unshift` method was removed. + */ \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/queue.js b/node_modules/watchpack/node_modules/async/queue.js new file mode 100644 index 000000000..0ca8ba2bb --- /dev/null +++ b/node_modules/watchpack/node_modules/async/queue.js @@ -0,0 +1,130 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (worker, concurrency) { + var _worker = (0, _wrapAsync2.default)(worker); + return (0, _queue2.default)(function (items, cb) { + _worker(items[0], cb); + }, concurrency, 1); +}; + +var _queue = require('./internal/queue'); + +var _queue2 = _interopRequireDefault(_queue); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * A queue of tasks for the worker function to complete. + * @typedef {Object} QueueObject + * @memberOf module:ControlFlow + * @property {Function} length - a function returning the number of items + * waiting to be processed. Invoke with `queue.length()`. + * @property {boolean} started - a boolean indicating whether or not any + * items have been pushed and processed by the queue. + * @property {Function} running - a function returning the number of items + * currently being processed. Invoke with `queue.running()`. + * @property {Function} workersList - a function returning the array of items + * currently being processed. Invoke with `queue.workersList()`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke with `queue.idle()`. + * @property {number} concurrency - an integer for determining how many `worker` + * functions should be run in parallel. This property can be changed after a + * `queue` is created to alter the concurrency on-the-fly. + * @property {Function} push - add a new task to the `queue`. Calls `callback` + * once the `worker` has finished processing the task. Instead of a single task, + * a `tasks` array can be submitted. The respective callback is used for every + * task in the list. Invoke with `queue.push(task, [callback])`, + * @property {Function} unshift - add a new task to the front of the `queue`. + * Invoke with `queue.unshift(task, [callback])`. + * @property {Function} remove - remove items from the queue that match a test + * function. The test function will be passed an object with a `data` property, + * and a `priority` property, if this is a + * [priorityQueue]{@link module:ControlFlow.priorityQueue} object. + * Invoked with `queue.remove(testFn)`, where `testFn` is of the form + * `function ({data, priority}) {}` and returns a Boolean. + * @property {Function} saturated - a callback that is called when the number of + * running workers hits the `concurrency` limit, and further tasks will be + * queued. + * @property {Function} unsaturated - a callback that is called when the number + * of running workers is less than the `concurrency` & `buffer` limits, and + * further tasks will not be queued. + * @property {number} buffer - A minimum threshold buffer in order to say that + * the `queue` is `unsaturated`. + * @property {Function} empty - a callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - a callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} error - a callback that is called when a task errors. + * Has the signature `function(error, task)`. + * @property {boolean} paused - a boolean for determining whether the queue is + * in a paused state. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke with `queue.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke with `queue.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. No more tasks + * should be pushed to the queue after calling this function. Invoke with `queue.kill()`. + */ + +/** + * Creates a `queue` object with the specified `concurrency`. Tasks added to the + * `queue` are processed in parallel (up to the `concurrency` limit). If all + * `worker`s are in progress, the task is queued until one becomes available. + * Once a `worker` completes a `task`, that `task`'s callback is called. + * + * @name queue + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. Invoked with (task, callback). + * @param {number} [concurrency=1] - An `integer` for determining how many + * `worker` functions should be run in parallel. If omitted, the concurrency + * defaults to `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the queue. + * @example + * + * // create a queue object with concurrency 2 + * var q = async.queue(function(task, callback) { + * console.log('hello ' + task.name); + * callback(); + * }, 2); + * + * // assign a callback + * q.drain = function() { + * console.log('all items have been processed'); + * }; + * + * // add some items to the queue + * q.push({name: 'foo'}, function(err) { + * console.log('finished processing foo'); + * }); + * q.push({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + * + * // add some items to the queue (batch-wise) + * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) { + * console.log('finished processing item'); + * }); + * + * // add some items to the front of the queue + * q.unshift({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + */ \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/race.js b/node_modules/watchpack/node_modules/async/race.js new file mode 100644 index 000000000..6713c74af --- /dev/null +++ b/node_modules/watchpack/node_modules/async/race.js @@ -0,0 +1,70 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = race; + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Runs the `tasks` array of functions in parallel, without waiting until the + * previous function has completed. Once any of the `tasks` complete or pass an + * error to its callback, the main `callback` is immediately called. It's + * equivalent to `Promise.race()`. + * + * @name race + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} + * to run. Each function can complete with an optional `result` value. + * @param {Function} callback - A callback to run once any of the functions have + * completed. This function gets an error or result from the first function that + * completed. Invoked with (err, result). + * @returns undefined + * @example + * + * async.race([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // main callback + * function(err, result) { + * // the result will be equal to 'two' as it finishes earlier + * }); + */ +function race(tasks, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + if (!(0, _isArray2.default)(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); + if (!tasks.length) return callback(); + for (var i = 0, l = tasks.length; i < l; i++) { + (0, _wrapAsync2.default)(tasks[i])(callback); + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/reduce.js b/node_modules/watchpack/node_modules/async/reduce.js new file mode 100644 index 000000000..3fb8019e4 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/reduce.js @@ -0,0 +1,78 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reduce; + +var _eachOfSeries = require('./eachOfSeries'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Reduces `coll` into a single value using an async `iteratee` to return each + * successive step. `memo` is the initial state of the reduction. This function + * only operates in series. + * + * For performance reasons, it may make sense to split a call to this function + * into a parallel map, and then use the normal `Array.prototype.reduce` on the + * results. This function is for situations where each step in the reduction + * needs to be async; if you can get the data before reducing it, then it's + * probably a good idea to do so. + * + * @name reduce + * @static + * @memberOf module:Collections + * @method + * @alias inject + * @alias foldl + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee complete with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + * @example + * + * async.reduce([1,2,3], 0, function(memo, item, callback) { + * // pointless async: + * process.nextTick(function() { + * callback(null, memo + item) + * }); + * }, function(err, result) { + * // result is now equal to the last value of memo, which is 6 + * }); + */ +function reduce(coll, memo, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _eachOfSeries2.default)(coll, function (x, i, callback) { + _iteratee(memo, x, function (err, v) { + memo = v; + callback(err); + }); + }, function (err) { + callback(err, memo); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/reduceRight.js b/node_modules/watchpack/node_modules/async/reduceRight.js new file mode 100644 index 000000000..3d17d328a --- /dev/null +++ b/node_modules/watchpack/node_modules/async/reduceRight.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reduceRight; + +var _reduce = require('./reduce'); + +var _reduce2 = _interopRequireDefault(_reduce); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. + * + * @name reduceRight + * @static + * @memberOf module:Collections + * @method + * @see [async.reduce]{@link module:Collections.reduce} + * @alias foldr + * @category Collection + * @param {Array} array - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee complete with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + */ +function reduceRight(array, memo, iteratee, callback) { + var reversed = (0, _slice2.default)(array).reverse(); + (0, _reduce2.default)(reversed, memo, iteratee, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/reflect.js b/node_modules/watchpack/node_modules/async/reflect.js new file mode 100644 index 000000000..098ba8650 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/reflect.js @@ -0,0 +1,81 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reflect; + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Wraps the async function in another function that always completes with a + * result object, even when it errors. + * + * The result object has either the property `error` or `value`. + * + * @name reflect + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function you want to wrap + * @returns {Function} - A function that always passes null to it's callback as + * the error. The second argument to the callback will be an `object` with + * either an `error` or a `value` property. + * @example + * + * async.parallel([ + * async.reflect(function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }), + * async.reflect(function(callback) { + * // do some more stuff but error ... + * callback('bad stuff happened'); + * }), + * async.reflect(function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * }) + * ], + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = 'bad stuff happened' + * // results[2].value = 'two' + * }); + */ +function reflect(fn) { + var _fn = (0, _wrapAsync2.default)(fn); + return (0, _initialParams2.default)(function reflectOn(args, reflectCallback) { + args.push(function callback(error, cbArg) { + if (error) { + reflectCallback(null, { error: error }); + } else { + var value; + if (arguments.length <= 2) { + value = cbArg; + } else { + value = (0, _slice2.default)(arguments, 1); + } + reflectCallback(null, { value: value }); + } + }); + + return _fn.apply(this, args); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/reflectAll.js b/node_modules/watchpack/node_modules/async/reflectAll.js new file mode 100644 index 000000000..966e83de5 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/reflectAll.js @@ -0,0 +1,105 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reflectAll; + +var _reflect = require('./reflect'); + +var _reflect2 = _interopRequireDefault(_reflect); + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _arrayMap2 = require('lodash/_arrayMap'); + +var _arrayMap3 = _interopRequireDefault(_arrayMap2); + +var _baseForOwn = require('lodash/_baseForOwn'); + +var _baseForOwn2 = _interopRequireDefault(_baseForOwn); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A helper function that wraps an array or an object of functions with `reflect`. + * + * @name reflectAll + * @static + * @memberOf module:Utils + * @method + * @see [async.reflect]{@link module:Utils.reflect} + * @category Util + * @param {Array|Object|Iterable} tasks - The collection of + * [async functions]{@link AsyncFunction} to wrap in `async.reflect`. + * @returns {Array} Returns an array of async functions, each wrapped in + * `async.reflect` + * @example + * + * let tasks = [ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * // do some more stuff but error ... + * callback(new Error('bad stuff happened')); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = Error('bad stuff happened') + * // results[2].value = 'two' + * }); + * + * // an example using an object instead of an array + * let tasks = { + * one: function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * two: function(callback) { + * callback('two'); + * }, + * three: function(callback) { + * setTimeout(function() { + * callback(null, 'three'); + * }, 100); + * } + * }; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results.one.value = 'one' + * // results.two.error = 'two' + * // results.three.value = 'three' + * }); + */ +function reflectAll(tasks) { + var results; + if ((0, _isArray2.default)(tasks)) { + results = (0, _arrayMap3.default)(tasks, _reflect2.default); + } else { + results = {}; + (0, _baseForOwn2.default)(tasks, function (task, key) { + results[key] = _reflect2.default.call(this, task); + }); + } + return results; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/reject.js b/node_modules/watchpack/node_modules/async/reject.js new file mode 100644 index 000000000..53802b531 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/reject.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reject = require('./internal/reject'); + +var _reject2 = _interopRequireDefault(_reject); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test. + * + * @name reject + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.reject(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of missing files + * createFiles(results); + * }); + */ +exports.default = (0, _doParallel2.default)(_reject2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/rejectLimit.js b/node_modules/watchpack/node_modules/async/rejectLimit.js new file mode 100644 index 000000000..74bba7fba --- /dev/null +++ b/node_modules/watchpack/node_modules/async/rejectLimit.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reject = require('./internal/reject'); + +var _reject2 = _interopRequireDefault(_reject); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a + * time. + * + * @name rejectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +exports.default = (0, _doParallelLimit2.default)(_reject2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/rejectSeries.js b/node_modules/watchpack/node_modules/async/rejectSeries.js new file mode 100644 index 000000000..f905588f4 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/rejectSeries.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _rejectLimit = require('./rejectLimit'); + +var _rejectLimit2 = _interopRequireDefault(_rejectLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. + * + * @name rejectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +exports.default = (0, _doLimit2.default)(_rejectLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/retry.js b/node_modules/watchpack/node_modules/async/retry.js new file mode 100644 index 000000000..9ad7ff1a3 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/retry.js @@ -0,0 +1,156 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = retry; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _constant = require('lodash/constant'); + +var _constant2 = _interopRequireDefault(_constant); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Attempts to get a successful response from `task` no more than `times` times + * before returning an error. If the task is successful, the `callback` will be + * passed the result of the successful task. If all attempts fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name retry + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @see [async.retryable]{@link module:ControlFlow.retryable} + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an + * object with `times` and `interval` or a number. + * * `times` - The number of attempts to make before giving up. The default + * is `5`. + * * `interval` - The time to wait between retries, in milliseconds. The + * default is `0`. The interval may also be specified as a function of the + * retry count (see example). + * * `errorFilter` - An optional synchronous function that is invoked on + * erroneous result. If it returns `true` the retry attempts will continue; + * if the function returns `false` the retry flow is aborted with the current + * attempt's error and result being returned to the final callback. + * Invoked with (err). + * * If `opts` is a number, the number specifies the number of times to retry, + * with the default interval of `0`. + * @param {AsyncFunction} task - An async function to retry. + * Invoked with (callback). + * @param {Function} [callback] - An optional callback which is called when the + * task has succeeded, or after the final failed attempt. It receives the `err` + * and `result` arguments of the last attempt at completing the `task`. Invoked + * with (err, results). + * + * @example + * + * // The `retry` function can be used as a stand-alone control flow by passing + * // a callback, as shown below: + * + * // try calling apiMethod 3 times + * async.retry(3, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 3 times, waiting 200 ms between each retry + * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 10 times with exponential backoff + * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) + * async.retry({ + * times: 10, + * interval: function(retryCount) { + * return 50 * Math.pow(2, retryCount); + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod the default 5 times no delay between each retry + * async.retry(apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod only when error condition satisfies, all other + * // errors will abort the retry control flow and return to final callback + * async.retry({ + * errorFilter: function(err) { + * return err.message === 'Temporary error'; // only retry on a specific error + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // It can also be embedded within other control flow functions to retry + * // individual methods that are not as reliable, like this: + * async.auto({ + * users: api.getUsers.bind(api), + * payments: async.retryable(3, api.getPayments.bind(api)) + * }, function(err, results) { + * // do something with the results + * }); + * + */ +function retry(opts, task, callback) { + var DEFAULT_TIMES = 5; + var DEFAULT_INTERVAL = 0; + + var options = { + times: DEFAULT_TIMES, + intervalFunc: (0, _constant2.default)(DEFAULT_INTERVAL) + }; + + function parseTimes(acc, t) { + if (typeof t === 'object') { + acc.times = +t.times || DEFAULT_TIMES; + + acc.intervalFunc = typeof t.interval === 'function' ? t.interval : (0, _constant2.default)(+t.interval || DEFAULT_INTERVAL); + + acc.errorFilter = t.errorFilter; + } else if (typeof t === 'number' || typeof t === 'string') { + acc.times = +t || DEFAULT_TIMES; + } else { + throw new Error("Invalid arguments for async.retry"); + } + } + + if (arguments.length < 3 && typeof opts === 'function') { + callback = task || _noop2.default; + task = opts; + } else { + parseTimes(options, opts); + callback = callback || _noop2.default; + } + + if (typeof task !== 'function') { + throw new Error("Invalid arguments for async.retry"); + } + + var _task = (0, _wrapAsync2.default)(task); + + var attempt = 1; + function retryAttempt() { + _task(function (err) { + if (err && attempt++ < options.times && (typeof options.errorFilter != 'function' || options.errorFilter(err))) { + setTimeout(retryAttempt, options.intervalFunc(attempt)); + } else { + callback.apply(null, arguments); + } + }); + } + + retryAttempt(); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/retryable.js b/node_modules/watchpack/node_modules/async/retryable.js new file mode 100644 index 000000000..002bfb0f0 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/retryable.js @@ -0,0 +1,65 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (opts, task) { + if (!task) { + task = opts; + opts = null; + } + var _task = (0, _wrapAsync2.default)(task); + return (0, _initialParams2.default)(function (args, callback) { + function taskFn(cb) { + _task.apply(null, args.concat(cb)); + } + + if (opts) (0, _retry2.default)(opts, taskFn, callback);else (0, _retry2.default)(taskFn, callback); + }); +}; + +var _retry = require('./retry'); + +var _retry2 = _interopRequireDefault(_retry); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method + * wraps a task and makes it retryable, rather than immediately calling it + * with retries. + * + * @name retryable + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.retry]{@link module:ControlFlow.retry} + * @category Control Flow + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional + * options, exactly the same as from `retry` + * @param {AsyncFunction} task - the asynchronous function to wrap. + * This function will be passed any arguments passed to the returned wrapper. + * Invoked with (...args, callback). + * @returns {AsyncFunction} The wrapped function, which when invoked, will + * retry on an error, based on the parameters specified in `opts`. + * This function will accept the same parameters as `task`. + * @example + * + * async.auto({ + * dep1: async.retryable(3, getFromFlakyService), + * process: ["dep1", async.retryable(3, function (results, cb) { + * maybeProcessData(results.dep1, cb); + * })] + * }, callback); + */ \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/seq.js b/node_modules/watchpack/node_modules/async/seq.js new file mode 100644 index 000000000..ff86ef92d --- /dev/null +++ b/node_modules/watchpack/node_modules/async/seq.js @@ -0,0 +1,91 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = seq; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _reduce = require('./reduce'); + +var _reduce2 = _interopRequireDefault(_reduce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _arrayMap = require('lodash/_arrayMap'); + +var _arrayMap2 = _interopRequireDefault(_arrayMap); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Version of the compose function that is more natural to read. Each function + * consumes the return value of the previous function. It is the equivalent of + * [compose]{@link module:ControlFlow.compose} with the arguments reversed. + * + * Each function is executed with the `this` binding of the composed function. + * + * @name seq + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.compose]{@link module:ControlFlow.compose} + * @category Control Flow + * @param {...AsyncFunction} functions - the asynchronous functions to compose + * @returns {Function} a function that composes the `functions` in order + * @example + * + * // Requires lodash (or underscore), express3 and dresende's orm2. + * // Part of an app, that fetches cats of the logged user. + * // This example uses `seq` function to avoid overnesting and error + * // handling clutter. + * app.get('/cats', function(request, response) { + * var User = request.models.User; + * async.seq( + * _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) + * function(user, fn) { + * user.getCats(fn); // 'getCats' has signature (callback(err, data)) + * } + * )(req.session.user_id, function (err, cats) { + * if (err) { + * console.error(err); + * response.json({ status: 'error', message: err.message }); + * } else { + * response.json({ status: 'ok', message: 'Cats found', data: cats }); + * } + * }); + * }); + */ +function seq() /*...functions*/{ + var _functions = (0, _arrayMap2.default)(arguments, _wrapAsync2.default); + return function () /*...args*/{ + var args = (0, _slice2.default)(arguments); + var that = this; + + var cb = args[args.length - 1]; + if (typeof cb == 'function') { + args.pop(); + } else { + cb = _noop2.default; + } + + (0, _reduce2.default)(_functions, args, function (newargs, fn, cb) { + fn.apply(that, newargs.concat(function (err /*, ...nextargs*/) { + var nextargs = (0, _slice2.default)(arguments, 1); + cb(err, nextargs); + })); + }, function (err, results) { + cb.apply(that, [err].concat(results)); + }); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/series.js b/node_modules/watchpack/node_modules/async/series.js new file mode 100644 index 000000000..e8c292816 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/series.js @@ -0,0 +1,85 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = series; + +var _parallel = require('./internal/parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +var _eachOfSeries = require('./eachOfSeries'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Run the functions in the `tasks` collection in series, each one running once + * the previous function has completed. If any functions in the series pass an + * error to its callback, no more functions are run, and `callback` is + * immediately called with the value of the error. Otherwise, `callback` + * receives an array of results when `tasks` have completed. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function, and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.series}. + * + * **Note** that while many implementations preserve the order of object + * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) + * explicitly states that + * + * > The mechanics and order of enumerating the properties is not specified. + * + * So if you rely on the order in which your series of functions are executed, + * and want this to work on all platforms, consider using an array. + * + * @name series + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing + * [async functions]{@link AsyncFunction} to run in series. + * Each function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This function gets a results array (or object) + * containing all the result arguments passed to the `task` callbacks. Invoked + * with (err, result). + * @example + * async.series([ + * function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }, + * function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * } + * ], + * // optional callback + * function(err, results) { + * // results is now equal to ['one', 'two'] + * }); + * + * async.series({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback){ + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * // results is now equal to: {one: 1, two: 2} + * }); + */ +function series(tasks, callback) { + (0, _parallel2.default)(_eachOfSeries2.default, tasks, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/setImmediate.js b/node_modules/watchpack/node_modules/async/setImmediate.js new file mode 100644 index 000000000..23d48e288 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/setImmediate.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `setImmediate`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name setImmediate + * @static + * @memberOf module:Utils + * @method + * @alias nextTick + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +exports.default = _setImmediate2.default; +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/some.js b/node_modules/watchpack/node_modules/async/some.js new file mode 100644 index 000000000..a8e70f714 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/some.js @@ -0,0 +1,52 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +var _identity = require('lodash/identity'); + +var _identity2 = _interopRequireDefault(_identity); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @example + * + * async.some(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then at least one of the files exists + * }); + */ +exports.default = (0, _doParallel2.default)((0, _createTester2.default)(Boolean, _identity2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/someLimit.js b/node_modules/watchpack/node_modules/async/someLimit.js new file mode 100644 index 000000000..24ca3f491 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/someLimit.js @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +var _identity = require('lodash/identity'); + +var _identity2 = _interopRequireDefault(_identity); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +exports.default = (0, _doParallelLimit2.default)((0, _createTester2.default)(Boolean, _identity2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/someSeries.js b/node_modules/watchpack/node_modules/async/someSeries.js new file mode 100644 index 000000000..dc24ed254 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/someSeries.js @@ -0,0 +1,38 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _someLimit = require('./someLimit'); + +var _someLimit2 = _interopRequireDefault(_someLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. + * + * @name someSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anySeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in series. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +exports.default = (0, _doLimit2.default)(_someLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/sortBy.js b/node_modules/watchpack/node_modules/async/sortBy.js new file mode 100644 index 000000000..ee5e93dc0 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/sortBy.js @@ -0,0 +1,91 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = sortBy; + +var _arrayMap = require('lodash/_arrayMap'); + +var _arrayMap2 = _interopRequireDefault(_arrayMap); + +var _baseProperty = require('lodash/_baseProperty'); + +var _baseProperty2 = _interopRequireDefault(_baseProperty); + +var _map = require('./map'); + +var _map2 = _interopRequireDefault(_map); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Sorts a list by the results of running each `coll` value through an async + * `iteratee`. + * + * @name sortBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a value to use as the sort criteria as + * its `result`. + * Invoked with (item, callback). + * @param {Function} callback - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is the items + * from the original `coll` sorted by the values returned by the `iteratee` + * calls. Invoked with (err, results). + * @example + * + * async.sortBy(['file1','file2','file3'], function(file, callback) { + * fs.stat(file, function(err, stats) { + * callback(err, stats.mtime); + * }); + * }, function(err, results) { + * // results is now the original array of files sorted by + * // modified date + * }); + * + * // By modifying the callback parameter the + * // sorting order can be influenced: + * + * // ascending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x); + * }, function(err,result) { + * // result callback + * }); + * + * // descending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x*-1); //<- x*-1 instead of x, turns the order around + * }, function(err,result) { + * // result callback + * }); + */ +function sortBy(coll, iteratee, callback) { + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _map2.default)(coll, function (x, callback) { + _iteratee(x, function (err, criteria) { + if (err) return callback(err); + callback(null, { value: x, criteria: criteria }); + }); + }, function (err, results) { + if (err) return callback(err); + callback(null, (0, _arrayMap2.default)(results.sort(comparator), (0, _baseProperty2.default)('value'))); + }); + + function comparator(left, right) { + var a = left.criteria, + b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/timeout.js b/node_modules/watchpack/node_modules/async/timeout.js new file mode 100644 index 000000000..b5cb505eb --- /dev/null +++ b/node_modules/watchpack/node_modules/async/timeout.js @@ -0,0 +1,89 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = timeout; + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Sets a time limit on an asynchronous function. If the function does not call + * its callback within the specified milliseconds, it will be called with a + * timeout error. The code property for the error object will be `'ETIMEDOUT'`. + * + * @name timeout + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} asyncFn - The async function to limit in time. + * @param {number} milliseconds - The specified time limit. + * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) + * to timeout Error for more information.. + * @returns {AsyncFunction} Returns a wrapped function that can be used with any + * of the control flow functions. + * Invoke this function with the same parameters as you would `asyncFunc`. + * @example + * + * function myFunction(foo, callback) { + * doAsyncTask(foo, function(err, data) { + * // handle errors + * if (err) return callback(err); + * + * // do some stuff ... + * + * // return processed data + * return callback(null, data); + * }); + * } + * + * var wrapped = async.timeout(myFunction, 1000); + * + * // call `wrapped` as you would `myFunction` + * wrapped({ bar: 'bar' }, function(err, data) { + * // if `myFunction` takes < 1000 ms to execute, `err` + * // and `data` will have their expected values + * + * // else `err` will be an Error with the code 'ETIMEDOUT' + * }); + */ +function timeout(asyncFn, milliseconds, info) { + var fn = (0, _wrapAsync2.default)(asyncFn); + + return (0, _initialParams2.default)(function (args, callback) { + var timedOut = false; + var timer; + + function timeoutCallback() { + var name = asyncFn.name || 'anonymous'; + var error = new Error('Callback function "' + name + '" timed out.'); + error.code = 'ETIMEDOUT'; + if (info) { + error.info = info; + } + timedOut = true; + callback(error); + } + + args.push(function () { + if (!timedOut) { + callback.apply(null, arguments); + clearTimeout(timer); + } + }); + + // setup timer and call original function + timer = setTimeout(timeoutCallback, milliseconds); + fn.apply(null, args); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/times.js b/node_modules/watchpack/node_modules/async/times.js new file mode 100644 index 000000000..b5ca24dff --- /dev/null +++ b/node_modules/watchpack/node_modules/async/times.js @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _timesLimit = require('./timesLimit'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls the `iteratee` function `n` times, and accumulates results in the same + * manner you would use with [map]{@link module:Collections.map}. + * + * @name times + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.map]{@link module:Collections.map} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @example + * + * // Pretend this is some complicated async factory + * var createUser = function(id, callback) { + * callback(null, { + * id: 'user' + id + * }); + * }; + * + * // generate 5 users + * async.times(5, function(n, next) { + * createUser(n, function(err, user) { + * next(err, user); + * }); + * }, function(err, users) { + * // we should now have 5 users + * }); + */ +exports.default = (0, _doLimit2.default)(_timesLimit2.default, Infinity); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/timesLimit.js b/node_modules/watchpack/node_modules/async/timesLimit.js new file mode 100644 index 000000000..aad84955c --- /dev/null +++ b/node_modules/watchpack/node_modules/async/timesLimit.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = timeLimit; + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _baseRange = require('lodash/_baseRange'); + +var _baseRange2 = _interopRequireDefault(_baseRange); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a + * time. + * + * @name timesLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} count - The number of times to run the function. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see [async.map]{@link module:Collections.map}. + */ +function timeLimit(count, limit, iteratee, callback) { + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _mapLimit2.default)((0, _baseRange2.default)(0, count, 1), limit, _iteratee, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/timesSeries.js b/node_modules/watchpack/node_modules/async/timesSeries.js new file mode 100644 index 000000000..f187a35b2 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/timesSeries.js @@ -0,0 +1,32 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _timesLimit = require('./timesLimit'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time. + * + * @name timesSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + */ +exports.default = (0, _doLimit2.default)(_timesLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/transform.js b/node_modules/watchpack/node_modules/async/transform.js new file mode 100644 index 000000000..84ee217e8 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/transform.js @@ -0,0 +1,87 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = transform; + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _eachOf = require('./eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A relative of `reduce`. Takes an Object or Array, and iterates over each + * element in series, each step potentially mutating an `accumulator` value. + * The type of the accumulator defaults to the type of collection passed in. + * + * @name transform + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {*} [accumulator] - The initial state of the transform. If omitted, + * it will default to an empty Object or Array, depending on the type of `coll` + * @param {AsyncFunction} iteratee - A function applied to each item in the + * collection that potentially modifies the accumulator. + * Invoked with (accumulator, item, key, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the transformed accumulator. + * Invoked with (err, result). + * @example + * + * async.transform([1,2,3], function(acc, item, index, callback) { + * // pointless async: + * process.nextTick(function() { + * acc.push(item * 2) + * callback(null) + * }); + * }, function(err, result) { + * // result is now equal to [2, 4, 6] + * }); + * + * @example + * + * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) { + * setImmediate(function () { + * obj[key] = val * 2; + * callback(); + * }) + * }, function (err, result) { + * // result is equal to {a: 2, b: 4, c: 6} + * }) + */ +function transform(coll, accumulator, iteratee, callback) { + if (arguments.length <= 3) { + callback = iteratee; + iteratee = accumulator; + accumulator = (0, _isArray2.default)(coll) ? [] : {}; + } + callback = (0, _once2.default)(callback || _noop2.default); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + + (0, _eachOf2.default)(coll, function (v, k, cb) { + _iteratee(accumulator, v, k, cb); + }, function (err) { + callback(err, accumulator); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/tryEach.js b/node_modules/watchpack/node_modules/async/tryEach.js new file mode 100644 index 000000000..35cd00324 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/tryEach.js @@ -0,0 +1,81 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = tryEach; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _eachSeries = require('./eachSeries'); + +var _eachSeries2 = _interopRequireDefault(_eachSeries); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * It runs each task in series but stops whenever any of the functions were + * successful. If one of the tasks were successful, the `callback` will be + * passed the result of the successful task. If all tasks fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name tryEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing functions to + * run, each function is passed a `callback(err, result)` it must call on + * completion with an error `err` (which can be `null`) and an optional `result` + * value. + * @param {Function} [callback] - An optional callback which is called when one + * of the tasks has succeeded, or all have failed. It receives the `err` and + * `result` arguments of the last attempt at completing the `task`. Invoked with + * (err, results). + * @example + * async.try([ + * function getDataFromFirstWebsite(callback) { + * // Try getting the data from the first website + * callback(err, data); + * }, + * function getDataFromSecondWebsite(callback) { + * // First website failed, + * // Try getting the data from the backup website + * callback(err, data); + * } + * ], + * // optional callback + * function(err, results) { + * Now do something with the data. + * }); + * + */ +function tryEach(tasks, callback) { + var error = null; + var result; + callback = callback || _noop2.default; + (0, _eachSeries2.default)(tasks, function (task, callback) { + (0, _wrapAsync2.default)(task)(function (err, res /*, ...args*/) { + if (arguments.length > 2) { + result = (0, _slice2.default)(arguments, 1); + } else { + result = res; + } + error = err; + callback(!err); + }); + }, function () { + callback(error, result); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/unmemoize.js b/node_modules/watchpack/node_modules/async/unmemoize.js new file mode 100644 index 000000000..08f9f9fb3 --- /dev/null +++ b/node_modules/watchpack/node_modules/async/unmemoize.js @@ -0,0 +1,25 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = unmemoize; +/** + * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original, + * unmemoized form. Handy for testing. + * + * @name unmemoize + * @static + * @memberOf module:Utils + * @method + * @see [async.memoize]{@link module:Utils.memoize} + * @category Util + * @param {AsyncFunction} fn - the memoized function + * @returns {AsyncFunction} a function that calls the original unmemoized function + */ +function unmemoize(fn) { + return function () { + return (fn.unmemoized || fn).apply(null, arguments); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/until.js b/node_modules/watchpack/node_modules/async/until.js new file mode 100644 index 000000000..29955ab1b --- /dev/null +++ b/node_modules/watchpack/node_modules/async/until.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = until; + +var _whilst = require('./whilst'); + +var _whilst2 = _interopRequireDefault(_whilst); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. `callback` will be passed an error and any + * arguments passed to the final `iteratee`'s callback. + * + * The inverse of [whilst]{@link module:ControlFlow.whilst}. + * + * @name until + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function until(test, iteratee, callback) { + (0, _whilst2.default)(function () { + return !test.apply(this, arguments); + }, iteratee, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/waterfall.js b/node_modules/watchpack/node_modules/async/waterfall.js new file mode 100644 index 000000000..d547d6b1e --- /dev/null +++ b/node_modules/watchpack/node_modules/async/waterfall.js @@ -0,0 +1,113 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (tasks, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + if (!(0, _isArray2.default)(tasks)) return callback(new Error('First argument to waterfall must be an array of functions')); + if (!tasks.length) return callback(); + var taskIndex = 0; + + function nextTask(args) { + var task = (0, _wrapAsync2.default)(tasks[taskIndex++]); + args.push((0, _onlyOnce2.default)(next)); + task.apply(null, args); + } + + function next(err /*, ...args*/) { + if (err || taskIndex === tasks.length) { + return callback.apply(null, arguments); + } + nextTask((0, _slice2.default)(arguments, 1)); + } + + nextTask([]); +}; + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * Runs the `tasks` array of functions in series, each passing their results to + * the next in the array. However, if any of the `tasks` pass an error to their + * own callback, the next function is not executed, and the main `callback` is + * immediately called with the error. + * + * @name waterfall + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array of [async functions]{@link AsyncFunction} + * to run. + * Each function should complete with any number of `result` values. + * The `result` values will be passed as arguments, in order, to the next task. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This will be passed the results of the last task's + * callback. Invoked with (err, [results]). + * @returns undefined + * @example + * + * async.waterfall([ + * function(callback) { + * callback(null, 'one', 'two'); + * }, + * function(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * }, + * function(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + * ], function (err, result) { + * // result now equals 'done' + * }); + * + * // Or, with named functions: + * async.waterfall([ + * myFirstFunction, + * mySecondFunction, + * myLastFunction, + * ], function (err, result) { + * // result now equals 'done' + * }); + * function myFirstFunction(callback) { + * callback(null, 'one', 'two'); + * } + * function mySecondFunction(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * } + * function myLastFunction(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + */ \ No newline at end of file diff --git a/node_modules/watchpack/node_modules/async/whilst.js b/node_modules/watchpack/node_modules/async/whilst.js new file mode 100644 index 000000000..9c4d8f6ca --- /dev/null +++ b/node_modules/watchpack/node_modules/async/whilst.js @@ -0,0 +1,72 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = whilst; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. + * + * @name whilst + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns undefined + * @example + * + * var count = 0; + * async.whilst( + * function() { return count < 5; }, + * function(callback) { + * count++; + * setTimeout(function() { + * callback(null, count); + * }, 1000); + * }, + * function (err, n) { + * // 5 seconds have passed, n = 5 + * } + * ); + */ +function whilst(test, iteratee, callback) { + callback = (0, _onlyOnce2.default)(callback || _noop2.default); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + if (!test()) return callback(null); + var next = function (err /*, ...args*/) { + if (err) return callback(err); + if (test()) return _iteratee(next); + var args = (0, _slice2.default)(arguments, 1); + callback.apply(null, [null].concat(args)); + }; + _iteratee(next); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/watchpack/package.json b/node_modules/watchpack/package.json new file mode 100644 index 000000000..959c8800e --- /dev/null +++ b/node_modules/watchpack/package.json @@ -0,0 +1,73 @@ +{ + "_from": "watchpack@^1.4.0", + "_id": "watchpack@1.4.0", + "_inBundle": false, + "_integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "_location": "/watchpack", + "_phantomChildren": { + "lodash": "4.17.4" + }, + "_requested": { + "type": "range", + "registry": true, + "raw": "watchpack@^1.4.0", + "name": "watchpack", + "escapedName": "watchpack", + "rawSpec": "^1.4.0", + "saveSpec": null, + "fetchSpec": "^1.4.0" + }, + "_requiredBy": [ + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "_shasum": "4a1472bcbb952bd0a9bb4036801f954dfb39faac", + "_spec": "watchpack@^1.4.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack", + "author": { + "name": "Tobias Koppers @sokra" + }, + "bugs": { + "url": "https://github.com/webpack/watchpack/issues" + }, + "bundleDependencies": false, + "dependencies": { + "async": "^2.1.2", + "chokidar": "^1.7.0", + "graceful-fs": "^4.1.2" + }, + "deprecated": false, + "description": "Wrapper library for directory and file watching.", + "devDependencies": { + "codecov.io": "^0.1.6", + "coveralls": "^2.11.2", + "eslint": "^2.9.0", + "istanbul": "^0.4.3", + "mocha": "^2.1.0", + "rimraf": "~2.5.0", + "should": "^8.3.1" + }, + "directories": { + "test": "test" + }, + "files": [ + "lib/" + ], + "homepage": "https://github.com/webpack/watchpack", + "license": "MIT", + "main": "./lib/watchpack.js", + "name": "watchpack", + "repository": { + "type": "git", + "url": "git+https://github.com/webpack/watchpack.git" + }, + "scripts": { + "cover": "istanbul cover node_modules/mocha/bin/_mocha", + "lint": "eslint lib", + "precover": "npm run lint", + "pretest": "npm run lint", + "test": "mocha", + "travis": "npm run cover -- --report lcovonly" + }, + "version": "1.4.0" +} diff --git a/node_modules/webpack-sources/README.md b/node_modules/webpack-sources/README.md new file mode 100644 index 000000000..c7a032d05 --- /dev/null +++ b/node_modules/webpack-sources/README.md @@ -0,0 +1,222 @@ +# webpack-sources + +Contains multiple classes which represent a `Source`. A `Source` can be asked for source code, size, source map and hash. + +## `Source` + +Base class for all sources. + +### Public methods + +All methods should be considered as expensive as they may need to do computations. + +#### `source` + +``` js +Source.prototype.source() -> String +``` + +Returns the represented source code as string. + +#### `size` + +``` js +Source.prototype.size() -> Number +``` + +Returns the size in chars of the represented source code. + +#### `map` + +``` js +Source.prototype.map(options: Object) -> Object | null +``` + +Returns the SourceMap of the represented source code as JSON. May return `null` if no SourceMap is available. + +The `options` object can contain the following keys: + +* `columns: Boolean` (default `true`): If set to false the implementation may omit mappings for columns. +* `module: Boolean` (default `true`): If set to false the implementation may omit inner mappings for modules. + +#### `sourceAndMap` + +``` js +Source.prototype.sourceAndMap(options: Object) -> { + code: String, + map: Object +} +``` + +Returns both, source code (like `Source.prototype.source()` and SourceMap (like `Source.prototype.map()`). This method could have better performance than calling `source()` and `map()` separatly. + +See `map()` for `options`. + +#### `updateHash` + +``` js +Source.prototype.updateHash(hash: Hash) -> void +``` + +Updates the provided `Hash` object with the content of the represented source code. (`Hash` is an object with an `update` method, which is called with string values) + +#### `node` (optional) + +``` js +Source.prototype.node(options: Object) -> SourceNode +``` + +This is an optional method. It may be `null` if not implemented. + +Returns a `SourceNode` (see source-map library) for the represented source code. + +See `map()` for `options`. + +#### `listNode` (optional) + +``` js +Source.prototype.listNode(options: Object) -> SourceNode +``` + +This is an optional method. It may be `null` if not implemented. + +Returns a `SourceListMap` (see source-list-map library) for the represented source code. + +See `map()` for `options`. + +## `RawSource` + +Represents source code without SourceMap. + +``` js +new RawSource(sourceCode: String) +``` + +## `OriginalSource` + +Represents source code, which is a copy of the original file. + +``` js +new OriginalSource( + sourceCode: String, + name: String +) +``` + +* `sourceCode`: The source code. +* `name`: The filename of the original source code. + +OriginalSource tries to create column mappings if requested, by splitting the source code at typical statement borders (`;`, `{`, `}`). + +## `SourceMapSource` + +Represents source code with SourceMap, optionally having an additional SourceMap for the original source. + +``` js +new SourceMapSource( + sourceCode: String, + name: String, + sourceMap: Object | String, + originalSource?: String, + innerSourceMap?: Object | String +) +``` + +* `sourceCode`: The source code. +* `name`: The filename of the original source code. +* `sourceMap`: The SourceMap for the source code. +* `originalSource`: The source code of the original file. Can be omitted if the `sourceMap` already contains the original source code. +* `innerSourceMap`: The SourceMap for the `originalSource`/`name`. + +## `LineToLineMappedSource` + +Represents source code, which is mapped line by line to the orginal file. + +``` js +new LineToLineMappedSource( + sourceCode: String, + name: String, + originalSource: String +) +``` + +* `sourceCode`: The source code. +* `name`: The filename of the original source code. +* `originalSource`: The original source code. + +## `CachedSource` + +Decorates a `Source` and caches returned results of `map`, `source`, `size` and `sourceAndMap` in memory. Every other operation is delegated to the wrapped `Source`. + +``` js +new CachedSource(source: Source) +``` + +## `PrefixSource` + +Prefix every line of the decorated `Source` with a provided string. + +``` js +new PrefixSource( + prefix: String, + source: Source +) +``` + +## `ConcatSource` + +Concatenate mulitple `Source`s or strings to a single source. + +``` js +new ConcatSource( + ...items?: Source | String +) +``` + +### Public methods + +#### `add` + +``` js +ConcatSource.prototype.add(item: Source | String) +``` + +Adds an item to the source. + +## `ReplaceSource` + +Decorates a `Source` with replacements and insertions of source code. + +### Public methods + +#### `replace` + +``` js +ReplaceSource.prototype.replace( + start: Number, + end: Number, + replacement: String +) +``` + +Replaces chars from `start` (0-indexed, inclusive) to `end` (0-indexed, inclusive) with `replacement`. + +Locations represents locations in the original source and are not influenced by other replacements or insertions. + +#### `insert` + +``` js +ReplaceSource.prototype.insert( + pos: Number, + insertion: String +) +``` + +Inserts the `insertion` before char `pos` (0-indexed). + +Location represents location in the original source and is not influenced by other replacements or insertions. + +#### `original` + +Get decorated `Source`. + diff --git a/node_modules/webpack-sources/lib/CachedSource.js b/node_modules/webpack-sources/lib/CachedSource.js new file mode 100644 index 000000000..940c4d9f3 --- /dev/null +++ b/node_modules/webpack-sources/lib/CachedSource.js @@ -0,0 +1,78 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +const Source = require("./Source"); + +class CachedSource extends Source { + constructor(source) { + super(); + this._source = source; + this._cachedSource = undefined; + this._cachedSize = undefined; + this._cachedMaps = {}; + + if(source.node) this.node = function(options) { + return this._source.node(options); + }; + + if(source.listMap) this.listMap = function(options) { + return this._source.listMap(options); + }; + } + + source() { + if(typeof this._cachedSource !== "undefined") return this._cachedSource; + return this._cachedSource = this._source.source(); + } + + size() { + if(typeof this._cachedSize !== "undefined") return this._cachedSize; + if(typeof this._cachedSource !== "undefined") + return this._cachedSize = this._cachedSource.length; + return this._cachedSize = this._source.size(); + } + + sourceAndMap(options) { + const key = JSON.stringify(options); + if(typeof this._cachedSource !== "undefined" && key in this._cachedMaps) + return { + source: this._cachedSource, + map: this._cachedMaps[key] + }; + else if(typeof this._cachedSource !== "undefined") { + return { + source: this._cachedSource, + map: this._cachedMaps[key] = this._source.map(options) + }; + } else if(key in this._cachedMaps) { + return { + source: this._cachedSource = this._source.source(), + map: this._cachedMaps[key] + }; + } + const result = this._source.sourceAndMap(options); + this._cachedSource = result.source; + this._cachedMaps[key] = result.map; + return { + source: this._cachedSource, + map: this._cachedMaps[key] + }; + } + + map(options) { + if(!options) options = {}; + const key = JSON.stringify(options); + if(key in this._cachedMaps) + return this._cachedMaps[key]; + return this._cachedMaps[key] = this._source.map(); + } + + updateHash(hash) { + this._source.updateHash(hash); + } +} + +module.exports = CachedSource; diff --git a/node_modules/webpack-sources/lib/ConcatSource.js b/node_modules/webpack-sources/lib/ConcatSource.js new file mode 100644 index 000000000..9e6d1f09b --- /dev/null +++ b/node_modules/webpack-sources/lib/ConcatSource.js @@ -0,0 +1,65 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +const SourceNode = require("source-map").SourceNode; +const SourceListMap = require("source-list-map").SourceListMap; +const Source = require("./Source"); + +class ConcatSource extends Source { + constructor() { + super(); + this.children = Array.prototype.slice.call(arguments); + } + + add(item) { + this.children.push(item); + } + + source() { + return this.children.map(function(item) { + return typeof item === "string" ? item : item.source(); + }).join(""); + } + + size() { + return this.children.map(function(item) { + return typeof item === "string" ? item.length : item.size(); + }).reduce(function(sum, s) { + return sum + s; + }, 0); + } + + node(options) { + const node = new SourceNode(null, null, null, this.children.map(function(item) { + return typeof item === "string" ? item : item.node(options); + })); + return node; + } + + listMap(options) { + const map = new SourceListMap(); + this.children.forEach(function(item) { + if(typeof item === "string") + map.add(item); + else + map.add(item.listMap(options)); + }); + return map; + } + + updateHash(hash) { + this.children.forEach(function(item) { + if(typeof item === "string") + hash.update(item); + else + item.updateHash(hash); + }); + } +} + +require("./SourceAndMapMixin")(ConcatSource.prototype); + +module.exports = ConcatSource; diff --git a/node_modules/webpack-sources/lib/LineToLineMappedSource.js b/node_modules/webpack-sources/lib/LineToLineMappedSource.js new file mode 100644 index 000000000..a1a17bb4a --- /dev/null +++ b/node_modules/webpack-sources/lib/LineToLineMappedSource.js @@ -0,0 +1,49 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +var SourceNode = require("source-map").SourceNode; +var SourceMapConsumer = require("source-map").SourceMapConsumer; +var SourceListMap = require("source-list-map").SourceListMap; +var Source = require("./Source"); + +class LineToLineMappedSource extends Source { + constructor(value, name, originalSource) { + super(); + this._value = value; + this._name = name; + this._originalSource = originalSource; + } + + source() { + return this._value; + } + + node(options) { + var value = this._value; + var name = this._name; + var lines = value.split("\n"); + var node = new SourceNode(null, null, null, + lines.map(function(line, idx) { + return new SourceNode(idx + 1, 0, name, (line + (idx != lines.length - 1 ? "\n" : ""))); + }) + ); + node.setSourceContent(name, this._originalSource); + return node; + } + + listMap(options) { + return new SourceListMap(this._value, this._name, this._originalSource) + } + + updateHash(hash) { + hash.update(this._value); + hash.update(this._originalSource); + } +} + +require("./SourceAndMapMixin")(LineToLineMappedSource.prototype); + +module.exports = LineToLineMappedSource; diff --git a/node_modules/webpack-sources/lib/OriginalSource.js b/node_modules/webpack-sources/lib/OriginalSource.js new file mode 100644 index 000000000..9635f3370 --- /dev/null +++ b/node_modules/webpack-sources/lib/OriginalSource.js @@ -0,0 +1,89 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +var SourceNode = require("source-map").SourceNode; +var SourceMapConsumer = require("source-map").SourceMapConsumer; +var SourceListMap = require("source-list-map").SourceListMap; +var Source = require("./Source"); + +function isSplitter(c) { + switch(c) { + case 10: // \n + case 13: // \r + case 59: // ; + case 123: // { + case 125: // } + return true; + } + return false; +} + +function _splitCode(code) { + var result = []; + var i = 0; + var j = 0; + for(; i < code.length; i++) { + if(isSplitter(code.charCodeAt(i))) { + while(isSplitter(code.charCodeAt(++i))); + result.push(code.substring(j, i)); + j = i; + } + } + if(j < code.length) + result.push(code.substr(j)); + return result; +} + +class OriginalSource extends Source { + constructor(value, name) { + super(); + this._value = value; + this._name = name; + } + + source() { + return this._value; + } + + node(options) { + options = options || {}; + var sourceMap = this._sourceMap; + var value = this._value; + var name = this._name; + var lines = value.split("\n"); + var node = new SourceNode(null, null, null, + lines.map(function(line, idx) { + var pos = 0; + if(options.columns === false) { + var content = line + (idx != lines.length - 1 ? "\n" : ""); + return new SourceNode(idx + 1, 0, name, content); + } + return new SourceNode(null, null, null, + _splitCode(line + (idx != lines.length - 1 ? "\n" : "")).map(function(item) { + if(/^\s*$/.test(item)) return item; + var res = new SourceNode(idx + 1, pos, name, item); + pos += item.length; + return res; + }) + ); + }) + ); + node.setSourceContent(name, value); + return node; + } + + listMap(options) { + return new SourceListMap(this._value, this._name, this._value) + } + + updateHash(hash) { + hash.update(this._value); + } +} + +require("./SourceAndMapMixin")(OriginalSource.prototype); + +module.exports = OriginalSource; diff --git a/node_modules/webpack-sources/lib/PrefixSource.js b/node_modules/webpack-sources/lib/PrefixSource.js new file mode 100644 index 000000000..972e45f98 --- /dev/null +++ b/node_modules/webpack-sources/lib/PrefixSource.js @@ -0,0 +1,76 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +var Source = require("./Source"); +var SourceNode = require("source-map").SourceNode; + +var REPLACE_REGEX = /\n(?=.|\s)/g; + +function cloneAndPrefix(node, prefix, append) { + if(typeof node === "string") { + var result = node.replace(REPLACE_REGEX, "\n" + prefix); + if(append.length > 0) result = append.pop() + result; + if(/\n$/.test(node)) append.push(prefix); + return result; + } else { + var newNode = new SourceNode( + node.line, + node.column, + node.source, + node.children.map(function(node) { + return cloneAndPrefix(node, prefix, append); + }), + node.name + ); + newNode.sourceContents = node.sourceContents; + return newNode; + } +}; + +class PrefixSource extends Source { + constructor(prefix, source) { + super(); + this._source = source; + this._prefix = prefix; + } + + source() { + var node = typeof this._source === "string" ? this._source : this._source.source(); + var prefix = this._prefix; + return prefix + node.replace(REPLACE_REGEX, "\n" + prefix); + } + + node(options) { + var node = this._source.node(options); + var append = [this._prefix]; + return new SourceNode(null, null, null, [ + cloneAndPrefix(node, this._prefix, append) + ]); + } + + listMap(options) { + var prefix = this._prefix; + var map = this._source.listMap(options); + return map.mapGeneratedCode(function(code) { + return prefix + code.replace(REPLACE_REGEX, "\n" + prefix); + }); + } + + updateHash(hash) { + if(typeof this._source === "string") + hash.update(this._source); + else + this._source.updateHash(hash); + if(typeof this._prefix === "string") + hash.update(this._prefix); + else + this._prefix.updateHash(hash); + } +} + +require("./SourceAndMapMixin")(PrefixSource.prototype); + +module.exports = PrefixSource; diff --git a/node_modules/webpack-sources/lib/RawSource.js b/node_modules/webpack-sources/lib/RawSource.js new file mode 100644 index 000000000..c09b1cd9f --- /dev/null +++ b/node_modules/webpack-sources/lib/RawSource.js @@ -0,0 +1,38 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +var Source = require("./Source"); +var SourceNode = require("source-map").SourceNode; +var SourceListMap = require("source-list-map").SourceListMap; + +class RawSource extends Source { + constructor(value) { + super(); + this._value = value; + } + + source() { + return this._value; + } + + map(options) { + return null; + } + + node(options) { + return new SourceNode(null, null, null, this._value); + } + + listMap(options) { + return new SourceListMap(this._value); + } + + updateHash(hash) { + hash.update(this._value); + } +} + +module.exports = RawSource; diff --git a/node_modules/webpack-sources/lib/ReplaceSource.js b/node_modules/webpack-sources/lib/ReplaceSource.js new file mode 100644 index 000000000..c7999b84f --- /dev/null +++ b/node_modules/webpack-sources/lib/ReplaceSource.js @@ -0,0 +1,198 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +var Source = require("./Source"); +var SourceNode = require("source-map").SourceNode; +var SourceListMap = require("source-list-map").SourceListMap; +var fromStringWithSourceMap = require("source-list-map").fromStringWithSourceMap; +var SourceMapConsumer = require("source-map").SourceMapConsumer; + +class ReplaceSource extends Source { + constructor(source, name) { + super(); + this._source = source; + this._name = name; + this.replacements = []; + } + + replace(start, end, newValue) { + if(typeof newValue !== "string") + throw new Error("insertion must be a string, but is a " + typeof newValue); + this.replacements.push([start, end, newValue, this.replacements.length]); + } + + insert(pos, newValue) { + if(typeof newValue !== "string") + throw new Error("insertion must be a string, but is a " + typeof newValue + ": " + newValue); + this.replacements.push([pos, pos - 1, newValue, this.replacements.length]); + } + + source(options) { + return this._replaceString(this._source.source()); + } + + original() { + return this._source; + } + + _sortReplacements() { + this.replacements.sort(function(a, b) { + var diff = b[1] - a[1]; + if(diff !== 0) + return diff; + diff = b[0] - a[0]; + if(diff !== 0) + return diff; + return b[3] - a[3]; + }); + } + + _replaceString(str) { + if(typeof str !== "string") + throw new Error("str must be a string, but is a " + typeof str + ": " + str); + this._sortReplacements(); + var result = [str]; + this.replacements.forEach(function(repl) { + var remSource = result.pop(); + var splitted1 = this._splitString(remSource, Math.floor(repl[1] + 1)); + var splitted2 = this._splitString(splitted1[0], Math.floor(repl[0])); + result.push(splitted1[1], repl[2], splitted2[0]); + }, this); + result = result.reverse(); + return result.join(""); + } + + node(options) { + this._sortReplacements(); + var result = [this._source.node(options)]; + this.replacements.forEach(function(repl) { + var remSource = result.pop(); + var splitted1 = this._splitSourceNode(remSource, Math.floor(repl[1] + 1)); + var splitted2; + if(Array.isArray(splitted1)) { + splitted2 = this._splitSourceNode(splitted1[0], Math.floor(repl[0])); + if(Array.isArray(splitted2)) { + result.push(splitted1[1], this._replacementToSourceNode(splitted2[1], repl[2]), splitted2[0]); + } else { + result.push(splitted1[1], this._replacementToSourceNode(splitted1[1], repl[2]), splitted1[0]); + } + } else { + splitted2 = this._splitSourceNode(remSource, Math.floor(repl[0])); + if(Array.isArray(splitted2)) { + result.push(this._replacementToSourceNode(splitted2[1], repl[2]), splitted2[0]); + } else { + result.push(repl[2], remSource); + } + } + }, this); + result = result.reverse(); + return new SourceNode(null, null, null, result); + } + + listMap(options) { + this._sortReplacements(); + var map = this._source.listMap(options); + var currentIndex = 0; + var replacements = this.replacements; + var idxReplacement = replacements.length - 1; + var removeChars = 0; + map = map.mapGeneratedCode(function(str) { + var newCurrentIndex = currentIndex + str.length; + if(removeChars > str.length) { + removeChars -= str.length; + str = ""; + } else { + if(removeChars > 0) { + str = str.substr(removeChars); + currentIndex += removeChars; + removeChars = 0; + } + var finalStr = ""; + while(idxReplacement >= 0 && replacements[idxReplacement][0] < newCurrentIndex) { + var repl = replacements[idxReplacement]; + var start = Math.floor(repl[0]); + var end = Math.floor(repl[1] + 1); + var before = str.substr(0, Math.max(0, start - currentIndex)); + if(end <= newCurrentIndex) { + var after = str.substr(Math.max(0, end - currentIndex)); + finalStr += before + repl[2]; + str = after; + currentIndex = Math.max(currentIndex, end); + } else { + finalStr += before + repl[2]; + str = ""; + removeChars = end - newCurrentIndex; + } + idxReplacement--; + } + str = finalStr + str; + } + currentIndex = newCurrentIndex; + return str; + }); + var extraCode = ""; + while(idxReplacement >= 0) { + extraCode += replacements[idxReplacement][2]; + idxReplacement--; + } + if(extraCode) { + map.add(extraCode); + } + return map; + } + + _replacementToSourceNode(oldNode, newString) { + var map = oldNode.toStringWithSourceMap({ + file: "?" + }).map; + var original = new SourceMapConsumer(map.toJSON()).originalPositionFor({ + line: 1, + column: 0 + }); + if(original) { + return new SourceNode(original.line, original.column, original.source, newString); + } else { + return newString; + } + } + + _splitSourceNode(node, position) { + if(typeof node === "string") { + if(node.length <= position) return position - node.length; + return position <= 0 ? ["", node] : [node.substr(0, position), node.substr(position)]; + } else { + for(var i = 0; i < node.children.length; i++) { + position = this._splitSourceNode(node.children[i], position); + if(Array.isArray(position)) { + var leftNode = new SourceNode( + node.line, + node.column, + node.source, + node.children.slice(0, i).concat([position[0]]), + node.name + ); + var rightNode = new SourceNode( + node.line, + node.column, + node.source, [position[1]].concat(node.children.slice(i + 1)), + node.name + ); + leftNode.sourceContents = node.sourceContents; + return [leftNode, rightNode]; + } + } + return position; + } + } + + _splitString(str, position) { + return position <= 0 ? ["", str] : [str.substr(0, position), str.substr(position)]; + } +} + +require("./SourceAndMapMixin")(ReplaceSource.prototype); + +module.exports = ReplaceSource; diff --git a/node_modules/webpack-sources/lib/Source.js b/node_modules/webpack-sources/lib/Source.js new file mode 100644 index 000000000..dccf73781 --- /dev/null +++ b/node_modules/webpack-sources/lib/Source.js @@ -0,0 +1,45 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +var SourceNode = require("source-map").SourceNode; +var SourceMapConsumer = require("source-map").SourceMapConsumer; + +class Source { + + source() { + throw new Error("Abstract"); + } + + size() { + return this.source().length; + } + + map(options) { + return null; + } + + sourceAndMap(options) { + return { + source: this.source(), + map: this.map() + }; + } + + node() { + throw new Error("Abstract"); + } + + listNode() { + throw new Error("Abstract"); + } + + updateHash(hash) { + var source = this.source(); + hash.update(source || ""); + } +} + +module.exports = Source; diff --git a/node_modules/webpack-sources/lib/SourceAndMapMixin.js b/node_modules/webpack-sources/lib/SourceAndMapMixin.js new file mode 100644 index 000000000..d0898274f --- /dev/null +++ b/node_modules/webpack-sources/lib/SourceAndMapMixin.js @@ -0,0 +1,38 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +module.exports = function mixinSourceAndMap(proto) { + proto.map = function(options) { + options = options || {}; + if(options.columns === false) { + return this.listMap(options).toStringWithSourceMap({ + file: "x" + }).map; + } + + return this.node(options).toStringWithSourceMap({ + file: "x" + }).map.toJSON(); + }; + + proto.sourceAndMap = function(options) { + options = options || {}; + if(options.columns === false) { + //console.log(this.listMap(options).debugInfo()); + return this.listMap(options).toStringWithSourceMap({ + file: "x" + }); + } + + var res = this.node(options).toStringWithSourceMap({ + file: "x" + }); + return { + source: res.code, + map: res.map.toJSON() + }; + }; +} diff --git a/node_modules/webpack-sources/lib/SourceMapSource.js b/node_modules/webpack-sources/lib/SourceMapSource.js new file mode 100644 index 000000000..d61bda154 --- /dev/null +++ b/node_modules/webpack-sources/lib/SourceMapSource.js @@ -0,0 +1,58 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +var SourceNode = require("source-map").SourceNode; +var SourceMapConsumer = require("source-map").SourceMapConsumer; +var SourceMapGenerator = require("source-map").SourceMapGenerator; +var SourceListMap = require("source-list-map").SourceListMap; +var fromStringWithSourceMap = require("source-list-map").fromStringWithSourceMap; +var Source = require("./Source"); + +class SourceMapSource extends Source { + constructor(value, name, sourceMap, originalSource, innerSourceMap) { + super(); + this._value = value; + this._name = name; + this._sourceMap = sourceMap; + this._originalSource = originalSource; + this._innerSourceMap = innerSourceMap; + } + + source() { + return this._value; + } + + node(options) { + var innerSourceMap = this._innerSourceMap; + var sourceMap = this._sourceMap; + if(innerSourceMap) { + sourceMap = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(sourceMap)); + if(this._originalSource) + sourceMap.setSourceContent(this._name, this._originalSource); + innerSourceMap = new SourceMapConsumer(innerSourceMap); + sourceMap.applySourceMap(innerSourceMap, this._name); + sourceMap = sourceMap.toJSON(); + } + return SourceNode.fromStringWithSourceMap(this._value, new SourceMapConsumer(sourceMap)); + } + + listMap(options) { + options = options || {}; + if(options.module === false) + return new SourceListMap(this._value, this._name, this._value); + return fromStringWithSourceMap(this._value, typeof this._sourceMap === "string" ? JSON.parse(this._sourceMap) : this._sourceMap); + } + + updateHash(hash) { + hash.update(this._value); + if(this._originalSource) + hash.update(this._originalSource); + } +} + +require("./SourceAndMapMixin")(SourceMapSource.prototype); + +module.exports = SourceMapSource; diff --git a/node_modules/webpack-sources/lib/index.js b/node_modules/webpack-sources/lib/index.js new file mode 100644 index 000000000..f404c29d8 --- /dev/null +++ b/node_modules/webpack-sources/lib/index.js @@ -0,0 +1,15 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +exports.Source = require("./Source"); + +exports.RawSource = require("./RawSource"); +exports.OriginalSource = require("./OriginalSource"); +exports.SourceMapSource = require("./SourceMapSource"); +exports.LineToLineMappedSource = require("./LineToLineMappedSource"); + +exports.CachedSource = require("./CachedSource"); +exports.ConcatSource = require("./ConcatSource"); +exports.ReplaceSource = require("./ReplaceSource"); +exports.PrefixSource = require("./PrefixSource"); diff --git a/node_modules/webpack-sources/package.json b/node_modules/webpack-sources/package.json new file mode 100644 index 000000000..f78bc28a9 --- /dev/null +++ b/node_modules/webpack-sources/package.json @@ -0,0 +1,77 @@ +{ + "_from": "webpack-sources@^1.0.1", + "_id": "webpack-sources@1.0.1", + "_inBundle": false, + "_integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", + "_location": "/webpack-sources", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "webpack-sources@^1.0.1", + "name": "webpack-sources", + "escapedName": "webpack-sources", + "rawSpec": "^1.0.1", + "saveSpec": null, + "fetchSpec": "^1.0.1" + }, + "_requiredBy": [ + "/uglifyjs-webpack-plugin", + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", + "_shasum": "c7356436a4d13123be2e2426a05d1dad9cbe65cf", + "_spec": "webpack-sources@^1.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack", + "author": { + "name": "Tobias Koppers @sokra" + }, + "bugs": { + "url": "https://github.com/webpack/webpack-sources/issues" + }, + "bundleDependencies": false, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.5.3" + }, + "deprecated": false, + "description": "Source code handling classes for webpack", + "devDependencies": { + "beautify-lint": "^1.0.3", + "codecov.io": "^0.1.6", + "coveralls": "^2.11.6", + "eslint": "^3.19.0", + "eslint-plugin-nodeca": "^1.0.3", + "istanbul": "^0.4.1", + "js-beautify": "^1.5.10", + "mocha": "^3.4.2", + "should": "^11.2.1" + }, + "files": [ + "lib/" + ], + "homepage": "https://github.com/webpack/webpack-sources#readme", + "keywords": [ + "webpack", + "source-map" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "webpack-sources", + "repository": { + "type": "git", + "url": "git+https://github.com/webpack/webpack-sources.git" + }, + "scripts": { + "beautify": "beautify-rewrite lib/**.js test/**.js", + "beautify-lint": "beautify-lint lib/**.js test/**.js", + "cover": "istanbul cover node_modules/mocha/bin/_mocha", + "lint": "eslint lib test", + "precover": "npm run lint && npm run beautify-lint", + "pretest": "npm run lint && npm run beautify-lint", + "publish-patch": "npm test && npm version patch && git push && git push --tags && npm publish", + "test": "mocha --full-trace --check-leaks", + "travis": "npm run cover -- --report lcovonly" + }, + "version": "1.0.1" +} diff --git a/node_modules/webpack/LICENSE b/node_modules/webpack/LICENSE new file mode 100644 index 000000000..8c11fc728 --- /dev/null +++ b/node_modules/webpack/LICENSE @@ -0,0 +1,20 @@ +Copyright JS Foundation and other 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/node_modules/webpack/README.md b/node_modules/webpack/README.md new file mode 100644 index 000000000..c228978e4 --- /dev/null +++ b/node_modules/webpack/README.md @@ -0,0 +1,567 @@ +
+ + + +
+
+ +[![npm][npm]][npm-url] + +[![node][node]][node-url] +[![deps][deps]][deps-url] +[![tests][tests]][tests-url] +[![builds][builds]][builds-url] +[![coverage][cover]][cover-url] +[![licenses][licenses]][licenses-url] + +
+ + + + + + + + + + + + +

webpack

+

+ webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset. +

+

+ +

Install

+ +Install with npm: + +```bash +npm install --save-dev webpack +``` + +Install with yarn: + +```bash +yarn add webpack --dev +``` + +

Introduction

+ +> This README reflects Webpack v2.x and v3.x. The Webpack v1.x [documentation can be found here](https://webpack.github.io/docs/?utm_source=github&utm_medium=readme&utm_campaign=top). + +webpack is a bundler for modules. The main purpose is to bundle JavaScript +files for usage in a browser, yet it is also capable of transforming, bundling, +or packaging just about any resource or asset. + +**TL;DR** + +* Bundles [ES Modules](http://www.2ality.com/2014/09/es6-modules-final.html), [CommonJS](http://wiki.commonjs.org/) and [AMD](https://github.com/amdjs/amdjs-api/wiki/AMD) modules (even combined). +* Can create a single bundle or multiple chunks that are asynchronously loaded at runtime (to reduce initial loading time). +* Dependencies are resolved during compilation, reducing the runtime size. +* Loaders can preprocess files while compiling, e.g. TypeScript to JavaScript, Handlebars strings to compiled functions, images to Base64, etc. +* Highly modular plugin system to do whatever else your application requires. + +### Get Started + +Check out webpack's quick [**Get Started**](https://webpack.js.org/get-started/) guide and the [other guides](https://webpack.js.org/guides/). + +

Concepts

+ +### [Plugins](https://webpack.js.org/plugins/) + +webpack has a [rich plugin +interface](https://webpack.js.org/plugins/). Most of the features +within webpack itself use this plugin interface. This makes webpack very +**flexible**. + +|Name|Status|Description| +|:--:|:----:|:----------| +|[common-chunks-webpack-plugin][common]|![common-npm]|Generates chunks of common modules shared between entry points and splits them into separate bundles (e.g vendor.bundle.js && app.bundle.js)| +|[extract-text-webpack-plugin][extract]|![extract-npm]|Extracts Text (CSS) from your bundles into a separate file (app.bundle.css)| +|[compression-webpack-plugin][compression]|![compression-npm]|Prepare compressed versions of assets to serve them with Content-Encoding| +|[i18n-webpack-plugin][i18n]|![i18n-npm]|Adds i18n support to your bundles| +|[html-webpack-plugin][html-plugin]|![html-plugin-npm]| Simplifies creation of HTML files (`index.html`) to serve your bundles| + + +[common]: https://github.com/webpack/webpack/blob/master/lib/optimize/CommonsChunkPlugin.js +[common-npm]: https://img.shields.io/npm/v/webpack.svg +[extract]: https://github.com/webpack/extract-text-webpack-plugin +[extract-npm]: https://img.shields.io/npm/v/extract-text-webpack-plugin.svg +[component]: https://github.com/webpack/component-webpack-plugin +[component-npm]: https://img.shields.io/npm/v/component-webpack-plugin.svg +[compression]: https://github.com/webpack/compression-webpack-plugin +[compression-npm]: https://img.shields.io/npm/v/compression-webpack-plugin.svg +[i18n]: https://github.com/webpack/i18n-webpack-plugin +[i18n-npm]: https://img.shields.io/npm/v/i18n-webpack-plugin.svg +[html-plugin]: https://github.com/ampedandwired/html-webpack-plugin +[html-plugin-npm]: https://img.shields.io/npm/v/html-webpack-plugin.svg + +### [Loaders](https://webpack.js.org/loaders/) + +webpack enables use of loaders to preprocess files. This allows you to bundle +**any static resource** way beyond JavaScript. You can easily [write your own +loaders](https://webpack.js.org/api/loaders/) using Node.js. + +Loaders are activated by using `loadername!` prefixes in `require()` statements, +or are automatically applied via regex from your webpack configuration. + +#### Files + +|Name|Status|Description| +|:--:|:----:|:----------| +|[raw-loader][raw]|![raw-npm]|Loads raw content of a file (utf-8)| +|[val-loader][val]|![val-npm]|Executes code as module and consider exports as JS code| +|[url-loader][url]|![url-npm]|Works like the file loader, but can return a Data Url if the file is smaller than a limit| +|[file-loader][file]|![file-npm]|Emits the file into the output folder and returns the (relative) url| + + +[raw]: https://github.com/webpack/raw-loader +[raw-npm]: https://img.shields.io/npm/v/raw-loader.svg +[val]: https://github.com/webpack/val-loader +[val-npm]: https://img.shields.io/npm/v/val-loader.svg +[url]: https://github.com/webpack/url-loader +[url-npm]: https://img.shields.io/npm/v/url-loader.svg +[file]: https://github.com/webpack/file-loader +[file-npm]: https://img.shields.io/npm/v/file-loader.svg + +#### JSON + +|Name|Status|Description| +|:--:|:----:|:----------| +||![json-npm]|Loads a JSON file (included by default)| +||![json5-npm]|Loads and transpiles a JSON 5 file| +||![cson-npm]|Loads and transpiles a CSON file| + + +[json-npm]: https://img.shields.io/npm/v/json-loader.svg +[json5-npm]: https://img.shields.io/npm/v/json5-loader.svg +[cson-npm]: https://img.shields.io/npm/v/cson-loader.svg + +#### Transpiling + +|Name|Status|Description| +|:--:|:----:|:----------| +|` + + \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 000000000..7e0c7139d --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,28 @@ +var path = require('path'); +var webpack = require('webpack'); + +module.exports = { + entry: { + app: './js/main.js', + ratefinder: './js/ratefinder.js' +}, +output: { + path: path.resolve(__dirname, 'build'), + filename: '[name].bundle.js' +}, + module: { + loaders: [ + { + test: /\.js$/, + loader: 'babel-loader', + query: { + presets: ['es2015'] + } + } + ] + }, + stats: { + colors: true + }, + devtool: 'source-map' +}; \ No newline at end of file

%TQhTtV7)oOO6w#1^(a(79zhC#_vEG`@zi=Znq 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 P@VazSOF93%iTD2inHPfj literal 0 HcmV?d00001 diff --git a/node_modules/http-server/screenshots/start.png b/node_modules/http-server/screenshots/start.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ea2b8a2c0ef2be019e5a5b00c76f58b261f632 GIT binary patch literal 20171 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 d9w2yN`}}{1v!g`+#= 0, 204); + } + } + } +}).export(module); diff --git a/node_modules/https-browserify/LICENSE b/node_modules/https-browserify/LICENSE new file mode 100644 index 000000000..ee27ba4b4 --- /dev/null +++ b/node_modules/https-browserify/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/https-browserify/index.js b/node_modules/https-browserify/index.js new file mode 100644 index 000000000..853553252 --- /dev/null +++ b/node_modules/https-browserify/index.js @@ -0,0 +1,14 @@ +var http = require('http'); + +var https = module.exports; + +for (var key in http) { + if (http.hasOwnProperty(key)) https[key] = http[key]; +}; + +https.request = function (params, cb) { + if (!params) params = {}; + params.scheme = 'https'; + params.protocol = 'https:'; + return http.request.call(this, params, cb); +} diff --git a/node_modules/https-browserify/package.json b/node_modules/https-browserify/package.json new file mode 100644 index 000000000..bb1ddc9fe --- /dev/null +++ b/node_modules/https-browserify/package.json @@ -0,0 +1,50 @@ +{ + "_from": "https-browserify@0.0.1", + "_id": "https-browserify@0.0.1", + "_inBundle": false, + "_integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "_location": "/https-browserify", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "https-browserify@0.0.1", + "name": "https-browserify", + "escapedName": "https-browserify", + "rawSpec": "0.0.1", + "saveSpec": null, + "fetchSpec": "0.0.1" + }, + "_requiredBy": [ + "/node-libs-browser" + ], + "_resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "_shasum": "3f91365cabe60b77ed0ebba24b454e3e09d95a82", + "_spec": "https-browserify@0.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/node-libs-browser", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/https-browserify/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "https module compatability for browserify", + "homepage": "https://github.com/substack/https-browserify", + "keywords": [ + "https", + "browser", + "browserify" + ], + "license": "MIT", + "main": "index.js", + "name": "https-browserify", + "repository": { + "type": "git", + "url": "git://github.com/substack/https-browserify.git" + }, + "version": "0.0.1" +} diff --git a/node_modules/https-browserify/readme.markdown b/node_modules/https-browserify/readme.markdown new file mode 100644 index 000000000..8638614fa --- /dev/null +++ b/node_modules/https-browserify/readme.markdown @@ -0,0 +1,22 @@ +# https-browserify + +https module compatability for browserify + +# example + +``` js +var https = require('https-browserify'); +var r = https.request('https://github.com'); +r.on('request', function (res) { + console.log(res); +}); +``` + +# methods + +The API is the same as the client portion of the +[node core https module](http://nodejs.org/docs/latest/api/https.html). + +# license + +MIT diff --git a/node_modules/ieee754/.travis.yml b/node_modules/ieee754/.travis.yml new file mode 100644 index 000000000..6c45b34d1 --- /dev/null +++ b/node_modules/ieee754/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: +- 'node' +env: + global: + - secure: f3NrmOV/A7oACn47J1mkIpH8Sn/LINtluZvo/9pGo3Ss4+D2lyt7UawpedHtnYgU9WEyjPSi7pDWopUrIzusQ2trLYRJr8WAOEyHlgaepDyy4BW3ghGMKHMsS05kilYLP8nu1sRd6y1AcUYKw+kUrrSPanI7kViWVQ5d5DuwXO8= + - secure: a6teILh33z5fbGQbh5/EkFfAyXfa2fPJG1upy9K+jLAbG4WZxXD+YmXG9Tz33/2NJm6UplGfTJ8IQEXgxEfAFk3ao3xfKxzm3i64XxtroSlXIFNSiQKogxDfLEtWDoNNCodPHaV3ATEqxGJ5rkkUeU1+ROWW0sjG5JR26k8/Hfg= diff --git a/node_modules/ieee754/.zuul.yml b/node_modules/ieee754/.zuul.yml new file mode 100644 index 000000000..b5ba0c4ac --- /dev/null +++ b/node_modules/ieee754/.zuul.yml @@ -0,0 +1,20 @@ +ui: tape +scripts: + - "./test/_polyfill.js" +browsers: + - name: chrome + version: latest + - name: firefox + version: latest + - name: safari + version: latest + - name: ie + version: 11 + - name: microsoftedge + version: latest + - name: opera + version: latest + - name: android + version: latest + - name: iphone + version: latest diff --git a/node_modules/ieee754/LICENSE b/node_modules/ieee754/LICENSE new file mode 100644 index 000000000..f37a2ebe2 --- /dev/null +++ b/node_modules/ieee754/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2008, Fair Oaks Labs, 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 Fair Oaks Labs, 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. diff --git a/node_modules/ieee754/README.md b/node_modules/ieee754/README.md new file mode 100644 index 000000000..11f4d40c1 --- /dev/null +++ b/node_modules/ieee754/README.md @@ -0,0 +1,47 @@ +# ieee754 [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][npm-url] + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[travis-image]: https://img.shields.io/travis/feross/ieee754/master.svg +[travis-url]: https://travis-ci.org/feross/ieee754 +[npm-image]: https://img.shields.io/npm/v/ieee754.svg +[npm-url]: https://npmjs.org/package/ieee754 +[downloads-image]: https://img.shields.io/npm/dm/ieee754.svg +[saucelabs-image]: https://saucelabs.com/browser-matrix/ieee754.svg +[saucelabs-url]: https://saucelabs.com/u/ieee754 + +### Read/write IEEE754 floating point numbers from/to a Buffer or array-like object. + +## install + +``` +npm install ieee754 +``` + +## methods + +`var ieee754 = require('ieee754')` + +The `ieee754` object has the following functions: + +``` +ieee754.read = function (buffer, offset, isLE, mLen, nBytes) +ieee754.write = function (buffer, value, offset, isLE, mLen, nBytes) +``` + +The arguments mean the following: + +- buffer = the buffer +- offset = offset into the buffer +- value = value to set (only for `write`) +- isLe = is little endian? +- mLen = mantissa length +- nBytes = number of bytes + +## what is ieee754? + +The IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point computation. [Read more](http://en.wikipedia.org/wiki/IEEE_floating_point). + +## license + +BSD 3 Clause. Copyright (c) 2008, Fair Oaks Labs, Inc. diff --git a/node_modules/ieee754/index.js b/node_modules/ieee754/index.js new file mode 100644 index 000000000..95e190c42 --- /dev/null +++ b/node_modules/ieee754/index.js @@ -0,0 +1,84 @@ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} diff --git a/node_modules/ieee754/package.json b/node_modules/ieee754/package.json new file mode 100644 index 000000000..43bab0ffc --- /dev/null +++ b/node_modules/ieee754/package.json @@ -0,0 +1,69 @@ +{ + "_from": "ieee754@^1.1.4", + "_id": "ieee754@1.1.8", + "_inBundle": false, + "_integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "_location": "/ieee754", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ieee754@^1.1.4", + "name": "ieee754", + "escapedName": "ieee754", + "rawSpec": "^1.1.4", + "saveSpec": null, + "fetchSpec": "^1.1.4" + }, + "_requiredBy": [ + "/buffer" + ], + "_resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "_shasum": "be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4", + "_spec": "ieee754@^1.1.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/buffer", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/ieee754/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Romain Beauxis", + "email": "toots@rastageeks.org" + } + ], + "deprecated": false, + "description": "Read/write IEEE754 floating point numbers from/to a Buffer or array-like object", + "devDependencies": { + "standard": "*", + "tape": "^4.0.0", + "zuul": "^3.0.0" + }, + "homepage": "https://github.com/feross/ieee754#readme", + "keywords": [ + "IEEE 754", + "buffer", + "convert", + "floating point", + "ieee754" + ], + "license": "BSD-3-Clause", + "main": "index.js", + "name": "ieee754", + "repository": { + "type": "git", + "url": "git://github.com/feross/ieee754.git" + }, + "scripts": { + "test": "standard && npm run test-node && npm run test-browser", + "test-browser": "zuul -- test/*.js", + "test-browser-local": "zuul --local -- test/*.js", + "test-node": "tape test/*.js" + }, + "version": "1.1.8" +} diff --git a/node_modules/ieee754/test/basic.js b/node_modules/ieee754/test/basic.js new file mode 100644 index 000000000..58fae2bf2 --- /dev/null +++ b/node_modules/ieee754/test/basic.js @@ -0,0 +1,23 @@ +var ieee754 = require('../') +var test = require('tape') + +var EPSILON = 0.00001 + +test('read float', function (t) { + var buf = new Buffer(4) + buf.writeFloatLE(42.42, 0) + var num = ieee754.read(buf, 0, true, 23, 4) + t.ok(Math.abs(num - 42.42) < EPSILON) + + t.end() +}) + +test('write float', function (t) { + var buf = new Buffer(4) + ieee754.write(buf, 42.42, 0, true, 23, 4) + + var num = buf.readFloatLE(0) + t.ok(Math.abs(num - 42.42) < EPSILON) + + t.end() +}) diff --git a/node_modules/indexof/.npmignore b/node_modules/indexof/.npmignore new file mode 100644 index 000000000..48a2e246c --- /dev/null +++ b/node_modules/indexof/.npmignore @@ -0,0 +1,2 @@ +components +build diff --git a/node_modules/indexof/Makefile b/node_modules/indexof/Makefile new file mode 100644 index 000000000..3f6119d22 --- /dev/null +++ b/node_modules/indexof/Makefile @@ -0,0 +1,11 @@ + +build: components index.js + @component build + +components: + @Component install + +clean: + rm -fr build components template.js + +.PHONY: clean diff --git a/node_modules/indexof/Readme.md b/node_modules/indexof/Readme.md new file mode 100644 index 000000000..99c8dfc85 --- /dev/null +++ b/node_modules/indexof/Readme.md @@ -0,0 +1,15 @@ + +# indexOf + + Lame indexOf thing, thanks microsoft + +## Example + +```js +var index = require('indexof'); +index(arr, obj); +``` + +## License + + MIT \ No newline at end of file diff --git a/node_modules/indexof/component.json b/node_modules/indexof/component.json new file mode 100644 index 000000000..e3430d75c --- /dev/null +++ b/node_modules/indexof/component.json @@ -0,0 +1,10 @@ +{ + "name": "indexof", + "description": "Microsoft sucks", + "version": "0.0.1", + "keywords": ["index", "array", "indexOf"], + "dependencies": {}, + "scripts": [ + "index.js" + ] +} \ No newline at end of file diff --git a/node_modules/indexof/index.js b/node_modules/indexof/index.js new file mode 100644 index 000000000..9d9667b2c --- /dev/null +++ b/node_modules/indexof/index.js @@ -0,0 +1,10 @@ + +var indexOf = [].indexOf; + +module.exports = function(arr, obj){ + if (indexOf) return arr.indexOf(obj); + for (var i = 0; i < arr.length; ++i) { + if (arr[i] === obj) return i; + } + return -1; +}; \ No newline at end of file diff --git a/node_modules/indexof/package.json b/node_modules/indexof/package.json new file mode 100644 index 000000000..f63bf6fc0 --- /dev/null +++ b/node_modules/indexof/package.json @@ -0,0 +1,41 @@ +{ + "_from": "indexof@0.0.1", + "_id": "indexof@0.0.1", + "_inBundle": false, + "_integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "_location": "/indexof", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "indexof@0.0.1", + "name": "indexof", + "escapedName": "indexof", + "rawSpec": "0.0.1", + "saveSpec": null, + "fetchSpec": "0.0.1" + }, + "_requiredBy": [ + "/vm-browserify" + ], + "_resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "_shasum": "82dc336d232b9062179d05ab3293a66059fd435d", + "_spec": "indexof@0.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/vm-browserify", + "bundleDependencies": false, + "component": { + "scripts": { + "indexof/index.js": "index.js" + } + }, + "dependencies": {}, + "deprecated": false, + "description": "Microsoft sucks", + "keywords": [ + "index", + "array", + "indexOf" + ], + "name": "indexof", + "version": "0.0.1" +} diff --git a/node_modules/inflight/LICENSE b/node_modules/inflight/LICENSE new file mode 100644 index 000000000..05eeeb88c --- /dev/null +++ b/node_modules/inflight/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/inflight/README.md b/node_modules/inflight/README.md new file mode 100644 index 000000000..6dc892917 --- /dev/null +++ b/node_modules/inflight/README.md @@ -0,0 +1,37 @@ +# inflight + +Add callbacks to requests in flight to avoid async duplication + +## USAGE + +```javascript +var inflight = require('inflight') + +// some request that does some stuff +function req(key, callback) { + // key is any random string. like a url or filename or whatever. + // + // will return either a falsey value, indicating that the + // request for this key is already in flight, or a new callback + // which when called will call all callbacks passed to inflightk + // with the same key + callback = inflight(key, callback) + + // If we got a falsey value back, then there's already a req going + if (!callback) return + + // this is where you'd fetch the url or whatever + // callback is also once()-ified, so it can safely be assigned + // to multiple events etc. First call wins. + setTimeout(function() { + callback(null, key) + }, 100) +} + +// only assigns a single setTimeout +// when it dings, all cbs get called +req('foo', cb1) +req('foo', cb2) +req('foo', cb3) +req('foo', cb4) +``` diff --git a/node_modules/inflight/inflight.js b/node_modules/inflight/inflight.js new file mode 100644 index 000000000..48202b3ca --- /dev/null +++ b/node_modules/inflight/inflight.js @@ -0,0 +1,54 @@ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} diff --git a/node_modules/inflight/package.json b/node_modules/inflight/package.json new file mode 100644 index 000000000..63f8a1a27 --- /dev/null +++ b/node_modules/inflight/package.json @@ -0,0 +1,58 @@ +{ + "_from": "inflight@^1.0.4", + "_id": "inflight@1.0.6", + "_inBundle": false, + "_integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "_location": "/inflight", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "inflight@^1.0.4", + "name": "inflight", + "escapedName": "inflight", + "rawSpec": "^1.0.4", + "saveSpec": null, + "fetchSpec": "^1.0.4" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "_shasum": "49bd6331d7d02d0c09bc910a1075ba8165b56df9", + "_spec": "inflight@^1.0.4", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/glob", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/inflight/issues" + }, + "bundleDependencies": false, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + }, + "deprecated": false, + "description": "Add callbacks to requests in flight to avoid async duplication", + "devDependencies": { + "tap": "^7.1.2" + }, + "files": [ + "inflight.js" + ], + "homepage": "https://github.com/isaacs/inflight", + "license": "ISC", + "main": "inflight.js", + "name": "inflight", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/inflight.git" + }, + "scripts": { + "test": "tap test.js --100" + }, + "version": "1.0.6" +} diff --git a/node_modules/inherits/LICENSE b/node_modules/inherits/LICENSE new file mode 100644 index 000000000..dea3013d6 --- /dev/null +++ b/node_modules/inherits/LICENSE @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + diff --git a/node_modules/inherits/README.md b/node_modules/inherits/README.md new file mode 100644 index 000000000..b1c566585 --- /dev/null +++ b/node_modules/inherits/README.md @@ -0,0 +1,42 @@ +Browser-friendly inheritance fully compatible with standard node.js +[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). + +This package exports standard `inherits` from node.js `util` module in +node environment, but also provides alternative browser-friendly +implementation through [browser +field](https://gist.github.com/shtylman/4339901). Alternative +implementation is a literal copy of standard one located in standalone +module to avoid requiring of `util`. It also has a shim for old +browsers with no `Object.create` support. + +While keeping you sure you are using standard `inherits` +implementation in node.js environment, it allows bundlers such as +[browserify](https://github.com/substack/node-browserify) to not +include full `util` package to your client code if all you need is +just `inherits` function. It worth, because browser shim for `util` +package is large and `inherits` is often the single function you need +from it. + +It's recommended to use this package instead of +`require('util').inherits` for any code that has chances to be used +not only in node.js but in browser too. + +## usage + +```js +var inherits = require('inherits'); +// then use exactly as the standard one +``` + +## note on version ~1.0 + +Version ~1.0 had completely different motivation and is not compatible +neither with 2.0 nor with standard node.js `inherits`. + +If you are using version ~1.0 and planning to switch to ~2.0, be +careful: + +* new version uses `super_` instead of `super` for referencing + superclass +* new version overwrites current prototype while old one preserves any + existing fields on it diff --git a/node_modules/inherits/inherits.js b/node_modules/inherits/inherits.js new file mode 100644 index 000000000..3b94763a7 --- /dev/null +++ b/node_modules/inherits/inherits.js @@ -0,0 +1,7 @@ +try { + var util = require('util'); + if (typeof util.inherits !== 'function') throw ''; + module.exports = util.inherits; +} catch (e) { + module.exports = require('./inherits_browser.js'); +} diff --git a/node_modules/inherits/inherits_browser.js b/node_modules/inherits/inherits_browser.js new file mode 100644 index 000000000..c1e78a75e --- /dev/null +++ b/node_modules/inherits/inherits_browser.js @@ -0,0 +1,23 @@ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} diff --git a/node_modules/inherits/package.json b/node_modules/inherits/package.json new file mode 100644 index 000000000..27779140a --- /dev/null +++ b/node_modules/inherits/package.json @@ -0,0 +1,63 @@ +{ + "_from": "inherits@^2.0.1", + "_id": "inherits@2.0.3", + "_inBundle": false, + "_integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "_location": "/inherits", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "inherits@^2.0.1", + "name": "inherits", + "escapedName": "inherits", + "rawSpec": "^2.0.1", + "saveSpec": null, + "fetchSpec": "^2.0.1" + }, + "_requiredBy": [ + "/chokidar", + "/glob", + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "_shasum": "633c2c83e3da42a502f52466022480f4208261de", + "_spec": "inherits@^2.0.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/chokidar", + "browser": "./inherits_browser.js", + "bugs": { + "url": "https://github.com/isaacs/inherits/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "devDependencies": { + "tap": "^7.1.0" + }, + "files": [ + "inherits.js", + "inherits_browser.js" + ], + "homepage": "https://github.com/isaacs/inherits#readme", + "keywords": [ + "inheritance", + "class", + "klass", + "oop", + "object-oriented", + "inherits", + "browser", + "browserify" + ], + "license": "ISC", + "main": "./inherits.js", + "name": "inherits", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inherits.git" + }, + "scripts": { + "test": "node test" + }, + "version": "2.0.3" +} diff --git a/node_modules/interpret/CHANGELOG b/node_modules/interpret/CHANGELOG new file mode 100644 index 000000000..cbc8a8afd --- /dev/null +++ b/node_modules/interpret/CHANGELOG @@ -0,0 +1,115 @@ +v1.0.3: + date: 2017-04-18 + changes: + - fix buble support +v1.0.2: + date: 2017-03-29 + changes: + - add support for coffeescript (now with no hyphen) +v1.0.1: + date: 2016-05-01 + changes: + - add support for buble +v1.0.0: + date: 2015-11-18 + changes: + - add support for babel-register + - go stable! +v0.6.6: + date: 2015-09-21 + changes: + - add support for ts-node (formerly typescript-node) +v0.6.5: + date: 2015-07-22 + changes: + - add support for typescript 1.5 via typescript-node +v0.6.4: + date: 2015-07-07 + changes: + - add support for earlgrey +v0.6.3: + date: 2015-07-03 + changes: + - prefer babel/core to babel +v0.6.2: + date: 2015-05-20 + changes: + - update module list for iced coffee-script +v0.6.1: + date: 2015-05-20 + changes: + - Fix toml loader. +v0.6.0: + date: 2015-05-19 + changes: + - Combine fallbacks and loaders into `extensions`. + - Provide implementation guidance. +v0.5.1: + date: 2015-03-01 + changes: + - Add support for CirruScript. +v0.5.0: + date: 2015-02-27 + changes: + - Refactor es6 support via Babel (formerly 6to5) +v0.4.3: + date: 2015-02-09 + changes: + - Switch support from typescript-require to typescript-register. +v0.4.2: + date: 2015-01-16 + changes: + - Add support for wisp. +v0.4.1: + date: 2015-01-10 + changes: + - Add support for 6to5 (es6) +v0.4.0: + date: 2014-01-09 + changes: + - Add support for fallback (legacy) modules + - Add support for module configurations +v0.3.10: + date: 2014-12-17 + changes: + - Add support for json5. +v0.3.9: + date: 2014-12-08 + changes: + - Add support for literate iced coffee. +v0.3.8: + date: 2014-11-20 + changes: + - Add support for [cjsx](https://github.com/jsdf/coffee-react). +v0.3.7: + date: 2014-09-08 + changes: + - Add support for [TypeScript](http://www.typescriptlang.org/). +v0.3.6: + date: 2014-08-25 + changes: + - Add support for coffee.md. +v0.3.5: + date: 2014-07-03 + changes: + - Add support for jsx. +v0.3.4: + date: 2014-06-27 + changes: + - Make .js first jsVariant entry. +v0.3.3: + date: 2014-06-02 + changes: + - Fix casing on livescript dependency. +v0.3.0: + date: 2014-04-20 + changes: + - Simplify loading of coffee-script and iced-coffee-script. +v0.2.0: + date: 2014-04-20 + changes: + - Move module loading into rechoir. +v0.1.0: + date: 2014-04-20 + changes: + - Initial public release. diff --git a/node_modules/interpret/LICENSE b/node_modules/interpret/LICENSE new file mode 100644 index 000000000..a55f5b74b --- /dev/null +++ b/node_modules/interpret/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 Tyler Kellen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/interpret/README.md b/node_modules/interpret/README.md new file mode 100644 index 000000000..cf5aa0159 --- /dev/null +++ b/node_modules/interpret/README.md @@ -0,0 +1,127 @@ +# interpret +> A dictionary of file extensions and associated module loaders. + +[![NPM](https://nodei.co/npm/interpret.png)](https://nodei.co/npm/interpret/) + +## What is it +This is used by [Liftoff](http://github.com/tkellen/node-liftoff) to automatically require dependencies for configuration files, and by [rechoir](http://github.com/tkellen/node-rechoir) for registering module loaders. + +## API + +### extensions +Map file types to modules which provide a [require.extensions] loader. + +```js +{ + '.babel.js': [ + { + module: 'babel-register', + register: function (module) { + module({ + // register on .js extension due to https://github.com/joyent/node/blob/v0.12.0/lib/module.js#L353 + // which only captures the final extension (.babel.js -> .js) + extensions: '.js' + }); + } + }, + { + module: 'babel-core/register', + register: function (module) { + module({ + extensions: '.js' + }); + } + }, + { + module: 'babel/register', + register: function (module) { + module({ + extensions: '.js' + }); + } + } + ], + '.buble.js': 'buble/register', + '.cirru': 'cirru-script/lib/register', + '.cjsx': 'node-cjsx/register', + '.co': 'coco', + '.coffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'], + '.coffee.md': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'], + '.csv': 'require-csv', + '.eg': 'earlgrey/register', + '.iced': ['iced-coffee-script/register', 'iced-coffee-script'], + '.iced.md': 'iced-coffee-script/register', + '.ini': 'require-ini', + '.js': null, + '.json': null, + '.json5': 'json5/lib/require', + '.jsx': [ + { + module: 'babel-register', + register: function (module) { + module({ + extensions: '.jsx' + }); + } + }, + { + module: 'babel-core/register', + register: function (module) { + module({ + extensions: '.jsx' + }); + } + }, + { + module: 'babel/register', + register: function (module) { + module({ + extensions: '.jsx' + }); + }, + }, + { + module: 'node-jsx', + register: function (module) { + module.install({ + extension: '.jsx', + harmony: true + }); + } + } + ], + '.litcoffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'], + '.liticed': 'iced-coffee-script/register', + '.ls': ['livescript', 'LiveScript'], + '.node': null, + '.toml': { + module: 'toml-require', + register: function (module) { + module.install(); + } + }, + '.ts': ['ts-node/register', 'typescript-node/register', 'typescript-register', 'typescript-require'], + '.tsx': ['ts-node/register', 'typescript-node/register'], + '.wisp': 'wisp/engine/node', + '.xml': 'require-xml', + '.yaml': 'require-yaml', + '.yml': 'require-yaml' +}; +``` + +### jsVariants +Same as above, but only include the extensions which are javascript variants. + +## How to use it + +Consumers should use the exported `extensions` or `jsVariants` object to determine which module should be loaded for a given extension. If a matching extension is found, consumers should do the following: + +1. If the value is null, do nothing. + +2. If the value is a string, try to require it. + +3. If the value is an object, try to require the `module` property. If successful, the `register` property (a function) should be called with the module passed as the first argument. + +4. If the value is an array, iterate over it, attempting step #2 or #3 until one of the attempts does not throw. + +[require.extensions]: http://nodejs.org/api/globals.html#globals_require_extensions diff --git a/node_modules/interpret/index.js b/node_modules/interpret/index.js new file mode 100644 index 000000000..a76fb5964 --- /dev/null +++ b/node_modules/interpret/index.js @@ -0,0 +1,123 @@ +const extensions = { + '.babel.js': [ + { + module: 'babel-register', + register: function (module) { + module({ + // register on .js extension due to https://github.com/joyent/node/blob/v0.12.0/lib/module.js#L353 + // which only captures the final extension (.babel.js -> .js) + extensions: '.js' + }); + } + }, + { + module: 'babel-core/register', + register: function (module) { + module({ + extensions: '.js' + }); + } + }, + { + module: 'babel/register', + register: function (module) { + module({ + extensions: '.js' + }); + } + } + ], + '.buble.js': 'buble/register', + '.cirru': 'cirru-script/lib/register', + '.cjsx': 'node-cjsx/register', + '.co': 'coco', + '.coffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'], + '.coffee.md': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'], + '.csv': 'require-csv', + '.eg': 'earlgrey/register', + '.iced': ['iced-coffee-script/register', 'iced-coffee-script'], + '.iced.md': 'iced-coffee-script/register', + '.ini': 'require-ini', + '.js': null, + '.json': null, + '.json5': 'json5/lib/require', + '.jsx': [ + { + module: 'babel-register', + register: function (module) { + module({ + extensions: '.jsx' + }); + } + }, + { + module: 'babel-core/register', + register: function (module) { + module({ + extensions: '.jsx' + }); + } + }, + { + module: 'babel/register', + register: function (module) { + module({ + extensions: '.jsx' + }); + }, + }, + { + module: 'node-jsx', + register: function (module) { + module.install({ + extension: '.jsx', + harmony: true + }); + } + } + ], + '.litcoffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'], + '.liticed': 'iced-coffee-script/register', + '.ls': ['livescript', 'LiveScript'], + '.node': null, + '.toml': { + module: 'toml-require', + register: function (module) { + module.install(); + } + }, + '.ts': ['ts-node/register', 'typescript-node/register', 'typescript-register', 'typescript-require'], + '.tsx': ['ts-node/register', 'typescript-node/register'], + '.wisp': 'wisp/engine/node', + '.xml': 'require-xml', + '.yaml': 'require-yaml', + '.yml': 'require-yaml' +}; + +const jsVariantExtensions = [ + '.js', + '.babel.js', + '.buble.js', + '.cirru', + '.cjsx', + '.co', + '.coffee', + '.coffee.md', + '.eg', + '.iced', + '.iced.md', + '.jsx', + '.litcoffee', + '.liticed', + '.ls', + '.ts', + '.wisp' +]; + +module.exports = { + extensions: extensions, + jsVariants: jsVariantExtensions.reduce(function (result, ext) { + result[ext] = extensions[ext]; + return result; + }, {}) +}; diff --git a/node_modules/interpret/package.json b/node_modules/interpret/package.json new file mode 100644 index 000000000..37151308e --- /dev/null +++ b/node_modules/interpret/package.json @@ -0,0 +1,78 @@ +{ + "_from": "interpret@^1.0.0", + "_id": "interpret@1.0.4", + "_inBundle": false, + "_integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", + "_location": "/interpret", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "interpret@^1.0.0", + "name": "interpret", + "escapedName": "interpret", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/webpack" + ], + "_resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", + "_shasum": "820cdd588b868ffb191a809506d6c9c8f212b1b0", + "_spec": "interpret@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/webpack", + "author": { + "name": "Tyler Kellen", + "url": "http://goingslowly.com/" + }, + "bugs": { + "url": "https://github.com/tkellen/node-interpret/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A dictionary of file extensions and associated module loaders.", + "homepage": "https://github.com/tkellen/node-interpret", + "keywords": [ + "cirru-script", + "cjsx", + "co", + "coco", + "coffee", + "coffee-script", + "coffee.md", + "coffeescript", + "csv", + "earlgrey", + "es", + "es6", + "iced", + "iced.md", + "iced-coffee-script", + "ini", + "js", + "json", + "json5", + "jsx", + "react", + "litcoffee", + "liticed", + "ls", + "livescript", + "toml", + "ts", + "typescript", + "wisp", + "xml", + "yaml", + "yml" + ], + "license": "MIT", + "main": "index.js", + "name": "interpret", + "repository": { + "type": "git", + "url": "git://github.com/tkellen/node-interpret.git" + }, + "version": "1.0.4" +} diff --git a/node_modules/invariant/CHANGELOG.md b/node_modules/invariant/CHANGELOG.md new file mode 100644 index 000000000..5326f1a0e --- /dev/null +++ b/node_modules/invariant/CHANGELOG.md @@ -0,0 +1,33 @@ +2.1.1 / 2015-09-20 +================== + + * Use correct SPDX license. + * Test "browser.js" using browserify. + * Switch from "envify" to "loose-envify". + +2.1.0 / 2015-06-03 +================== + + * Add "envify" as a dependency. + * Fixed license field in "package.json". + +2.0.0 / 2015-02-21 +================== + + * Switch to using the "browser" field. There are now browser and server versions that respect the "format" in production. + +1.0.2 / 2014-09-24 +================== + + * Added tests, npmignore and gitignore. + * Clarifications in README. + +1.0.1 / 2014-09-24 +================== + + * Actually include 'invariant.js'. + +1.0.0 / 2014-09-24 +================== + + * Initial release. diff --git a/node_modules/invariant/LICENSE b/node_modules/invariant/LICENSE new file mode 100644 index 000000000..35b4e8fab --- /dev/null +++ b/node_modules/invariant/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2016, Andres Suarez +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 invariant 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/node_modules/invariant/README.md b/node_modules/invariant/README.md new file mode 100644 index 000000000..96aac6d36 --- /dev/null +++ b/node_modules/invariant/README.md @@ -0,0 +1,37 @@ +# invariant + +[![Build Status](https://travis-ci.org/zertosh/invariant.svg?branch=master)](https://travis-ci.org/zertosh/invariant) + +A mirror of Facebook's `invariant` (e.g. [React](https://github.com/facebook/react/blob/v0.13.3/src/vendor/core/invariant.js), [flux](https://github.com/facebook/flux/blob/2.0.2/src/invariant.js)). + +A way to provide descriptive errors in development but generic errors in production. + +## Install + +With [npm](http://npmjs.org) do: + +```sh +npm install invariant +``` + +## `invariant(condition, message)` + +```js +var invariant = require('invariant'); + +invariant(someTruthyVal, 'This will not throw'); +// No errors + +invariant(someFalseyVal, 'This will throw an error with this message'); +// Error: Invariant Violation: This will throw an error with this message +``` + +**Note:** When `process.env.NODE_ENV` is not `production`, the message is required. If omitted, `invariant` will throw regardless of the truthiness of the condition. When `process.env.NODE_ENV` is `production`, the message is optional – so they can be minified away. + +### Browser + +When used with [browserify](https://github.com/substack/node-browserify), it'll use `browser.js` (instead of `invariant.js`) and the [envify](https://github.com/hughsk/envify) transform will inline the value of `process.env.NODE_ENV`. + +### Node + +The node version is optimized around the performance implications of accessing `process.env`. The value of `process.env.NODE_ENV` is cached, and repeatedly used instead of reading `proces.env`. See [Server rendering is slower with npm react #812](https://github.com/facebook/react/issues/812) diff --git a/node_modules/invariant/browser.js b/node_modules/invariant/browser.js new file mode 100644 index 000000000..29ead5043 --- /dev/null +++ b/node_modules/invariant/browser.js @@ -0,0 +1,51 @@ +/** + * Copyright 2013-2015, 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'; + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var invariant = function(condition, format, a, b, c, d, e, f) { + if (process.env.NODE_ENV !== 'production') { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error( + 'Minified exception occurred; use the non-minified dev environment ' + + 'for the full error message and additional helpful warnings.' + ); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error( + format.replace(/%s/g, function() { return args[argIndex++]; }) + ); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +}; + +module.exports = invariant; diff --git a/node_modules/invariant/invariant.js b/node_modules/invariant/invariant.js new file mode 100644 index 000000000..1859a2a52 --- /dev/null +++ b/node_modules/invariant/invariant.js @@ -0,0 +1,53 @@ +/** + * Copyright 2013-2015, 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'; + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var NODE_ENV = process.env.NODE_ENV; + +var invariant = function(condition, format, a, b, c, d, e, f) { + if (NODE_ENV !== 'production') { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error( + 'Minified exception occurred; use the non-minified dev environment ' + + 'for the full error message and additional helpful warnings.' + ); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error( + format.replace(/%s/g, function() { return args[argIndex++]; }) + ); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +}; + +module.exports = invariant; diff --git a/node_modules/invariant/invariant.js.flow b/node_modules/invariant/invariant.js.flow new file mode 100644 index 000000000..361c5192c --- /dev/null +++ b/node_modules/invariant/invariant.js.flow @@ -0,0 +1,7 @@ +/* @flow */ + +declare module.exports: ( + condition: any, + format?: string, + ...args: Array +) => void; diff --git a/node_modules/invariant/package.json b/node_modules/invariant/package.json new file mode 100644 index 000000000..9b9f3ffa8 --- /dev/null +++ b/node_modules/invariant/package.json @@ -0,0 +1,70 @@ +{ + "_from": "invariant@^2.2.2", + "_id": "invariant@2.2.2", + "_inBundle": false, + "_integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "_location": "/invariant", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "invariant@^2.2.2", + "name": "invariant", + "escapedName": "invariant", + "rawSpec": "^2.2.2", + "saveSpec": null, + "fetchSpec": "^2.2.2" + }, + "_requiredBy": [ + "/babel-traverse" + ], + "_resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "_shasum": "9e1f56ac0acdb6bf303306f338be3b204ae60360", + "_spec": "invariant@^2.2.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-traverse", + "author": { + "name": "Andres Suarez", + "email": "zertosh@gmail.com" + }, + "browser": "browser.js", + "browserify": { + "transform": [ + "loose-envify" + ] + }, + "bugs": { + "url": "https://github.com/zertosh/invariant/issues" + }, + "bundleDependencies": false, + "dependencies": { + "loose-envify": "^1.0.0" + }, + "deprecated": false, + "description": "invariant", + "devDependencies": { + "browserify": "^11.0.1", + "flow-bin": "^0.35.0", + "tap": "^1.4.0" + }, + "files": [ + "browser.js", + "invariant.js", + "invariant.js.flow" + ], + "homepage": "https://github.com/zertosh/invariant#readme", + "keywords": [ + "test", + "invariant" + ], + "license": "BSD-3-Clause", + "main": "invariant.js", + "name": "invariant", + "repository": { + "type": "git", + "url": "git+https://github.com/zertosh/invariant.git" + }, + "scripts": { + "test": "NODE_ENV=production tap test/*.js && NODE_ENV=development tap test/*.js" + }, + "version": "2.2.2" +} diff --git a/node_modules/invert-kv/index.js b/node_modules/invert-kv/index.js new file mode 100644 index 000000000..61e219611 --- /dev/null +++ b/node_modules/invert-kv/index.js @@ -0,0 +1,15 @@ +'use strict'; +module.exports = function (obj) { + if (typeof obj !== 'object') { + throw new TypeError('Expected an object'); + } + + var ret = {}; + + for (var key in obj) { + var val = obj[key]; + ret[val] = key; + } + + return ret; +}; diff --git a/node_modules/invert-kv/package.json b/node_modules/invert-kv/package.json new file mode 100644 index 000000000..dd2501a8d --- /dev/null +++ b/node_modules/invert-kv/package.json @@ -0,0 +1,65 @@ +{ + "_from": "invert-kv@^1.0.0", + "_id": "invert-kv@1.0.0", + "_inBundle": false, + "_integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "_location": "/invert-kv", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "invert-kv@^1.0.0", + "name": "invert-kv", + "escapedName": "invert-kv", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/lcid" + ], + "_resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "_shasum": "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6", + "_spec": "invert-kv@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/lcid", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "http://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/invert-kv/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Invert the key/value of an object. Example: {foo: 'bar'} → {bar: 'foo'}", + "devDependencies": { + "mocha": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/invert-kv#readme", + "keywords": [ + "object", + "obj", + "key", + "value", + "val", + "kv", + "invert" + ], + "license": "MIT", + "name": "invert-kv", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/invert-kv.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "1.0.0" +} diff --git a/node_modules/invert-kv/readme.md b/node_modules/invert-kv/readme.md new file mode 100644 index 000000000..039fc7cfa --- /dev/null +++ b/node_modules/invert-kv/readme.md @@ -0,0 +1,25 @@ +# invert-kv [![Build Status](https://travis-ci.org/sindresorhus/invert-kv.svg?branch=master)](https://travis-ci.org/sindresorhus/invert-kv) + +> Invert the key/value of an object. Example: `{foo: 'bar'}` → `{bar: 'foo'}` + + +## Install + +```sh +$ npm install --save invert-kv +``` + + +## Usage + +```js +var invertKv = require('invert-kv'); + +invertKv({foo: 'bar', unicorn: 'rainbow'}); +//=> {bar: 'foo', rainbow: 'unicorn'} +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/is-arrayish/.editorconfig b/node_modules/is-arrayish/.editorconfig new file mode 100644 index 000000000..4c017f8ad --- /dev/null +++ b/node_modules/is-arrayish/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.coffee] +indent_style = space + +[{package.json,*.yml}] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/node_modules/is-arrayish/.istanbul.yml b/node_modules/is-arrayish/.istanbul.yml new file mode 100644 index 000000000..19fbec32b --- /dev/null +++ b/node_modules/is-arrayish/.istanbul.yml @@ -0,0 +1,4 @@ +instrumentation: + excludes: + - test.js + - test/**/* diff --git a/node_modules/is-arrayish/.npmignore b/node_modules/is-arrayish/.npmignore new file mode 100644 index 000000000..8d5eacb3e --- /dev/null +++ b/node_modules/is-arrayish/.npmignore @@ -0,0 +1,5 @@ +/coverage/ +/test.js +/test/ +*.sw[a-p] +/node_modules/ diff --git a/node_modules/is-arrayish/.travis.yml b/node_modules/is-arrayish/.travis.yml new file mode 100644 index 000000000..5a0424350 --- /dev/null +++ b/node_modules/is-arrayish/.travis.yml @@ -0,0 +1,17 @@ +language: node_js + +script: + - node_modules/.bin/istanbul cover node_modules/.bin/_mocha -- --compilers coffee:coffee-script/register + - cat coverage/lcov.info | node_modules/.bin/coveralls +node_js: + - "0.10" + - "0.11" + - "0.12" + - "iojs" +os: + - linux + - osx + +notifications: + slack: + secure: oOt8QGzdrPDsTMcyahtIq5Q+0U1iwfgJgFCxBLsomQ0bpIMn+y5m4viJydA2UinHPGc944HS3LMZS9iKQyv+DjTgbhUyNXqeVjtxCwRe37f5rKQlXVvdfmjHk2kln4H8DcK3r5Qd/+2hd9BeMsp2GImTrkRSud1CZQlhhe5IgZOboSoWpGVMMy1iazWT06tAtiB2LRVhmsdUaFZDWAhGZ+UAvCPf+mnBOAylIj+U0GDrofhfTi25RK0gddG2f/p2M1HCu49O6wECGWkt2hVei233DkNJyLLLJVcvmhf+aXkV5TjMyaoxh/HdcV4DrA7KvYuWmWWKsINa9hlwAsdd/FYmJ6PjRkKWas2JoQ1C+qOzDxyQvn3CaUZFKD99pdsq0rBBZujqXQKZZ/hWb/CE74BI6fKmqQkiEPaD/7uADj04FEg6HVBZaMCyauOaK5b3VC97twbALZ1qVxYV6mU+zSEvnUbpnjjvRO0fSl9ZHA+rzkW73kX3GmHY0wAozEZbSy7QLuZlQ2QtHmBLr+APaGMdL1sFF9qFfzqKy0WDbSE0WS6hpAEJpTsjYmeBrnI8UmK3m++iEgyQPvZoH9LhUT+ek7XIfHZMe04BmC6wuO24/RfpmR6bQK9VMarFCYlBiWxg/z30vkP0KTpUi3o/cqFm7/Noxc0i2LVqM3E0Sy4= diff --git a/node_modules/is-arrayish/LICENSE b/node_modules/is-arrayish/LICENSE new file mode 100644 index 000000000..0a5f461a6 --- /dev/null +++ b/node_modules/is-arrayish/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 JD Ballard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-arrayish/README.md b/node_modules/is-arrayish/README.md new file mode 100644 index 000000000..7d360724c --- /dev/null +++ b/node_modules/is-arrayish/README.md @@ -0,0 +1,16 @@ +# node-is-arrayish [![Travis-CI.org Build Status](https://img.shields.io/travis/Qix-/node-is-arrayish.svg?style=flat-square)](https://travis-ci.org/Qix-/node-is-arrayish) [![Coveralls.io Coverage Rating](https://img.shields.io/coveralls/Qix-/node-is-arrayish.svg?style=flat-square)](https://coveralls.io/r/Qix-/node-is-arrayish) +> Determines if an object can be used like an Array + +## Example +```javascript +var isArrayish = require('is-arrayish'); + +isArrayish([]); // true +isArrayish({__proto__: []}); // true +isArrayish({}); // false +isArrayish({length:10}); // false +``` + +## License +Licensed under the [MIT License](http://opensource.org/licenses/MIT). +You can find a copy of it in [LICENSE](LICENSE). diff --git a/node_modules/is-arrayish/index.js b/node_modules/is-arrayish/index.js new file mode 100644 index 000000000..5b971868b --- /dev/null +++ b/node_modules/is-arrayish/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = function isArrayish(obj) { + if (!obj) { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && obj.splice instanceof Function); +}; diff --git a/node_modules/is-arrayish/package.json b/node_modules/is-arrayish/package.json new file mode 100644 index 000000000..ecf506cda --- /dev/null +++ b/node_modules/is-arrayish/package.json @@ -0,0 +1,66 @@ +{ + "_from": "is-arrayish@^0.2.1", + "_id": "is-arrayish@0.2.1", + "_inBundle": false, + "_integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "_location": "/is-arrayish", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-arrayish@^0.2.1", + "name": "is-arrayish", + "escapedName": "is-arrayish", + "rawSpec": "^0.2.1", + "saveSpec": null, + "fetchSpec": "^0.2.1" + }, + "_requiredBy": [ + "/error-ex" + ], + "_resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "_shasum": "77c99840527aa8ecb1a8ba697b80645a7a926a9d", + "_spec": "is-arrayish@^0.2.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/error-ex", + "author": { + "name": "Qix", + "url": "http://github.com/qix-" + }, + "bugs": { + "url": "https://github.com/qix-/node-is-arrayish/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Determines if an object can be used as an array", + "devDependencies": { + "coffee-script": "^1.9.3", + "coveralls": "^2.11.2", + "istanbul": "^0.3.17", + "mocha": "^2.2.5", + "should": "^7.0.1", + "xo": "^0.6.1" + }, + "homepage": "https://github.com/qix-/node-is-arrayish#readme", + "keywords": [ + "is", + "array", + "duck", + "type", + "arrayish", + "similar", + "proto", + "prototype", + "type" + ], + "license": "MIT", + "name": "is-arrayish", + "repository": { + "type": "git", + "url": "git+https://github.com/qix-/node-is-arrayish.git" + }, + "scripts": { + "pretest": "xo", + "test": "mocha --compilers coffee:coffee-script/register" + }, + "version": "0.2.1" +} diff --git a/node_modules/is-binary-path/index.js b/node_modules/is-binary-path/index.js new file mode 100644 index 000000000..6c8c7e728 --- /dev/null +++ b/node_modules/is-binary-path/index.js @@ -0,0 +1,12 @@ +'use strict'; +var path = require('path'); +var binaryExtensions = require('binary-extensions'); +var exts = Object.create(null); + +binaryExtensions.forEach(function (el) { + exts[el] = true; +}); + +module.exports = function (filepath) { + return path.extname(filepath).slice(1).toLowerCase() in exts; +}; diff --git a/node_modules/is-binary-path/license b/node_modules/is-binary-path/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/is-binary-path/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-binary-path/package.json b/node_modules/is-binary-path/package.json new file mode 100644 index 000000000..625624d2b --- /dev/null +++ b/node_modules/is-binary-path/package.json @@ -0,0 +1,71 @@ +{ + "_from": "is-binary-path@^1.0.0", + "_id": "is-binary-path@1.0.1", + "_inBundle": false, + "_integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "_location": "/is-binary-path", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-binary-path@^1.0.0", + "name": "is-binary-path", + "escapedName": "is-binary-path", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/chokidar" + ], + "_resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "_shasum": "75f16642b480f187a711c814161fd3a4a7655898", + "_spec": "is-binary-path@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/chokidar", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-binary-path/issues" + }, + "bundleDependencies": false, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "deprecated": false, + "description": "Check if a filepath is a binary file", + "devDependencies": { + "ava": "0.0.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-binary-path#readme", + "keywords": [ + "bin", + "binary", + "ext", + "extensions", + "extension", + "file", + "path", + "check", + "detect", + "is" + ], + "license": "MIT", + "name": "is-binary-path", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-binary-path.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.0.1" +} diff --git a/node_modules/is-binary-path/readme.md b/node_modules/is-binary-path/readme.md new file mode 100644 index 000000000..a17d6a245 --- /dev/null +++ b/node_modules/is-binary-path/readme.md @@ -0,0 +1,34 @@ +# is-binary-path [![Build Status](https://travis-ci.org/sindresorhus/is-binary-path.svg?branch=master)](https://travis-ci.org/sindresorhus/is-binary-path) + +> Check if a filepath is a binary file + + +## Install + +``` +$ npm install --save is-binary-path +``` + + +## Usage + +```js +var isBinaryPath = require('is-binary-path'); + +isBinaryPath('src/unicorn.png'); +//=> true + +isBinaryPath('src/unicorn.txt'); +//=> false +``` + + +## Related + +- [`binary-extensions`](https://github.com/sindresorhus/binary-extensions) - List of binary file extensions +- [`is-text-path`](https://github.com/sindresorhus/is-text-path) - Check if a filepath is a text file + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/is-buffer/.npmignore b/node_modules/is-buffer/.npmignore new file mode 100644 index 000000000..9cdaef929 --- /dev/null +++ b/node_modules/is-buffer/.npmignore @@ -0,0 +1,2 @@ +.travis.yml +.zuul.yml diff --git a/node_modules/is-buffer/LICENSE b/node_modules/is-buffer/LICENSE new file mode 100644 index 000000000..0c068ceec --- /dev/null +++ b/node_modules/is-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-buffer/README.md b/node_modules/is-buffer/README.md new file mode 100644 index 000000000..cb6f356d5 --- /dev/null +++ b/node_modules/is-buffer/README.md @@ -0,0 +1,49 @@ +# is-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][npm-url] + +#### Determine if an object is a [`Buffer`](http://nodejs.org/api/buffer.html) (including the [browserify Buffer](https://github.com/feross/buffer)) + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[travis-image]: https://img.shields.io/travis/feross/is-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/is-buffer +[npm-image]: https://img.shields.io/npm/v/is-buffer.svg +[npm-url]: https://npmjs.org/package/is-buffer +[downloads-image]: https://img.shields.io/npm/dm/is-buffer.svg +[saucelabs-image]: https://saucelabs.com/browser-matrix/is-buffer.svg +[saucelabs-url]: https://saucelabs.com/u/is-buffer + +## Why not use `Buffer.isBuffer`? + +This module lets you check if an object is a `Buffer` without using `Buffer.isBuffer` (which includes the whole [buffer](https://github.com/feross/buffer) module in [browserify](http://browserify.org/)). + +It's future-proof and works in node too! + +## install + +```bash +npm install is-buffer +``` + +## usage + +```js +var isBuffer = require('is-buffer') + +isBuffer(new Buffer(4)) // true + +isBuffer(undefined) // false +isBuffer(null) // false +isBuffer('') // false +isBuffer(true) // false +isBuffer(false) // false +isBuffer(0) // false +isBuffer(1) // false +isBuffer(1.0) // false +isBuffer('string') // false +isBuffer({}) // false +isBuffer(function foo () {}) // false +``` + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org). diff --git a/node_modules/is-buffer/index.js b/node_modules/is-buffer/index.js new file mode 100644 index 000000000..36c808ea7 --- /dev/null +++ b/node_modules/is-buffer/index.js @@ -0,0 +1,21 @@ +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +// The _isBuffer check is for Safari 5-7 support, because it's missing +// Object.prototype.constructor. Remove this eventually +module.exports = function (obj) { + return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) +} + +function isBuffer (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) +} + +// For Node v0.10 support. Remove this eventually. +function isSlowBuffer (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) +} diff --git a/node_modules/is-buffer/package.json b/node_modules/is-buffer/package.json new file mode 100644 index 000000000..251ca6d13 --- /dev/null +++ b/node_modules/is-buffer/package.json @@ -0,0 +1,79 @@ +{ + "_from": "is-buffer@^1.1.5", + "_id": "is-buffer@1.1.5", + "_inBundle": false, + "_integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "_location": "/is-buffer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-buffer@^1.1.5", + "name": "is-buffer", + "escapedName": "is-buffer", + "rawSpec": "^1.1.5", + "saveSpec": null, + "fetchSpec": "^1.1.5" + }, + "_requiredBy": [ + "/kind-of", + "/randomatic/is-number/kind-of", + "/randomatic/kind-of" + ], + "_resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "_shasum": "1f3b26ef613b214b88cbca23cc6c01d87961eecc", + "_spec": "is-buffer@^1.1.5", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/kind-of", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org/" + }, + "bugs": { + "url": "https://github.com/feross/is-buffer/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Determine if an object is a Buffer", + "devDependencies": { + "standard": "*", + "tape": "^4.0.0", + "zuul": "^3.0.0" + }, + "homepage": "https://github.com/feross/is-buffer#readme", + "keywords": [ + "buffer", + "buffers", + "type", + "core buffer", + "browser buffer", + "browserify", + "typed array", + "uint32array", + "int16array", + "int32array", + "float32array", + "float64array", + "browser", + "arraybuffer", + "dataview" + ], + "license": "MIT", + "main": "index.js", + "name": "is-buffer", + "repository": { + "type": "git", + "url": "git://github.com/feross/is-buffer.git" + }, + "scripts": { + "test": "standard && npm run test-node && npm run test-browser", + "test-browser": "zuul -- test/*.js", + "test-browser-local": "zuul --local -- test/*.js", + "test-node": "tape test/*.js" + }, + "testling": { + "files": "test/*.js" + }, + "version": "1.1.5" +} diff --git a/node_modules/is-buffer/test/basic.js b/node_modules/is-buffer/test/basic.js new file mode 100644 index 000000000..43b7c8232 --- /dev/null +++ b/node_modules/is-buffer/test/basic.js @@ -0,0 +1,25 @@ +var buffer = require('buffer') +var isBuffer = require('../') +var test = require('tape') + +test('is-buffer', function (t) { + t.equal(isBuffer(new Buffer(4)), true, 'new Buffer(4)') + t.equal(isBuffer(buffer.SlowBuffer(100)), true, 'SlowBuffer(100)') + + t.equal(isBuffer(undefined), false, 'undefined') + t.equal(isBuffer(null), false, 'null') + t.equal(isBuffer(''), false, 'empty string') + t.equal(isBuffer(true), false, 'true') + t.equal(isBuffer(false), false, 'false') + t.equal(isBuffer(0), false, '0') + t.equal(isBuffer(1), false, '1') + t.equal(isBuffer(1.0), false, '1.0') + t.equal(isBuffer('string'), false, 'string') + t.equal(isBuffer({}), false, '{}') + t.equal(isBuffer([]), false, '[]') + t.equal(isBuffer(function foo () {}), false, 'function foo () {}') + t.equal(isBuffer({ isBuffer: null }), false, '{ isBuffer: null }') + t.equal(isBuffer({ isBuffer: function () { throw new Error() } }), false, '{ isBuffer: function () { throw new Error() } }') + + t.end() +}) diff --git a/node_modules/is-builtin-module/index.js b/node_modules/is-builtin-module/index.js new file mode 100644 index 000000000..b6cfa616a --- /dev/null +++ b/node_modules/is-builtin-module/index.js @@ -0,0 +1,10 @@ +'use strict'; +var builtinModules = require('builtin-modules'); + +module.exports = function (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } + + return builtinModules.indexOf(str) !== -1; +}; diff --git a/node_modules/is-builtin-module/license b/node_modules/is-builtin-module/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/is-builtin-module/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-builtin-module/package.json b/node_modules/is-builtin-module/package.json new file mode 100644 index 000000000..193982393 --- /dev/null +++ b/node_modules/is-builtin-module/package.json @@ -0,0 +1,75 @@ +{ + "_from": "is-builtin-module@^1.0.0", + "_id": "is-builtin-module@1.0.0", + "_inBundle": false, + "_integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "_location": "/is-builtin-module", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-builtin-module@^1.0.0", + "name": "is-builtin-module", + "escapedName": "is-builtin-module", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/normalize-package-data" + ], + "_resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "_shasum": "540572d34f7ac3119f8f76c30cbc1b1e037affbe", + "_spec": "is-builtin-module@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/normalize-package-data", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-builtin-module/issues" + }, + "bundleDependencies": false, + "dependencies": { + "builtin-modules": "^1.0.0" + }, + "deprecated": false, + "description": "Check if a string matches the name of a Node.js builtin module", + "devDependencies": { + "ava": "0.0.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-builtin-module#readme", + "keywords": [ + "builtin", + "built-in", + "builtins", + "node", + "modules", + "core", + "bundled", + "list", + "array", + "names", + "is", + "detect", + "check", + "match" + ], + "license": "MIT", + "name": "is-builtin-module", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-builtin-module.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.0.0" +} diff --git a/node_modules/is-builtin-module/readme.md b/node_modules/is-builtin-module/readme.md new file mode 100644 index 000000000..798dcf437 --- /dev/null +++ b/node_modules/is-builtin-module/readme.md @@ -0,0 +1,33 @@ +# is-builtin-module [![Build Status](https://travis-ci.org/sindresorhus/is-builtin-module.svg?branch=master)](https://travis-ci.org/sindresorhus/is-builtin-module) + +> Check if a string matches the name of a Node.js builtin module + + +## Install + +``` +$ npm install --save is-builtin-module +``` + + +## Usage + +```js +var isBuiltinModule = require('is-builtin-module'); + +isBuiltinModule('fs'); +//=> true + +isBuiltinModule('unicorn'); +//=> false :( +``` + + +## Related + +- [builtin-modules](https://github.com/sindresorhus/builtin-modules) - List of the Node.js builtin modules + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/is-dotfile/LICENSE b/node_modules/is-dotfile/LICENSE new file mode 100644 index 000000000..83b56e709 --- /dev/null +++ b/node_modules/is-dotfile/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-dotfile/README.md b/node_modules/is-dotfile/README.md new file mode 100644 index 000000000..d69912bb1 --- /dev/null +++ b/node_modules/is-dotfile/README.md @@ -0,0 +1,95 @@ +# is-dotfile [![NPM version](https://img.shields.io/npm/v/is-dotfile.svg?style=flat)](https://www.npmjs.com/package/is-dotfile) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-dotfile.svg?style=flat)](https://npmjs.org/package/is-dotfile) [![NPM total downloads](https://img.shields.io/npm/dt/is-dotfile.svg?style=flat)](https://npmjs.org/package/is-dotfile) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-dotfile.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-dotfile) + +> Return true if a file path is (or has) a dotfile. Returns false if the path is a dot directory. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save is-dotfile +``` + +## Usage + +To be considered a dotfile, it must be the last filename in the path, like `.gitignore`. Otherwise it's a [dot directory](https://github.com/jonschlinkert/is-dotdir), like `.git/` and `.github/`. + +```js +var isDotfile = require('is-dotfile'); +``` + +**false** + +All of the following return `false`: + +```js +isDotfile('a/b/c.js'); +isDotfile('/.git/foo'); +isDotfile('a/b/c/.git/foo'); +//=> false +``` + +**true** + +All of the following return `true`: + +```js +isDotfile('a/b/.gitignore'); +isDotfile('.gitignore'); +isDotfile('/.gitignore'); +//=> true +``` + +## About + +### Related projects + +* [dotdir-regex](https://www.npmjs.com/package/dotdir-regex): Regex for matching dot-directories, like `.git/` | [homepage](https://github.com/regexps/dotdir-regex "Regex for matching dot-directories, like `.git/`") +* [dotfile-regex](https://www.npmjs.com/package/dotfile-regex): Regular expresson for matching dotfiles. | [homepage](https://github.com/regexps/dotfile-regex "Regular expresson for matching dotfiles.") +* [is-dotdir](https://www.npmjs.com/package/is-dotdir): Returns true if a path is a dot-directory. | [homepage](https://github.com/jonschlinkert/is-dotdir "Returns true if a path is a dot-directory.") +* [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") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 13 | [jonschlinkert](https://github.com/jonschlinkert) | +| 1 | [Lykathia](https://github.com/Lykathia) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 30, 2017._ \ No newline at end of file diff --git a/node_modules/is-dotfile/index.js b/node_modules/is-dotfile/index.js new file mode 100644 index 000000000..46cb20b14 --- /dev/null +++ b/node_modules/is-dotfile/index.js @@ -0,0 +1,14 @@ +/*! + * is-dotfile + * + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +module.exports = function(str) { + if (str.charCodeAt(0) === 46 /* . */ && str.indexOf('/', 1) === -1) { + return true; + } + var slash = str.lastIndexOf('/'); + return slash !== -1 ? str.charCodeAt(slash + 1) === 46 /* . */ : false; +}; diff --git a/node_modules/is-dotfile/package.json b/node_modules/is-dotfile/package.json new file mode 100644 index 000000000..db372f851 --- /dev/null +++ b/node_modules/is-dotfile/package.json @@ -0,0 +1,106 @@ +{ + "_from": "is-dotfile@^1.0.0", + "_id": "is-dotfile@1.0.3", + "_inBundle": false, + "_integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "_location": "/is-dotfile", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-dotfile@^1.0.0", + "name": "is-dotfile", + "escapedName": "is-dotfile", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/parse-glob" + ], + "_resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "_shasum": "a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1", + "_spec": "is-dotfile@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/parse-glob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-dotfile/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Evan Lowry", + "url": "http://exitiumonline.com" + }, + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + } + ], + "deprecated": false, + "description": "Return true if a file path is (or has) a dotfile. Returns false if the path is a dot directory.", + "devDependencies": { + "benchmarked": "^0.1.3", + "dotfile-regex": "^0.1.2", + "gulp-format-md": "^0.1.12", + "mocha": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-dotfile", + "keywords": [ + "detect", + "dot", + "dotfile", + "expression", + "file", + "filepath", + "find", + "fs", + "is", + "match", + "path", + "regex", + "regexp", + "regular" + ], + "license": "MIT", + "main": "index.js", + "name": "is-dotfile", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-dotfile.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "related": { + "list": [ + "dotdir-regex", + "dotfile-regex", + "is-dotdir", + "is-glob" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + }, + "version": "1.0.3" +} diff --git a/node_modules/is-equal-shallow/LICENSE b/node_modules/is-equal-shallow/LICENSE new file mode 100644 index 000000000..65f90aca8 --- /dev/null +++ b/node_modules/is-equal-shallow/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-equal-shallow/README.md b/node_modules/is-equal-shallow/README.md new file mode 100644 index 000000000..11422761f --- /dev/null +++ b/node_modules/is-equal-shallow/README.md @@ -0,0 +1,90 @@ +# is-equal-shallow [![NPM version](https://badge.fury.io/js/is-equal-shallow.svg)](http://badge.fury.io/js/is-equal-shallow) [![Build Status](https://travis-ci.org/jonschlinkert/is-equal-shallow.svg)](https://travis-ci.org/jonschlinkert/is-equal-shallow) + +> Does a shallow comparison of two objects, returning false if the keys or values differ. + +The purpose of this lib is to do the fastest comparison possible of two objects when the values will predictably be primitives. + +* only compares objects. +* only compares the first level of each object +* values must be primitives. If a value is not a primitive, even if the values are the same, `false` is returned. + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i is-equal-shallow --save +``` + +## Usage + +```js +var equals = require('is-equal-shallow'); +equals(object_a, object_b); +``` + +**Examples** + +```js +equals({a: true, b: true}, {a: true, b: true}); +//=> 'true' + +equals({a: true, b: false}, {c: false, b: false}); +//=> 'false' + +equals({a: true, b: false}, {a: false, b: false}); +//=> 'false' +``` + +Strict comparison for equality: + +```js +equals({a: true, b: true}, {a: true, b: 'true'}); +//=> 'false' +``` + +When values are not primitives, `false` is always returned: + +```js +equals({ b: {}}, { b: {}}); +//=> 'false' + +equals({ b: []}, { b: []}); +//=> 'false' +``` + +## Related projects + +Other object utils: + +* [clone-deep](https://github.com/jonschlinkert/clone-deep): Recursively (deep) clone JavaScript native types, like Object, Array, RegExp, Date as well as primitives. +* [for-in](https://github.com/jonschlinkert/for-in): Iterate over the own and inherited enumerable properties of an objecte, and return an object… [more](https://github.com/jonschlinkert/for-in) +* [for-own](https://github.com/jonschlinkert/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) +* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor. +* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null. + +## 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/is-equal-shallow/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 22, 2015._ \ No newline at end of file diff --git a/node_modules/is-equal-shallow/index.js b/node_modules/is-equal-shallow/index.js new file mode 100644 index 000000000..1006eef10 --- /dev/null +++ b/node_modules/is-equal-shallow/index.js @@ -0,0 +1,27 @@ +/*! + * is-equal-shallow + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isPrimitive = require('is-primitive'); + +module.exports = function isEqual(a, b) { + if (!a && !b) { return true; } + if (!a && b || a && !b) { return false; } + + var numKeysA = 0, numKeysB = 0, key; + for (key in b) { + numKeysB++; + if (!isPrimitive(b[key]) || !a.hasOwnProperty(key) || (a[key] !== b[key])) { + return false; + } + } + for (key in a) { + numKeysA++; + } + return numKeysA === numKeysB; +}; diff --git a/node_modules/is-equal-shallow/package.json b/node_modules/is-equal-shallow/package.json new file mode 100644 index 000000000..732cccb89 --- /dev/null +++ b/node_modules/is-equal-shallow/package.json @@ -0,0 +1,85 @@ +{ + "_from": "is-equal-shallow@^0.1.3", + "_id": "is-equal-shallow@0.1.3", + "_inBundle": false, + "_integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "_location": "/is-equal-shallow", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-equal-shallow@^0.1.3", + "name": "is-equal-shallow", + "escapedName": "is-equal-shallow", + "rawSpec": "^0.1.3", + "saveSpec": null, + "fetchSpec": "^0.1.3" + }, + "_requiredBy": [ + "/regex-cache" + ], + "_resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "_shasum": "2238098fc221de0bcfa5d9eac4c45d638aa1c534", + "_spec": "is-equal-shallow@^0.1.3", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/regex-cache", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-equal-shallow/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-primitive": "^2.0.0" + }, + "deprecated": false, + "description": "Does a shallow comparison of two objects, returning false if the keys or values differ.", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-equal-shallow", + "keywords": [ + "compare", + "comparison", + "equal", + "equals", + "is", + "is-equal", + "key", + "object", + "same", + "shallow", + "value" + ], + "license": "MIT", + "main": "index.js", + "name": "is-equal-shallow", + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/is-equal-shallow.git" + }, + "scripts": { + "test": "mocha" + }, + "verbiage": { + "related": { + "description": "Other object utils:", + "list": [ + "is-plain-object", + "isobject", + "for-in", + "for-own", + "clone-deep" + ] + } + }, + "version": "0.1.3" +} diff --git a/node_modules/is-extendable/LICENSE b/node_modules/is-extendable/LICENSE new file mode 100644 index 000000000..65f90aca8 --- /dev/null +++ b/node_modules/is-extendable/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-extendable/README.md b/node_modules/is-extendable/README.md new file mode 100644 index 000000000..e4cfaebcb --- /dev/null +++ b/node_modules/is-extendable/README.md @@ -0,0 +1,72 @@ +# is-extendable [![NPM version](https://badge.fury.io/js/is-extendable.svg)](http://badge.fury.io/js/is-extendable) + +> Returns true if a value is any of the object types: array, regexp, plain object, function or date. This is useful for determining if a value can be extended, e.g. "can the value have keys?" + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i is-extendable --save +``` + +## Usage + +```js +var isExtendable = require('is-extendable'); +``` + +Returns true if the value is any of the following: + +* `array` +* `regexp` +* `plain object` +* `function` +* `date` +* `error` + +## Notes + +All objects in JavaScript can have keys, but it's a pain to check for this, since we ether need to verify that the value is not `null` or `undefined` and: + +* the value is not a primitive, or +* that the object is an `object`, `function` + +Also note that an `extendable` object is not the same as an [extensible object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible), which is one that (in es6) is not sealed, frozen, or marked as non-extensible using `preventExtensions`. + +## Related projects + +* [assign-deep](https://github.com/jonschlinkert/assign-deep): Deeply assign the enumerable properties of source objects to a destination object. +* [extend-shallow](https://github.com/jonschlinkert/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. +* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null. +* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor. +* [is-equal-shallow](https://github.com/jonschlinkert/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ. +* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value. + +## 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/is-extendable/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 July 04, 2015._ \ No newline at end of file diff --git a/node_modules/is-extendable/index.js b/node_modules/is-extendable/index.js new file mode 100644 index 000000000..4ee71a44a --- /dev/null +++ b/node_modules/is-extendable/index.js @@ -0,0 +1,13 @@ +/*! + * is-extendable + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +module.exports = function isExtendable(val) { + return typeof val !== 'undefined' && val !== null + && (typeof val === 'object' || typeof val === 'function'); +}; diff --git a/node_modules/is-extendable/package.json b/node_modules/is-extendable/package.json new file mode 100644 index 000000000..63b2a21d5 --- /dev/null +++ b/node_modules/is-extendable/package.json @@ -0,0 +1,82 @@ +{ + "_from": "is-extendable@^0.1.1", + "_id": "is-extendable@0.1.1", + "_inBundle": false, + "_integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "_location": "/is-extendable", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-extendable@^0.1.1", + "name": "is-extendable", + "escapedName": "is-extendable", + "rawSpec": "^0.1.1", + "saveSpec": null, + "fetchSpec": "^0.1.1" + }, + "_requiredBy": [ + "/object.omit" + ], + "_resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "_shasum": "62b110e289a471418e3ec36a617d472e301dfc89", + "_spec": "is-extendable@^0.1.1", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/object.omit", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-extendable/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Returns true if a value is any of the object types: array, regexp, plain object, function or date. This is useful for determining if a value can be extended, e.g. \"can the value have keys?\"", + "devDependencies": { + "mocha": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-extendable", + "keywords": [ + "array", + "assign", + "check", + "date", + "extend", + "extensible", + "function", + "is", + "object", + "regex", + "test" + ], + "license": "MIT", + "main": "index.js", + "name": "is-extendable", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-extendable.git" + }, + "scripts": { + "test": "mocha" + }, + "verbiage": { + "related": { + "list": [ + "isobject", + "is-plain-object", + "kind-of", + "is-extendable", + "is-equal-shallow", + "extend-shallow", + "assign-deep" + ] + } + }, + "version": "0.1.1" +} diff --git a/node_modules/is-extglob/LICENSE b/node_modules/is-extglob/LICENSE new file mode 100644 index 000000000..fa30c4cb3 --- /dev/null +++ b/node_modules/is-extglob/LICENSE @@ -0,0 +1,21 @@ +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/node_modules/is-extglob/README.md b/node_modules/is-extglob/README.md new file mode 100644 index 000000000..80e7128d6 --- /dev/null +++ b/node_modules/is-extglob/README.md @@ -0,0 +1,75 @@ +# is-extglob [![NPM version](https://badge.fury.io/js/is-extglob.svg)](http://badge.fury.io/js/is-extglob) [![Build Status](https://travis-ci.org/jonschlinkert/is-extglob.svg)](https://travis-ci.org/jonschlinkert/is-extglob) + +> Returns true if a string has an extglob. + +## Install with [npm](npmjs.org) + +```bash +npm i is-extglob --save +``` + +## Usage + +```js +var isExtglob = require('is-extglob'); +``` + +**True** + +```js +isExtglob('?(abc)'); +isExtglob('@(abc)'); +isExtglob('!(abc)'); +isExtglob('*(abc)'); +isExtglob('+(abc)'); +``` + +**False** + +Everything else... + +```js +isExtglob('foo.js'); +isExtglob('!foo.js'); +isExtglob('*.js'); +isExtglob('**/abc.js'); +isExtglob('abc/*.js'); +isExtglob('abc/(aaa|bbb).js'); +isExtglob('abc/[a-z].js'); +isExtglob('abc/{a,b}.js'); +isExtglob('abc/?.js'); +isExtglob('abc.js'); +isExtglob('abc/def/ghi.js'); +``` + +## Related +* [extglob](https://github.com/jonschlinkert/extglob): Extended globs. extglobs add the expressive power of regular expressions to glob patterns. +* [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. + +## 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/jonschlinkert/is-extglob/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 06, 2015._ \ No newline at end of file diff --git a/node_modules/is-extglob/index.js b/node_modules/is-extglob/index.js new file mode 100644 index 000000000..803047f74 --- /dev/null +++ b/node_modules/is-extglob/index.js @@ -0,0 +1,11 @@ +/*! + * is-extglob + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function isExtglob(str) { + return typeof str === 'string' + && /[@?!+*]\(/.test(str); +}; diff --git a/node_modules/is-extglob/package.json b/node_modules/is-extglob/package.json new file mode 100644 index 000000000..427fd3b8c --- /dev/null +++ b/node_modules/is-extglob/package.json @@ -0,0 +1,79 @@ +{ + "_from": "is-extglob@^1.0.0", + "_id": "is-extglob@1.0.0", + "_inBundle": false, + "_integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "_location": "/is-extglob", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-extglob@^1.0.0", + "name": "is-extglob", + "escapedName": "is-extglob", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/extglob", + "/is-glob", + "/micromatch", + "/parse-glob" + ], + "_resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "_shasum": "ac468177c4943405a092fc8f29760c6ffc6206c0", + "_spec": "is-extglob@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/micromatch", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-extglob/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Returns true if a string has an extglob.", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-extglob", + "keywords": [ + "bash", + "braces", + "check", + "exec", + "extglob", + "expression", + "glob", + "globbing", + "globstar", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "license": "MIT", + "main": "index.js", + "name": "is-extglob", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-extglob.git" + }, + "scripts": { + "prepublish": "browserify -o browser.js -e index.js", + "test": "mocha" + }, + "version": "1.0.0" +} diff --git a/node_modules/is-finite/index.js b/node_modules/is-finite/index.js new file mode 100644 index 000000000..806738750 --- /dev/null +++ b/node_modules/is-finite/index.js @@ -0,0 +1,6 @@ +'use strict'; +var numberIsNan = require('number-is-nan'); + +module.exports = Number.isFinite || function (val) { + return !(typeof val !== 'number' || numberIsNan(val) || val === Infinity || val === -Infinity); +}; diff --git a/node_modules/is-finite/license b/node_modules/is-finite/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/is-finite/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-finite/package.json b/node_modules/is-finite/package.json new file mode 100644 index 000000000..82cd62f73 --- /dev/null +++ b/node_modules/is-finite/package.json @@ -0,0 +1,68 @@ +{ + "_from": "is-finite@^1.0.0", + "_id": "is-finite@1.0.2", + "_inBundle": false, + "_integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "_location": "/is-finite", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-finite@^1.0.0", + "name": "is-finite", + "escapedName": "is-finite", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/repeating" + ], + "_resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "_shasum": "cc6677695602be550ef11e8b4aa6305342b6d0aa", + "_spec": "is-finite@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/repeating", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-finite/issues" + }, + "bundleDependencies": false, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "deprecated": false, + "description": "ES2015 Number.isFinite() ponyfill", + "devDependencies": { + "ava": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-finite#readme", + "keywords": [ + "es2015", + "ponyfill", + "polyfill", + "shim", + "number", + "finite", + "is" + ], + "license": "MIT", + "name": "is-finite", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-finite.git" + }, + "scripts": { + "test": "ava" + }, + "version": "1.0.2" +} diff --git a/node_modules/is-finite/readme.md b/node_modules/is-finite/readme.md new file mode 100644 index 000000000..567710ca2 --- /dev/null +++ b/node_modules/is-finite/readme.md @@ -0,0 +1,28 @@ +# is-finite [![Build Status](https://travis-ci.org/sindresorhus/is-finite.svg?branch=master)](https://travis-ci.org/sindresorhus/is-finite) + +> ES2015 [`Number.isFinite()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite) [ponyfill](https://ponyfill.com) + + +## Install + +```sh +$ npm install --save is-finite +``` + + +## Usage + +```js +var numIsFinite = require('is-finite'); + +numIsFinite(4); +//=> true + +numIsFinite(Infinity); +//=> false +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/is-fullwidth-code-point/index.js b/node_modules/is-fullwidth-code-point/index.js new file mode 100644 index 000000000..a7d3e3855 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/index.js @@ -0,0 +1,46 @@ +'use strict'; +var numberIsNan = require('number-is-nan'); + +module.exports = function (x) { + if (numberIsNan(x)) { + return false; + } + + // https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1369 + + // code points are derived from: + // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt + if (x >= 0x1100 && ( + x <= 0x115f || // Hangul Jamo + 0x2329 === x || // LEFT-POINTING ANGLE BRACKET + 0x232a === x || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2e80 <= x && x <= 0x3247 && x !== 0x303f) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + 0x3250 <= x && x <= 0x4dbf || + // CJK Unified Ideographs .. Yi Radicals + 0x4e00 <= x && x <= 0xa4c6 || + // Hangul Jamo Extended-A + 0xa960 <= x && x <= 0xa97c || + // Hangul Syllables + 0xac00 <= x && x <= 0xd7a3 || + // CJK Compatibility Ideographs + 0xf900 <= x && x <= 0xfaff || + // Vertical Forms + 0xfe10 <= x && x <= 0xfe19 || + // CJK Compatibility Forms .. Small Form Variants + 0xfe30 <= x && x <= 0xfe6b || + // Halfwidth and Fullwidth Forms + 0xff01 <= x && x <= 0xff60 || + 0xffe0 <= x && x <= 0xffe6 || + // Kana Supplement + 0x1b000 <= x && x <= 0x1b001 || + // Enclosed Ideographic Supplement + 0x1f200 <= x && x <= 0x1f251 || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + 0x20000 <= x && x <= 0x3fffd)) { + return true; + } + + return false; +} diff --git a/node_modules/is-fullwidth-code-point/license b/node_modules/is-fullwidth-code-point/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-fullwidth-code-point/package.json b/node_modules/is-fullwidth-code-point/package.json new file mode 100644 index 000000000..a0cf31df9 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/package.json @@ -0,0 +1,78 @@ +{ + "_from": "is-fullwidth-code-point@^1.0.0", + "_id": "is-fullwidth-code-point@1.0.0", + "_inBundle": false, + "_integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "_location": "/is-fullwidth-code-point", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-fullwidth-code-point@^1.0.0", + "name": "is-fullwidth-code-point", + "escapedName": "is-fullwidth-code-point", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/wrap-ansi/string-width", + "/yargs/cliui/string-width" + ], + "_resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "_shasum": "ef9e31386f031a7f0d643af82fde50c457ef00cb", + "_spec": "is-fullwidth-code-point@^1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/yargs/node_modules/cliui/node_modules/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-fullwidth-code-point/issues" + }, + "bundleDependencies": false, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "deprecated": false, + "description": "Check if the character represented by a given Unicode code point is fullwidth", + "devDependencies": { + "ava": "0.0.4", + "code-point-at": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-fullwidth-code-point#readme", + "keywords": [ + "fullwidth", + "full-width", + "full", + "width", + "unicode", + "character", + "char", + "string", + "str", + "codepoint", + "code", + "point", + "is", + "detect", + "check" + ], + "license": "MIT", + "name": "is-fullwidth-code-point", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-fullwidth-code-point.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.0.0" +} diff --git a/node_modules/is-fullwidth-code-point/readme.md b/node_modules/is-fullwidth-code-point/readme.md new file mode 100644 index 000000000..4936464b1 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/readme.md @@ -0,0 +1,39 @@ +# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) + +> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) + + +## Install + +``` +$ npm install --save is-fullwidth-code-point +``` + + +## Usage + +```js +var isFullwidthCodePoint = require('is-fullwidth-code-point'); + +isFullwidthCodePoint('谢'.codePointAt()); +//=> true + +isFullwidthCodePoint('a'.codePointAt()); +//=> false +``` + + +## API + +### isFullwidthCodePoint(input) + +#### input + +Type: `number` + +[Code point](https://en.wikipedia.org/wiki/Code_point) of a character. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/is-glob/LICENSE b/node_modules/is-glob/LICENSE new file mode 100644 index 000000000..fa30c4cb3 --- /dev/null +++ b/node_modules/is-glob/LICENSE @@ -0,0 +1,21 @@ +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/node_modules/is-glob/README.md b/node_modules/is-glob/README.md new file mode 100644 index 000000000..b16254293 --- /dev/null +++ b/node_modules/is-glob/README.md @@ -0,0 +1,105 @@ +# is-glob [![NPM version](https://badge.fury.io/js/is-glob.svg)](http://badge.fury.io/js/is-glob) [![Build Status](https://travis-ci.org/jonschlinkert/is-glob.svg)](https://travis-ci.org/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 better user experience. + +Also take a look at [is-valid-glob](https://github.com/jonschlinkert/is-valid-glob) and [has-glob](https://github.com/jonschlinkert/has-glob). + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i is-glob --save +``` + +## Usage + +```js +var isGlob = require('is-glob'); +``` + +**True** + +Patterns that have glob characters or regex patterns will return `true`: + +```js +isGlob('!foo.js'); +isGlob('*.js'); +isGlob('**/abc.js'); +isGlob('abc/*.js'); +isGlob('abc/(aaa|bbb).js'); +isGlob('abc/[a-z].js'); +isGlob('abc/{a,b}.js'); +isGlob('abc/?.js'); +//=> true +``` + +Extglobs + +```js +isGlob('abc/@(a).js'); +isGlob('abc/!(a).js'); +isGlob('abc/+(a).js'); +isGlob('abc/*(a).js'); +isGlob('abc/?(a).js'); +//=> true +``` + +**False** + +Patterns that do not have glob patterns return `false`: + +```js +isGlob('abc.js'); +isGlob('abc/def/ghi.js'); +isGlob('foo.js'); +isGlob('abc/@.js'); +isGlob('abc/+.js'); +isGlob(); +isGlob(null); +//=> false +``` + +Arrays are also `false` (If you want to check if an array has a glob pattern, use [has-glob](https://github.com/jonschlinkert/has-glob)): + +```js +isGlob(['**/*.js']); +isGlob(['foo.js']); +//=> false +``` + +## Related + +* [has-glob](https://www.npmjs.com/package/has-glob): Returns `true` if an array has a glob pattern. | [homepage](https://github.com/jonschlinkert/has-glob) +* [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-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) +* [is-valid-glob](https://www.npmjs.com/package/is-valid-glob): Return true if a value is a valid glob pattern or patterns. | [homepage](https://github.com/jonschlinkert/is-valid-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) + +## 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/is-glob/issues/new). + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on October 02, 2015._ \ No newline at end of file diff --git a/node_modules/is-glob/index.js b/node_modules/is-glob/index.js new file mode 100644 index 000000000..ef27bba4f --- /dev/null +++ b/node_modules/is-glob/index.js @@ -0,0 +1,14 @@ +/*! + * is-glob + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +var isExtglob = require('is-extglob'); + +module.exports = function isGlob(str) { + return typeof str === 'string' + && (/[*!?{}(|)[\]]/.test(str) + || isExtglob(str)); +}; \ No newline at end of file diff --git a/node_modules/is-glob/package.json b/node_modules/is-glob/package.json new file mode 100644 index 000000000..ec98f0e81 --- /dev/null +++ b/node_modules/is-glob/package.json @@ -0,0 +1,92 @@ +{ + "_from": "is-glob@^2.0.0", + "_id": "is-glob@2.0.1", + "_inBundle": false, + "_integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "_location": "/is-glob", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-glob@^2.0.0", + "name": "is-glob", + "escapedName": "is-glob", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/chokidar", + "/glob-base", + "/glob-parent", + "/micromatch", + "/parse-glob" + ], + "_resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "_shasum": "d096f926a3ded5600f3fdfd91198cb0888c2d863", + "_spec": "is-glob@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/chokidar", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-glob/issues" + }, + "bundleDependencies": false, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "deprecated": false, + "description": "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 better user experience.", + "devDependencies": { + "mocha": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-glob", + "keywords": [ + "bash", + "braces", + "check", + "exec", + "extglob", + "expression", + "glob", + "globbing", + "globstar", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "license": "MIT", + "main": "index.js", + "name": "is-glob", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-glob.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "related": { + "list": [ + "has-glob", + "is-extglob", + "is-posix-bracket", + "is-valid-glob", + "micromatch" + ] + } + }, + "version": "2.0.1" +} diff --git a/node_modules/is-number/LICENSE b/node_modules/is-number/LICENSE new file mode 100644 index 000000000..fa30c4cb3 --- /dev/null +++ b/node_modules/is-number/LICENSE @@ -0,0 +1,21 @@ +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/node_modules/is-number/README.md b/node_modules/is-number/README.md new file mode 100644 index 000000000..8395f9131 --- /dev/null +++ b/node_modules/is-number/README.md @@ -0,0 +1,103 @@ +# is-number [![NPM version](https://badge.fury.io/js/is-number.svg)](http://badge.fury.io/js/is-number) [![Build Status](https://travis-ci.org/jonschlinkert/is-number.svg)](https://travis-ci.org/jonschlinkert/is-number) + +> Returns true if the value is a number. comprehensive tests. + +To understand some of the rationale behind the decisions made in this library (and to learn about some oddities of number evaluation in JavaScript), [see this gist](https://gist.github.com/jonschlinkert/e30c70c713da325d0e81). + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i is-number --save +``` + +## Usage + +```js +var isNumber = require('is-number'); +``` + +### true + +See the [tests](./test.js) for more examples. + +```js +isNumber(5e3) //=> 'true' +isNumber(0xff) //=> 'true' +isNumber(-1.1) //=> 'true' +isNumber(0) //=> 'true' +isNumber(1) //=> 'true' +isNumber(1.1) //=> 'true' +isNumber(10) //=> 'true' +isNumber(10.10) //=> 'true' +isNumber(100) //=> 'true' +isNumber('-1.1') //=> 'true' +isNumber('0') //=> 'true' +isNumber('012') //=> 'true' +isNumber('0xff') //=> 'true' +isNumber('1') //=> 'true' +isNumber('1.1') //=> 'true' +isNumber('10') //=> 'true' +isNumber('10.10') //=> 'true' +isNumber('100') //=> 'true' +isNumber('5e3') //=> 'true' +isNumber(parseInt('012')) //=> 'true' +isNumber(parseFloat('012')) //=> 'true' +``` + +### False + +See the [tests](./test.js) for more examples. + +```js +isNumber('foo') //=> 'false' +isNumber([1]) //=> 'false' +isNumber([]) //=> 'false' +isNumber(function () {}) //=> 'false' +isNumber(Infinity) //=> 'false' +isNumber(NaN) //=> 'false' +isNumber(new Array('abc')) //=> 'false' +isNumber(new Array(2)) //=> 'false' +isNumber(new Buffer('abc')) //=> 'false' +isNumber(null) //=> 'false' +isNumber(undefined) //=> 'false' +isNumber({abc: 'abc'}) //=> 'false' +``` + +## Other projects + +* [even](https://www.npmjs.com/package/even): Get the even numbered items from an array. | [homepage](https://github.com/jonschlinkert/even) +* [is-even](https://www.npmjs.com/package/is-even): Return true if the given number is even. | [homepage](https://github.com/jonschlinkert/is-even) +* [is-odd](https://www.npmjs.com/package/is-odd): Returns true if the given number is odd. | [homepage](https://github.com/jonschlinkert/is-odd) +* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive) +* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of) +* [odd](https://www.npmjs.com/package/odd): Get the odd numbered items from an array. | [homepage](https://github.com/jonschlinkert/odd) + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-number/issues/new). + +## Run 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 © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on November 22, 2015._ \ No newline at end of file diff --git a/node_modules/is-number/index.js b/node_modules/is-number/index.js new file mode 100644 index 000000000..96ec66d5e --- /dev/null +++ b/node_modules/is-number/index.js @@ -0,0 +1,19 @@ +/*! + * is-number + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var typeOf = require('kind-of'); + +module.exports = function isNumber(num) { + var type = typeOf(num); + if (type !== 'number' && type !== 'string') { + return false; + } + var n = +num; + return (n - n + 1) >= 0 && num !== ''; +}; diff --git a/node_modules/is-number/package.json b/node_modules/is-number/package.json new file mode 100644 index 000000000..5931e55f6 --- /dev/null +++ b/node_modules/is-number/package.json @@ -0,0 +1,90 @@ +{ + "_from": "is-number@^2.1.0", + "_id": "is-number@2.1.0", + "_inBundle": false, + "_integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "_location": "/is-number", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-number@^2.1.0", + "name": "is-number", + "escapedName": "is-number", + "rawSpec": "^2.1.0", + "saveSpec": null, + "fetchSpec": "^2.1.0" + }, + "_requiredBy": [ + "/fill-range" + ], + "_resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "_shasum": "01fcbbb393463a548f2f466cce16dece49db908f", + "_spec": "is-number@^2.1.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/fill-range", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-number/issues" + }, + "bundleDependencies": false, + "dependencies": { + "kind-of": "^3.0.2" + }, + "deprecated": false, + "description": "Returns true if the value is a number. comprehensive tests.", + "devDependencies": { + "benchmarked": "^0.1.3", + "chalk": "^0.5.1", + "mocha": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-number", + "keywords": [ + "check", + "coerce", + "coercion", + "integer", + "is", + "is number", + "is-number", + "istype", + "kind of", + "math", + "number", + "test", + "type", + "typeof", + "value" + ], + "license": "MIT", + "main": "index.js", + "name": "is-number", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-number.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "related": { + "list": [ + "kind-of", + "is-primitive", + "even", + "odd", + "is-even", + "is-odd" + ] + } + }, + "version": "2.1.0" +} diff --git a/node_modules/is-posix-bracket/LICENSE b/node_modules/is-posix-bracket/LICENSE new file mode 100644 index 000000000..1e49edf81 --- /dev/null +++ b/node_modules/is-posix-bracket/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-posix-bracket/README.md b/node_modules/is-posix-bracket/README.md new file mode 100644 index 000000000..1d06a4d9e --- /dev/null +++ b/node_modules/is-posix-bracket/README.md @@ -0,0 +1,88 @@ +# is-posix-bracket [![NPM version](https://img.shields.io/npm/v/is-posix-bracket.svg?style=flat)](https://www.npmjs.com/package/is-posix-bracket) [![NPM downloads](https://img.shields.io/npm/dm/is-posix-bracket.svg?style=flat)](https://npmjs.org/package/is-posix-bracket) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-posix-bracket.svg?style=flat)](https://travis-ci.org/jonschlinkert/is-posix-bracket) + +> Returns true if the given string is a POSIX bracket expression (POSIX character class). + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install is-posix-bracket --save +``` + +## Usage + +```js +var isPosixBracket = require('is-posix-bracket'); + +isPosixBracket('[foo:]]'); +//=> false +isPosixBracket('[xdigit:]]'); +//=> false +isPosixBracket('[[:xdigit:]]'); +//=> true +isPosixBracket('[[:xdigit:]]'); +//=> true +isPosixBracket('[[:alpha:]123]'); +//=> true +isPosixBracket('[[:alpha:]123]'); +//=> true +isPosixBracket('[a-c[:digit:]x-z]'); +//=> true +isPosixBracket('[:al:]'); +//=> true +isPosixBracket('[abc[:punct:][0-9]'); +//=> true +``` + +## 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) +* [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) +* [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) +* [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/is-posix-bracket/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/is-posix-bracket/blob/master/LICENSE). + +*** + +_This file was generated by [verb](https://github.com/verbose/verb), v, on April 05, 2016._ \ No newline at end of file diff --git a/node_modules/is-posix-bracket/index.js b/node_modules/is-posix-bracket/index.js new file mode 100644 index 000000000..7cf1de55b --- /dev/null +++ b/node_modules/is-posix-bracket/index.js @@ -0,0 +1,10 @@ +/*! + * is-posix-bracket + * + * Copyright (c) 2015-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function isPosixBracket(str) { + return typeof str === 'string' && /\[([:.=+])(?:[^\[\]]|)+\1\]/.test(str); +}; diff --git a/node_modules/is-posix-bracket/package.json b/node_modules/is-posix-bracket/package.json new file mode 100644 index 000000000..d2a9485c2 --- /dev/null +++ b/node_modules/is-posix-bracket/package.json @@ -0,0 +1,95 @@ +{ + "_from": "is-posix-bracket@^0.1.0", + "_id": "is-posix-bracket@0.1.1", + "_inBundle": false, + "_integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "_location": "/is-posix-bracket", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-posix-bracket@^0.1.0", + "name": "is-posix-bracket", + "escapedName": "is-posix-bracket", + "rawSpec": "^0.1.0", + "saveSpec": null, + "fetchSpec": "^0.1.0" + }, + "_requiredBy": [ + "/expand-brackets" + ], + "_resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "_shasum": "3334dc79774368e92f016e6fbc0a88f5cd6e6bc4", + "_spec": "is-posix-bracket@^0.1.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/expand-brackets", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-posix-bracket/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Returns true if the given string is a POSIX bracket expression (POSIX character class).", + "devDependencies": { + "gulp-format-md": "^0.1.7", + "mocha": "^2.4.5" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-posix-bracket", + "keywords": [ + "braces", + "brackets", + "character", + "character-class", + "class", + "expression", + "posix", + "regex", + "regexp", + "regular" + ], + "license": "MIT", + "main": "index.js", + "name": "is-posix-bracket", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-posix-bracket.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "braces", + "expand-brackets", + "is-extglob", + "is-glob", + "micromatch" + ] + }, + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + }, + "version": "0.1.1" +} diff --git a/node_modules/is-primitive/LICENSE b/node_modules/is-primitive/LICENSE new file mode 100644 index 000000000..fa30c4cb3 --- /dev/null +++ b/node_modules/is-primitive/LICENSE @@ -0,0 +1,21 @@ +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/node_modules/is-primitive/README.md b/node_modules/is-primitive/README.md new file mode 100644 index 000000000..e1c306428 --- /dev/null +++ b/node_modules/is-primitive/README.md @@ -0,0 +1,57 @@ +# is-primitive [![NPM version](https://badge.fury.io/js/is-primitive.svg)](http://badge.fury.io/js/is-primitive) [![Build Status](https://travis-ci.org/jonschlinkert/is-primitive.svg)](https://travis-ci.org/jonschlinkert/is-primitive) + +> Returns `true` if the value is a primitive. + +## Install with [npm](npmjs.org) + +```bash +npm i is-primitive --save +``` + +## Running tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + +## Usage + +```js +var isPrimitive = require('is-primitive'); +isPrimitive('abc'); +//=> true + +isPrimitive(42); +//=> true + +isPrimitive(false); +//=> true + +isPrimitive(true); +//=> true + +isPrimitive({}); +//=> false + +isPrimitive([]); +//=> false + +isPrimitive(function(){}); +//=> false +``` + +## 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 March 16, 2015._ \ No newline at end of file diff --git a/node_modules/is-primitive/index.js b/node_modules/is-primitive/index.js new file mode 100644 index 000000000..55f11cf05 --- /dev/null +++ b/node_modules/is-primitive/index.js @@ -0,0 +1,13 @@ +/*! + * is-primitive + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +// see http://jsperf.com/testing-value-is-primitive/7 +module.exports = function isPrimitive(value) { + return value == null || (typeof value !== 'function' && typeof value !== 'object'); +}; diff --git a/node_modules/is-primitive/package.json b/node_modules/is-primitive/package.json new file mode 100644 index 000000000..4ebe8a28d --- /dev/null +++ b/node_modules/is-primitive/package.json @@ -0,0 +1,71 @@ +{ + "_from": "is-primitive@^2.0.0", + "_id": "is-primitive@2.0.0", + "_inBundle": false, + "_integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "_location": "/is-primitive", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-primitive@^2.0.0", + "name": "is-primitive", + "escapedName": "is-primitive", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/is-equal-shallow" + ], + "_resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "_shasum": "207bab91638499c07b2adf240a41a87210034575", + "_spec": "is-primitive@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/is-equal-shallow", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-primitive/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Returns `true` if the value is a primitive. ", + "devDependencies": { + "mocha": "*", + "should": "^4.0.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-primitive", + "keywords": [ + "boolean", + "check", + "number", + "primitive", + "string", + "symbol", + "type", + "typeof", + "util" + ], + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/is-primitive/blob/master/LICENSE" + }, + "main": "index.js", + "name": "is-primitive", + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/is-primitive.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "2.0.0" +} diff --git a/node_modules/is-stream/index.js b/node_modules/is-stream/index.js new file mode 100644 index 000000000..6f7ec91a4 --- /dev/null +++ b/node_modules/is-stream/index.js @@ -0,0 +1,21 @@ +'use strict'; + +var isStream = module.exports = function (stream) { + return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function'; +}; + +isStream.writable = function (stream) { + return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object'; +}; + +isStream.readable = function (stream) { + return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object'; +}; + +isStream.duplex = function (stream) { + return isStream.writable(stream) && isStream.readable(stream); +}; + +isStream.transform = function (stream) { + return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object'; +}; diff --git a/node_modules/is-stream/license b/node_modules/is-stream/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/is-stream/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-stream/package.json b/node_modules/is-stream/package.json new file mode 100644 index 000000000..36d4c65fe --- /dev/null +++ b/node_modules/is-stream/package.json @@ -0,0 +1,70 @@ +{ + "_from": "is-stream@^1.1.0", + "_id": "is-stream@1.1.0", + "_inBundle": false, + "_integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "_location": "/is-stream", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-stream@^1.1.0", + "name": "is-stream", + "escapedName": "is-stream", + "rawSpec": "^1.1.0", + "saveSpec": null, + "fetchSpec": "^1.1.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "_shasum": "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44", + "_spec": "is-stream@^1.1.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/execa", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-stream/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if something is a Node.js stream", + "devDependencies": { + "ava": "*", + "tempfile": "^1.1.0", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-stream#readme", + "keywords": [ + "stream", + "type", + "streams", + "writable", + "readable", + "duplex", + "transform", + "check", + "detect", + "is" + ], + "license": "MIT", + "name": "is-stream", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-stream.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.1.0" +} diff --git a/node_modules/is-stream/readme.md b/node_modules/is-stream/readme.md new file mode 100644 index 000000000..d8afce81d --- /dev/null +++ b/node_modules/is-stream/readme.md @@ -0,0 +1,42 @@ +# is-stream [![Build Status](https://travis-ci.org/sindresorhus/is-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/is-stream) + +> Check if something is a [Node.js stream](https://nodejs.org/api/stream.html) + + +## Install + +``` +$ npm install --save is-stream +``` + + +## Usage + +```js +const fs = require('fs'); +const isStream = require('is-stream'); + +isStream(fs.createReadStream('unicorn.png')); +//=> true + +isStream({}); +//=> false +``` + + +## API + +### isStream(stream) + +#### isStream.writable(stream) + +#### isStream.readable(stream) + +#### isStream.duplex(stream) + +#### isStream.transform(stream) + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/isarray/.npmignore b/node_modules/isarray/.npmignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/node_modules/isarray/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/isarray/.travis.yml b/node_modules/isarray/.travis.yml new file mode 100644 index 000000000..cc4dba29d --- /dev/null +++ b/node_modules/isarray/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/node_modules/isarray/Makefile b/node_modules/isarray/Makefile new file mode 100644 index 000000000..787d56e1e --- /dev/null +++ b/node_modules/isarray/Makefile @@ -0,0 +1,6 @@ + +test: + @node_modules/.bin/tape test.js + +.PHONY: test + diff --git a/node_modules/isarray/README.md b/node_modules/isarray/README.md new file mode 100644 index 000000000..16d2c59c6 --- /dev/null +++ b/node_modules/isarray/README.md @@ -0,0 +1,60 @@ + +# isarray + +`Array#isArray` for older browsers. + +[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray) +[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray) + +[![browser support](https://ci.testling.com/juliangruber/isarray.png) +](https://ci.testling.com/juliangruber/isarray) + +## Usage + +```js +var isArray = require('isarray'); + +console.log(isArray([])); // => true +console.log(isArray({})); // => false +``` + +## Installation + +With [npm](http://npmjs.org) do + +```bash +$ npm install isarray +``` + +Then bundle for the browser with +[browserify](https://github.com/substack/browserify). + +With [component](http://component.io) do + +```bash +$ component install juliangruber/isarray +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/isarray/component.json b/node_modules/isarray/component.json new file mode 100644 index 000000000..9e31b6838 --- /dev/null +++ b/node_modules/isarray/component.json @@ -0,0 +1,19 @@ +{ + "name" : "isarray", + "description" : "Array#isArray for older browsers", + "version" : "0.0.1", + "repository" : "juliangruber/isarray", + "homepage": "https://github.com/juliangruber/isarray", + "main" : "index.js", + "scripts" : [ + "index.js" + ], + "dependencies" : {}, + "keywords": ["browser","isarray","array"], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT" +} diff --git a/node_modules/isarray/index.js b/node_modules/isarray/index.js new file mode 100644 index 000000000..a57f63495 --- /dev/null +++ b/node_modules/isarray/index.js @@ -0,0 +1,5 @@ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; diff --git a/node_modules/isarray/package.json b/node_modules/isarray/package.json new file mode 100644 index 000000000..6baee0648 --- /dev/null +++ b/node_modules/isarray/package.json @@ -0,0 +1,74 @@ +{ + "_from": "isarray@1.0.0", + "_id": "isarray@1.0.0", + "_inBundle": false, + "_integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "_location": "/isarray", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "isarray@1.0.0", + "name": "isarray", + "escapedName": "isarray", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/isobject", + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "_shasum": "bb935d48582cba168c06834957a54a3e07124f11", + "_spec": "isarray@1.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/isobject", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/isarray/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Array#isArray for older browsers", + "devDependencies": { + "tape": "~2.13.4" + }, + "homepage": "https://github.com/juliangruber/isarray", + "keywords": [ + "browser", + "isarray", + "array" + ], + "license": "MIT", + "main": "index.js", + "name": "isarray", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/isarray.git" + }, + "scripts": { + "test": "tape test.js" + }, + "testling": { + "files": "test.js", + "browsers": [ + "ie/8..latest", + "firefox/17..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.0.0" +} diff --git a/node_modules/isarray/test.js b/node_modules/isarray/test.js new file mode 100644 index 000000000..e0c3444d8 --- /dev/null +++ b/node_modules/isarray/test.js @@ -0,0 +1,20 @@ +var isArray = require('./'); +var test = require('tape'); + +test('is array', function(t){ + t.ok(isArray([])); + t.notOk(isArray({})); + t.notOk(isArray(null)); + t.notOk(isArray(false)); + + var obj = {}; + obj[0] = true; + t.notOk(isArray(obj)); + + var arr = []; + arr.foo = 'bar'; + t.ok(isArray(arr)); + + t.end(); +}); + diff --git a/node_modules/isexe/.npmignore b/node_modules/isexe/.npmignore new file mode 100644 index 000000000..c1cb757ac --- /dev/null +++ b/node_modules/isexe/.npmignore @@ -0,0 +1,2 @@ +.nyc_output/ +coverage/ diff --git a/node_modules/isexe/LICENSE b/node_modules/isexe/LICENSE new file mode 100644 index 000000000..19129e315 --- /dev/null +++ b/node_modules/isexe/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/isexe/README.md b/node_modules/isexe/README.md new file mode 100644 index 000000000..35769e844 --- /dev/null +++ b/node_modules/isexe/README.md @@ -0,0 +1,51 @@ +# isexe + +Minimal module to check if a file is executable, and a normal file. + +Uses `fs.stat` and tests against the `PATHEXT` environment variable on +Windows. + +## USAGE + +```javascript +var isexe = require('isexe') +isexe('some-file-name', function (err, isExe) { + if (err) { + console.error('probably file does not exist or something', err) + } else if (isExe) { + console.error('this thing can be run') + } else { + console.error('cannot be run') + } +}) + +// same thing but synchronous, throws errors +var isExe = isexe.sync('some-file-name') + +// treat errors as just "not executable" +isexe('maybe-missing-file', { ignoreErrors: true }, callback) +var isExe = isexe.sync('maybe-missing-file', { ignoreErrors: true }) +``` + +## API + +### `isexe(path, [options], [callback])` + +Check if the path is executable. If no callback provided, and a +global `Promise` object is available, then a Promise will be returned. + +Will raise whatever errors may be raised by `fs.stat`, unless +`options.ignoreErrors` is set to true. + +### `isexe.sync(path, [options])` + +Same as `isexe` but returns the value and throws any errors raised. + +### Options + +* `ignoreErrors` Treat all errors as "no, this is not executable", but + don't raise them. +* `uid` Number to use as the user id +* `gid` Number to use as the group id +* `pathExt` List of path extensions to use instead of `PATHEXT` + environment variable on Windows. diff --git a/node_modules/isexe/index.js b/node_modules/isexe/index.js new file mode 100644 index 000000000..553fb32b1 --- /dev/null +++ b/node_modules/isexe/index.js @@ -0,0 +1,57 @@ +var fs = require('fs') +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = require('./windows.js') +} else { + core = require('./mode.js') +} + +module.exports = isexe +isexe.sync = sync + +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } + + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) + } + + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} + +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er + } + } +} diff --git a/node_modules/isexe/mode.js b/node_modules/isexe/mode.js new file mode 100644 index 000000000..1995ea4a0 --- /dev/null +++ b/node_modules/isexe/mode.js @@ -0,0 +1,41 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), options) +} + +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) +} + +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid + + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() + + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g + + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 + + return ret +} diff --git a/node_modules/isexe/package.json b/node_modules/isexe/package.json new file mode 100644 index 000000000..2e90c3c4d --- /dev/null +++ b/node_modules/isexe/package.json @@ -0,0 +1,60 @@ +{ + "_from": "isexe@^2.0.0", + "_id": "isexe@2.0.0", + "_inBundle": false, + "_integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "_location": "/isexe", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "isexe@^2.0.0", + "name": "isexe", + "escapedName": "isexe", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/which" + ], + "_resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "_shasum": "e8fbf374dc556ff8947a10dcb0572d633f2cfa10", + "_spec": "isexe@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/which", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/isexe/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Minimal module to check if a file is executable.", + "devDependencies": { + "mkdirp": "^0.5.1", + "rimraf": "^2.5.0", + "tap": "^10.3.0" + }, + "directories": { + "test": "test" + }, + "homepage": "https://github.com/isaacs/isexe#readme", + "keywords": [], + "license": "ISC", + "main": "index.js", + "name": "isexe", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/isexe.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --100" + }, + "version": "2.0.0" +} diff --git a/node_modules/isexe/test/basic.js b/node_modules/isexe/test/basic.js new file mode 100644 index 000000000..d926df64b --- /dev/null +++ b/node_modules/isexe/test/basic.js @@ -0,0 +1,221 @@ +var t = require('tap') +var fs = require('fs') +var path = require('path') +var fixture = path.resolve(__dirname, 'fixtures') +var meow = fixture + '/meow.cat' +var mine = fixture + '/mine.cat' +var ours = fixture + '/ours.cat' +var fail = fixture + '/fail.false' +var noent = fixture + '/enoent.exe' +var mkdirp = require('mkdirp') +var rimraf = require('rimraf') + +var isWindows = process.platform === 'win32' +var hasAccess = typeof fs.access === 'function' +var winSkip = isWindows && 'windows' +var accessSkip = !hasAccess && 'no fs.access function' +var hasPromise = typeof Promise === 'function' +var promiseSkip = !hasPromise && 'no global Promise' + +function reset () { + delete require.cache[require.resolve('../')] + return require('../') +} + +t.test('setup fixtures', function (t) { + rimraf.sync(fixture) + mkdirp.sync(fixture) + fs.writeFileSync(meow, '#!/usr/bin/env cat\nmeow\n') + fs.chmodSync(meow, parseInt('0755', 8)) + fs.writeFileSync(fail, '#!/usr/bin/env false\n') + fs.chmodSync(fail, parseInt('0644', 8)) + fs.writeFileSync(mine, '#!/usr/bin/env cat\nmine\n') + fs.chmodSync(mine, parseInt('0744', 8)) + fs.writeFileSync(ours, '#!/usr/bin/env cat\nours\n') + fs.chmodSync(ours, parseInt('0754', 8)) + t.end() +}) + +t.test('promise', { skip: promiseSkip }, function (t) { + var isexe = reset() + t.test('meow async', function (t) { + isexe(meow).then(function (is) { + t.ok(is) + t.end() + }) + }) + t.test('fail async', function (t) { + isexe(fail).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.test('noent async', function (t) { + isexe(noent).catch(function (er) { + t.ok(er) + t.end() + }) + }) + t.test('noent ignore async', function (t) { + isexe(noent, { ignoreErrors: true }).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.end() +}) + +t.test('no promise', function (t) { + global.Promise = null + var isexe = reset() + t.throws('try to meow a promise', function () { + isexe(meow) + }) + t.end() +}) + +t.test('access', { skip: accessSkip || winSkip }, function (t) { + runTest(t) +}) + +t.test('mode', { skip: winSkip }, function (t) { + delete fs.access + delete fs.accessSync + var isexe = reset() + t.ok(isexe.sync(ours, { uid: 0, gid: 0 })) + t.ok(isexe.sync(mine, { uid: 0, gid: 0 })) + runTest(t) +}) + +t.test('windows', function (t) { + global.TESTING_WINDOWS = true + var pathExt = '.EXE;.CAT;.CMD;.COM' + t.test('pathExt option', function (t) { + runTest(t, { pathExt: '.EXE;.CAT;.CMD;.COM' }) + }) + t.test('pathExt env', function (t) { + process.env.PATHEXT = pathExt + runTest(t) + }) + t.test('no pathExt', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: '', skipFail: true }) + }) + t.test('pathext with empty entry', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: ';' + pathExt, skipFail: true }) + }) + t.end() +}) + +t.test('cleanup', function (t) { + rimraf.sync(fixture) + t.end() +}) + +function runTest (t, options) { + var isexe = reset() + + var optionsIgnore = Object.create(options || {}) + optionsIgnore.ignoreErrors = true + + if (!options || !options.skipFail) { + t.notOk(isexe.sync(fail, options)) + } + t.notOk(isexe.sync(noent, optionsIgnore)) + if (!options) { + t.ok(isexe.sync(meow)) + } else { + t.ok(isexe.sync(meow, options)) + } + + t.ok(isexe.sync(mine, options)) + t.ok(isexe.sync(ours, options)) + t.throws(function () { + isexe.sync(noent, options) + }) + + t.test('meow async', function (t) { + if (!options) { + isexe(meow, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } else { + isexe(meow, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } + }) + + t.test('mine async', function (t) { + isexe(mine, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + t.test('ours async', function (t) { + isexe(ours, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + if (!options || !options.skipFail) { + t.test('fail async', function (t) { + isexe(fail, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + } + + t.test('noent async', function (t) { + isexe(noent, options, function (er, is) { + t.ok(er) + t.notOk(is) + t.end() + }) + }) + + t.test('noent ignore async', function (t) { + isexe(noent, optionsIgnore, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.test('directory is not executable', function (t) { + isexe(__dirname, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.end() +} diff --git a/node_modules/isexe/windows.js b/node_modules/isexe/windows.js new file mode 100644 index 000000000..34996734d --- /dev/null +++ b/node_modules/isexe/windows.js @@ -0,0 +1,42 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT + + if (!pathext) { + return true + } + + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true + } + } + return false +} + +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) +} + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) +} diff --git a/node_modules/isobject/LICENSE b/node_modules/isobject/LICENSE new file mode 100644 index 000000000..39245ac1c --- /dev/null +++ b/node_modules/isobject/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/isobject/README.md b/node_modules/isobject/README.md new file mode 100644 index 000000000..9dd897aa0 --- /dev/null +++ b/node_modules/isobject/README.md @@ -0,0 +1,112 @@ +# isobject [![NPM version](https://img.shields.io/npm/v/isobject.svg?style=flat)](https://www.npmjs.com/package/isobject) [![NPM downloads](https://img.shields.io/npm/dm/isobject.svg?style=flat)](https://npmjs.org/package/isobject) [![Build Status](https://img.shields.io/travis/jonschlinkert/isobject.svg?style=flat)](https://travis-ci.org/jonschlinkert/isobject) + +Returns true if the value is an object and not an array or null. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install isobject --save +``` + +Use [is-plain-object](https://github.com/jonschlinkert/is-plain-object) if you want only objects that are created by the `Object` constructor. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install isobject +``` + +Install with [bower](http://bower.io/) + +```sh +$ bower install isobject +``` + +## Usage + +```js +var isObject = require('isobject'); +``` + +**True** + +All of the following return `true`: + +```js +isObject({}); +isObject(Object.create({})); +isObject(Object.create(Object.prototype)); +isObject(Object.create(null)); +isObject({}); +isObject(new Foo); +isObject(/foo/); +``` + +**False** + +All of the following return `false`: + +```js +isObject(); +isObject(function () {}); +isObject(1); +isObject([]); +isObject(undefined); +isObject(null); +``` + +## Related projects + +You might also be interested in these projects: + +[merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep) + +* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow) +* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object) +* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of) + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/isobject/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/isobject/blob/master/LICENSE). + +*** + +_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on April 25, 2016._ \ No newline at end of file diff --git a/node_modules/isobject/index.js b/node_modules/isobject/index.js new file mode 100644 index 000000000..aa0dce0bb --- /dev/null +++ b/node_modules/isobject/index.js @@ -0,0 +1,14 @@ +/*! + * isobject + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isArray = require('isarray'); + +module.exports = function isObject(val) { + return val != null && typeof val === 'object' && isArray(val) === false; +}; diff --git a/node_modules/isobject/package.json b/node_modules/isobject/package.json new file mode 100644 index 000000000..13935e2cc --- /dev/null +++ b/node_modules/isobject/package.json @@ -0,0 +1,98 @@ +{ + "_from": "isobject@^2.0.0", + "_id": "isobject@2.1.0", + "_inBundle": false, + "_integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "_location": "/isobject", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "isobject@^2.0.0", + "name": "isobject", + "escapedName": "isobject", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/fill-range" + ], + "_resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "_shasum": "f065561096a3f1da2ef46272f815c840d87e0c89", + "_spec": "isobject@^2.0.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/fill-range", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/isobject/issues" + }, + "bundleDependencies": false, + "dependencies": { + "isarray": "1.0.0" + }, + "deprecated": false, + "description": "Returns true if the value is an object and not an array or null.", + "devDependencies": { + "gulp-format-md": "^0.1.9", + "mocha": "^2.4.5" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/isobject", + "keywords": [ + "check", + "is", + "is-object", + "isobject", + "kind", + "kind-of", + "kindof", + "native", + "object", + "type", + "typeof", + "value" + ], + "license": "MIT", + "main": "index.js", + "name": "isobject", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/isobject.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "related": { + "list": [ + "merge-deep", + "extend-shallow", + "is-plain-object", + "kind-of" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "reflinks": [ + "verb" + ] + }, + "version": "2.1.0" +} diff --git a/node_modules/js-tokens/CHANGELOG.md b/node_modules/js-tokens/CHANGELOG.md new file mode 100644 index 000000000..208304b3e --- /dev/null +++ b/node_modules/js-tokens/CHANGELOG.md @@ -0,0 +1,134 @@ +### Version 3.0.2 (2017-06-28) ### + +- No code changes. Just updates to the readme. + + +### Version 3.0.1 (2017-01-30) ### + +- Fixed: ES2015 unicode escapes with more than 6 hex digits are now matched + correctly. + + +### Version 3.0.0 (2017-01-11) ### + +This release contains one breaking change, that should [improve performance in +V8][v8-perf]: + +> So how can you, as a JavaScript developer, ensure that your RegExps are fast? +> If you are not interested in hooking into RegExp internals, make sure that +> neither the RegExp instance, nor its prototype is modified in order to get the +> best performance: +> +> ```js +> var re = /./g; +> re.exec(''); // Fast path. +> re.new_property = 'slow'; +> ``` + +This module used to export a single regex, with `.matchToToken` bolted +on, just like in the above example. This release changes the exports of +the module to avoid this issue. + +Before: + +```js +import jsTokens from "js-tokens" +// or: +var jsTokens = require("js-tokens") +var matchToToken = jsTokens.matchToToken +``` + +After: + +```js +import jsTokens, {matchToToken} from "js-tokens" +// or: +var jsTokens = require("js-tokens").default +var matchToToken = require("js-tokens").matchToToken +``` + +[v8-perf]: http://v8project.blogspot.se/2017/01/speeding-up-v8-regular-expressions.html + + +### 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/node_modules/js-tokens/LICENSE b/node_modules/js-tokens/LICENSE new file mode 100644 index 000000000..748f42e87 --- /dev/null +++ b/node_modules/js-tokens/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014, 2015, 2016, 2017 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/node_modules/js-tokens/README.md b/node_modules/js-tokens/README.md new file mode 100644 index 000000000..5c93a8885 --- /dev/null +++ b/node_modules/js-tokens/README.md @@ -0,0 +1,222 @@ +Overview [![Build Status](https://travis-ci.org/lydell/js-tokens.svg?branch=master)](https://travis-ci.org/lydell/js-tokens) +======== + +A regex that tokenizes JavaScript. + +```js +var jsTokens = require("js-tokens").default + +var jsString = "var foo=opts.foo;\n..." + +jsString.match(jsTokens) +// ["var", " ", "foo", "=", "opts", ".", "foo", ";", "\n", ...] +``` + + +Installation +============ + +`npm install js-tokens` + +```js +import jsTokens from "js-tokens" +// or: +var jsTokens = require("js-tokens").default +``` + + +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 = matchToToken(match)` ### + +```js +import {matchToToken} from "js-tokens" +// or: +var matchToToken = require("js-tokens").matchToToken +``` + +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. + +[is-keyword-js]: https://github.com/crissdev/is-keyword-js + + +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 2017] is supported. + +[ECMAScript 2017]: https://www.ecma-international.org/ecma-262/8.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 +======= + +[MIT](LICENSE). diff --git a/node_modules/js-tokens/index.js b/node_modules/js-tokens/index.js new file mode 100644 index 000000000..a3c8a0d7b --- /dev/null +++ b/node_modules/js-tokens/index.js @@ -0,0 +1,23 @@ +// Copyright 2014, 2015, 2016, 2017 Simon Lydell +// License: MIT. (See LICENSE.) + +Object.defineProperty(exports, "__esModule", { + value: true +}) + +// This regex comes from regex.coffee, and is inserted here by generate-index.js +// (run `npm run build`). +exports.default = /((['"])(?:(?!\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]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g + +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/node_modules/js-tokens/package.json b/node_modules/js-tokens/package.json new file mode 100644 index 000000000..51962cc33 --- /dev/null +++ b/node_modules/js-tokens/package.json @@ -0,0 +1,65 @@ +{ + "_from": "js-tokens@^3.0.2", + "_id": "js-tokens@3.0.2", + "_inBundle": false, + "_integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "_location": "/js-tokens", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "js-tokens@^3.0.2", + "name": "js-tokens", + "escapedName": "js-tokens", + "rawSpec": "^3.0.2", + "saveSpec": null, + "fetchSpec": "^3.0.2" + }, + "_requiredBy": [ + "/babel-code-frame", + "/loose-envify" + ], + "_resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "_shasum": "9866df395102130e38f7f996bceb65443209c25b", + "_spec": "js-tokens@^3.0.2", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-code-frame", + "author": { + "name": "Simon Lydell" + }, + "bugs": { + "url": "https://github.com/lydell/js-tokens/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A regex that tokenizes JavaScript.", + "devDependencies": { + "coffee-script": "~1.12.6", + "esprima": "^4.0.0", + "everything.js": "^1.0.3", + "mocha": "^3.4.2" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/lydell/js-tokens#readme", + "keywords": [ + "JavaScript", + "js", + "token", + "tokenize", + "regex" + ], + "license": "MIT", + "name": "js-tokens", + "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": "3.0.2" +} diff --git a/node_modules/jsesc/LICENSE-MIT.txt b/node_modules/jsesc/LICENSE-MIT.txt new file mode 100644 index 000000000..a41e0a7ef --- /dev/null +++ b/node_modules/jsesc/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/jsesc/bin/jsesc b/node_modules/jsesc/bin/jsesc new file mode 100755 index 000000000..e9a541db3 --- /dev/null +++ b/node_modules/jsesc/bin/jsesc @@ -0,0 +1,148 @@ +#!/usr/bin/env node +(function() { + + var fs = require('fs'); + var stringEscape = require('../jsesc.js'); + var strings = process.argv.splice(2); + var stdin = process.stdin; + var data; + var timeout; + var isObject = false; + var options = {}; + var log = console.log; + + var main = function() { + var option = strings[0]; + + if (/^(?:-h|--help|undefined)$/.test(option)) { + log( + 'jsesc v%s - https://mths.be/jsesc', + stringEscape.version + ); + log([ + '\nUsage:\n', + '\tjsesc [string]', + '\tjsesc [-s | --single-quotes] [string]', + '\tjsesc [-d | --double-quotes] [string]', + '\tjsesc [-w | --wrap] [string]', + '\tjsesc [-e | --escape-everything] [string]', + '\tjsesc [-t | --escape-etago] [string]', + '\tjsesc [-6 | --es6] [string]', + '\tjsesc [-l | --lowercase-hex] [string]', + '\tjsesc [-j | --json] [string]', + '\tjsesc [-o | --object] [stringified_object]', // `JSON.parse()` the argument + '\tjsesc [-p | --pretty] [string]', // `compact: false` + '\tjsesc [-v | --version]', + '\tjsesc [-h | --help]', + '\nExamples:\n', + '\tjsesc \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\tjsesc --json \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\tjsesc --json --escape-everything \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\tjsesc --double-quotes --wrap \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'', + '\techo \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\' | jsesc' + ].join('\n')); + return process.exit(1); + } + + if (/^(?:-v|--version)$/.test(option)) { + log('v%s', stringEscape.version); + return process.exit(1); + } + + strings.forEach(function(string) { + // Process options + if (/^(?:-s|--single-quotes)$/.test(string)) { + options.quotes = 'single'; + return; + } + if (/^(?:-d|--double-quotes)$/.test(string)) { + options.quotes = 'double'; + return; + } + if (/^(?:-w|--wrap)$/.test(string)) { + options.wrap = true; + return; + } + if (/^(?:-e|--escape-everything)$/.test(string)) { + options.escapeEverything = true; + return; + } + if (/^(?:-t|--escape-etago)$/.test(string)) { + options.escapeEtago = true; + return; + } + if (/^(?:-6|--es6)$/.test(string)) { + options.es6 = true; + return; + } + if (/^(?:-l|--lowercase-hex)$/.test(string)) { + options.lowercaseHex = true; + return; + } + if (/^(?:-j|--json)$/.test(string)) { + options.json = true; + return; + } + if (/^(?:-o|--object)$/.test(string)) { + isObject = true; + return; + } + if (/^(?:-p|--pretty)$/.test(string)) { + isObject = true; + options.compact = false; + return; + } + + // Process string(s) + var result; + try { + if (isObject) { + string = JSON.parse(string); + } + result = stringEscape(string, options); + log(result); + } catch(error) { + log(error.message + '\n'); + log('Error: failed to escape.'); + log('If you think this is a bug in jsesc, please report it:'); + log('https://github.com/mathiasbynens/jsesc/issues/new'); + log( + '\nStack trace using jsesc@%s:\n', + stringEscape.version + ); + log(error.stack); + return process.exit(1); + } + }); + // Return with exit status 0 outside of the `forEach` loop, in case + // multiple strings were passed in. + return process.exit(0); + + }; + + if (stdin.isTTY) { + // handle shell arguments + main(); + } else { + // Either the script is called from within a non-TTY context, + // or `stdin` content is being piped in. + if (!process.stdout.isTTY) { // called from a non-TTY context + timeout = setTimeout(function() { + // if no piped data arrived after a while, handle shell arguments + main(); + }, 250); + } + + data = ''; + stdin.on('data', function(chunk) { + clearTimeout(timeout); + data += chunk; + }); + stdin.on('end', function() { + strings.push(data.trim()); + main(); + }); + stdin.resume(); + } + +}()); diff --git a/node_modules/jsesc/jsesc.js b/node_modules/jsesc/jsesc.js new file mode 100644 index 000000000..460353f8d --- /dev/null +++ b/node_modules/jsesc/jsesc.js @@ -0,0 +1,345 @@ +/*! https://mths.be/jsesc v1.3.0 by @mathias */ +;(function(root) { + + // Detect free variables `exports` + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module` + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root` + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var forOwn = function(object, callback) { + var key; + for (key in object) { + if (hasOwnProperty.call(object, key)) { + callback(key, object[key]); + } + } + }; + + var extend = function(destination, source) { + if (!source) { + return destination; + } + forOwn(source, function(key, value) { + destination[key] = value; + }); + return destination; + }; + + var forEach = function(array, callback) { + var length = array.length; + var index = -1; + while (++index < length) { + callback(array[index]); + } + }; + + var toString = object.toString; + var isArray = function(value) { + return toString.call(value) == '[object Array]'; + }; + var isObject = function(value) { + // This is a very simple check, but it’s good enough for what we need. + return toString.call(value) == '[object Object]'; + }; + var isString = function(value) { + return typeof value == 'string' || + toString.call(value) == '[object String]'; + }; + var isNumber = function(value) { + return typeof value == 'number' || + toString.call(value) == '[object Number]'; + }; + var isFunction = function(value) { + // In a perfect world, the `typeof` check would be sufficient. However, + // in Chrome 1–12, `typeof /x/ == 'object'`, and in IE 6–8 + // `typeof alert == 'object'` and similar for other host objects. + return typeof value == 'function' || + toString.call(value) == '[object Function]'; + }; + var isMap = function(value) { + return toString.call(value) == '[object Map]'; + }; + var isSet = function(value) { + return toString.call(value) == '[object Set]'; + }; + + /*--------------------------------------------------------------------------*/ + + // https://mathiasbynens.be/notes/javascript-escapes#single + var singleEscapes = { + '"': '\\"', + '\'': '\\\'', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t' + // `\v` is omitted intentionally, because in IE < 9, '\v' == 'v'. + // '\v': '\\x0B' + }; + var regexSingleEscape = /["'\\\b\f\n\r\t]/; + + var regexDigit = /[0-9]/; + var regexWhitelist = /[ !#-&\(-\[\]-~]/; + + var jsesc = function(argument, options) { + // Handle options + var defaults = { + 'escapeEverything': false, + 'escapeEtago': false, + 'quotes': 'single', + 'wrap': false, + 'es6': false, + 'json': false, + 'compact': true, + 'lowercaseHex': false, + 'numbers': 'decimal', + 'indent': '\t', + '__indent__': '', + '__inline1__': false, + '__inline2__': false + }; + var json = options && options.json; + if (json) { + defaults.quotes = 'double'; + defaults.wrap = true; + } + options = extend(defaults, options); + if (options.quotes != 'single' && options.quotes != 'double') { + options.quotes = 'single'; + } + var quote = options.quotes == 'double' ? '"' : '\''; + var compact = options.compact; + var indent = options.indent; + var lowercaseHex = options.lowercaseHex; + var oldIndent = ''; + var inline1 = options.__inline1__; + var inline2 = options.__inline2__; + var newLine = compact ? '' : '\n'; + var result; + var isEmpty = true; + var useBinNumbers = options.numbers == 'binary'; + var useOctNumbers = options.numbers == 'octal'; + var useDecNumbers = options.numbers == 'decimal'; + var useHexNumbers = options.numbers == 'hexadecimal'; + + if (json && argument && isFunction(argument.toJSON)) { + argument = argument.toJSON(); + } + + if (!isString(argument)) { + if (isMap(argument)) { + if (argument.size == 0) { + return 'new Map()'; + } + if (!compact) { + options.__inline1__ = true; + } + return 'new Map(' + jsesc(Array.from(argument), options) + ')'; + } + if (isSet(argument)) { + if (argument.size == 0) { + return 'new Set()'; + } + return 'new Set(' + jsesc(Array.from(argument), options) + ')'; + } + if (isArray(argument)) { + result = []; + options.wrap = true; + if (inline1) { + options.__inline1__ = false; + options.__inline2__ = true; + } else { + oldIndent = options.__indent__; + indent += oldIndent; + options.__indent__ = indent; + } + forEach(argument, function(value) { + isEmpty = false; + if (inline2) { + options.__inline2__ = false; + } + result.push( + (compact || inline2 ? '' : indent) + + jsesc(value, options) + ); + }); + if (isEmpty) { + return '[]'; + } + if (inline2) { + return '[' + result.join(', ') + ']'; + } + return '[' + newLine + result.join(',' + newLine) + newLine + + (compact ? '' : oldIndent) + ']'; + } else if (isNumber(argument)) { + if (json) { + // Some number values (e.g. `Infinity`) cannot be represented in JSON. + return JSON.stringify(argument); + } + if (useDecNumbers) { + return String(argument); + } + if (useHexNumbers) { + var tmp = argument.toString(16); + if (!lowercaseHex) { + tmp = tmp.toUpperCase(); + } + return '0x' + tmp; + } + if (useBinNumbers) { + return '0b' + argument.toString(2); + } + if (useOctNumbers) { + return '0o' + argument.toString(8); + } + } else if (!isObject(argument)) { + if (json) { + // For some values (e.g. `undefined`, `function` objects), + // `JSON.stringify(value)` returns `undefined` (which isn’t valid + // JSON) instead of `'null'`. + return JSON.stringify(argument) || 'null'; + } + return String(argument); + } else { // it’s an object + result = []; + options.wrap = true; + oldIndent = options.__indent__; + indent += oldIndent; + options.__indent__ = indent; + forOwn(argument, function(key, value) { + isEmpty = false; + result.push( + (compact ? '' : indent) + + jsesc(key, options) + ':' + + (compact ? '' : ' ') + + jsesc(value, options) + ); + }); + if (isEmpty) { + return '{}'; + } + return '{' + newLine + result.join(',' + newLine) + newLine + + (compact ? '' : oldIndent) + '}'; + } + } + + var string = argument; + // Loop over each code unit in the string and escape it + var index = -1; + var length = string.length; + var first; + var second; + var codePoint; + result = ''; + while (++index < length) { + var character = string.charAt(index); + if (options.es6) { + first = string.charCodeAt(index); + if ( // check if it’s the start of a surrogate pair + first >= 0xD800 && first <= 0xDBFF && // high surrogate + length > index + 1 // there is a next code unit + ) { + second = string.charCodeAt(index + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + var hexadecimal = codePoint.toString(16); + if (!lowercaseHex) { + hexadecimal = hexadecimal.toUpperCase(); + } + result += '\\u{' + hexadecimal + '}'; + index++; + continue; + } + } + } + if (!options.escapeEverything) { + if (regexWhitelist.test(character)) { + // It’s a printable ASCII character that is not `"`, `'` or `\`, + // so don’t escape it. + result += character; + continue; + } + if (character == '"') { + result += quote == character ? '\\"' : character; + continue; + } + if (character == '\'') { + result += quote == character ? '\\\'' : character; + continue; + } + } + if ( + character == '\0' && + !json && + !regexDigit.test(string.charAt(index + 1)) + ) { + result += '\\0'; + continue; + } + if (regexSingleEscape.test(character)) { + // no need for a `hasOwnProperty` check here + result += singleEscapes[character]; + continue; + } + var charCode = character.charCodeAt(0); + var hexadecimal = charCode.toString(16); + if (!lowercaseHex) { + hexadecimal = hexadecimal.toUpperCase(); + } + var longhand = hexadecimal.length > 2 || json; + var escaped = '\\' + (longhand ? 'u' : 'x') + + ('0000' + hexadecimal).slice(longhand ? -4 : -2); + result += escaped; + continue; + } + if (options.wrap) { + result = quote + result + quote; + } + if (options.escapeEtago) { + // https://mathiasbynens.be/notes/etago + return result.replace(/<\/(script|style)/gi, '<\\/$1'); + } + return result; + }; + + jsesc.version = '1.3.0'; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return jsesc; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = jsesc; + } else { // in Narwhal or RingoJS v0.7.0- + freeExports.jsesc = jsesc; + } + } else { // in Rhino or a web browser + root.jsesc = jsesc; + } + +}(this)); diff --git a/node_modules/jsesc/man/jsesc.1 b/node_modules/jsesc/man/jsesc.1 new file mode 100644 index 000000000..2655ee7ae --- /dev/null +++ b/node_modules/jsesc/man/jsesc.1 @@ -0,0 +1,94 @@ +.Dd May 13, 2016 +.Dt jsesc 1 +.Sh NAME +.Nm jsesc +.Nd escape strings for use in JavaScript string literals +.Sh SYNOPSIS +.Nm +.Op Fl s | -single-quotes Ar string +.br +.Op Fl d | -double-quotes Ar string +.br +.Op Fl w | -wrap Ar string +.br +.Op Fl e | -escape-everything Ar string +.br +.Op Fl 6 | -es6 Ar string +.br +.Op Fl l | -lowercase-hex Ar string +.br +.Op Fl j | -json Ar string +.br +.Op Fl p | -object Ar string +.br +.Op Fl p | -pretty Ar string +.br +.Op Fl v | -version +.br +.Op Fl h | -help +.Sh DESCRIPTION +.Nm +escapes strings for use in JavaScript string literals while generating the shortest possible valid ASCII-only output. +.Sh OPTIONS +.Bl -ohang -offset +.It Sy "-s, --single-quotes" +Escape any occurrences of ' in the input string as \\', so that the output can be used in a JavaScript string literal wrapped in single quotes. +.It Sy "-d, --double-quotes" +Escape any occurrences of " in the input string as \\", so that the output can be used in a JavaScript string literal wrapped in double quotes. +.It Sy "-w, --wrap" +Make sure the output is a valid JavaScript string literal wrapped in quotes. The type of quotes can be specified using the +.Ar -s | --single-quotes +or +.Ar -d | --double-quotes +settings. +.It Sy "-6, --es6" +Escape any astral Unicode symbols using ECMAScript 6 Unicode code point escape sequences. +.It Sy "-e, --escape-everything" +Escape all the symbols in the output, even printable ASCII symbols. +.It Sy "-j, --json" +Make sure the output is valid JSON. Hexadecimal character escape sequences and the \\v or \\0 escape sequences will not be used. Setting this flag enables the +.Ar -d | --double-quotes +and +.Ar -w | --wrap +settings. +.It Sy "-o, --object" +Treat the input as a JavaScript object rather than a string. Accepted values are flat arrays containing only string values, and flat objects containing only string values. +.It Sy "-p, --pretty" +Pretty-print the output for objects, using whitespace to make it more readable. Setting this flag enables the +.It Sy "-l, --lowercase-hex" +Use lowercase for alphabetical hexadecimal digits in escape sequences. +.Ar -o | --object +setting. +.It Sy "-v, --version" +Print jsesc's version. +.It Sy "-h, --help" +Show the help screen. +.El +.Sh EXIT STATUS +The +.Nm jsesc +utility exits with one of the following values: +.Pp +.Bl -tag -width flag -compact +.It Li 0 +.Nm +successfully escaped the given string and printed the result. +.It Li 1 +.Nm +wasn't instructed to escape anything (for example, the +.Ar --help +flag was set); or, an error occurred. +.El +.Sh EXAMPLES +.Bl -ohang -offset +.It Sy "jsesc 'foo bar baz'" +Print an escaped version of the given string. +.It Sy echo\ 'foo bar baz'\ |\ jsesc +Print an escaped version of the string that gets piped in. +.El +.Sh BUGS +jsesc's bug tracker is located at . +.Sh AUTHOR +Mathias Bynens +.Sh WWW + diff --git a/node_modules/jsesc/package.json b/node_modules/jsesc/package.json new file mode 100644 index 000000000..df35c3cc1 --- /dev/null +++ b/node_modules/jsesc/package.json @@ -0,0 +1,77 @@ +{ + "_from": "jsesc@^1.3.0", + "_id": "jsesc@1.3.0", + "_inBundle": false, + "_integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "_location": "/jsesc", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "jsesc@^1.3.0", + "name": "jsesc", + "escapedName": "jsesc", + "rawSpec": "^1.3.0", + "saveSpec": null, + "fetchSpec": "^1.3.0" + }, + "_requiredBy": [ + "/babel-generator" + ], + "_resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "_shasum": "46c3fec8c1892b12b0833db9bc7622176dbab34b", + "_spec": "jsesc@^1.3.0", + "_where": "/home/irteza/Desktop/CUNYTechPrep/Summer Assignments Part 2/es6-tutorial/node_modules/babel-generator", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bin": { + "jsesc": "bin/jsesc" + }, + "bugs": { + "url": "https://github.com/mathiasbynens/jsesc/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A JavaScript library for escaping JavaScript strings while generating the shortest possible valid output.", + "devDependencies": { + "coveralls": "^2.11.6", + "grunt": "^0.4.5", + "grunt-shell": "^1.1.2", + "grunt-template": "^0.2.3", + "istanbul": "^0.4.2", + "qunit-extras": "^1.4.5", + "qunitjs": "~1.11.0", + "regenerate": "^1.2.1", + "requirejs": "^2.1.22" + }, + "files": [ + "LICENSE-MIT.txt", + "jsesc.js", + "bin/", + "man/" + ], + "homepage": "https://mths.be/jsesc", + "keywords": [ + "string", + "escape", + "javascript", + "tool" + ], + "license": "MIT", + "main": "jsesc.js", + "man": [ + "man/jsesc.1" + ], + "name": "jsesc", + "repository": { + "type": "git", + "url": "git+https://github.com/mathiasbynens/jsesc.git" + }, + "scripts": { + "build": "grunt template", + "test": "node tests/tests.js" + }, + "version": "1.3.0" +} diff --git a/node_modules/json-loader/.npmignore b/node_modules/json-loader/.npmignore new file mode 100644 index 000000000..739763349 --- /dev/null +++ b/node_modules/json-loader/.npmignore @@ -0,0 +1,23 @@ +/node_modules + +/example/assets + +/test/js +/coverage + +/.idea + +.DS_Store + +logs +*.log +npm-debug.log* +.eslintcache +/dist +/local +/reports +Thumbs.db +.idea +.vscode +*.sublime-project +*.sublime-workspace \ No newline at end of file diff --git a/node_modules/json-loader/CHANGELOG.md b/node_modules/json-loader/CHANGELOG.md new file mode 100644 index 000000000..6fb4aee9d --- /dev/null +++ b/node_modules/json-loader/CHANGELOG.md @@ -0,0 +1,55 @@ +# 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. + + +## [0.5.7](https://github.com/webpack/json-loader/compare/v0.5.6...v0.5.7) (2017-07-22) + + +### Bug Fixes + +* Strip deprecation warning ([#58](https://github.com/webpack/json-loader/issues/58)) ([a2cf6c6](https://github.com/webpack/json-loader/commit/a2cf6c6)) + + + + +## [0.5.6](https://github.com/webpack/json-loader/compare/v0.5.5...v0.5.6) (2017-07-22) + + +### Bug Fixes + +* **index:** only export CJS modules (`webpack v1.0.0`) && add deprecation warning (`webpack v2.0.0`) ([#55](https://github.com/webpack/json-loader/issues/55)) ([d34395a](https://github.com/webpack/json-loader/commit/d34395a)) + + + + +## [0.5.5](https://github.com/webpack/json-loader/compare/v0.5.2...v0.5.5) (2017-07-22) + + +### Bug Fixes + +* add `stringify` option to output JSON object as string ([#45](https://github.com/webpack/json-loader/issues/45)) ([dbf1fa5](https://github.com/webpack/json-loader/commit/dbf1fa5)) +* Don't stringify with tabs to improve perf ([ee75f99](https://github.com/webpack/json-loader/commit/ee75f99)), closes [#31](https://github.com/webpack/json-loader/issues/31) +* escape newline/paragraph separators ([#18](https://github.com/webpack/json-loader/issues/18)) ([939a8cb](https://github.com/webpack/json-loader/commit/939a8cb)) +* Remove confusing statement about polyfill ([a06933c](https://github.com/webpack/json-loader/commit/a06933c)), closes [#7](https://github.com/webpack/json-loader/issues/7) + + +### Reverts + +* add `stringify` option to output JSON object as string ([#43](https://github.com/webpack/json-loader/issues/43)) ([#52](https://github.com/webpack/json-loader/issues/52)) ([e528e1d](https://github.com/webpack/json-loader/commit/e528e1d)) + + + + +## [0.5.4](https://github.com/webpack/json-loader/compare/v0.5.2...v0.5.4) (2017-07-22) + + +### Bug Fixes + +* add `stringify` option to output JSON object as string ([#45](https://github.com/webpack/json-loader/issues/45)) ([bb495b8](https://github.com/webpack/json-loader/commit/bb495b8)) +* escape newline/paragraph separators ([#18](https://github.com/webpack/json-loader/issues/18)) ([e70851e](https://github.com/webpack/json-loader/commit/e70851e)) + + +### Reverts + +* add `stringify` option to output JSON object as string ([#43](https://github.com/webpack/json-loader/issues/43)) ([#52](https://github.com/webpack/json-loader/issues/52)) ([368cf18](https://github.com/webpack/json-loader/commit/368cf18)) diff --git a/node_modules/json-loader/LICENSE b/node_modules/json-loader/LICENSE new file mode 100644 index 000000000..8c11fc728 --- /dev/null +++ b/node_modules/json-loader/LICENSE @@ -0,0 +1,20 @@ +Copyright JS Foundation and other 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/node_modules/json-loader/README.md b/node_modules/json-loader/README.md new file mode 100644 index 000000000..d3901ac3a --- /dev/null +++ b/node_modules/json-loader/README.md @@ -0,0 +1,85 @@ +[![npm][npm]][npm-url] +[![node][node]][node-url] +[![deps][deps]][deps-url] +[![tests][tests]][tests-url] +[![coverage][cover]][cover-url] +[![chat][chat]][chat-url] + +

Node.js ' + + process.version + + '/ ecstatic ' + + 'server running @ ' + + he.encode(req.headers.host || '') + '